2016-08-16 8 views
0

2つのオプションフィールドの値に基づいて更新を実行するようにトリガーされたプラグインがあります。値が "Yes"の場合、プラグインが実行されます。C#を使用してDynamics CRMで2つのオプション設定値を確認する方法

私はentity.FormattedValues["fieldname"].toString()を使用して、2つのオプションセットフィールドからテキスト値を取得しようとしました。しかし、動作しませんでした。

私はのQueryExpressionはここに私のcase.CMIIWに

に合っていないことはないと思う私の完全なコードです:あなたはすべてのソリューションを持っている

if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) 
     { 
      Entity entity = context.InputParameters["Target"] as Entity; 

      if (entity.LogicalName != "incident") 
       return; 

      string str = entity.FormattedValues["new_createticket"].ToString(); 

      if (str == "Yes") 
      { 
       Entity ticket = new Entity("new_troubleticket"); 
       ticket["new_subject"] = entity.GetAttributeValue<String>("title"); 
       Guid ticketid = service.Create(ticket); 

       entity["new_troubleticketid"] = new EntityReference("new_troubleticket", ticketid); 
       entity["new_createticket"] = false; 
      } 

      service.Update(entity); 
     } 

場合は、私と一緒に 敬具を共有してください

+0

更新メッセージで実行している場合は、エンティティイメージで属性を送信していますか?あたかもそれがそうでないかのように、あなたが受け取る価値はヌルです。 –

答えて

1

あなたがすべきRegisterあなたのプラグインを試してみてください。プラグインのコンテキストでは、Target Entityは更新されるフィールドのみを取得します。カスタムビジネスロジックに必要な他のフィールドを取得するには2つの方法があります。

上記のURLから取得
1. Retrieve the Entity by Guid with all the required attributes 
2. Register a Post-Entity Image to get all the attributes. 

https://msdn.microsoft.com/en-us/library/gg309673.aspx#bkmk_preandpost

:アクセス・エンティティに事前または事後の画像の登録

エンティティプラグの属性取得に比べて改善されたプラグインのパフォーマンスの値結果を属性RetrieveRequestまたはRetrieveMultipleRequest要求を使用してコード内で実行します。

コード/ロジックの問題が発生しました。あなたは正しくTwo-Optionを作成しておく必要がありCRMで 、これによって私たちはデータタイプTwo Optionsのフィールドを作成するときに、テキスト=「はい」と設定している場合は、2つのオプション

1. Label=No and Value=0 
2. Label= Yes and Values=1 

があり、デフォルトで

を意味します値= 1 new_createticketのために、そして今ここでそれはchがある場合は、上記entityは、new_cr‌​ea‌​teticketフィールドを含むことがトリッキーな部分である。この

//string str = entity.FormattedValues["new_createticket"].ToString(); 
Entity entity = context.InputParameters["Target"] as Entity; 

にコードを変更それは変更されていない場合、それは存在しません。ここであなたはnew_createticketは二オプションフィールドであり、更新時に、あなたはどちらかそれを取得しているか、ポストエンティティイメージでそれを渡していることを確認した場合、上記のコードは正常に動作する必要があり、この

Entity updatedEntity = _service.Retrieve(entity.LogicalName,entity.Id,new ColumnSet("new_cr‌​ea‌​teticket","title")) 
if (updatedEntity.GetAttribute‌​‌​Value<bool>("new_cr‌​ea‌​teticket") == true) 
    { 
    Entity ticket = new Entity("new_troubleticket"); 
    ticket["new_subject"] = updatedEntity.GetAttributeValue<String>("title"); 
    Guid ticketid = service.Create(ticket); 

updatedEntity["new_troubleticketid"] = new EntityReference("new_troubleticket", ticketid); 
    updatedEntity["new_createticket"] = false; 
    } 

を行うことができます。

+0

ありがとう、あなたの答えは私のためのソリューションです。また、あなたは私にCRMプラグインに関する新しい知識を与えます。特に検索について。 –

-3

わかりませんが、等価演算子の代わりに.equals()メソッドを使用してみてください。だから、

if (str.equals("Yes")) { 
    // DO ANYTHING 
} 

しかし、あなたはまだ整数の等価演算子==を使用する必要があります。

+0

うまく動作しません –

0

フォーマットされた値は表示用ですが、必要な実際のブール値は属性として存在します。

Update,Post-Operation

if(entity["fieldname"] == true) 
+0

ブール型には使用できません。これを行うには、この 'entity.GetAttributeValue (" new_createticket ")== true'を使用する必要があります。しかし、それはまだ働いていない。 –

+1

'entity.GetAttribute値(" new_crea teticket ")== true'が機能しない場合は、フィールドが2つのオプションでないか、エンティティ内に格納されている値がnullまたはfalseであることを意味します。 –

+1

@FikriHailal、私は年齢のためにそれをやっています....あなたのフィールドが2つのオプションフィールドであると仮定して、動作します。もちろん、Guidoは言った – Jordi

関連する問題