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
Solution Supplier
Solution Supplier

"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
Solution Supplier
Solution Supplier

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
Solution Supplier
Solution Supplier

"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

secondImage

Demo Extravaganza is Back!

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

MBAS on Demand

Microsoft Business Applications Summit sessions

On-demand access to all the great content presented by the product teams and community members! #MSBizAppsSummit #CommunityRocks

Power Apps June 2021

June Power Apps Community Call

Don't miss the call this month on June 16th - 8a PDT

Users online (49,906)