cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
iwaldman
Helper I
Helper I

Bound property not populated when PCF standard control initialized

We are seeing a weird phenomenon in several customer environments where a standard control bound property is not populated during the init lifecycle event i.e. is null whenever we reach into the property bag to get the value.

 

Interestingly, if we wait a bit and try again, the value is populated in the property bag. 

 

 

<property ...... of-type="SingleLine.Text" usage="bound" required="true" />

// Comes in as null
console.log('MyProp is available: ', this._context.parameters.myprop.raw === null);

// However, if we wait a bit and try again
if (this._context.parameters.myprop.raw === null) {
  setTimeout(async () => {
    // No longer null 
    console.log('MyProp is available: ', this._context.parameters.myprop.raw === null);
  }, 3000);
}

 

 

Can anyone explain why we would see this behavior in some circumstances? 

 

Thanks in advance,

Irvin 

1 ACCEPTED SOLUTION

Accepted Solutions
cchannon
Continued Contributor
Continued Contributor

"updateView: This method will be called when any value in the property bag has changed. This includes field values, data-sets, global values such as container height and width, offline status, component metadata values such as label, visible, etc."

updateView - Power Apps | Microsoft Docs

View solution in original post

5 REPLIES 5
cchannon
Continued Contributor
Continued Contributor

The init event does not guarantee you'll have values in your bound input objects. I don't speak for MSFT of course, but I suspect that it is because the PCFs render while the form is still building, which is before Dataverse has even made the retrieve call for all field values.

 

To be sure you're getting your input values, you should ensure that everything that needs those values cascades from the updateView function instead. This function gets called multiple times during a form load and after; essentially every time it is even possible that the value has changed. This makes it an objectively a better spot to bind your renderings, even if the value were guaranteed to be there during init.

iwaldman
Helper I
Helper I

Thanks for the response.

 

What you describe is what I deduced in my testing. I've implemented a retry capability with exponential backoff and show a spinner until the value appears or exhaust retries. However, if I can assume that updateView will eventually get called when the value finally becomes available, then the retry is unnecessary. 

 

Is what you describe above documented along with best practices?

cchannon
Continued Contributor
Continued Contributor

"updateView: This method will be called when any value in the property bag has changed. This includes field values, data-sets, global values such as container height and width, offline status, component metadata values such as label, visible, etc."

updateView - Power Apps | Microsoft Docs

View solution in original post

DianaBirkelbach
Super User
Super User

Hi @iwaldman , 

As @cchannon  said, the update view will be called when the value is available or gets changed. 

updateView is called actually quite often. In case you would like to see all the cases, you can find this in my blog: https://dianabirkelbach.wordpress.com/2020/03/29/pcf-when-is-updateview-called/
Kind regards,

Diana

Hi @DianaBirkelbach

Thanks for sharing the blog post. I've scratched my head a few times wondering about this. Knowing what I know now, future controls will be constructed a bit differently. 🙂 

 

Thanks, Irivn 

Helpful resources

Announcements
PA User Group

Welcome to the User Group Public Preview

Check out new user group experience and if you are a leader please create your group

MBAS Attendee Badge

Claim Your Badge & Digital Swag!

Check out how to claim yours today!

secondImage

Are Your Ready?

Test your skills now with the Cloud Skill Challenge.

secondImage

Demo Extravaganza is Back!

We are excited to announce that Demo Extravaganza for 2021 has started!

Users online (47,097)