在CRM 2011中,笔记会自动创建并附加到丢失焦点事件的主记录中。要求是删除此自动保存功能。只有在主表单打开后,用户才能编辑备注。只有在保存主表单后才能保存新添加的注释。例如,如果用户添加一个注释并关闭浏览器或者不保存主表单,则该注释不应附加到主记录,新注释应该被丢弃。
我在考虑以下解决方案:
创建新的自定义实体TempNotesHolder
与我们想要此功能的实体创建1:N关系,例如Case实体
将实际案例的注释部分设为只读(这是要求,用户不想在注释创建后编辑/删除注释功能)
为Case的create事件编写插件并为TempNotesHolder创建一个Record并将其与case(TempNotesHolder = incidentId中的AboutId字段)相关联。这将确保一个Case始终只有一个关联的TempNotesHolder记录。 CRM 2011中无法确保一个实体记录在关联实体中只有一个记录,即1:1关系。至少我不知道的方式。如果有人知道,请告诉我。
在案例表单上,在案例的注释部分
在case form load事件中,使用fetchXml获取与case关联的TempNotesHolderId。(Case实体中没有引用相关TempNotesHolder的实际字段,因此需要使用fetchXml。有些我们如何将相关的TempNotesHolderId添加到Case实体,并将该字段放在Case表单上,使其隐藏,以避免fetchXml)
准备网址只显示TempNotesHolder记录的注释。(/ _ controls / notes / notesdata.aspx?EnableInlineEdit = false& EnableInsert = true& id =& ParentEntity =
将此网址设置为新添加的IFrame,因此相关TempNotesHolder的注释会显示在IFrame中。它还会有“添加新注释”链接。
用户可以向TempNotesHolder添加注释,这些注释不会直接添加到案例记录中。
接下来在Case的预保存事件上开发插件并检查是否有任何添加到TempNoteHolder的注释,如果是,则将这些注释移动到Case记录,并删除TempNoteHolderId的注释。这种方式只会在主表单保存上保存到主记录。
要在向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(值)+ “” + _ parentCrmFormSubmit.crmFormSubmitId.value + “” + this.parentEntityType + “” + CrmEncodeDecode.CrmXmlEncode(currentTitle)+ “” + this.userId + “”
CRM在创建笔记时将_parentCrmFormSubmit.crmFormSubmitId.value视为objectid。
现在我坚持这个问题。任何克服这个显示塞子问题的想法都值得赞赏。此外,欢迎任何其他主要要求的替代解决方案。
Pravin Pujari(Microsoft Dynamics CRM 2011开发人员)
答案 0 :(得分:1)
我建议按如下方式简化解决方案:
向Case添加一个名为new_notetext的字段。
针对案例实体上的预创建和预更新消息创建插件。
在插件中,将输入的内容输入new_notetext,并使用该文本向Case实体添加注释。然后清除字段new_notetext,这样就不会随记录保存任何内容。
应该可以正常工作并且更容易实现。