有的时候我们在创建完实体之后发现,由于自己的不小心,在创建实体关系选项中删除了注释(包括附件)的功能,或者由于之前考虑的不周到,没想到该实体将来会使用到附件的功能,这样的话,如果实体简单,可以通过删除新建然后完成,如果实体中字段过多,这个过程就相当的麻烦了。下面是我使用的一种方法,用来改变这个状态。
首先请备份数据库
- 新建两个实体new_noattachment,new_attachment。new_noattachment建立的时候将关系中的附件勾去掉,new_attachment这个保留
- 导出这两个实体的XML,使用XML对比工具(例如:ExamXML),对比一下这两个实体有什么地方是不一致的
- 发现不一致的地方主要有两个:FormXml这个节点里面的tabs里面少一个tab(这个tab就是用来添加注释或者附件的);在EntityRelationships节点里面少了一个关系,关系是和实体Annotation对应起来的。上面两个不一样的地方比较容易对比出来,但是还有一个比较隐蔽的地方,因为实体的不一直,可能你会在意不到,但是如果这个地方不改动的话更改完成导入之后会有错误产生:The entity relationship role of the referencing entity is required when creating a new one-to-many entity relationship new_noattachment_Annotations。 这个需要注意的地方就是在EntityInfo节点里面的HasRelatedNotes这个节点的值,如果是False请修改为True
- 修改HasRelatedNotes节点的值,将False修改为True
- 在FormXml的tabs里面添加一个tab,tab如下:
<tab id="{4f91fc75-4667-4e75-a628-212b09a6257e}" IsUserDefined="0">
<labels>
<label description="注释" languagecode="2052" />
</labels>
<sections>
<section showlabel="true" showbar="true" locklevel="1" id="{84de336e-7eaa-49a3-b119-d4190792e6d9}" IsUserDefined="0" height="auto">
<labels>
<label description="注释" languagecode="2052" />
</labels>
<rows>
<row>
<cell colspan="2" showlabel="false" rowspan="5" auto="true" id="{46a7d824-10c2-4476-906a-d8efaea4f5df}">
<labels>
<label description="注释文字" languagecode="2052" />
</labels>
<control id="notescontrol" classid="{06375649-c143-495e-a496-c962e5b4488e}" />
</cell>
</row>
<row />
<row />
<row />
<row height="auto" />
</rows>
</section>
</sections>
</tab>
6. 在EntityRelationships节点里面添加一个新的关系,XML如下:
<EntityRelationship Name="new_noattachment_Annotations">
<EntityRelationshipType>OneToMany</EntityRelationshipType>
<ReferencingEntityName>Annotation</ReferencingEntityName>
<ReferencedEntityName>new_noattachment</ReferencedEntityName>
<CascadeAssign>Cascade</CascadeAssign>
<CascadeDelete>Cascade</CascadeDelete>
<CascadeReparent>Cascade</CascadeReparent>
<CascadeShare>Cascade</CascadeShare>
<CascadeUnshare>Cascade</CascadeUnshare>
<ReferencingAttributeName>objectid</ReferencingAttributeName>
<RelationshipDescription>
<Descriptions>
<Description description="与注释关联的对象的唯一标识符。" languagecode="2052" />
</Descriptions>
</RelationshipDescription>
<field name="objectid" requiredlevel="none" imemode="auto" lookupstyle="single" lookupbrowse="0">
<displaynames>
<displayname description="关于" languagecode="2052" />
</displaynames>
</field>
</EntityRelationship>
7. 完成上面步骤之后将对应的CRM中的原有实体删除
8. 导入修改过的XML,导入成功之后发布,查看新导入的时候是否已经修改为可添加附件和注释的实体。
我改动的方法大致就是上面这样,如果还有其他更好的方法请大家提出来共同学习
谢谢