【前言】:前段时间被一位刚入行的同学私信问到"如何快速导出ERD和对象定义表"的问题,KT一波后,明显感受到那位同学使用高效工具后的喜悦(至少节省了大半天的时间)。如果说我们把工具带来的高效视为利己,那么如何进一步做到利他呢?正好最近很幸运地被问到一个问题,让我有机会思考项目实施中如何做到利己又利他。
【背景】:Admin反映客户某个对象A上有1,2,3,4,5个记录类型,每种记录类型对应使用着不同字段,很早前(上上个接手团队T1)为了很好区分哪个字段是用于哪个记录类型的,如在记录类型1,2上有意的在创建字段时加了前缀如1/2_fieldApi。那么对于上个接手团队T2新增的记录类型4,5,就没有这种机制了。所以等我们接手扩展字段时,Admin并不能很好的识别哪个字段用于哪个记录类型,当然客户也不太清楚。所以为了很好的避免新增通用字段F1,2可能会被其他记录类型用到,所以并不推荐沿用以前的加前缀的方案,那为何不遵循创建字段的最佳实践通过备注Description来表明用途呢?当然我们也可以很方便的在线下维护一张表,这样就可以方便到内部团队和当前对接的客户,那一旦面临离职和下个同事接手,这类问题很可能将被重演。
【解决方案】:
1. 增加Description描述;
2. 通过Report展示带Description的对象定义表;
3. 分配字段到Page Layout时,参考对象定义表的描述识别哪些字段是特别用于哪些记录类型。
【效果预览】:
【关键步骤】:
1. 创建自定义Report Type
Primary Object: Entity Definitions
Label: Metadata Definitions
Description: Report type to get a list of object and fields metadata
B: Field Definitions
2. 创建自定义元数据Report
New Report
Select Report Type: Metadata Definitions
Filter: Created Date = All Time & Label = Contact
Columns(field definition): Label / Qualified API Name / Data Type / Length / Scale / Precision / Field Usage / Is Field indexed? / Is Field History Tracked / Is ForeignKey Polymorphic? / Description / Last Modified Date
Group By(object definition): Label
Save & Run: Contact Metadata Definitions / Description: Contact object and it's field metadata / Private Reports
3. 预览与导出Report
【复选方案】:
竟然可以用Report导出对象字段定义表,作为Developer是不是也可以按需通过SOQL来查出结果呀?
答案是一定的。如下图:
SELECT Id, Label, DeveloperName, QualifiedApiName, Length, Precision, Scale, Description, FORMAT(LastModifiedDate) FROM FieldDefinition WHERE EntityDefinition.Label = 'Contact'
感悟:通过观察ID,我们发现SF暂时还不支持通过类似Data Loader的方式快速批量更新字段定义表。但为了减轻Ad hoc,我们仍然对这一点抱有期待!
【其他工具】:
Lucidchart - 用于手动创建ERD,画出对象间的关系即可,标注哪些是标准对象,哪些是自定义对象,哪些是工具对象
Salesforce DevTools - 主要用于导出Object Field Definitions和ERDs(除显示对象关系外,还包含关键关系字段)
插件视图:
选定对象导出后的object overview:
对象字段定义信息(不含Description):
【工具比较】:我们依然借助上边背景信息作为载体来比较DevTools和Report在制作对象字段定义表时的优缺点。
DevTools | Report | |
PROS | 1. 导出的Excel有很好的分类且精美,达到了可直接交付客户的标准; 2. 适用于数据集成(如Number精度,DB必填性,Picklist可选值)和文档交付时的数据字典参考; | 1. Admin和经过Report培训的客户采纳度高; 2. 可高度自定义满足一些特殊需求; |
CONS | 1. 用户无法自定义表头信息,不能满足特别需求(如Description没法显示); 2. 有学习成本,客户可能比较排斥使用该工具; | 1. 需要额外优化导出的报表; |
【Next】:如何快速创建数据模型并批量修改字段定义信息?