Skip to main content

Notifications

Community site session details

Community site session details

Session Id : nYaKUFLeI/aFqLZtAxQkZ9
Power Apps - Building Power Apps
Answered

Help - using Patch inside both Set() and UpdateContext() functions to update column values inside the Record

Like (0) ShareShare
ReportReport
Posted on 17 May 2020 19:50:29 by 142

I am encountering a new blocking problem that I can’t seem to get over.  I have searched the Community Site and any other sources I can find and can’t seem to find a clear reference to this situation anywhere.  There are lots of special cases but nothing that addresses this basic behavior.

 

I am stumped trying to change column values in both Global and Context Variables that contain a single Record with multiple Columns inside it.  I have successfully used the Set(), UpdateContext() and Patch() functions in different scenarios individually but now when I try to combine the Patch within either the Set() or UpdateContext() functions as referenced in the documentation (Set() & UpdateContext())

 

SetSyntax.pngUpdateContextSyntax.png

I am loading the contents of the record selected from the gallery below into both one Global and one Context variable that are otherwise identical.  As illustrated below, when the record is selected, the values are loaded properly and displayed into the regular display labels on the right.

 

When I put new data into the data inputs on the lower right, and hit each of the buttons (Update Global and Update Context), I would expect that the values in the labels in the upper right to change accordingly based on the code below but that isn’t happening.  I am receiving no error messages or conditions and it just seems to be ignoring the button pushes.

 

Here is code on the button I am using to select the record from the gallery (the black and red below). It seems to be working as it is supposed to.

icoSelectOrder from galOrders

Set(
 selectedOrderHeader,
 galOrders.Selected
);
UpdateContext({selectedOrderHeaderContext: galOrders.Selected})

 

Here is the screen after I select a record from the gallery but before I enter the new value I want to use to update the column values.

AfterSelectScreen.png

 

Here is the code that executes on each of the Update buttons.

OnSelect on btnUpdateGlobal 
Set(
 selectedOrderHeader,
 Patch(
 selectedOrderHeader,
 {
 'SoldTo Name': txtSoldtoName.Text,
 'ShipTo Name': txtShipToName.Text,
 'ShipTo Number': txtShipToNumber.Text,
 'SoldTo Number': txtSoldToNumber.Text
 }
 )
)

onSelectGlobalCodeSnip.png

OnSelect on btnUpdateContext
UpdateContext(
 {selectedOrderHeaderContext:
 Patch(selectedOrderHeaderContext
 ,
 {
 'SoldTo Name': txtSoldtoName.Text,
 'ShipTo Name': txtShipToName.Text,
 'ShipTo Number': txtShipToNumber.Text,
 'SoldTo Number': txtSoldToNumber.Text
 }
 )
 }
)

OnSelectContextCodeSnip.png

Here is the unexpected behavior (or lack thereof) when I hit either button.

 

When I hit either the UpdateGlobal or UpdateContext, I do not get the expected behavior where the column values in each of these Record variables is set to the new values I have entered in the txt input fields. 

 

Clearly something is wrong but I can’t figure it out as the commands are both passing the syntax checker and I have checked it against any the syntax examples (above) I can find in the online documentation for both the Set() and UpdateContext() functions along with Patch().

 

afterUpdatePressScreen.png

For reference, here is the CDS entity Sales Order Header that I am using to populate the galOrders.  This whole thing cropped up as I have been collecting new values that I will then use to patch the selected record but I haven’t gotten to that step yet.  I have successfully patched records in other CDS entities so I think I have a handle on that step.  We will see after I solve this one.

CDSSalesOrderHeaderEntity.png

 

 

Can anyone provide any insight on what I am doing wrong to cause this blocking problems (or if there is some underlying problem lurking in the tool)?

 

Thanks,

Mark

 

 

  • MM Profile Picture
    39 on 14 Sep 2023 at 15:35:19
    Re: Help - using Patch inside both Set() and UpdateContext() functions to update column values inside the Record

    man, you saved my life...

  • darry3ni Profile Picture
    16 on 25 Oct 2022 at 15:50:41
    Re: Help - using Patch inside both Set() and UpdateContext() functions to update column values inside the Record

    I encountered this same issue and was able to rectify it by wrapping the Patch in an IfError function, with the fallback being an empty record, i.e. {}.

  • Community Power Platform Member Profile Picture
    on 06 Jun 2022 at 08:38:51
    Re: Help - using Patch inside both Set() and UpdateContext() functions to update column values inside the Record

    Two years later, same problem. Patch eventually seems to change the nature of the record which gives "incompatible with the types of values in other places in your app" error, even if it works for awhile initially

  • MS-22072102-0 Profile Picture
    142 on 19 May 2020 at 16:39:35
    Re: Help - using Patch inside both Set() and UpdateContext() functions to update column values inside the Record

    Fair warning.  While this solution worked in my simple, sample example, when I tried to apply it in real-life to a larger, more complicated application it has failed spectacularly.  It failed at the point when I try to call the Set() function a second time a few steps later to update two additional columns in the same Record variable.  When I call the function the first time with two column value updates, it works perfectly.  When I call the function a second time with one column value update, it works perfectly.  When I try to call the function a second time with two column variable updates, it never gets to the syntax parser without blowing up every other location that uses, calls or manipulates the Record variable.  

     

    I have wasted hours on this trying different variations but it is completely repeatable both with Set() and with UpdateContext().  I am going with a different approach until I figure out whether I am doing something wrong or there is a problem with the tools.

     

    My examples include some sensitive client data that I don't want to post out on the Community but I am happy to review it with anyone interested over a Teams session.

     

    Thanks, @Greg Lindhorst for taking a look at this for me.

  • MS-22072102-0 Profile Picture
    142 on 18 May 2020 at 05:57:39
    Re: Help - using Patch inside both Set() and UpdateContext() functions to update column values inside the Record

    No worries. Thanks for your help. This one was gnarly. Even though this Solution worked well in the trial I set up, I am still struggling with what appears to be inconsistent behavior in the actual application I am building that is much more complicated. 

    I will Post again if I learn any more on this topic. 

  • cwebb365 Profile Picture
    3,294 Most Valuable Professional on 18 May 2020 at 02:04:11
    Re: Help - using Patch inside both Set() and UpdateContext() functions to update column values inside the Record
    Thanks for following up. My response was more trying to learn why you would do that than a statement in general. Was on phone and didn’t state correctly ;). I didn’t know you could patch a variable like that.
  • Verified answer
    MS-22072102-0 Profile Picture
    142 on 18 May 2020 at 02:01:11
    Re: Help - using Patch inside both Set() and UpdateContext() functions to update column values inside the Record

    Fair Warning - While this solution worked in my simple example, I am having issues using it in real life.  See my follow-up post

     

    so we have a solution thanks to @yshariff and gocollectiv.com.

    It turns out that this is something of a hole in the PowerApps parser and a lack of documentation as to the proper way to use the Patch command when referring to Variables (both Global and Context) that are instantiated from a CDS Entity template. At a minimum the documentation should be updated.

     

    The answer is that, rather than use the user-friendly column names like 'SoldTo Name' or 'ShipTo Number', in the body of a Patch() function, you have to reference the column directly using, as an example, the more obtuse but totally qualified and unique 'cr66a_soldtoname' or 'cr66ashiptonumber' from the base CDS entity.  Apparently the variable either "set" or "updatecontext"ed inherits the exact structure of the "parent" entity including all names.   One other note, I accidentally had a type mismatch in my command (number column was being fed a text) which was not caught by the syntax checker until I changed the column names to the correct ones.  Then it wouldn't let me through the syntax checker until I fixed that.

    So the proper code for the Update Global and Context buttons is:

     

     

    OnSelect for Update Global Button
    Set(
     selectedOrderHeader,
     Patch(
     selectedOrderHeader,
     {
     cr66a_shiptoname: txtShipToName.Text,
     cr66a_soldtoname: txtSoldtoName.Text,
     cr66a_soldtonumber: Value(txtSoldToNumber.Text),
     cr66a_shiptonumber: Value(txtShipToNumber.Text)
     }
     )
    )
    
    OnSelect for Update Context button
    UpdateContext(
     {
     selectedOrderHeaderContext: Patch(
     selectedOrderHeaderContext,
     {
     cr66a_shiptoname: txtShipToName.Text,
     cr66a_soldtoname: txtSoldtoName.Text,
     cr66a_soldtonumber: Value(txtSoldToNumber.Text),
     cr66a_shiptonumber: Value(txtShipToNumber.Text)
     }
     )
     }
    )
     

     

     

    We troubleshot this by using the View>Variable and drilling down on the record until we got to this level:

    File-Variable-recordvalues-master.pngFile-Variable-recordvalues-master.png

    This worked but it was clunky and the column widths can't be adjusted on these column names which is a challenge for all but the shortest column names.  But now that I know, I can always go back to the CDS Entity and get the right answer from the first column of data after the ellipsis.  CDSSalesOrderHeaderEntity.png

     

    Anyway a little updated documentation would have save a few hours but now that I know, life is grand.

     

    Thanks again, @yshariff

  • MS-22072102-0 Profile Picture
    142 on 17 May 2020 at 23:59:05
    Re: Help - using Patch inside both Set() and UpdateContext() functions to update column values inside the Record

    I have purposely included the place in the documentation where it says you can do exactly what I am trying to do.  If it doesn't actually work that way then Microsoft should update the documentation.  I have a specific reason for wanting to change the value of a column in an in-memory record variable (either Global or Context).  I am sure I can find another way to do what I need to do  but I shouldn't have to if the documentation is correct.

    I have considered putting the record into a collection and then doing the Patch on that using a Lookup function of some kind but that seems like "going around the block to get next door" if I don't have to.

  • cwebb365 Profile Picture
    3,294 Most Valuable Professional on 17 May 2020 at 20:18:56
    Re: Help - using Patch inside both Set() and UpdateContext() functions to update column values inside the Record
    I mean you can’t set a variable to a patch statement. If it lets you then only thing I could see return might be a status of the function of a table of returned data of the function. What you should probabaly have is the data you need added to the variable then after the set a ;patch() so it runs just after? Guess I’m missing the point of the patch in the set etc.

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Understanding Microsoft Agents - Introductory Session

Confused about how agents work across the Microsoft ecosystem? Register today!

Warren Belz – Community Spotlight

We are honored to recognize Warren Belz as our May 2025 Community…

Congratulations to the April Top 10 Community Stars!

Thanks for all your good work in the Community!

Leaderboard > Power Apps - Building Power Apps

#1
MS.Ragavendar Profile Picture

MS.Ragavendar 32

#2
Michael E. Gernaey Profile Picture

Michael E. Gernaey 19 Super User 2025 Season 1

#3
Rajkumar_M Profile Picture

Rajkumar_M 16 Super User 2025 Season 1

Overall leaderboard