0

I'm creating a LWC (lightning web component) which allows any field to be displayed of any field type for any object, and to drop these into a flow page.

I've run into a problem, where, I'd like to do something like this (AND THIS CODE WORKS - it is the next block of code that does not work)

import { getObjectInfo } from 'lightning/uiObjectInfoApi';
...
@wire(getObjectInfo, {objectApiName:{ "objectApiName": "Account"}})  })
objectInfo(...
...
// note would have default attribute set but this is not supported in flow

and in the xml I have something like this

<targetConfigs>
        <targetConfig targets="lightning__FlowScreen">
            <property name="objectName" type="String"></property>...

But I've not got anywhere with this, because the objectName in the controller is coming as undefined?{objectName} in the template code, it displays as correctly configured in the component meta-data "Account". Really, this is driving me nuts and seems like something I should be able to do:

@api objectName;
...
@wire(getObjectInfo, {objectApiName:{ "objectApiName": '$objectName'}}) 

But when I do this, I just receive the following coming back from the wire: 403 access denied

Because the value being sent via the call, as I can see in network logs, it is sending literally "$objectName" instead of even undefined or, what I'd really like - "Account".

Do I need to something to wait, for this $objectName to be set before calling wire? Surely @wire should notice the change, which eventually it does have because I can see in the UI-- and then load the right data??

2
  • You need to give the object API name in a specific format, which should be { apiName: 'object-api-name-here'} Jul 30, 2020 at 15:03
  • ... the first block of code works, and the second does not, the issue is with the $objectName not with the format.
    – picklenic
    Jul 30, 2020 at 15:22

2 Answers 2

1

Your format of wire adapter seems to have an error where you are passing it an Object instead of the String. It should be either be

@wire(getObjectInfo, { objectApiName: '$objectName' }) objectInfo;

Please see these docs:

Example

import { LightningElement, wire } from 'lwc';
import { getObjectInfo } from 'lightning/uiObjectInfoApi';
import ACCOUNT_OBJECT from '@salesforce/schema/Account';

export default class Example extends LightningElement {
    @track objectName = 'Account'
    @wire(getObjectInfo, { objectApiName: '$objectName'})
    propertyOrFunction;
}
2
  • Yeah, the issue is I'm not wanting to use the example, I have used the docs. We want something generic here, and passing the string, only will cause an error because when you pass ACCOUNT_OBJECT in this example, it is passing the schema of the Account i.e. an object {"objectApiName": "Account"} and hence, my attempt to copy this. And, when I do this as I just said it works- but what does not work, is the $objectName variable.
    – picklenic
    Jul 30, 2020 at 15:20
  • Would you be able to explain what you mean when you say passing a string will cause an error? The example above uses a reactive string and works just fine.
    – manjit5190
    Jul 30, 2020 at 15:34
0
...
@api objectName;
...
    @wire(getObjectInfo, {objectApiName: '$objectWithApiName'}) 
    objectInfo({ error, data...

then ensure there is a getter with a different named var than your @api public variable (this was key lol)

get objectWithApiName() {
        return { objectApiName: this.objectName };
    }

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .