1

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:

  1. In org, create two admin users: A and B.
  2. Admin A in Lead RecordPage then click Edit Page.
  3. Add 12 "PreviewPage" components.
  4. Click save and active it.
  5. Logout User A, use User B login.
  6. Setup -> Lightning App Builder Find previous RecordPage and click "edit" link.
  7. Drag a "PreviewPage" components.
  8. Click Save.
  9. 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:

  1. Is there any document in Salesforce tell about can not use database.query in DynamicPickList class?
  2. 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.

0

You must log in to answer this question.