0

在 CRM 2011 中,注释会自动创建并附加到失去焦点事件的主记录。要求是删除此自动保存功能。只有在主表单打开之前,用户才能编辑笔记。新添加的注释只有在保存主表单后才能保存。例如,如果用户添加一个便笺并关闭浏览器或不保存主表单,则该便笺不应附加到主记录,新便笺应被丢弃。

我正在考虑以下解决方案:

  1. 创建新的自定义实体 TempNotesHolder

  2. 与我们需要此功能的实体创建 1:N 关系,例如案例实体

  3. 将实际案例的笔记部分设为只读(这是必需的,一旦创建笔记,用户就不想编辑/删除笔记的功能)

  4. 为Case的创建事件编写插件并为TempNotesHolder创建一条记录并将其与case关联(TempNotesHolder中的RegardingId字段=incidentId)这将确保一个Case始终只有一个关联的TempNotesHolder记录。CRM 2011 中无法确保一个实体记录在关联实体中只有一个记录,即 1:1 关系。至少我不知道路。让我知道是否有人知道它。

  5. 在案例表单上,在案例的注释部分下方添加一个 IFrame

  6. 在案例表单加载事件中,使用 fetchXml 获取与案例关联的 TempNotesHolderId。(案例实体中没有引用关联的 TempNotesHolder 的实际字段,因此需要使用 fetchXml。我们可以如何将关联的 TempNotesHolderId 添加到案例实体,并放置该字段在 Case 表单上,使其隐藏,以避免 fetchXml)

  7. 准备 url 以仅显示 TempNotesHolder 记录的注释。(/_controls/notes/notesdata.aspx?EnableInlineEdit=false&EnableInsert=true&id=&ParentEntity=

  8. 将此 url 设置为新添加的 IFrame,以便关联 TempNotesHolder 的注释显示在 IFrame 中。它还将具有链接“添加新注释”。

  9. 用户可以将不直接添加到案例记录的注释添加到 TempNotesHolder。

  10. 接下来在Case的预保存事件上开发插件,并检查TempNoteHolder中是否有任何注释,如果有,将这些注释移动到Case记录中,并删除TempNoteHolderId的注释。这样,笔记将仅在主表单保存时保存到主记录。

  11. 要在向 TempNotesHolder 添加少量注释后处理浏览器关闭事件,请在 Case pre Retrieve 事件上编写插件,检查关联的 TempNotesHolderId 是否存在任何注释,如果存在则删除这些注释。(由于 TempNotesHolderId 上有注释,这意味着由于某种原因这些注释没有移动到实际案例记录中,我们不再需要它们,所以删除它们。这将确保加载案例时,TempNotesHolder 注释部分始终为空白)

上述解决方案在第 8 步之前都很好。当我尝试在 TempNotesHolder 中添加注释时,它给了我错误,“TempNotesHolder 中不存在记录”。然后我检查了那个 GUID,当我为 TempNotesHolder 创建注释时,我很失望地知道 CRM 正在使用 IncidentId。然后我追踪了创建笔记的实际代码,以找出为什么它使用 IncidentId 而不是 TempNotesHolderId。我在“_static/_controls/notes/notes.htc”函数名“UpdateNote”中找到了以下代码

xml="0"+CrmEncodeDecode.CrmXmlEncode(value)+""+_parentCrmFormSubmit.crmFormSubmitId.value+""+this.parentEntityType+""+CrmEncodeDecode.CrmXmlEncode(currentTitle)+""+this.userId+""

CRM 在创建注释时将 _parentCrmFormSubmit.crmFormSubmitId.value 作为 objectid。

现在我坚持这个问题。任何克服这个阻碍问题的想法都值得赞赏。也欢迎任何其他主要要求的替代解决方案。

Pravin Pujari(Microsoft Dynamics CRM 2011 开发人员)

4

1 回答 1

1

我建议将解决方案简化如下:

  1. 向 Case 添加一个名为 new_notetext 的字段。

  2. 针对案例实体上的 Pre-Create 和 Pre-Update 消息创建一个插件。

  3. 在插件中,输入 new_notetext 中的任何内容,并使用该文本向 Case 实体添加注释。然后清除字段 new_notetext,以便记录不会保存任何内容。

应该可以正常工作并且实现起来要简单得多。

于 2013-01-03T16:16:41.437 回答