2

I have a <lightning:recordViewForm in a custom lightning component.

When I hardcode the recordId attribute it works, but when I pass an attribute in it fails without any error messages in either the console or the debug log.

Component

<aura:handler name="init" value="{!this}" action="{!c.doInit}" />
<aura:attribute name="recordId" type="Id"></aura:attribute>

<lightning:recordViewForm recordId="{! v.recordId }" objectApiName="MyCustomObject__c">

    <lightning:outputField fieldName="Name" />

</lightning:recordViewForm>

JavaScript Controller

doInit : function(cmp, event, helper) {

    // var recordId = helper.getQueryStringParameter('recordId');

    cmp.set("v.recordId", "a0C4E000003YMkmUAG");
}

The above does not work, even if I put the recordId directly into the attribute.

It only works when I set the Id in the recordId attribute of the <lightning:recordViewForm like below:

<lightning:recordViewForm recordId="a0C4E000003YMkmUAG" objectApiName="MyCustomObject__c">

    <lightning:outputField fieldName="Name" />

</lightning:recordViewForm>
  • Are you certain that var recordId is set to a valid Id e.g. the same one you hardcoded? – Keith C Jun 23 '18 at 15:51
  • @KeithC yup, because I am copying and pasting it from the Url into the recordId attribute, and I am logging it to the console to check – Robs Jun 23 '18 at 15:53
5

The recordViewForm (and similar siblings) are very finicky with the recordId attribute. Not sure if this is just a quirk or bug but try wrapping it with an <aura:if isTrue="{! not( empty( v.recordId ) ) }">

Basically, in my experience working with it, it needs the attribute ready before it's placed in the render cycle.

It just so happens <aura:if> doesn't initiate a render of the component until its conditions are truthy.

  • Thanks for this. Helped me solve a problem w/ somewhat different behavior. Mine was a custom component based on recordViewForm. The component threw an on-screen err in LEX on load (err was "Uncaught Action failed: recordViewForm$controller$handleReocrdIdChange"), then worked. But in a Community, which is where I first tried it, it worked if I had one instance of the component on a page, but not if I had two instances. In the latter case, the first would work, but the second would fail silently/mysteriously. This fixed both issues. – mscholtz Sep 12 '18 at 18:46
0

I was getting

AuraFriendlyError: Error in fetching record or record metadata. [Invalid record id]

I added the validation before the lightning:recordViewForm and it is working perfectly. Thank you.

 <aura:if isTrue="{! not( empty( v.Case.Id ) ) }">
    <lightning:recordViewForm recordId="{!v.Case.Id}" objectApiName="Case">
        <div class="slds-box">
            <lightning:outputField fieldName="CaseNumber" />
            <lightning:outputField fieldName="Status" />
            <lightning:outputField fieldName="RecordTypeId" />
            <lightning:outputField fieldName="Priority" />                
        </div>
    </lightning:recordViewForm>
</aura:if>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.