2017-04-17 65 views
-1

我有两个类似的Dynamics CRM 2016 ONPREMISE插件合并成一个。Dynamics CRM 2016 ONPREMISE中的两个类似插件合并为一个

他们

  1. 注册到同一实体,
  2. 通过更新消息都触发,3场,4场的其他校验值的
  3. 一个插件校验值。如果全部等于指定值,则继续。如果没有,返回。 4.设置,映射或计算从旧记录到新记录的值。两个插件处理两组字段。
  4. 创建新纪录。

我能想到的是“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

它看起来不错,使条件检查简单。 –

相关问题