1

プラグインが 1 つのイベントから 4 回実行される原因は何ですか?
プラグインは Case の取得時に登録されており、1 回の取得で 4 回起動します。

        protected void ExecutePostCaseRetrieve(LocalPluginContext localContext)
        {
        if (localContext == null)
        {
            throw new ArgumentNullException("localContext");
        }
        
        // TODO: Implement your custom Plug-in business logic.
        IOrganizationService service = localContext.OrganizationService;
        QueryByAttribute query = new QueryByAttribute("resource");
        query.Attributes.AddRange("name");
        query.Values.AddRange("Employee");
        EntityCollection result = service.RetrieveMultiple(query);
        Guid employee = result.Entities[0].Id;
        QueryScheduleRequest scheduleRequest = new QueryScheduleRequest
        {
            ResourceId = employee,
            Start = DateTime.Now.ToLocalTime(),
            End = DateTime.Now.ToLocalTime().AddMonths(1),
            TimeCodes = new TimeCode[] { TimeCode.Available }
        };
        QueryScheduleResponse schedule = (QueryScheduleResponse)service.Execute(scheduleRequest);
        DateTime today = DateTime.Now.ToLocalTime();
        if (today.Date.Equals(schedule.TimeInfos[0].Start.Value.Date)) // today is a working day
        {
            service.Create(new Lead { FirstName = today.Hour.ToString() });
        }
        else // just escalate from beginning of next working day
            service.Create(new Lead { FirstName = schedule.TimeInfos[0].Start.Value.ToLocalTime().ToString(), LastName=schedule.TimeInfos[0].End.Value.ToLocalTime().ToString() });

ここに画像の説明を入力

同期と非同期を試しましたが、同じことが起こります。

4

2 に答える 2

1

バグが原因である場合を除いて (これは事実ではないと思われます)、プラグインをクワッド ファイアする唯一の合理的な方法は、それ自体からプラグインを呼び出すことです。この回答の問題は、通常、このような設定では、永遠の再帰が発生し、画面にうんざりすることです。

原因を推測すると、あなたの問題には 4 つのリコールがあり、CRUD の基本的な操作は 4 つあります。それは依存関係でしょうか?

編集:

私のMVPがいつも言っているように。そのような状況では、なぜそれが起こるのかを説明しようとする前に、それがどこで起こっているのかを調べてください. 場合によっては、彼は正しい。

したがって、これは私がこの場合に行うことです。

次のリストの *magic* という用語は、一連の操作を意味します: CaseLeadのすべてのインスタンスを削除し、 Caseの 1 つを作成し、Leadのインスタンスがいくつあるかを確認します。

  1. すべてのプラグインを削除します。魔法をかけてください。
  2. Create for Caseに「空の」プラグインを登録します。魔法をかけてください。
  3. リードの作成をプラグインに追加します ( Service.Create(new Entity("case")); )。魔法をかけてください。
  4. 既存のコードから新しいものにコピーして貼り付けます。魔法をかけてください。

競合する他のソフトウェアがないことを保証するために、まったく新しいインストールでもそれを試すことができます。30日間の無料トライアルがあります。常時10回程度の試行を行っています。:)

于 2013-03-20T17:18:37.530 に答える
0

この投稿が 1 年前のものであることは知っていますが、最初のプラグインをトリガーする別のプラグインで同じ問題に遭遇しました。crm サービスには、実際には深さプロパティがあり、これを使用して、この前にトリガーされたアクションの数を把握できます。

実行するコードの前にこのようなものを配置すると、この問題を解決できます。

if (context.depth > 1 ){
return;
}
于 2014-11-10T18:15:47.090 に答える