我如何以管理员身份配置自定义闪电记录表单中的字段?

How can I configure fields in a custom lightning record form as an admin?

我是 Salesforce 的新手,目前正在尝试为具有特定功能的项目创建自定义 LWC。

我已经创建了一个自定义的 LWC,它是一个能够查看和编辑特定用户的 lightning-record-form information/fields。该表单在 Salesforce 中运行良好,因为我可以查看和编辑我包含的所有字段。

我的下一个困境是其中一项要求,要求系统管理员能够配置哪些字段对登录用户可用和可编辑。

在这个阶段,我不太确定我是否为这些要求使用了正确的基础组件 (lightning-record-form)。我也不确定我是否足够了解 Salesforce 平台以了解如何将这些字段配置为管理员,或者这是否可以开始。

另一个要求是使此表单针对桌面和移动设备进行优化。我知道 lightning-record-form 已经针对移动设备进行了优化,但是如果需要,有什么方法可以覆盖样式吗? (我还没有在 LWC 中玩过造型)。

我在下面包含了我的代码以供参考:

userProfileForm.js

import { LightningElement } from 'lwc';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';

import Id from '@salesforce/user/Id';
import USER_OBJECT from '@salesforce/schema/User';
import FIRSTNAME_FIELD from '@salesforce/schema/User.FirstName';
import LASTNAME_FIELD from '@salesforce/schema/User.LastName'
import ALIAS_FIELD from '@salesforce/schema/User.Alias';
import EMAIL_FIELD from '@salesforce/schema/User.Email';
import USERNAME_FIELD from '@salesforce/schema/User.Username';
import NICKNAME_FIELD from '@salesforce/schema/User.CommunityNickname';
import TITLE_FIELD from '@salesforce/schema/User.Title';
import COMPANY_FIELD from '@salesforce/schema/User.CompanyName';
import DEPARTMENT_FIELD from '@salesforce/schema/User.Department';
import ADDRESS_FIELD from '@salesforce/schema/User.Address';
import PHONE_FIELD from '@salesforce/schema/User.Phone';
import MOBILE_FIELD from '@salesforce/schema/User.MobilePhone';
import TIMEZONE_FIELD from '@salesforce/schema/User.TimeZoneSidKey';
import LOCALE_FIELD from '@salesforce/schema/User.LocaleSidKey';
import LANGUAGE_FIELD from '@salesforce/schema/User.LanguageLocaleKey';

export default class UserProfileForm extends LightningElement {
    modeName = 'view'; // Sets mode to view in lightning-record-form
    objectApiName = USER_OBJECT;
    userId = Id; // Gets current user id from salesforce

    // Exposes fields to be made available in the form template
    fields = [
        FIRSTNAME_FIELD,
        LASTNAME_FIELD, 
        ALIAS_FIELD, 
        EMAIL_FIELD, 
        USERNAME_FIELD, 
        NICKNAME_FIELD, 
        TITLE_FIELD, 
        COMPANY_FIELD, 
        DEPARTMENT_FIELD, 
        ADDRESS_FIELD, 
        PHONE_FIELD, 
        MOBILE_FIELD,
        TIMEZONE_FIELD, 
        LOCALE_FIELD, 
        LANGUAGE_FIELD
    ];

    handleSubmit(event) {
        event.preventDefault(); // Stops form from submitting
        const fields = event.detail.fields;
        this.template.querySelector('lightning-record-form').submit(fields);
    }
    
    handleSuccess() {
        const toastEvent = new ShowToastEvent({
            title: "Updated Successfully",
            message: "User information has successfully been updated",
            variant: "success"
        });
        this.dispatchEvent(toastEvent);
    }

    handleError() {
        const toastEvent = new ShowToastEvent({
            title: "Update Unsuccessful",
            message: "Something went wrong, please try again",
            variant: "error"
        })
        this.dispatchEvent(toastEvent);
    }
}

userProfileForm.html

<template>
    <lightning-card title="User Information" icon-name="action:user">
        <lightning-record-form
            object-api-name={objectApiName}
            record-id={userId}
            fields={fields}
            mode={modeName}
            onsubmit={handleSubmit}
            onsuccess={handleSuccess}
            onerror={handleError}>
        </lightning-record-form>
    </lightning-card>
</template>

非常好的问题,成功的一半是知道 Google 的目的...

很多方法可以解决,看你实际需要什么。纯粹主义者会告诉您可以查看字段集,但它们对于 LWC 来说还不是很“原生”,您需要一些辅助 Apex 代码来提取它们的定义。真可惜,因为我们可以在 Visualforce 中使用字段集做一些非常巧妙的事情。

在深入研究编码之前,有时值得多了解一下需求。 User object 可能不是这个选择,因为你不能用 Profile/Permission Sets 控制很多。但任何其他对象——有时正确的答案是不做,不做代码更改。在配置文件中正确设置管理 show/hide 字段。这样它们就会隐藏在任何地方,在正常布局、列表视图、报告中,而不仅仅是自定义部分。

无论如何。

对于您的管理员来说,最简单的方法可能是公开一些他们可以传递给您的组件的参数。它们可以从调用它的另一个组件传递,也可以从 App Builder(拖放页面编辑器)传递,它们会拖放您的组件,然后在右侧菜单中对其进行配置。

有时间的话

如果你没有时间

直接跳转到exercise 7,底部有现成的组件。

请注意,这种执行此操作的方式(字段名称为字符串,而不是 @salesforce/schema/...)没有防止删除和重命名的保护。对于 User 上的标准字段,您是安全的,它们不太可能消失。但是对于自定义对象,有时当有人试图删除该字段时编译时间 check/deployment error/error 是一个令人讨厌的惊喜,但对于最终用户来说比组件更好 运行 因为你忘了改变它.. .