0

ユーザーがアカウントを非アクティブ化すると、アカウント エンティティの 1 つのフィールドの値を変更する CRM 2011 プラグインに取り組んでいます。アカウントを無効にするたびに次のエラーが表示されたため、何が問題なのかを考えるのに多くの時間を費やしました

「エラー。エラーが発生しました。このアクションをもう一度試してください。問題が解決しない場合は、Microsoft Dynamics CRM コミュニティで解決策を確認するか、組織の Microsoft Dynamics CRM 管理者に連絡してください。最後に、Microsoft サポートに連絡してください」

しかし、しばらくすると、エラーが発生してもプラグインが実際には完全に機能することに気付きました。念のため、私のコードを以下に示します (アカウントをクライアントと呼んでいることに注意してください)。

Entity client = (Entity)context.InputParameters["Target"];

OptionSetValue state = (OptionSetValue)client["statecode"];

if (state.Value == 1)
{
    OptionSetValue clientStatus = new OptionSetValue(100000000);
    client["customertypecode"] = clientStatus;                   
    service.Update(client);
}

では、この問題の原因について考えている人はいますか? プラグインを無効にしてからアカウントを無効にすると、エラーなしで完全に機能します。

私のプラグインは、操作前の段階で同期的に登録されます。

前もって感謝します!

4

2 に答える 2

0

SetStateプラグインがまたはメッセージに サブスクライブされている場合SetStateDynamicEntity、エンティティはIPluginExecutionContext.InputParameters["Target"].
これらのメッセージには、次の 3 つの InputParameters があります。

  • "EntityMoniker" (EntityReference)
  • 「状態」(OptionSetValue)
  • 「ステータス」(OptionSetValue)

したがって、「ターゲット」はありません。

EntityReference clientRef = context.InputParameters["EntityMoniker"] as EntityReference;
OptionSetValue newStateCode = context.InputParameters["State"] as OptionSetValue;

if (newStateCode.Value == 1)
{
    Entity updateClient = new Entity(clientRef.LogicalName);
    updateClient.Id = clientRef.Id;
    updateClient["customertypecode"] = new OptionSetValue(100000000);

    service.Update(updateClient);
}

プラグインがUpdateメッセージに登録されている場合:

操作前の段階にあり、ターゲット エンティティは更新する実際のエンティティであるため、なぜ を呼び出すのservice.Updateですか? プロパティをターゲットエンティティに追加するだけで完了です...

Entity client = (Entity)context.InputParameters["Target"];

OptionSetValue state = (OptionSetValue)client["statecode"];

if (state.Value == 1)
{
    OptionSetValue clientStatus = new OptionSetValue(100000000);
    client["customertypecode"] = clientStatus;
}
于 2013-08-30T14:34:30.000 に答える
0

あなたのプラグインは SetStateDynamic メッセージの Pre-Operation に登録されていますか? そして、あなたがしようとしているのは、customertypecode を更新することだけですか? 私の推測では、コードを表示していないので、プラグイン コンテキストから IOrganizationService を取得していないということです。

于 2013-08-30T13:02:37.653 に答える