在 CRM 2011 中,将信息从 javascript 发送到插件的最佳方式
In CRM 2011, best way to send information from javascript to plugins
我在 CRM 2011 表单上有一个 HTML 网络资源,用户将在其中输入数据。如果用户选择保存主表单,CRM create/update 插件将需要此数据,但没有功能要求将数据保存到实体的任何字段。我正在考虑一个可以将数据保存到的隐藏虚拟字段,但我想知道是否有更优雅的方法可以将数据从客户端持久保存到服务器技术。我已经对 "sharedvariables" 进行了一些研究,但无法确定它们是否可以满足此需求。任何使用 JavaScript 设置值然后从插件中检索它的示例都是有价值的。
编辑:我只是想根据我的测试澄清我收到的回复。虽然 CRM 有 "SharedVariables" 可用于插件和脚本使用,但保存在脚本中的任何数据将不可用于插件。由一个 javascript 函数保存到 "SharedVariables" 的数据将可用于为同一事件注册的其他 javascript 函数,并且插件保存的数据可用于为同一事件注册的其他插件,但数据不会从脚本持久保存到插件,反之亦然。这使得虚拟字段成为将数据从 javascript 持久化到插件的唯一选择。正如 NickNow 所建议的那样,除非您需要将数据持久保存到数据库中,否则在预插件上删除它是个好主意。谢谢尼克诺!
hidden/dummy字段是正确的做法。 SharedVariables
不存在,从插件的角度来看,直到数据被发送到服务器。
表单保存只是一个 UI 来触发创建或更新事件 - 从平台的角度来看,您只是发送实体逻辑名称、记录 guid(用于更新)和 fields/values。该插件不知道,也不应该要求知道事件是如何触发的。
我所做的是创建一个字段(例如“new_internalmessaging”)作为文本字段(因为我永远不会将值保存到数据库中,所以我只是将其设为 2000 个字符的字符串)。在 JavaScript OnSave 事件期间,我将我需要的任何数据抓取到一个对象中并创建一个 JSON 字符串,然后我用它来填充该字段。
在我的 Pre-Create 和 Pre-Update 插件中,我检索字符串并将其反序列化为一个对象,以便在我的插件中使用(如果需要,我此时也可以将其放入 SharedVariable
post 插件)。此时插件代码应该从 Target
.
中删除 new_internalmessaging
我这样做是为了确保该字段中的数据永远不会保存到 CRM。
我在 CRM 2011 表单上有一个 HTML 网络资源,用户将在其中输入数据。如果用户选择保存主表单,CRM create/update 插件将需要此数据,但没有功能要求将数据保存到实体的任何字段。我正在考虑一个可以将数据保存到的隐藏虚拟字段,但我想知道是否有更优雅的方法可以将数据从客户端持久保存到服务器技术。我已经对 "sharedvariables" 进行了一些研究,但无法确定它们是否可以满足此需求。任何使用 JavaScript 设置值然后从插件中检索它的示例都是有价值的。
编辑:我只是想根据我的测试澄清我收到的回复。虽然 CRM 有 "SharedVariables" 可用于插件和脚本使用,但保存在脚本中的任何数据将不可用于插件。由一个 javascript 函数保存到 "SharedVariables" 的数据将可用于为同一事件注册的其他 javascript 函数,并且插件保存的数据可用于为同一事件注册的其他插件,但数据不会从脚本持久保存到插件,反之亦然。这使得虚拟字段成为将数据从 javascript 持久化到插件的唯一选择。正如 NickNow 所建议的那样,除非您需要将数据持久保存到数据库中,否则在预插件上删除它是个好主意。谢谢尼克诺!
hidden/dummy字段是正确的做法。 SharedVariables
不存在,从插件的角度来看,直到数据被发送到服务器。
表单保存只是一个 UI 来触发创建或更新事件 - 从平台的角度来看,您只是发送实体逻辑名称、记录 guid(用于更新)和 fields/values。该插件不知道,也不应该要求知道事件是如何触发的。
我所做的是创建一个字段(例如“new_internalmessaging”)作为文本字段(因为我永远不会将值保存到数据库中,所以我只是将其设为 2000 个字符的字符串)。在 JavaScript OnSave 事件期间,我将我需要的任何数据抓取到一个对象中并创建一个 JSON 字符串,然后我用它来填充该字段。
在我的 Pre-Create 和 Pre-Update 插件中,我检索字符串并将其反序列化为一个对象,以便在我的插件中使用(如果需要,我此时也可以将其放入 SharedVariable
post 插件)。此时插件代码应该从 Target
.
new_internalmessaging
我这样做是为了确保该字段中的数据永远不会保存到 CRM。