UiRecordApi 一次创建两个记录
UiRecordApi creating two Record at a time
我正在使用 uiRecordApi 创建具有特定记录类型的记录,但它创建了两条记录而不是一条。
一个是我提供的 RecordType,一个是默认的 RecordType,它在组织中设置为默认值。
这是我的代码:
import { LightningElement,api,wire,track } from 'lwc';
import { getObjectInfo } from 'lightning/uiObjectInfoApi';
import { createRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { CloseActionScreenEvent } from 'lightning/actions';
import std_OBJECT from '@salesforce/schema/Student__c';
import AAControls from "@salesforce/schema/Student__c.Account";
import RECORDTYPEID from '@salesforce/schema/Student__c.RecordTypeId';
export default class LinkAAWithControlTeamsAssistantLSR extends LightningElement {
/*
parent - Account
child - Student__c
*/
@api recordId;
@api objectApiName;
@track recordTypeData;
@wire(getObjectInfo, { objectApiName: Std_OBJECT })
wiredMethod({ error, data }) {
if(data){
const rtis = data.recordTypeInfos;
this.recordTypeData = Object.keys(rtis).find(rti => rtis[rti].name === 'Controls');
console.log('this.recordTypeData------>',this.recordTypeData);
/*Log Output -> this.recordTypeData------> 0125P000000PXCbQxx */
}
this.insertRecord();
}
insertRecord(){
const fields = {};
fields[AAControls.fieldApiName] = this.recordId;
fields[RECORDTYPEID.fieldApiName] = this.recordTypeData;
console.log('fields---->',JSON.stringify(fields));
/*Log Output ->
"AccountId__c":"a185P000000DI5gQAG","RecordTypeId":"0125P000000PXCbQAO"
*/
const recordInput = {
apiName: std_OBJECT.objectApiName,
fields: fields
};
createRecord(recordInput)
.then((record) => {
console.log('---rec 11--',JSON.stringify(record));
/*Log Output ->
this Log output contains to two record data with same accountId (Which I gave above)
and different recordTypeID (One which i gave One which is set Defualt)
*/
this.dispatchEvent(
new ShowToastEvent({
title: 'Toast Success',
message: 'Operation sucessful',
variant: 'success',
mode: 'dismissable'
}));
})
.catch((error) => {
console.log('----rec error--->',JSON.stringify(error));
this.dispatchEvent(
new ShowToastEvent({
title: 'Error!',
message: error.body.message,
variant: 'error',
mode: 'dismissable'
}));
})
.finally(()=>{
this.dispatchEvent(new CloseActionScreenEvent());
})
}
}
我不明白为什么这段代码创建了两条记录,这个对象上没有激活的触发器。
如果我尝试从 apex 创建相同的记录,则只会使用代码中给定的记录类型创建一条记录。
你的this.insertRecord()
放错地方了。有线方法处理程序 运行s 两次。尝试放置一些 console.logs
或 debugger;
(但只有当您将自己添加到设置 -> 调试模式时它才会起作用)。
第一条线 运行 组件加载后立即。到那时,对象/记录类型信息还没有 return。 data
和 error
都未定义。但是您编写代码就像您不在乎一样,无论如何您都会调用插入。当 data
最终变得可用并且设置了正确的记录类型时 - 它再次 运行s。
将调用移至 if(data)
部分。或者在实际方法中不要 运行 如果我没有设置记录类型。
我正在使用 uiRecordApi 创建具有特定记录类型的记录,但它创建了两条记录而不是一条。
一个是我提供的 RecordType,一个是默认的 RecordType,它在组织中设置为默认值。
这是我的代码:
import { LightningElement,api,wire,track } from 'lwc';
import { getObjectInfo } from 'lightning/uiObjectInfoApi';
import { createRecord } from 'lightning/uiRecordApi';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { CloseActionScreenEvent } from 'lightning/actions';
import std_OBJECT from '@salesforce/schema/Student__c';
import AAControls from "@salesforce/schema/Student__c.Account";
import RECORDTYPEID from '@salesforce/schema/Student__c.RecordTypeId';
export default class LinkAAWithControlTeamsAssistantLSR extends LightningElement {
/*
parent - Account
child - Student__c
*/
@api recordId;
@api objectApiName;
@track recordTypeData;
@wire(getObjectInfo, { objectApiName: Std_OBJECT })
wiredMethod({ error, data }) {
if(data){
const rtis = data.recordTypeInfos;
this.recordTypeData = Object.keys(rtis).find(rti => rtis[rti].name === 'Controls');
console.log('this.recordTypeData------>',this.recordTypeData);
/*Log Output -> this.recordTypeData------> 0125P000000PXCbQxx */
}
this.insertRecord();
}
insertRecord(){
const fields = {};
fields[AAControls.fieldApiName] = this.recordId;
fields[RECORDTYPEID.fieldApiName] = this.recordTypeData;
console.log('fields---->',JSON.stringify(fields));
/*Log Output ->
"AccountId__c":"a185P000000DI5gQAG","RecordTypeId":"0125P000000PXCbQAO"
*/
const recordInput = {
apiName: std_OBJECT.objectApiName,
fields: fields
};
createRecord(recordInput)
.then((record) => {
console.log('---rec 11--',JSON.stringify(record));
/*Log Output ->
this Log output contains to two record data with same accountId (Which I gave above)
and different recordTypeID (One which i gave One which is set Defualt)
*/
this.dispatchEvent(
new ShowToastEvent({
title: 'Toast Success',
message: 'Operation sucessful',
variant: 'success',
mode: 'dismissable'
}));
})
.catch((error) => {
console.log('----rec error--->',JSON.stringify(error));
this.dispatchEvent(
new ShowToastEvent({
title: 'Error!',
message: error.body.message,
variant: 'error',
mode: 'dismissable'
}));
})
.finally(()=>{
this.dispatchEvent(new CloseActionScreenEvent());
})
}
}
我不明白为什么这段代码创建了两条记录,这个对象上没有激活的触发器。
如果我尝试从 apex 创建相同的记录,则只会使用代码中给定的记录类型创建一条记录。
你的this.insertRecord()
放错地方了。有线方法处理程序 运行s 两次。尝试放置一些 console.logs
或 debugger;
(但只有当您将自己添加到设置 -> 调试模式时它才会起作用)。
第一条线 运行 组件加载后立即。到那时,对象/记录类型信息还没有 return。 data
和 error
都未定义。但是您编写代码就像您不在乎一样,无论如何您都会调用插入。当 data
最终变得可用并且设置了正确的记录类型时 - 它再次 运行s。
将调用移至 if(data)
部分。或者在实际方法中不要 运行 如果我没有设置记录类型。