0

コードを実行する前に、プラグインが起動したときに機会が得られたかどうかを確認する必要があります。私が理解しているように、CRM オンライン展開では機会獲得プラグイン メッセージを使用できません。

ここに私のコードのスニペットがあります:

//Get the target entity
Entity entity = (Entity)context.InputParameters["Target"];

OptionSetValue entityStatusCode =
(OptionSetValue)entity.Attributes["statuscode"];
if (entityStatusCode.Value == 3)
    {
//Code to execute if opportunity won
}

これにより、「指定されたキーは辞書にありません」というエラーがスローされます。私は周りをグーグルで調べましたが、解決策が見つからないようです。私がここで何をする必要があるかを誰かが説明できますか?

前もって感謝します。

4

1 に答える 1

2
(OptionSetValue)entity.Attributes["statuscode"];

その行がエラーを引き起こしていると推測します。

プラグインが起動すると、デフォルトでは、プラグインを呼び出したイベントで変更されたプロパティのみが提供されます。

つまり、商談名を更新すると、プラグインが起動されますが、プロパティ バッグにはnameプロパティのみが含まれます。

したがって、statuscodehere が渡されていないため、例外が示すように、辞書にないため、そのコードは失敗します。

それを修正する方法については、商談が成立したかどうかを確認する必要がある理由によって異なります。しかし、最も簡単な (ただし必ずしも最も効率的であるとは限りません) 方法は、CRM にコールバックして値を取得することです。

var entity = service.Retrieve(Target.LogicalName, Target.Id, new ColumnSet(true));
var entityStatusCode = (OptionSetValue)entity.Attributes["statuscode"];
if (entityStatusCode.Value == 3)
{
    //Code to execute if opportunity won
}
于 2013-01-12T21:38:43.767 に答える