![](/img/trans.png)
[英]How to create an object related with another object on lightning-record-form
[英]How can I configure fields in a custom lightning record form as an admin?
我是 Salesforce 的新手,目前正在嘗試為具有特定功能的項目創建自定義 LWC。
我創建了一個自定義 LWC,它是一個閃電記錄表單,能夠查看和編輯特定的用戶信息/字段。 該表單在 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>
非常好的問題,一半的戰斗是知道谷歌的目的......
解決方法很多,看你實際需要什么。 純粹主義者會告訴您可以查看字段集,但它們對於 LWC 來說還不是很“原生”,您需要一些輔助 Apex 代碼來提取它們的定義。 這很遺憾,因為我們可以在 Visualforce 中使用字段集做一些非常巧妙的事情。
在深入研究編碼之前,有時值得多了解一下需求。 User
object 可能不是這個選擇,因為您無法通過配置文件/權限集進行很多控制。 但任何其他 object - 有時正確的答案是不做,不做代碼更改。 讓管理員在配置文件中正確顯示/隱藏字段。 這樣它們就會隱藏在任何地方,在正常布局、列表視圖、報告中,而不僅僅是自定義部分。
反正。
對於您的管理員來說,最簡單的方法可能是公開一些他們可以傳遞給您的組件的參數。 它們可以從調用它的另一個組件傳遞,也可以從 App Builder(拖放頁面編輯器)傳遞,它們會放下您的組件,然后在右側菜單中配置它。
如果你有時間
閱讀有關@api
裝飾器的信息
以及如何公開參數以便系統管理員可以決定某些行為,同時將其放在頁面上。 如何清楚 label 它們,定義范圍,例如“表單中最多 3 列,否則看起來會很亂”
探索“lwc-recipes”github repo,例如https://github.com/trailheadapps/lwc-recipes/tree/main/force-app/main/default/lwc/recordFormDynamicContact (鏈接位於底部閃電記錄形式規范)
在https://developerforce.github.io/LWC-Developer-Workshop-2019/index.html有非常酷的 LWC 速成課程。 我怎么推薦都不為過(雖然如果有真正的老師可以教你一些東西會更好,但我很幸運在 2019 年加入了一個為期 1 天的課堂)。 嘗試做整件事。 在練習 6 中,您可以使用 record-form 做一些很酷的事情,對配置選項更加熟悉。 然后在練習 7 中將整個東西拆開並制作完全動態的通用形式。 (幾乎)任何 object、任何字段、任何數量的列、布局密度...(在極端情況下,您的系統管理員可以在同一頁面上配置 2 個組件,1 個顯示在桌面上,1 個顯示在移動設備上,搜索“form factor” )
如果你沒有時間
直接跳到練習 7 ,底部有現成的組件。
請注意,這種執行此操作的方式(字段名稱作為字符串,而不是@salesforce/schema/...
)沒有防止刪除和重命名。 對於 User 上的標准字段,您是安全的,它們不太可能離開 go。 但是對於自定義對象,有時當有人試圖刪除該字段時出現編譯時檢查/部署錯誤/錯誤是一個令人討厭的驚喜,但總比因為您忘記更改它而沒有為最終用戶運行的組件好...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.