Я новичок в компонентах молнии и пытаюсь получить кнопку в молнии, чтобы обновить флажок в записи контакта (Send_to_IFS__c) при нажатии кнопки. Ниже то, что у меня есть, но оно не обновляет поле и не выходит из быстрого действия. Любая помощь или точка в правильном направлении будут оценены

CMP

<aura:component implements="force:lightningQuickActionWithoutHeader,force:hasRecordId" >

    <aura:attribute name="contact" type="Object"/>
    <aura:attribute name="contactRecord" type="Object" default="{'sobjectType':'Contact', 'Send_to_IFS__c' : ''}"/>
    <aura:attribute name="recordSaveError" type="String" description="An error message bound to force:recordData"/>

  <force:recordData aura:id="conRec" 
    fields="Send_to_IFS__c"
    recordId="{!v.recordId}"  
    targetError="{!v.recordSaveError}"
    targetRecord="{!v.contact}"
    targetFields="{!v.contactRecord}"
    mode="EDIT"

                    />

    <aura:handler name="init" value="{!this}" action="{!c.handleClick}"/>



 <aura:if isTrue="{!not(empty(v.recordSaveError))}">
           <br />
        <div class="error slds-box">
             {!v.recordSaveError}
        </div> 
    </aura:if>


</aura:component>

Контроллер

    ({
    handleClick: function(component, event, helper){
        helper.saveContact(component, event, helper);
    },

 recordUpdated : function(component, event, helper) {
        helper.recordUpdated(component, event, helper);
    }  
})

Помощник

({
saveContact : function(component, event, helper) {
    component.set("v.contactRecord.Send_to_IFS__c", true);
    component.find("conRec").saveRecord($A.getCallback(function(saveResult) {
        if (saveResult.state === "SUCCESS" || saveResult.state === "DRAFT") {
            alert("Save completed successfully.");
        } else if (saveResult.state === "INCOMPLETE") {
            component.set("v.recordSaveError","User is offline, device doesn't support drafts.");
        } else if (saveResult.state === "ERROR") { 
            var errMsg = "";
            // saveResult.error is an array of errors, 
            // so collect all errors into one message
            for (var i = 0; i < saveResult.error.length; i++) {
                errMsg += saveResult.error[i].message + "\n";
            }
            component.set("v.recordSaveError", errMsg);

        } else {
            component.set("v.recordSaveError",'Unknown problem, state: ' + saveResult.state + ', error: ' + 
              JSON.stringify(saveResult.error));
        }
    }));

    $A.get("e.force:closeQuickAction").fire();  
},

recordUpdated : function(component, event, helper){
    var changeType = event.getParams().changeType;
    if (changeType === "CHANGED") {
        component.find("conRec").reloadRecord();
    }
}


})
1
codeyinthecloud 5 Дек 2018 в 21:27

1 ответ

Лучший ответ

Зачем вам вообще нужен компонент молнии здесь. Мне кажется, что все, что вы здесь делаете, это просто обновляете значение поля в контакте.

Вы можете создавать быстрые действия для конкретных объектов и использовать обновление записать действие вместо компонента молнии, чтобы обновить поле флажка.

ОБНОВЛЕНИЕ НА ОСНОВЕ КОММЕНТАРИЙ:

  1. Вместо того, чтобы использовать init для получения данных из Lightning Data Service, я бы изменил его на обработчик изменений, поскольку столкнулся с проблемами с получением данных в событии инициализации из LDS, как показано ниже.

    <aura:component implements="force:lightningQuickActionWithoutHeader,force:hasRecordId" >
    
    
    <aura:attribute name="contact" type="Object"/>
    <aura:attribute name="contactRecord" type="Object" default="{'sobjectType':'Contact', 'cokePOC__TestBox__c' : ''}"/>
    
    <aura:attribute name="recordSaveError" type="String" description="An error message bound to force:recordData"/>
    
    <aura:handler name="change" value="{!v.contactRecord}" 
                  action="{!c.handleClick}"/>
    
    <force:recordData aura:id="conRec" 
                      fields="cokePOC__TestBox__c"
                      recordId="{!v.recordId}"  
                      targetError="{!v.recordSaveError}"
                      targetRecord="{!v.contact}"
                      targetFields="{!v.contactRecord}"
                      mode="EDIT"
    
                      />
    
    <aura:handler name="init" value="{!this}" action="{!c.onload}"/>
    
    
    
    <aura:if isTrue="{!not(empty(v.recordSaveError))}">
        <br />
        <div class="error slds-box">
            {!v.recordSaveError}
        </div> 
    </aura:if>
    

КонтроллерJS:

({
    onload: function(component, event, helper){

    },
    handleClick: function(component, event, helper){
        helper.saveContact(component, event, helper);
    },

    recordUpdated : function(component, event, helper) {
        helper.recordUpdated(component, event, helper);
    }  
})
1
codeyinthecloud 6 Дек 2018 в 00:14
Я хочу иметь возможность отправлять сообщения пользователю, если определенные условия не выполняются до обновления. Ранее мы делали это с помощью кнопки javascript в классике. Я, вероятно, мог бы использовать быстрое действие и правила проверки для конкретного объекта, чтобы выполнить это требование, но надеялся узнать что-то новое.
 – 
Guest
5 Дек 2018 в 21:30
Как сказано в предупреждении в документации, не добавляйте атрибут recordId. Это может привести к поломке вещей. Хотя с определением все в порядке (оно есть в документации), в нем нет необходимости.
 – 
sfdcfox
5 Дек 2018 в 22:01
Спасибо, что указали! Обновлен мой ответ
 – 
codeyinthecloud
5 Дек 2018 в 22:33
Спасибо за быстрый ответ, теперь он правильно обновляет флажок. У меня есть еще пара вещей, над которыми нужно работать, но это отвечает на вопрос. Спасибо!
 – 
Guest
6 Дек 2018 в 00:10