2017-04-17 18 views
-1

Dynamics CRM 2016 ONPREMISEに2つの同様のプラグインが1つに統合されています。Dynamics CRM 2016の2つの同様のプラグインONPREMISEを1つにマージする

彼らは

同じエンティティに登録
  1. 更新メッセージ、3つのフィールド、4つのフィールドの他のチェック値の
  2. 1のプラグインチェック値によってトリガの両方です。すべてが指定された値に等しい場合は、次に進みます。そうでない場合は、戻る。 4.古いレコードから新しいレコードに値を設定、マップ、または計算します。 2つのプラグインは2つのフィールドセットを処理します。
  3. 新しいレコードを作成します。

私は "if else-if"構造と考えることができます。しかし、それはとても素朴に見えます。誰にもアドバイスはありますか?

他のプラグインは、他の3つのフィールドをチェックし、同様のアクションを実行して、他のフィールドを設定またはマップして新しいレコードを作成します。

おかげで、自分自身のメソッドに抽象扱いにくい述語に私が好きな

protected void ExecuteApplication(LocalPluginContext localContext) 
    { 

     IPluginExecutionContext context = null; 
     IOrganizationService service = null; 
     ITracingService tracer = null; 
     context = localContext.PluginExecutionContext; 
     service = localContext.OrganizationService; 
     tracer = localContext.TracingService; 

try 
     { 
      // ensure we have an application and update message 
      Entity application = new Entity(applicationEntityName); 

      if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) 
      { 

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

       if (!application.LogicalName.ToLower().Equals(this.applicationEntityName)) 
       { 
        return; 
       } 
      } 
      else 
      { 
       return; 
      } 
      if (context.MessageName.ToLower() != "update") 
      { 
       return; 
      }     

      // Fetch data from PreImage 
      Entity postImageApplication = context.PostEntityImages["PostImage"]; 



      //check three fields are not null 
      if (application.GetAttributeValue<OptionSetValue>("statuscode") == null || 
       postImageApplication.GetAttributeValue<EntityReference>("new_service").Name == null || 
       postImageApplication.GetAttributeValue<EntityReference>("new_source").Name == null) 
      { 
       return; 
      } 

      if (
       application.GetAttributeValue<OptionSetValue>("statuscode").Value == 881780003 && 
       postImageApplication.GetAttributeValue<EntityReference>("new_service").Name == "CIC" 
       ) 

      // process if the update meets the criteria 
      { 

       Entity newApplication = new Entity("new_application"); 
       // set 
       newApplication.Attributes.Add("new_effectiveapplication", true); 
       newApplication.Attributes.Add("new_confirmdate", DateTime.Now); 
       newApplication.Attributes.Add("new_signdate", DateTime.Now); 

       //mapped 

       if (postImageApplication.Attributes.Contains("new_client")) 
       { 
        newApplication.Attributes.Add("new_client", postImageApplication["new_client"]); 
       } 
       if (postImageApplication.Attributes.Contains("new_servicecentre")) 
       { 
        newApplication.Attributes.Add("new_servicecentre", postImageApplication["new_servicecentre"]); 
       } 


       service.Create(newApplication); 


      } 

      else 
      { 
       return; 
      } 
+0

コードを見ることなく何かを提案すること – Nicknow

+0

方法...いくつかのコードを表示してください? –

答えて

1

どのようにこのような何かについて:

private bool allFieldsHaveValues() 
{ 
    return application.GetAttributeValue<OptionSetValue>("statuscode") != null 
     && postImageApplication.GetAttributeValue<EntityReference>("new_service").Name != null 
     && postImageApplication.GetAttributeValue<EntityReference>("new_source").Name != null; 
} 

private bool valuesAreValid() 
{ 
    return application.GetAttributeValue<OptionSetValue>("statuscode").Value == 881780003 
     && postImageApplication.GetAttributeValue<EntityReference>("new_service").Name == "CIC"; 
} 

if (allFieldsHaveValues() && valuesAreValid()) 
{ 
    Entity newApplication = new Entity("new_application"); 
+0

それは素晴らしいです、条件チェックを簡単にします。 –

関連する問題