从Java代码中将字段可访问性设置为自定义Salesforce Lead字段

时间:2016-03-15 13:40:26

标签: salesforce apex-code

我正在使用Salesforce和force.com API和元数据API,版本36。 我可以在Lead对象中创建自定义字段,但默认情况下我可以看到它已隐藏,这意味着我无法使用这些自定义字段创建新的Lead,因为它返回错误请求(400状态代码)。 Code是否有任何方法可以设置自定义字段Visible?

public boolean createCustomExtTextField(String name, LoginResult metadataLoginResult, int length) {
    boolean success = false;
    CustomField cs = new CustomField();
    cs.setFullName("Lead."+name+"__c");
    cs.setLabel("Custom"+name+"Field");
    cs.setType(FieldType.LongTextArea);
    cs.setLength(length);
    cs.setVisibleLines(50); // max 50

    try {
        MetadataConnection metadataConnection = createMetadataConnection(metadataLoginResult);
        SaveResult[] results = metadataConnection.createMetadata(new Metadata[] { cs });

        for (SaveResult r : results) {
            if (r.isSuccess()) {
                success = true;
            } else {
                System.out.println("Errors were encountered while creating " + r.getFullName());
                for (com.sforce.soap.metadata.Error e : r.getErrors()) {
                    System.out.println("Error message: " + e.getMessage());
                    System.out.println("Status code: " + e.getStatusCode());
                }
            }
        }
    } catch (ConnectionException e) {
        e.printStackTrace();
    }
    return success;
}

我正在谷歌搜索,并没有找到真正有用的东西。因此,任何提示都受到欢迎。谢谢。

1 个答案:

答案 0 :(得分:0)

终于找到了解决方案。我最后一个对我来说是要求所有自定义字段。

CustomField cs = new CustomField();
cs.setFullName("Lead.YourCompanyName" + name + "__c");
cs.setLabel("YourCompanyName" + name);
cs.setRequired(true);

...

com.sforce.soap.enterprise.LoginResult metadataLoginResult = operations.loginToMetadata(username, password, "https://login.salesforce.com/services/Soap/c/36.0");

...

private boolean createFieldInMetadata(LoginResult metadataLoginResult, CustomField cs) {
        boolean success = false;
        try {
            MetadataConnection metadataConnection = createMetadataConnection(metadataLoginResult);
            SaveResult[] results = metadataConnection.createMetadata(new Metadata[] { cs });

            for (SaveResult r : results) {
                if (r.isSuccess()) {
                    success = true;
                } else {
                    System.out.println("Errors were encountered while creating " + r.getFullName());
                    for (com.sforce.soap.metadata.Error e : r.getErrors()) {
                        System.out.println("Error message: " + e.getMessage());
                        System.out.println("Status code: " + e.getStatusCode());
                    }
                }
            }
        } catch (Exception e) {
        }
        return success;
    }

因此它将出现在页面布局中。非常重要的是,必填字段不能只有空值集,它必须是某种东西。因此,如果不是您的逻辑中都需要所有自定义字段,并且您希望避免解压缩页面布局并将其拉回(但可能已完成)的整个过程,只需将“N / A”或任何字符添加到代码所需的字符串中但不是你的项目自定义字段。

我设法为“管理员”配置文件显示自定义字段级安全性,但是不显示“字段可访问性”。后者未经测试。