You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Apex代码为SObject创建含标准与自定义字段的ListView

没问题,我来一步步给你讲清楚怎么实现这两个需求~不管是自定义SObject还是标准SObject,核心都是通过Apex操作Salesforce的元数据组件来创建ListView,下面分场景给你具体代码和说明:

一、用Apex创建包含标准+自定义字段的ListView(通用,适用于自定义/标准SObject)

Salesforce的ListView属于元数据组件,没法直接用普通DML创建,得借助Metadata命名空间下的类来实现。核心步骤是定义ListView的基本属性,然后指定要显示的列(包含标准和自定义字段),最后异步部署这个元数据。

代码示例(以自定义SObject Custom_Record__c 为例)

public class CreateListViewExample {
    public static void createCustomObjectListView() {
        // 1. 创建ListView元数据对象
        Metadata.ListView customListView = new Metadata.ListView();
        customListView.fullName = 'Custom_Record__c.My_Custom_ListView'; // 格式:对象API名.列表名
        customListView.label = '我的自定义列表'; // 列表显示名称
        customListView.sobjectType = 'Custom_Record__c'; // 目标SObject的API名
        customListView.sharingType = 'ReadWrite'; // 权限类型,可选ReadWrite/Readonly/Owner
        customListView.visibility = 'Public'; // 可见性,可选Public/Shared/AllUsers等

        // 2. 定义要显示的列:包含标准字段和自定义字段
        List<Metadata.ListViewColumn> columns = new List<Metadata.ListViewColumn>();
        
        // 添加标准字段:比如Name、CreatedDate
        columns.add(new Metadata.ListViewColumn('Name'));
        columns.add(new Metadata.ListViewColumn('CreatedDate'));
        
        // 添加自定义字段:比如Custom_Status__c、Client_Name__c
        columns.add(new Metadata.ListViewColumn('Custom_Status__c'));
        columns.add(new Metadata.ListViewColumn('Client_Name__c'));
        
        customListView.columns = columns;

        // 3. 可选:设置列表过滤条件(比如只显示未归档的记录)
        customListView.filterScope = 'Everything'; // 可选Everything/MyRecords/MyTeamRecords等
        customListView.filter = 'Custom_Status__c != \'Archived\''; // SOQL过滤条件,注意转义引号

        // 4. 异步部署元数据
        Metadata.DeployContainer container = new Metadata.DeployContainer();
        container.addMetadata(customListView);
        
        // 部署回调类(可选,用于监听部署结果)
        MyDeployCallback callback = new MyDeployCallback();
        Id deployRequestId = Metadata.Operations.enqueueDeployment(container, callback);
        
        System.debug('部署请求ID:' + deployRequestId);
    }

    // 部署回调类,用于获取部署结果
    public class MyDeployCallback implements Metadata.DeployCallback {
        public void handleResult(Metadata.DeployResult result, Metadata.DeployCallbackContext context) {
            if (result.isSuccess()) {
                System.debug('ListView创建成功!');
            } else {
                System.debug('ListView创建失败,错误信息:' + result.getErrorMessages());
            }
        }
    }
}

针对标准SObject的修改

如果是给标准SObject(比如Account)创建ListView,只需要修改几个关键参数:

  • fullName 改成 Account.My_Account_ListView
  • sobjectType 改成 Account
  • 列里的字段换成Account的标准字段(比如Industry, Phone)和自定义字段(比如Account_Rating__c)即可。
二、注意事项
  • 确保你指定的字段API名完全正确,包括自定义字段的__c后缀,否则部署会失败
  • 运行这个Apex的用户需要有修改元数据的权限(比如Author Apex、Modify All Data权限,或者对目标SObject的ListView创建权限)
  • 部署是异步的,你可以通过Setup里的「部署状态」查看进度,或者通过回调类获取结果
  • ListView的名称(fullName里的后缀)不能包含特殊字符,要符合Salesforce的命名规范

内容的提问来源于stack exchange,提问作者Dharmendra Karamchandani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:03:15