1

I saw the following example of getting record :

    import { LightningElement, api, wire } from 'lwc';
import { getRecord } from 'lightning/uiRecordApi';

const FIELDS = [
    'Contact.Name',
    'Contact.Title',
    'Contact.Phone',
    'Contact.Email',
];

export default class WireGetRecordDynamicContact extends LightningElement {
    @api recordId;

    @wire(getRecord, { recordId: '$recordId', fields: FIELDS })
    contact;

    get name() {
        return this.contact.data.fields.Name.value;
    }
}

I want to fetch a record the same, but i receive a list of fields from the design component, for example "Phone,Industry", so i don't have it defined like in this example.

The problem is i am formatting the fields in connectedCallback()

import { LightningElement, track, api } from 'lwc';

export default class RecordProgressBar extends LightningElement {
    @track progress = 0;
    @api fields;

    fieldsFormatted = [];
    connectedCallback() { // initialize component
        var i;
        var fieldsSplit = this.fields.split(';');

        console.log(this.fieldsFormatted);
        for(i = 0; i < fieldsSplit.length; i++) {
            console.log('a' + fieldsSplit[i] + 'a');
            console.log(fieldsSplit[i].length);
            if(fieldsSplit[i].length > 0 ) {
               this.fieldsFormatted.push('Account.' + this.fieldsSplit[i]);
            }
        }
        console.log(this.fieldsFormatted);
    }
}

So how can i use @wire with fieldsFormatted, if this var is field only after init?

  • Dana, do you want the returned data to be in a similar format to JSON value of SObject, like { "Field1": "value1", "Field2":"value2"}? – rahul gawale Aug 18 '19 at 13:28
  • @rahulgawale This would be great, but actually i was hoping i can still use wire in some way or avoid using Apex. – Dana Griff Aug 18 '19 at 13:31
2

You'll want to add an explicit wire handler to avoid showing errors unnecessarily. Here's a redesigned version of your code that should get you at least mostly where you're trying to go:

import { track, api, wire, LightningComponent } from 'lwc';
import { getRecord } from 'lightning/uiRecordApi';

export default class MyComponent extends LightningComponent {
    @track progress = 0;
    @api fields;
    @api recordId;
    fieldsFormatted = ['Id'];

    @wire(getRecord, { recordId: '$recordId', fields: '$fieldsFormatted' })
    wireContact({data, error}) {
        if(data) {
            this.record = data;
        }
    }

    connectedCallback() {
        this.fieldsFormatted = (this.fields || 'Id').split(';').map(field => 'Account.'+field);
    }
}
|improve this answer|||||
  • how can i show the values of "record" dynamically in the component itself? – Dana Griff Aug 19 '19 at 10:19
  • @DanaGriff Use getRecordUi to describe the field layout/labels/etc, then build an array of values with the label, data type, and value, and from there, a simple iteration should suffice. It's going to be more code than I can put in a comment, though, so you might need to ask a new question if you get stuck. – sfdcfox Aug 19 '19 at 12:14
  • Thank you very much! – Dana Griff Aug 19 '19 at 12:54

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.