我们可以使用Salesforce API访问特定于一个对象的所有页面布局吗?
我们目前仅限于使用记录类型,因此每种记录类型都有一个页面布局。我们希望避免为我们需要的每个页面布局创建记录类型,只需访问与一个对象关联的不同页面布局。
为了让您了解更多图片,我们希望根据在第一个标签中输入的值控制第二个标签页(在.NET中编码的网络浏览器中)的页面布局。第一个标签对所有标签都是相同的,但第二个标签将特定于80个资助计划中的一个。就像现在一样,我们必须创建80种记录类型来关联80种不同的页面布局。我们希望不必创建记录类型。
谢谢! 泉。
答案 0 :(得分:1)
SOAP api中的describeLayout调用将返回与对象关联的所有布局(调用用户有权访问)
答案 1 :(得分:0)
我认为Salesforce Metadata API在这种情况下可能会有所帮助。但问题是它返回了zip文件。我不确定Retrieve调用返回的xml文件是否是来自DescribeLayout Call的Salesforce API返回的Object的序列化形式。
http://www.salesforce.com/us/developer/docs/api_meta/index.htm
答案 2 :(得分:0)
我希望你现在已经找到了解决方案,但如果它是否定的,这是一个解决方案:
在SFDC Metadata API中,您将找到listMetadata方法,该方法返回组件的名称和其他属性。以下为您的示例代码,其中包含组织中的所有Account对象页面布局:(当然,您必须首先使用Metadatabinding以管理员身份登录API):
// this is the Login method ... please refer to Metadata Api documentation
metadatabinding = (MetadataBindingStub)new MetadataServiceLocator().getMetadata();
// this is another method in which you call the listMetadata method
ListMetadataQuery query = new ListMetadataQuery();
query.setType("Layout");
double asOfVersion = 23.0;
// Assuming that the SOAP binding has already been established.
FileProperties[] metadatafile = metadatabinding.listMetadata(
new ListMetadataQuery[] {query}, asOfVersion);
if (metadatafile != null) {
for (FileProperties fp : metadatafile) {
if(fp.getFullName().contains("Account")){
System.out.println("Component fullName: " + fp.getFullName());
System.out.println("Component type: " + fp.getType());
}
}
答案 3 :(得分:0)
public void listMetadata() {
try {
ListMetadataQuery query = new ListMetadataQuery();
query.setType("Layout");
double asOfVersion = 21.0;
// Assuming that the SOAP binding has already been established.
FileProperties[] lmr = metadatabinding.listMetadata(new ListMetadataQuery[] {
query
}, asOfVersion);
String layoutName[] = {
"SVMXC__Activity_Master__c-Activity Master Layout"
};
System.out.println("Component length: " + lmr.length);
if (lmr != null) {
for (FileProperties n: lmr) {
if (n.getNamespacePrefix() != null && n.getNamespacePrefix().equals("SVMXC")) {
System.out.println("Component fullName SVMXC: " + n.getFullName());
System.out.println("Component type SVMXC: " + n.getType());
} else {
System.out.println("Component fullName direct: " + n.getFullName());
System.out.println("Component type: " + n.getType());
}
}
}
} catch (Exception ce) {
ce.printStackTrace();
}
}