Недействительный URL страницы с пользовательским компонентом Lightning

Я создал новый пользовательский компонент Lightning и контроллер, чтобы создать нового лидера в Salesforce. Когда вы вводите все поля правильно и они проходят проверку, страница работает так, как задумано. Однако, когда поле не проходит проверку, например электронное письмо неправильно отформатировано (abc.abc.com), я получаю следующую ошибку.

Страница не существует. Введите действительный URL-адрес и повторите попытку.

Я также получаю тост за успех от Salesforce, но лид не создается. Я считаю, что у меня проблема в контроллере из ответа getState, но я не могу понять, в чем я ошибаюсь.

Вот компонент

Составная часть

<aura:component implements="lightning:actionOverride" access="global" controller="overrideStandabuttonwithLC">
    <aura:attribute name="lea" type="Lead" default="{'sobjectType': 'Lead',
                                                        'FirstName':'',
                                                        'LastName':'',
                                                        'Title':'',
                                                        'Email':'',
                                                        'Phone':''}" />    
    <div class="slds-m-around--large">
        <div class="slds-form--stacked">
            <div class="slds-form-element">  
                <div class="slds-form-element__control">
                    <lightning:input aura:id="leaFirstName" label="First Name" value="{!v.lea.FirstName}" class="slds-input"/>
                    <lightning:input aura:id="leaLastName" required="true" label="Last Name" value="{!v.lea.LastName}" class="slds-input"/>
                    <lightning:input aura:id="leaTitle" label="Title" value="{!v.lea.Title}" class="slds-input"/>
                    <lightning:input aura:id="leaEmail" label="Email" value="{!v.lea.Email}" placeholder="[email protected]..." class="slds-input"/>
                    <lightning:input aura:id="leaPhone" label="Phone" value="{!v.lea.Phone}" class="slds-input"/>
                  </div>
            </div>
            <div class="slds-m-around--medium">
                <button class="slds-button slds-button--brand" onclick="{!c.createLead}">Save</button>
            </div>
        </div>
    </div>    
</aura:component>

Контроллер Javascript

({
    createLead : function(component, event, helper) {
        var action = component.get("c.saveLead");
        action.setParams({
            "leaRec":component.get("v.lea")
        });
        action.setCallback(this, function(response){
            if(response.getState()==='SUCCESS'){
                var leaId = response.getReturnValue();
                var toastEvent = $A.get("e.force:showToast");
                toastEvent.setParams({
                    "title": "Success!",
                    "type":"Success",
                    "message": "Lead created successfully."
                });

                toastEvent.fire();


                var navEvt = $A.get("e.force:navigateToSObject");
                navEvt.setParams({
                    "recordId": leaId,
                    "slideDevName": "related"
                });
                navEvt.fire();
            }
        });
        $A.enqueueAction(action);
    },
})

Вершина

public with sharing class overrideStandabuttonwithLC {

    @AuraEnabled
    public static ID saveLead(Lead leaRec){
        try{
            insert leaRec;
        }
        catch(Exception e){
            system.debug('e-->' + e.getMessage());
        }

        return leaRec.Id;
    }  

}

person Walter Worley    schedule 14.05.2019    source источник
comment
придирки, но у вас должны быть лучшие соглашения об именах. Неужели намного сложнее добавить d к leadRec, так что это leadRec, или завершить все описание до leadRecord?   -  person TemporaryFix    schedule 14.05.2019


Ответы (1)


Причина, по которой это происходит, имеет смысл. Ваш метод контроллера saveLead не работает. Запись лида никогда не вставляется. Вы возвращаете null своему компоненту. Вы не можете перейти к нулевой записи.

Вам нужно лучше обрабатывать ошибки. если leadId - undefined / null, вы должны вывести пользователю сообщение об ошибке. если leadId имеет значение, можно безопасно переходить к записи.

В качестве альтернативы вы можете удалить try / catch из своего метода сервера и сделать так, чтобы ваш обратный вызов выглядел так

action.setCallback(this, function(response){
    var toastEvent = $A.get("e.force:showToast");
    if(response.getState()==='SUCCESS'){
        var leaId = response.getReturnValue();

        toastEvent.setParams({
            "title": "Success!",
            "type":"Success",
            "message": "Lead created successfully."
        });

        toastEvent.fire();


        var navEvt = $A.get("e.force:navigateToSObject");
        navEvt.setParams({
            "recordId": leaId,
            "slideDevName": "related"
        });
        navEvt.fire();
    } else {
        let errors = response.getError();
        let message = 'Unknown error'; // Default error message
        // Retrieve the error message sent by the server
        if (errors && Array.isArray(errors) && errors.length > 0) {
            message = errors[0].message;
        }
        toastEvent.setParams({
            "title": "Error!",
            "type":"Error",
            "message": message
        });

        toastEvent.fire();
    }
});
person TemporaryFix    schedule 14.05.2019