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

如何在Lightning组件中使用Fieldset?Case记录创建组件需求咨询

嘿,没问题!我来一步步带你搞定用Fieldset创建新建Case的Lightning组件,完全从零开始,包你看明白。

第一步:先创建Case对象的Fieldset

首先得在Salesforce设置里建好Fieldset,这是整个组件的基础:

  • 进入Setup,搜索Object Manager,找到Case对象
  • 点击Fields & Relationships,然后选择Field Sets
  • 点击New,给Fieldset起个直观的名字(比如Case_Creation_Fields),补充描述后,把你需要的Case字段(比如Subject、Description、Origin、Priority这些)拖到Included Fields区域,最后保存即可。
第二步:创建Aura Lightning组件(完整示例代码)

我们来写一套完整的Aura组件,包含界面、控制器和助手类,实现读取Fieldset并创建Case的功能。

1. 组件标记(.cmp文件)

负责渲染界面,自动读取Fieldset中的字段:

<aura:component implements="flexipage:availableForAllPageTypes,force:hasRecordId" controller="CaseCreationController">
    <aura:attribute name="caseRecord" type="Case" default="{'sobjectType':'Case'}"/>
    <aura:attribute name="fieldsetFields" type="List"/>
    <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>

    <lightning:card title="新建Case">
        <aura:iteration items="{!v.fieldsetFields}" var="field">
            <lightning:inputField aura:id="caseFields" fieldName="{!field.fieldPath}" value="{!v.caseRecord[field.fieldPath]}"/>
        </aura:iteration>
        <div class="slds-m-top_medium">
            <lightning:button label="保存Case" variant="brand" onclick="{!c.saveCase}"/>
            <lightning:button label="重置" variant="neutral" onclick="{!c.resetForm}" class="slds-m-left_small"/>
        </div>
    </lightning:card>
</aura:component>

2. 控制器(.js文件)

处理初始化、保存、重置的逻辑分发:

({
    doInit: function(component, event, helper) {
        helper.fetchFieldset(component);
    },

    saveCase: function(component, event, helper) {
        helper.createCaseRecord(component);
    },

    resetForm: function(component, event, helper) {
        component.set("v.caseRecord", {'sobjectType':'Case'});
        let inputFields = component.find('caseFields');
        if(inputFields) {
            inputFields.forEach(field => field.reset());
        }
    }
})

3. 助手类(.js文件)

封装读取Fieldset和调用Apex的核心逻辑:

({
    fetchFieldset: function(component) {
        let action = component.get("c.getCaseFieldset");
        action.setCallback(this, function(response) {
            let state = response.getState();
            if(state === "SUCCESS") {
                component.set("v.fieldsetFields", response.getReturnValue());
            } else {
                let errors = response.getError();
                if(errors) {
                    if(errors[0] && errors[0].message) {
                        console.error("加载字段失败: " + errors[0].message);
                        // 弹出错误提示给用户
                        let toastEvent = $A.get("e.force:showToast");
                        toastEvent.setParams({
                            title: "出错了",
                            message: "加载字段失败: " + errors[0].message,
                            type: "error"
                        });
                        toastEvent.fire();
                    }
                }
            }
        });
        $A.enqueueAction(action);
    },

    createCaseRecord: function(component) {
        let caseRecord = component.get("v.caseRecord");
        let action = component.get("c.createCase");
        action.setParams({
            "caseObj": caseRecord
        });
        action.setCallback(this, function(response) {
            let state = response.getState();
            if(state === "SUCCESS") {
                let toastEvent = $A.get("e.force:showToast");
                toastEvent.setParams({
                    title: "创建成功",
                    message: "Case已创建,记录ID: " + response.getReturnValue(),
                    type: "success"
                });
                toastEvent.fire();
                // 创建成功后重置表单
                component.set("v.caseRecord", {'sobjectType':'Case'});
                let inputFields = component.find('caseFields');
                if(inputFields) {
                    inputFields.forEach(field => field.reset());
                }
            } else {
                let errors = response.getError();
                if(errors) {
                    if(errors[0] && errors[0].message) {
                        console.error("创建Case失败: " + errors[0].message);
                        let toastEvent = $A.get("e.force:showToast");
                        toastEvent.setParams({
                            title: "出错了",
                            message: "创建Case失败: " + errors[0].message,
                            type: "error"
                        });
                        toastEvent.fire();
                    }
                }
            }
        });
        $A.enqueueAction(action);
    }
})

4. Apex控制器(Apex类)

负责读取Fieldset元数据和执行Case创建操作:

public with sharing class CaseCreationController {
    @AuraEnabled
    public static List<Schema.FieldSetMember> getCaseFieldset() {
        // 替换成你刚才创建的Fieldset名称
        Schema.FieldSet caseFieldset = Schema.SObjectType.Case.FieldSets.Case_Creation_Fields;
        return caseFieldset.getFields();
    }

    @AuraEnabled
    public static Id createCase(Case caseObj) {
        insert caseObj;
        return caseObj.Id;
    }
}
第三步:使用这个组件
  • 进入Lightning App Builder,把这个组件拖到任意Lightning页面(比如首页、Case记录页)
  • 保存页面后,测试点击“保存Case”,就能看到新建的Case记录啦!
关键小提示
  • lightning:inputField会自动根据字段类型渲染对应的输入控件(文本框、下拉框、日期选择器等),不用手动逐个编写输入组件
  • 后续如果要调整需要的字段,直接去Fieldset里添加/删除就行,完全不用修改组件代码,这就是Fieldset“配置优先”的核心优势!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:41:44