Hi,
I'm building my first Power App. I've created two galleries which use Dataverse tables as the data source. The first gallery displays account records. The second gallery displays contact records related to the account selected in the accounts table using the Items property 'Gallery Accounts'.Selected.Contacts.
My contact gallery contains a text input field which displays the contact's email address 1 using the Default property ThisItem.'Email Address 1'.
The other fields in the contacts gallery are dropdowns which use the Items property to set the dropdown choices to those available in the data source for that field (for example, the Items property Choices(Contacts.'Preferred Method of Contact') limits my dropdown field to the choices available for the contact field Preferred Method of Contact). The data source fields are all option sets.
The gallery fields display the correct information and the user is able to populate or edit the text input for email and select an option from the dropdowns.
My contacts gallery has a button which on select, should update the contact records in the data source with the new values entered or selected by the user. I'm trying to use the patch function to update the contact record but I'm getting errors saying the argument type doesn't equal the expected type.
To update email address 1, I used:
Patch(Contacts,ThisItem, {'Email Address 1':ThisItem.'TextInput add or edit email'.Text}) but got the error "The type of this argument 'emailaddress1' does not match the expected type 'Text'. " I don't know how to format my text input field in the gallery so that its value is recognized as an email.
To update the option set fields, I used this format: Patch(Contacts,ThisItem, {'Do not allow Emails':ThisItem.'Dropdown email allow'.Selected}). I get the error "The type of this argument 'donotemail' does not match the expected type 'OptionSetValue'. I tried changing my function to: Patch(Contacts,ThisItem, {'Do not allow Emails':ThisItem.'Dropdown email allow'.Selected.Value}) but am getting the same error.
So basically I can't update the Contacts table with any of the user input. Help, please!
Sorry if this post is too long, but I thought more information was better than too little. Plus, this is my first post!
Hi 365-Assist,
Thank you for your help. I got the answer on how to set to do what I originally intended, but your answer gave me an option on a different way I could update a gallery in future.
Hi cwebb365,
That worked! Thank you!
Ahh, I see what you're trying to do. Just remove ThisItem from your patch before the textbox control. You don't need it, the context is the current item in the gallery when using it as the 2nd argument already so you just want to supply the control.text and it should be good.
Patch(Contacts,ThisItem, {'Email Address 1':'TextInput add or edit email'.Text})
Should get you what you need, assuming 'TextInput add or edit email' is the name of the control in the gallert template item.
Its a bit hard to understand what you are trying to achieve. Can you supply some screen shots or a small video?
Hi 365-Assist,
Ok, so in your example BrowseGallery1.Selected is how the patch knows which contact in the gallery to update and the user needs to click the ">" in order to select that contact?
It makes sense that would work, especially if there is just one set of input fields.
Do you display or hide the input fields based on whether a contact is selected, and/or do you clear out the input fields once a contact is patched so that the user can input data for a different contact?
Hi cwebb365,
That makes sense, and in other screens in my app that is how I wrote the patch and it works great, but in those cases all the fields were already filtered for one specific account record. For the gallery patch I used ThisItem because I wanted to make sure the patch was applying the correct values to the correct record. Since each contact in the gallery will have an input1, input2, etc. I'm not sure how to write the patch to differentiate which contact is updated with which value.
I don't let the user directly update the field in the Collection but rather have a seperate Text Input field/form to do the update. So my patch looks like this:
Patch(Contacts,BrowseGallery1.Selected,{Email:Email_TextInput.Text})
I think using ThisItem is where you're running into issues. I don't do dataverse apps, but I'm sure it's the same as using SharePoint / SQL, you should find the actual control name to use from the page/form you have. So click that field you are editing the text at, usually something like textinput1 and use emailaddress1 : textinput1.text in the patch so it uses the value that's in the control to patch with. Same with other one, the dropdown should be the dropdowncontrolname.selected if the values are the same otherwise if you are patching to a text field with a dropdown you use selected.value
WarrenBelz
146,587
Most Valuable Professional
RandyHayes
76,287
Super User 2024 Season 1
Pstork1
65,928
Most Valuable Professional