cancel
Showing results for 
Search instead for 
Did you mean: 
Reply

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

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

 

 

1 ACCEPTED SOLUTION

Accepted Solutions

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

View solution in original post

9 REPLIES 9
cwebb365
Most Valuable Professional
Most Valuable Professional

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.

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.

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

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.

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. 

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.

Anonymous
Not applicable

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

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. {}.

man, you saved my life...

Helpful resources

Announcements

Community will be READ ONLY July 16th, 5p PDT -July 22nd

Dear Community Members,   We'd like to let you know of an upcoming change to the community platform: starting July 16th, the platform will transition to a READ ONLY mode until July 22nd.   During this period, members will not be able to Kudo, Comment, or Reply to any posts.   On July 22nd, please be on the lookout for a message sent to the email address registered on your community profile. This email is crucial as it will contain your unique code and link to register for the new platform encompassing all of the communities.   What to Expect in the New Community: A more unified experience where all products, including Power Apps, Power Automate, Copilot Studio, and Power Pages, will be accessible from one community.Community Blogs that you can syndicate and link to for automatic updates. We appreciate your understanding and cooperation during this transition. Stay tuned for the exciting new features and a seamless community experience ahead!

Summer of Solutions | Week 4 Results | Winners will be posted on July 24th

We are excited to announce the Summer of Solutions Challenge!   This challenge is kicking off on Monday, June 17th and will run for (4) weeks.  The challenge is open to all Power Platform (Power Apps, Power Automate, Copilot Studio & Power Pages) community members. We invite you to participate in a quest to provide solutions in the Forums to as many questions as you can. Answers can be provided in all the communities.    Entry Period: This Challenge will consist of four weekly Entry Periods as follows (each an “Entry Period”)   - 12:00 a.m. PT on June 17, 2024 – 11:59 p.m. PT on June 23, 2024 - 12:00 a.m. PT on June 24, 2024 – 11:59 p.m. PT on June 30, 2024 - 12:00 a.m. PT on July 1, 2024 – 11:59 p.m. PT on July 7, 2024 - 12:00 a.m. PT on July 8, 2024 – 11:59 p.m. PT on July 14, 2024   Entries will be eligible for the Entry Period in which they are received and will not carryover to subsequent weekly entry periods.  You must enter into each weekly Entry Period separately.   How to Enter: We invite you to participate in a quest to provide "Accepted Solutions" to as many questions as you can. Answers can be provided in all the communities. Users must provide a solution which can be an “Accepted Solution” in the Forums in all of the communities and there are no limits to the number of “Accepted Solutions” that a member can provide for entries in this challenge, but each entry must be substantially unique and different.    Winner Selection and Prizes: At the end of each week, we will list the top ten (10) Community users which will consist of: 5 Community Members & 5 Super Users and they will advance to the final drawing. We will post each week in the News & Announcements the top 10 Solution providers.  At the end of the challenge, we will add all of the top 10 weekly names and enter them into a random drawing.  Then we will randomly select ten (10) winners (5 Community Members & 5 Super Users) from among all eligible entrants received across all weekly Entry Periods to receive the prize listed below. If a winner declines, we will draw again at random for the next winner.  A user will only be able to win once overall. If they are drawn multiple times, another user will be drawn at random.  Individuals will be contacted before the announcement with the opportunity to claim or deny the prize.  Once all of the winners have been notified, we will post in the News & Announcements of each community with the list of winners.   Each winner will receive one (1) Pass to the Power Platform Conference in Las Vegas, Sep. 18-20, 2024 ($1800 value). NOTE: Prize is for conference attendance only and any other costs such as airfare, lodging, transportation, and food are the sole responsibility of the winner. Tickets are not transferable to any other party or to next year’s event.   ** PLEASE SEE THE ATTACHED RULES for this CHALLENGE**   Week 1 Results: Congratulations to the Week 1 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Community MembersNumber of SolutionsSuper UsersNumber of Solutions @anandm08  23 @WarrenBelz  31 @DBO_DV  10 @Amik  19 AmínAA 6 @mmbr1606  12 @rzuber  4 @happyume  7 @Giraldoj  3@ANB 6 (tie)   @SpongYe  6 (tie)     Week 2 Results: Congratulations to the Week 2 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Community MembersSolutionsSuper UsersSolutions @anandm08  10@WarrenBelz 25 @DBO_DV  6@mmbr1606 14 @AmínAA 4 @Amik  12 @royg  3 @ANB  10 @AllanDeCastro  2 @SunilPashikanti  5 @Michaelfp  2 @FLMike  5 @eduardo_izzo  2   Meekou 2   @rzuber  2   @Velegandla  2     @PowerPlatform-P  2   @Micaiah  2     Week 3 Results: Congratulations to the Week 3 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge.   Week 3:Community MembersSolutionsSuper UsersSolutionsPower Apps anandm0861WarrenBelz86DBO_DV25Amik66Michaelfp13mmbr160647Giraldoj13FLMike31AmínAA13SpongYe27     Week 4 Results: Congratulations to the Week 4 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge.   Week 4:Community MembersSolutionsSuper UsersSolutionsPower Apps DBO-DV21WarranBelz26Giraldoj7mmbr160618Muzammmil_0695067Amik14samfawzi_acml6FLMike12tzuber6ANB8   SunilPashikanti8

Check Out | 2024 Release Wave 2 Plans for Microsoft Dynamics 365 and Microsoft Power Platform

On July 16, 2024, we published the 2024 release wave 2 plans for Microsoft Dynamics 365 and Microsoft Power Platform. These plans are a compilation of the new capabilities planned to be released between October 2024 to March 2025. This release introduces a wealth of new features designed to enhance customer understanding and improve overall user experience, showcasing our dedication to driving digital transformation for our customers and partners.    The upcoming wave is centered around utilizing advanced AI and Microsoft Copilot technologies to enhance user productivity and streamline operations across diverse business applications. These enhancements include intelligent automation, AI-powered insights, and immersive user experiences that are designed to break down barriers between data, insights, and individuals. Watch a summary of the release highlights.    Discover the latest features that empower organizations to operate more efficiently and adaptively. From AI-driven sales insights and customer service enhancements to predictive analytics in supply chain management and autonomous financial processes, the new capabilities enable businesses to proactively address challenges and capitalize on opportunities.    

Updates to Transitions in the Power Platform Communities

We're embarking on a journey to enhance your experience by transitioning to a new community platform. Our team has been diligently working to create a fresh community site, leveraging the very Dynamics 365 and Power Platform tools our community advocates for.  We started this journey with transitioning Copilot Studio forums and blogs in June. The move marks the beginning of a new chapter, and we're eager for you to be a part of it. The rest of the Power Platform product sites will be moving over this summer.   Stay tuned for more updates as we get closer to the launch. We can't wait to welcome you to our new community space, designed with you in mind. Let's connect, learn, and grow together.   Here's to new beginnings and endless possibilities!   If you have any questions, observations or concerns throughout this process please go to https://aka.ms/PPCommSupport.   To stay up to date on the latest details of this migration and other important Community updates subscribe to our News and Announcements forums: Copilot Studio, Power Apps, Power Automate, Power Pages

Users online (847)