我如何以管理员身份配置自定义闪电记录表单中的字段?
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(拖放页面编辑器)传递,它们会拖放您的组件,然后在右侧菜单中对其进行配置。
有时间的话
阅读有关 @api
decorator
以及如何expose parameters so sysadmin can decide on some behaviour while dropping it on the page。如何清楚地标记它们,定义范围,例如“表格中最多 3 列,否则看起来会很乱”
探索“lwc-recipes”github 存储库,例如 https://github.com/trailheadapps/lwc-recipes/tree/main/force-app/main/default/lwc/recordFormDynamicContact (link to it is at the bottom of lightning-record-form spec)
https://developerforce.github.io/LWC-Developer-Workshop-2019/index.html. I can't recommend it enough (although it'd be better with the actual teacher who can show you stuff, I was lucky to join a 1-day classroom for it in 2019). Try to do the whole thing. In exercise 6 you do pretty cool things with record-form, get more comfortable with the config options. Then in exercise 7 you rip the whole thing apart and make completely dynamic generic form. (Almost) any object, any fields, any amount of columns, layout density... (in extreme cases your sysadmin could configure 2 components on same page, 1 displayed for desktop, 1 for mobile using this 上有很棒的 LWC 速成班,搜索“外形规格”)
如果你没有时间
直接跳转到exercise 7,底部有现成的组件。
请注意,这种执行此操作的方式(字段名称为字符串,而不是 @salesforce/schema/...
)没有防止删除和重命名的保护。对于 User 上的标准字段,您是安全的,它们不太可能消失。但是对于自定义对象,有时当有人试图删除该字段时编译时间 check/deployment error/error 是一个令人讨厌的惊喜,但对于最终用户来说比组件更好 运行 因为你忘了改变它.. .
我是 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(拖放页面编辑器)传递,它们会拖放您的组件,然后在右侧菜单中对其进行配置。
有时间的话
阅读有关
@api
decorator以及如何expose parameters so sysadmin can decide on some behaviour while dropping it on the page。如何清楚地标记它们,定义范围,例如“表格中最多 3 列,否则看起来会很乱”
探索“lwc-recipes”github 存储库,例如 https://github.com/trailheadapps/lwc-recipes/tree/main/force-app/main/default/lwc/recordFormDynamicContact (link to it is at the bottom of lightning-record-form spec)
https://developerforce.github.io/LWC-Developer-Workshop-2019/index.html. I can't recommend it enough (although it'd be better with the actual teacher who can show you stuff, I was lucky to join a 1-day classroom for it in 2019). Try to do the whole thing. In exercise 6 you do pretty cool things with record-form, get more comfortable with the config options. Then in exercise 7 you rip the whole thing apart and make completely dynamic generic form. (Almost) any object, any fields, any amount of columns, layout density... (in extreme cases your sysadmin could configure 2 components on same page, 1 displayed for desktop, 1 for mobile using this 上有很棒的 LWC 速成班,搜索“外形规格”)
如果你没有时间
直接跳转到exercise 7,底部有现成的组件。
请注意,这种执行此操作的方式(字段名称为字符串,而不是 @salesforce/schema/...
)没有防止删除和重命名的保护。对于 User 上的标准字段,您是安全的,它们不太可能消失。但是对于自定义对象,有时当有人试图删除该字段时编译时间 check/deployment error/error 是一个令人讨厌的惊喜,但对于最终用户来说比组件更好 运行 因为你忘了改变它.. .