Salesforce 的 package.xml 文件
package.xml文件
在部署元数据(Metadata)的时候,package.xml是很关键的一个文件。此文件中定义了一个XML格式的列表,其中包含了各个元数据组件的定义。
Metadata API中的deploy()和retrieve()函数可以用来操作其中的内容。
组件
每个组件都是一个元数据类型的一个实例,比如:“CustomObject”是一种元数据类型,代表了自定义对象,而名为“ExampleObject__c”的自定义对象是此元数据类型的一个实例。
package.xml文件组成元素
一个package.xml文件的范例如下:
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>MyCustomObject__c</members>
<name>CustomObject</name>
</types>
<types>
<members>*</members>
<name>CustomTab</name>
</types>
<types>
<members>Standard</members>
<name>Profile</name>
</types>
<version>40.0</version>
</Package>
package.xml文件主要包括以下几个元素:
-
fullName:定义了此package的名字,如果没有,则表示其中包含的内容是未管理的包
-
types:定义了元数据的类型和其包含的实例。一个package.xml文件可以包含多个 types 标签。types 标签是此文件的核心部分
-
name:每个 types 标签包含一个,定义了此元数据类型的名字
-
members:包含在 types 标签中,定义了组件的名字,可以有很多个,也可以直接用通配符(*符号)来代表所有的组件
-
version:定义了API的版本
package.xml文件示例
标准对象(Standard Objects)
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>Account</members>
<name>CustomObject</name>
</types>
<version>40.0</version>
</Package>
在上面的示例中,包含了标准对象Account的定义。需要注意的是:
- 标准对象所在的 types 标签中的 name 标签的值是“CustomObject”
- 对于标准对象,在 members 标签中必须列出名字,不能用通配符(*符号)代替
自定义对象(Custom Objects)
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>*</members>
<name>CustomObject</name>
</types>
<version>40.0</version>
</Package>
在上面的示例中,在 members 标签中用通配符(*符号)表示包括所有的自定义对象(不包括任何标准对象)。
标准列表值(Standard Picklist Fields)
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>Industry</members>
<name>StandardValueSet</name>
</types>
<version>40.0</version>
</Package>
对于版本是38.0及以后的API,当表示标准列表值的时候,可以直接将 types 标签中的 name 标签值设定为“StandardValueSet”,而不需要声明它属于哪个对象。
注意,members 标签中的值是区分大小写的。
对于版本是37.0及更早的API,types 标签中不能用这种表示方法,而是像下面的例子那样:
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>Account.Industry</members>
<name>CustomField</name>
</types>
<version>37.0</version>
</Package>
这里,members 标签中的值是不区分大小写的。
字段(Fields)
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>MyCustomObject__c.MyCustomField__c</members>
<name>CustomField</name>
</types>
<types>
<members>Account.SLA__c</members>
<members>Account.Phone</members>
<name>CustomField</name>
</types>
<version>40.0</version>
</Package>
在上面的示例中,两个 types 标签分别包含了标准对象的字段和自定义对象的字段。注意,name 标签中的值都是“CustomField”。
对象的权限
<objectPermissions>
<allowCreate>true</allowCreate>
<allowDelete>true</allowDelete>
<allowEdit>true</allowEdit>
<allowRead>true</allowRead>
<viewAllRecords>false</viewAllRecords>
<modifyAllRecords>false</modifyAllRecords>
<object>MyCustomObject__c</object>
</objectPermissions>
当需要对某一个对象设定权限时,使用 objectPermissions 标签,在其中用 allowCreate 等标签定义各种权限。
其他的还有字段的权限等,用 fieldPermissions 等标签表示。