需要使用Microsoft Dynamics CRM 2016中的增强型SLA计算记录年龄和记录总年龄字段

时间:2016-06-01 10:45:04

标签: dynamics-crm-online dynamics-crm-2016

我需要使用增强型SLA计算记录并记录总年龄。有可能吗?

年龄:记录有一个StartDate字段,StartDate的值是2016年3月1日,还有另一个名为EndDate的字段,EndDate的值是2016年3月31日,服务在此期间保持3天,所以年龄将是:31 - 3 = 28

总年龄:与上述示例相同,但不同之处在于我们不需要包含暂停日期,因此总年龄将为:31。

谢谢,

1 个答案:

答案 0 :(得分:0)

我在这里找到了Aileen Gusni的这篇有趣的博客文章

  

Intercept Column/Field Value in CRM View using RetrieveMultiple Plugin C#

基本上她创建了一个新字段(在下面的示例中为pa_age),但她没有将其添加到表单或任何内容

相反,她会在插件中捕获RetrieveRetrieveMultiple条消息,并根据需要计算此字段。

我已将她的代码粘贴在

下面

注意 这不是我的代码,它是由Aileen编写的

public void Execute(IServiceProvider serviceProvider)
{
   #region must to have

   IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

   IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));

   // Create service with context of current user
   IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

   //create tracing service
   ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));

   #endregion

   //this is to modify the Age column

   if (context.OutputParameters.Contains("BusinessEntityCollection"))
   {
       var retrievedResult = (EntityCollection)context.OutputParameters["BusinessEntityCollection"];
       foreach (Entity entity in retrievedResult.Entities)
       {                 
           if (entity.Contains("birthdate"))
           {
               var birthday = entity.GetAttributeValue<DateTime>("birthdate");
               int age = CalculateAgeYear(birthday);
               //modify the Age field
               entity.Attributes["pa_age"] = age;
            }
       }
   }
}

这种方法有几点需要考虑:

  • 永远不会设置pa_age字段的值。它仅添加到实体中,以便可以包含在视图中
  • 这意味着pa_age字段不能包含在表单或报表中,因为它始终为 null
  • 您无法在高级查找(过滤器)中使用pa_age字段,但当然可以将其添加到高级查找结果中。其原因与以前相同:该值实际上并未保存在数据库中

她的博客文章提供了更多关于它如何运作的信息和截图。我没有尝试过这种方法,但它可能对你有用