在 Dynamics CRM 中计算年龄

Calculate age in Dynamics CRM

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

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

它会在后台报告,所以我们不能使用Javascript。

工作流是可能的,但是 运行 他们每天处理 200,000 条记录并不完美!

还有其他建议吗?

这个要求我遇到过很多次了。 我通过编写一个抄写员或 SSIS 作业解决了这个问题,该作业每晚 运行 并更新 Contact.Age 字段。

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

对于本地 CRM(我可以 SQL 访问数据库),我向 return 编写了一个查询: 联系方式 接触年龄 联系DoB 计算年龄(从 DoB 和 getdate 计算的列)

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

的记录

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

的字段

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

这两种方法都意味着,如果每夜作业由于某种原因没有 运行,那么当它成为下一个 运行 时,它将赶上所有现在已过时的记录。

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

如果您想通过工作流执行此操作,则必须有一个工作流程序集来执行计算以填充年龄字段。作为不需要任何代码的替代方法,您可以为特定时间范围内的所有生日创建一个高级查找查询,即 "Birthday on or before 2/17/1975"(这应该限制返回的记录数量并将其从总记录中减少200,000)。包括生日和在显示的列中创建的新 Age 字段。我只是创建了一个年龄字段作为文本字段,大小为 5 个字符,因为我只想存储其中某人的年龄。将联系人导出到 Excel,标记选项 "Static worksheet with records from all pages in the current view" 和 "Make this data available for re-importing by including required column headings"。确保包括所有者列,以防止在重新导入记录时将所有这些记录重新分配给您自己。

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

如果您通过工作流更新这些,您可以使用像 XRM 工具箱 http://www.zero2ten.com/blog/crm-2013-bulk-workflow-tool-for-xrmtoolbox/ 的 CRM 2013 批量工作流工具中的解决方案那样一次更新超过 250 个,它允许您select 一组使用 FetchXML 作为应用工作流的记录的标准,请注意,如果您同时 运行 处理它可能需要一些时间对于所有 200,000 条记录。

理想情况下,我的偏好是拥有一个插件或 JavaScript,但根据您的要求,您需要每天或每月安装此 运行(尽管我不会 运行 所有 200,000 人都这样,因为每个人的年龄每天都不会改变)。只需选择在特定月份或特定日期生日的记录,以 运行 工作流程或导出和重新导入,因为这将大大减少服务器处理的强度,并且能够更快地完成而不是一次更新所有 200,000 个。