I create an Aura Component "PreviewPage", in this component I call a Visualforce Page in it. I create this component like this video on Youtube: https://www.youtube.com/watch?v=kr4mHEA5dUw, I found I will meet Salesforce Error: Component 'PreviewPage' has an invalid value for property 'PreviewPage'.
Repro Steps:
- In org, create two admin users: A and B.
- Admin A in Lead RecordPage then click Edit Page.
- Add 12 "PreviewPage" components.
- Click save and active it.
- Logout User A, use User B login.
- Setup -> Lightning App Builder Find previous RecordPage and click "edit" link.
- Drag a "PreviewPage" components.
- Click Save.
- Throw Salesforce Error: Component 'PreviewPage' has an invalid value for property 'PreviewPage'.
My AuraComponent Code as follow
<aura:component implements="force:appHostable,force:hasRecordId,flexipage:availableForAllPageTypes,forceCommunity:availableForAllPageTypes" controller="PreviewPageController" access="global">
<aura:attribute access="global" name="previewPage" type="String" />
<aura:attribute access="global" name="height" type="Integer" />
<aura:attribute name='url' type="String"/>
<aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
<lightning:workspaceAPI aura:id="workspace" />
<iframe src="{!v.url}" width="100%" height="{!v.height + 'px;'}" frameBorder="0" />
</aura:component>
compenent design metadata
<design:component>
<design:attribute name="previewPage" label="PreviewPage" datasource="apex://PreviewPageList" />
<design:attribute name="height" label="Height (in pixels)" min="300" max="60000" default="600" />
</design:component>
PreviewPageList source code
global class PreviewPageList extends VisualEditor.DynamicPickList{
global override VisualEditor.DataRow getDefaultValue(){
String queryStr = 'SELECT Id,Name FROM PreviewPage__c LIMIT 1';
List<PreviewPage__c> previewPages = Database.query(queryStr);
VisualEditor.DataRow defaultValue;
if(previewPages.size() > 0){
String recordId = String.valueOf(previewPages[0].Id);
String name = String.valueOf(previewPages[0].Name);
defaultValue = new VisualEditor.DataRow(name, recordId);
} else {
defaultValue = new VisualEditor.DataRow('None', '');
}
return defaultValue;
}
global override VisualEditor.DynamicPickListRows getValues() {
String queryStr = 'SELECT Id,Name FROM PreviewPage__c';
List<PreviewPage__c> previewPages = Database.query(queryStr);
VisualEditor.DynamicPickListRows allValues = new VisualEditor.DynamicPickListRows();
if(previewPages.size() <= 0) {
allValues.addRow(new VisualEditor.DataRow('None', ''));
return allValues;
}
for(PreviewPage__c page: previewPages){
String recordId = String.valueOf(page.Id);
String name = String.valueOf(page.Name);
allValues.addRow(new VisualEditor.DataRow(name, recordId));
}
return allValues;
}
}
I also check this issue Receiving error "Component has an invalid value for property." on App Builder because we meet same error message.
After I change
String queryStr = 'SELECT Id,Name FROM PreviewPage__c';
List<PreviewPage__c> previewPages = Database.query(queryStr);
to
List<PreviewPage__c> previewPages = [SELECT Id,Name FROM PreviewPage__c];
this issue resolved. So I have follow question want to know:
- Is there any document in Salesforce tell about can not use database.query in DynamicPickList class?
- If I do not change login in user to User B, I can not reproduce this issue. I want to know why after changed login user this database.query broken? As far as I know they both admin and has same permission set and profile.