You need to sign in to do that
Don't have an account?
WDCi Nat
Error on "Build a Lightning Component to Override a Standard Action Use Lighting Data Service" Trailhead
Hi there
I'm getting an error message on this Trailhead Module and I don't know what I'm doing wrong. I have been trying for a couple of days and can't work out what my error is.
Here is my Developer Console code:
PROPERTY DIALOG COMPONENT:
PICKLIST COMPONENT:
PICKLIST CONTROLLER:
PICKLIST VALUES CONTROLLER:
PROPERTY DIALOG CONTROLLER:
PROPERTY DIALOG HELPER:
And I'm getting this error message:
With this Stack Trace:
Any help would be greatly appreciated. I don't use Developer Console work in my role, but thought I'd learn and am just ripping my hair out!!
Cheers, Nat
I'm getting an error message on this Trailhead Module and I don't know what I'm doing wrong. I have been trying for a couple of days and can't work out what my error is.
Here is my Developer Console code:
PROPERTY DIALOG COMPONENT:
<aura:component implements="flexipage:availableForRecordHome,force:hasRecordId" access="global" >
<aura:attribute name="picklistValues" type="Object" />
<aura:attribute name="propertyRecord" type="Property__c" />
<force:recordData aura:id="forceRecord"
recordId="{!v.recordId}"
targetFields="{!v.propertyRecord}"
fields="Id,Name,Beds__c,Baths__c,Price__c,Status__c"
mode="EDIT" />
<aura:handler name="init" value="{!this}" action="{!c.doInit}" />
<c:PickListValues sObjectName="Property__c" fieldName="Status__c" picklistValues="{!v.picklistValues}" />
<lightning:input aura:id="propName" name="propName" label="Property Name" required="true" />
<lightning:input aura:id="propBeds" name="propBeds" label="Beds" />
<lightning:input aura:id="propBaths" name="propBaths" label="Baths" />
<lightning:input aura:id="propPrice" name="propPrice" label="Price" />
<lightning:select aura:id="propStatus" name="propStatus" label="Status">
<aura:iteration items="{!v.picklistValues}" var="item">
<option value="{!item}">{!item}</option>
</aura:iteration>
</lightning:select>
<lightning:button variant="neutral" label="Cancel" />
<lightning:button variant="brand" label="Submit" onclick="{!c.saveRecord}"/>
</aura:component>
<aura:attribute name="picklistValues" type="Object" />
<aura:attribute name="propertyRecord" type="Property__c" />
<force:recordData aura:id="forceRecord"
recordId="{!v.recordId}"
targetFields="{!v.propertyRecord}"
fields="Id,Name,Beds__c,Baths__c,Price__c,Status__c"
mode="EDIT" />
<aura:handler name="init" value="{!this}" action="{!c.doInit}" />
<c:PickListValues sObjectName="Property__c" fieldName="Status__c" picklistValues="{!v.picklistValues}" />
<lightning:input aura:id="propName" name="propName" label="Property Name" required="true" />
<lightning:input aura:id="propBeds" name="propBeds" label="Beds" />
<lightning:input aura:id="propBaths" name="propBaths" label="Baths" />
<lightning:input aura:id="propPrice" name="propPrice" label="Price" />
<lightning:select aura:id="propStatus" name="propStatus" label="Status">
<aura:iteration items="{!v.picklistValues}" var="item">
<option value="{!item}">{!item}</option>
</aura:iteration>
</lightning:select>
<lightning:button variant="neutral" label="Cancel" />
<lightning:button variant="brand" label="Submit" onclick="{!c.saveRecord}"/>
</aura:component>
PICKLIST COMPONENT:
<aura:component >
<aura:attribute name="sObjectName" type="String" />
<aura:attribute name="fieldName" type="String" />
<aura:attribute name="picklistValues" type="Object" />
<aura:handler name="init" value="{!this}" action="{!c.doInit}" />
</aura:component>
<aura:attribute name="sObjectName" type="String" />
<aura:attribute name="fieldName" type="String" />
<aura:attribute name="picklistValues" type="Object" />
<aura:handler name="init" value="{!this}" action="{!c.doInit}" />
</aura:component>
PICKLIST CONTROLLER:
public class PickListController {
@AuraEnabled
public static List<String> getPickListValuesIntoList(String objectType, String selectedField){
List<String> pickListValuesList = new List<String>();
Schema.SObjectType convertToObj = Schema.getGlobalDescribe().get(objectType);
Schema.DescribeSObjectResult res = convertToObj.getDescribe();
Schema.DescribeFieldResult fieldResult = res.fields.getMap().get(selectedField).getDescribe();
List<Schema.PicklistEntry> ple = fieldResult.getPicklistValues();
for( Schema.PicklistEntry pickListVal : ple){
pickListValuesList.add(pickListVal.getLabel());
}
return pickListValuesList;
}}
@AuraEnabled
public static List<String> getPickListValuesIntoList(String objectType, String selectedField){
List<String> pickListValuesList = new List<String>();
Schema.SObjectType convertToObj = Schema.getGlobalDescribe().get(objectType);
Schema.DescribeSObjectResult res = convertToObj.getDescribe();
Schema.DescribeFieldResult fieldResult = res.fields.getMap().get(selectedField).getDescribe();
List<Schema.PicklistEntry> ple = fieldResult.getPicklistValues();
for( Schema.PicklistEntry pickListVal : ple){
pickListValuesList.add(pickListVal.getLabel());
}
return pickListValuesList;
}}
PICKLIST VALUES CONTROLLER:
({
doInit : function(component) {
var action = component.get("c.getPickListValuesIntoList");
action.setParams({
objectType: component.get("v.sObjectName"),
selectedField: component.get("v.fieldName")
});
action.setCallback(this, function(response) {
var list = response.getReturnValue();
component.set("v.picklistValues", list);
})
$A.enqueueAction(action);
}
})
doInit : function(component) {
var action = component.get("c.getPickListValuesIntoList");
action.setParams({
objectType: component.get("v.sObjectName"),
selectedField: component.get("v.fieldName")
});
action.setCallback(this, function(response) {
var list = response.getReturnValue();
component.set("v.picklistValues", list);
})
$A.enqueueAction(action);
}
})
PROPERTY DIALOG CONTROLLER:
({
doInit : function(component, event, helper) {
component.find("forceRecord").getNewRecord(
"Property__c",
null,
false,
$A.getCallback(function() {
var rec = component.get("v.propertyRecord");
var error = component.get("v.recordError");
if (error || (rec === null)) {
console.log("Error initializing record template: " + error);
return;
}
})
);},
saveRecord : function(component, event, helper) {
var propBeds = parseInt(component.find('propBeds').get("v.value"), 10);
var propBaths = parseInt(component.find('propBaths').get("v.value"), 10);
var propPrice = parseInt(component.find('propPrice').get("v.value"), 10);
component.set("v.propertyRecord.Name", component.find('propName').get("v.value"));
component.set("v.propertyRecord.Beds__c", propBeds);
component.set("v.propertyRecord.Baths__c", propBaths);
component.set("v.propertyRecord.Price__c", propPrice);
component.set("v.propertyRecord.Status__c", component.find('propStatus').get("v.value"));
var tempRec = component.find("forceRecord");
tempRec.saveRecord($A.getCallback(function(result) {
console.log(result.state);
var resultsToast = $A.get("e.force:showToast");
if (result.state === "SUCCESS") {
resultsToast.setParams({
"title": "Saved",
"message": "The record was saved."
});
resultsToast.fire();
var recId = result.recordId;
helper.navigateTo(component, recId);
} else if (result.state === "ERROR") {
console.log('Error: ' + JSON.stringify(result.error));
resultsToast.setParams({
"title": "Error",
"message": "There was an error saving the record: " + JSON.stringify(result.error)
});
resultsToast.fire();
} else {
console.log('Unknown problem, state: ' + result.state + ', error: ' + JSON.stringify(result.error));
}
}));}
})
doInit : function(component, event, helper) {
component.find("forceRecord").getNewRecord(
"Property__c",
null,
false,
$A.getCallback(function() {
var rec = component.get("v.propertyRecord");
var error = component.get("v.recordError");
if (error || (rec === null)) {
console.log("Error initializing record template: " + error);
return;
}
})
);},
saveRecord : function(component, event, helper) {
var propBeds = parseInt(component.find('propBeds').get("v.value"), 10);
var propBaths = parseInt(component.find('propBaths').get("v.value"), 10);
var propPrice = parseInt(component.find('propPrice').get("v.value"), 10);
component.set("v.propertyRecord.Name", component.find('propName').get("v.value"));
component.set("v.propertyRecord.Beds__c", propBeds);
component.set("v.propertyRecord.Baths__c", propBaths);
component.set("v.propertyRecord.Price__c", propPrice);
component.set("v.propertyRecord.Status__c", component.find('propStatus').get("v.value"));
var tempRec = component.find("forceRecord");
tempRec.saveRecord($A.getCallback(function(result) {
console.log(result.state);
var resultsToast = $A.get("e.force:showToast");
if (result.state === "SUCCESS") {
resultsToast.setParams({
"title": "Saved",
"message": "The record was saved."
});
resultsToast.fire();
var recId = result.recordId;
helper.navigateTo(component, recId);
} else if (result.state === "ERROR") {
console.log('Error: ' + JSON.stringify(result.error));
resultsToast.setParams({
"title": "Error",
"message": "There was an error saving the record: " + JSON.stringify(result.error)
});
resultsToast.fire();
} else {
console.log('Unknown problem, state: ' + result.state + ', error: ' + JSON.stringify(result.error));
}
}));}
})
PROPERTY DIALOG HELPER:
({
navigateTo: function(component, recId) {
var navEvt = $A.get("e.force:navigateToSObject");
navEvt.setParams({
"recordId": recId
});
navEvt.fire();
}
})
navigateTo: function(component, recId) {
var navEvt = $A.get("e.force:navigateToSObject");
navEvt.setParams({
"recordId": recId
});
navEvt.fire();
}
})
And I'm getting this error message:
Uncaught Unknown controller action 'getPickListValuesIntoList'
Callback failed: serviceComponent://ui.flexipage.components.page.FlexipageControllerV2/ACTION$getPage
Callback failed: serviceComponent://ui.flexipage.components.page.FlexipageControllerV2/ACTION$getPage
With this Stack Trace:
a.H.get()@https://curious-goat-22263-dev-ed.lightning.force.com/auraFW/javascript/cbZO21YQZI1hrYG6dKZGlw/aura_prod.js:288:176
Object.value [as get]()@https://curious-goat-22263-dev-ed.lightning.force.com/auraFW/javascript/cbZO21YQZI1hrYG6dKZGlw/aura_prod.js:720:228
doInit()@https://curious-goat-22263-dev-ed.lightning.force.com/one/components/c/PickListValues.js:10:32
Object.value [as get]()@https://curious-goat-22263-dev-ed.lightning.force.com/auraFW/javascript/cbZO21YQZI1hrYG6dKZGlw/aura_prod.js:720:228
doInit()@https://curious-goat-22263-dev-ed.lightning.force.com/one/components/c/PickListValues.js:10:32
Any help would be greatly appreciated. I don't use Developer Console work in my role, but thought I'd learn and am just ripping my hair out!!
Cheers, Nat
Please add controller="PickListController" to the Service component PickListValues.cmp, which calls to PickListController.apxc
<aura:component controller="PickListController">
<aura:attribute name="sObjectName" type="String" />
<aura:attribute name="fieldName" type="String" />
<aura:attribute name="picklistValues" type="Object" />
<aura:handler name="init" value="{!this}" action="{!c.doInit}" />
</aura:component>
All Answers
you got this error because you don't have connect your lightning component with your apex class controller :\
add controller to your lightning component (see bold part below...)
PROPERTY DIALOG COMPONENT:
<aura:component implements="flexipage:availableForRecordHome,force:hasRecordId" access="global" controller="PickListController">
<aura:attribute name="picklistValues" type="Object" />
<aura:attribute name="propertyRecord" type="Property__c" />
<force:recordData aura:id="forceRecord"
recordId="{!v.recordId}"
targetFields="{!v.propertyRecord}"
fields="Id,Name,Beds__c,Baths__c,Price__c,Status__c"
mode="EDIT" />
<aura:handler name="init" value="{!this}" action="{!c.doInit}" />
<c:PickListValues sObjectName="Property__c" fieldName="Status__c" picklistValues="{!v.picklistValues}" />
<lightning:input aura:id="propName" name="propName" label="Property Name" required="true" />
<lightning:input aura:id="propBeds" name="propBeds" label="Beds" />
<lightning:input aura:id="propBaths" name="propBaths" label="Baths" />
<lightning:input aura:id="propPrice" name="propPrice" label="Price" />
<lightning:select aura:id="propStatus" name="propStatus" label="Status">
<aura:iteration items="{!v.picklistValues}" var="item">
<option value="{!item}">{!item}</option>
</aura:iteration>
</lightning:select>
<lightning:button variant="neutral" label="Cancel" />
<lightning:button variant="brand" label="Submit" onclick="{!c.saveRecord}"/>
</aura:component>
Thanks let me know if it helps you, and kindly mark it best if it helps you
thanks
Thanks for your help.
I replaced my Property Dialog Component with your code, but am still getting an error.
Message: Uncaught Unknown controller action 'getPickListValuesIntoList'
Callback failed: serviceComponent://ui.flexipage.components.page.FlexipageControllerV2/ACTION$getPage
Stack Trace:
a.H.get()@https://curious-goat-22263-dev-ed.lightning.force.com/auraFW/javascript/cbZO21YQZI1hrYG6dKZGlw/aura_prod.js:288:176
Object.value [as get]()@https://curious-goat-22263-dev-ed.lightning.force.com/auraFW/javascript/cbZO21YQZI1hrYG6dKZGlw/aura_prod.js:720:228
doInit()@https://curious-goat-22263-dev-ed.lightning.force.com/one/components/c/PickListValues.js:10:32
I don't know what else to try. I've redone everything following the instructions a few times and keep getting an error :(
Please add controller="PickListController" to the Service component PickListValues.cmp, which calls to PickListController.apxc
<aura:component controller="PickListController">
<aura:attribute name="sObjectName" type="String" />
<aura:attribute name="fieldName" type="String" />
<aura:attribute name="picklistValues" type="Object" />
<aura:handler name="init" value="{!this}" action="{!c.doInit}" />
</aura:component>
That worked!! I was able to complete the Trail after all these months!!
You are amazing...thank you, thank you, thank you!!