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

"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
Super User
Super User

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?

"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

Kind regards,
Diana
----------
Please click "Accept as Solution" if my post answered your question so that others may find it more quickly. If you found this post helpful consider giving it a "Thumbs Up."

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
UG GA Amplification 768x460.png

Launching new user group features

Learn how to create your own user groups today!

Community Connections 768x460.jpg

Community & How To Videos

Check out the new Power Platform Community Connections gallery!

M365 768x460.jpg

Microsoft 365 Collaboration Conference | December 7–9, 2021

Join us, in-person, December 7–9 in Las Vegas, for the largest gathering of the Microsoft community in the world.

Users online (1,745)