我是否可以通过Salesforce API访问特定于对象的所有页面布局

时间:2012-03-30 19:09:17

标签: api salesforce

我们可以使用Salesforce API访问特定于一个对象的所有页面布局吗?

我们目前仅限于使用记录类型,因此每种记录类型都有一个页面布局。我们希望避免为我们需要的每个页面布局创建记录类型,只需访问与一个对象关联的不同页面布局。

为了让您了解更多图片,我们希望根据在第一个标签中输入的值控制第二个标签页(在.NET中编码的网络浏览器中)的页面布局。第一个标签对所有标签都是相同的,但第二个标签将特定于80个资助计划中的一个。就像现在一样,我们必须创建80种记录类型来关联80种不同的页面布局。我们希望不必创建记录类型。

谢谢! 泉。

4 个答案:

答案 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();
    }
}