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.logsdebugger;(但只有当您将自己添加到设置 -> 调试模式时它才会起作用)。

第一条线 运行 组件加载后立即。到那时,对象/记录类型信息还没有 return。 dataerror 都未定义。但是您编写代码就像您不在乎一样,无论如何您都会调用插入。当 data 最终变得可用并且设置了正确的记录类型时 - 它再次 运行s。

将调用移至 if(data) 部分。或者在实际方法中不要 运行 如果我没有设置记录类型。