Неверный URL страницы с пользовательским компонентом молнии - PullRequest
1 голос
/ 14 мая 2019

Я создал новый пользовательский компонент молнии и контроллер для создания нового лидера в 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="abc@email.com..." 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 Controller

({
    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);
    },
})

Apex

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;
    }  

}

1 Ответ

0 голосов
/ 14 мая 2019

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

Вам необходимо улучшить обработку ошибок.если leadId не определено / пусто, вы должны отобразить ошибку для пользователя.если 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();
    }
});
...