我如何在自定义闪电记录表单中配置字段作为管理员?



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

我创建了一个自定义LWC,它是一个闪电记录表单,能够查看和编辑特定的用户信息/字段。这个表单在Salesforce中工作得很好,因为我可以查看和编辑我所包含的所有字段。

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

在这个阶段,我不太确定我是否为这些需求使用了正确的基础组件(闪电记录形式)。我也不确定我是否对Salesforce平台有足够的了解,知道如何将这些字段配置为Admin,或者这是否可以开始。

另一个要求是使此表单同时针对桌面和移动设备进行优化。我知道闪电记录表单已经针对移动设备进行了优化,但是如果需要的话,有没有办法重写样式呢?(到目前为止,我还没有在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>

非常好的问题,知道谷歌搜索什么是成功的一半。

有很多方法来解决它,这取决于你真正需要什么。纯粹主义者会告诉你,你可以查看字段集,但它们不是很"原生"。对于LWC,还需要一些辅助Apex代码来提取它们的定义。这是一个遗憾,因为我们可以在Visualforce中使用字段集做非常整洁的事情。

在深入编写代码之前,有时需要更多地了解需求。User对象可能是糟糕的选择,因为你不能控制很多配置文件/权限集。但是其他对象——有时正确的答案是不做,不做代码修改。使管理员显示/隐藏字段正确,在配置文件中。这样它们就会被隐藏在任何地方,在普通的布局、列表视图、报表中,而不仅仅是自定义部分。

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

如果你有时间

  • 了解@apidecorator

  • 以及如何暴露参数,以便系统管理员可以在将其放在页面上时决定某些行为。如何清晰地标记它们,在表单中定义像"max 3列这样的范围,否则会看起来很乱">

  • 浏览"lwc-recipes"github的repo,例如https://github.com/trailheadapps/lwc-recipes/tree/main/force-app/main/default/lwc/recordFormDynamicContact(链接在lightning-record-form spec的底部)

  • 在https://developerforce.github.io/LWC-Developer-Workshop-2019/index.html有一个非常酷的LWC速成班。我怎么推荐都不够(虽然有真正的老师给你展示东西会更好,但我很幸运地在2019年参加了为期一天的课堂。)试着做完整件事。在练习6中,您使用record-form做了一些很酷的事情,更熟悉配置选项。然后在练习7中,你把整个东西拆开,使完全是动态的泛型形式。(几乎)任何对象、任何字段、任何数量的列、布局密度……(在极端情况下,您的系统管理员可以在同一个页面上配置两个组件,一个用于桌面,一个用于移动设备,使用这个,搜索"form factor")

如果你没有时间

直接跳到练习7,下面有现成的组件。

请注意,这样做(字段名作为字符串,而不是作为@salesforce/schema/...)没有防止删除和重命名的保护。对于User上的标准字段,您是安全的,它们不太可能消失。但对于自定义对象,有时当有人试图删除字段时,编译时检查/部署错误/错误是一个令人讨厌的惊喜,但总比最终用户因为忘记更改而导致组件不运行要好。

最新更新