【问题标题】:Set field Accessibility to Custom Salesforce Lead field from Java code从 Java 代码将字段可访问性设置为自定义 Salesforce 潜在客户字段
【发布时间】:2016-03-15 13:40:26
【问题描述】:

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

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;
}

我在谷歌上搜索了很多,但没有找到真正有用的东西。因此,欢迎任何提示。谢谢。

【问题讨论】:

标签: salesforce apex-code


【解决方案1】:

终于找到了解决办法。我最后一个是使所有自定义字段都成为必需的。

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”或任何选择的字符添加到代码所需的但不是您的项目自定义字段。

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

【讨论】:

    猜你喜欢
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多