计算Dynamics CRM中的年龄

时间:2015-02-16 17:27:12

标签: dynamics-crm

所以有几个类似的问题,但都使用javascript,这是不理想的,因为它需要打开/保存记录。

那么,你如何根据生日来计算年龄。有200,000条记录需要完成并使用CRM 2015,因此也可能涉及计算字段。

它将在后台报告,因此我们无法使用Javascript。

工作流程是可能的,但每天在200,000条记录上运行它们并不是很优雅!

还有其他建议吗?

2 个答案:

答案 0 :(得分:4)

我多次遇到这个要求。 我通过编写一份夜间运行的Scribe或SSIS工作解决了这个问题并更新了Contact.Age字段。

为了不用计算出的年龄更新每个联系人记录(因为大多数年龄段已经改变),我使用了下列之一:

对于内部部署CRM(我有数据库的SQL访问权限),我写了一个返回的查询: 使用ContactID 联系年龄 联系DoB 计算年龄(从DoB和getdate计算的列)

Scribe或SSIS作业只会更新Contact.Age!= CalculatedAge

的记录

对于托管CRM(我没有对数据库的SQL访问权限): 添加一个名为'下一个生日'

的字段

Scribe / SSIS作业将搜索NextBirthday为null或今天之前的记录。它会更新Age和NextBirthday字段。

这两种方法都意味着如果夜间工作因任何原因而无法运行,那么当它下一次运行时,它将赶上任何现已过时的记录。

答案 1 :(得分:1)

http://blogs.msdn.com/b/crm/archive/2009/02/27/creating-a-birthday-contact-list.aspx有一个使用预插件来填充出生月,年和日字段的示例。这可以适用于执行计算以填充年龄字段。话虽如此,这只适用于新记录或更改的记录。

如果您想通过工作流程执行此操作,则必须使用工作流程程序集来执行计算以填充年龄字段。作为不需要任何代码的替代方案,您可以在特定时间范围内为所有生日创建高级查找查询,即“生日在2017年2月17日或之前”(这应该限制返回的记录数量并减少它总共200,000)。包括生日和在显示的列中创建的新Age字段。我只是创建了一个年龄字段作为一个大小为5个字符的文本字段,因为我只打算存储有人在其中的岁月。将联系人导出到Excel,标记选项,“包含当前视图中所有页面的记录的静态工作表”和“通过包含所需的列标题使此数据可用于重新导入”。确保包含“所有者”列,以防止在重新导入记录时将所有这些记录重新分配给自己。

然后在Excel中,在Age列中创建一个如下所示的公式,假设birthdate字段位于L列,“= DATEDIF($ L2,NOW(),”y“)”,这将更新年龄字段多少岁,某人是截至当前日期。请注意,您可能必须在单独的列上执行此计算并仅复制值,以确保Excel不会更改Age列的数据类型,或者您将无法将该数据导回Microsoft CRM。填写该公式,以便更新所有记录,并保存文件。然后在Microsoft CRM中,通过指向更新的XML文件(Excel 2003 XML格式)导入这些记录。在这里,您的唯一限制将取决于导入文件的大小(CRM将此限制为每个文件8 MB),并且将限制为10,000个导出记录,因此这是分解您要导出的记录的另一个原因重新导入。

如果您通过工作流程更新这些内容,您可以使用类似于XRM Toolbox http://www.zero2ten.com/blog/crm-2013-bulk-workflow-tool-for-xrmtoolbox/的CRM 2013批量工作流工具中的解决方案一次更新250多个,这样您就可以选择一个组记录使用FetchXML作为应用工作流的记录的条件,注意如果您同时为所有200,000条记录运行此记录,则可能需要一些时间来处理。

理想情况下,我的偏好是拥有一个插件或JavaScript,但可以看到您的要求,您需要每天或每月进行此次运行(尽管因为每个人的年龄我都不会为所有200,000运行它每天都不会改变)。只需选择在特定月份或特定日期生日的记录即可运行工作流程或导出和重新导入,因为这对于服务器处理而言要小得多,并且能够比必须更新更快地完成一次全部200,000。