I am trying to ForAll(Patch()) some data that includes data from a dropdown. Patching data from a text field is easy: 'Datasource column name':'Collection column name' as in StreetAddress: StreetAddress. This is not working for values gathered from dropdowns. When I try this, I get the following fail warning:
"...does not match the expected type 'Record'. Found type 'Text'.
I have a similar problem with a value gathered from a binary dropdown, except this time it is a Control data type:
The Question
How do I save Boolean, dropdown and multi-select data to a collection using a ForAll(Patch()) structure?
Thank you for you assistance with this issue. It is greatly appreciated.
(@Pstork1 , having helped me with something similar earlier, I thought you might be able to cast some illumination on this subject)
Solved! Go to Solution.
Firstly, I would avoid naming controls with the same name of column names in the data, this will avoid confusion and naming conflicts.
Also, I am not sure what you are doing with that original collect statement you have, but I would get rid of that with great speed. That is a harbor of problems to come.
That said, for the two columns - CovidKnowledge and DoorAnswer - you will need to format those with a valid record for a Choice column.
So, for your DoorAnswer, you need to set it as such:
DoorAnswer: {Value: DoorAnswer.Selected.Value, '@odata.type': "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference"}
For the CovidKnowledge, it would be the same thing, but I am not sure what that is based on exactly. You said "Record" in your response, but also "Dropdown". So that is a little confusing.
But, if it is a DropDown, then the same applies for that one:
CovidKnowledge: {Value: CovidKnowledge.Selected.Value, '@odata.type': "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference"}
No worries and welcome to the PowerApps world - there's a lot of butter for the bread (or I should say a lot of "bread" to be made from the butter)!
So I am not sure what you are doing with the
Collect(colCollection, "LocalFileName")
What you will get from this is a table called colCollection that has a single column called Value with one row with the Value "LocalFileName".
I am not sure if you are being generic or if there is an actual problem you are trying to solve with that. If it has to do with LocalFiles - give that concept up now, PowerApps cannot access local files.
BUT...
Some Tips:
I usually avoid collections for the concept of pulling in records and then writing them back - it's redundant.
They have their purpose for sure, but get overused.
If you create a collection from a datasource, the collection will have the schema of that datasource. You never have to explicitly define them, PowerApps infers them automatically.
Always refer to things you already have. For example, if you have calculated a value in a property, let's say a Visible property, to determine if something should be visible or not, don't duplicate (copy/paste) the formula to another control that you want to have the same visibility for. Instead, have the visible of the other controls refer to the visible property of the control where you have the formula. Similarly, if you have some complex calculations or formulas for other values you need, put them in a Label and then refer to that value when you need it - skip the variables all the time they will just become a pain to deal with.
Dropdowns, Comboboxes, Galleries, Listboxes, etc, etc. are all lists - they always need Tables for their items. And you will see a plural Items property where you set them - and they must be tables. Tables ALWAYS have records. So, if you refer to a properties that are singular such as Selected, it will always be a record. If you refer to properties that are plural such as SelectedItems, it will be a table of records.
I could rattle off a million other tips, but those seem relative to what you are working on, so I will put them at that.
I am continuing to put together videos to address some of these specific aspects and tips. It takes a while to do them, so as time permits! Feel free to check them out. They might give you some good insight for things you are doing or going to do.
@RandyHayes, I apologize for ghosting on you like that, especially as you are taking time from your day to help; I got called away from that task unexpectedly.
Regarding this part:
Collect(colCollection, "LocalFileName")
I was trying to do this:
SaveData(colCollection, "LocalFileName")
as part of making the app offline capable.
As to the other issues, most of it turned out to be a schema issue that was reset once I (finally) tracked down and deleted the last Collect.
I appreciate your direct help with my specific problem, in addition to your advice and wise words; thank you, and, see you around.
Some remaining questions:
1) What is CovidKnowledge defined as in your datasource?
2) What is CovidKnowledge defined as in your App?
3) What is DoorAnswer defined as in your datasource?
4) I know DoorAnswer is a control in your App, but what kind? And what is the Items property for it (assuming a dropdown or other list-based control)?
CovidKnowledge - List: Choice App: Record , Dropdown
DoorAnswer - List: Choice App: Control , Dropdown Items: ["Yes","No"]
@RandyHayes , below this is possibly extraneous information, but included just in case.
-------------------------------------------------------------------------------------------------------------------------
Dunno if you need it or if it is helpful, but here is an overview:
(This is the one and only time I am doing this, but I am using a form that crosses over 25 pages)
- Text turns into Control data type
- Date turns into Text data type
- Dropdowns, which are record data type, won’t take the value that was gathered from the drop-down because it is saved as a text data type.
Of course, when I try to put the wrong data type into a SharePoint list, it won’t compile.
I honestly forget why I thought I had to do this, but on Page1 I initialize all the column headers for the collection; these are exactly the same as the SP List:
ollect(
colCovidTeamSavedItems,
{
StartTime: varStartTime, SurveyCompletionTime: "", SubmittedBy: User().Email, SubmissionDateTime: "", StreetAddress: Proper(DataCardValue48.Text), StreetAddress2:DataCardValue49.Text, City:Proper(DataCardValue50.Text), SState:Proper(DataCardValue2.Text), Zip:DataCardValue3.Text, DoorAnswer: {Value: DataCardValue51.Selected.Value}, LanguageIssue:"", WillingToSpeak:"", CovidKnowledge:"", CurrentlyPositive:"", CurrentCOVIDIsolateSafely:"", PreviousCOVIDTestPositive:"", PreviousCOVIDIsolateSafely:"", TwoWeekCOVIDExposure:"", NumExposed:"", QuarantineSafely:"", CurrentConcernsOther:"", IfSickCanIsolate:"", PreExistingCondition:"", HasPCP:"", NumPeoplePreExistingCondition:"", NumAdults:"", NumChildren:"", HelpGrowKnowledge:"", CovidKnowledgeAfterVisit:"", HelpGrowKnowledgeOfResources:"", WillUseResourcesDescribed:"", MinutesSpent:"", CCFoodSecurity: false, CCPayingRent: false, CCHealthConcerns: false, CCMeds: false, CCTransportation: false, CCNoConcerns: false, LSSpanish: false, LSCreole: false, LSMaam: false, LSOtherMayan: false, LSOtherLanguage: false, LSEnglish: false, RaceAfricanAmerican: false, RaceWhite: false, RaceNativeAmerican: false, RaceAsian: false, RaceNativeHawaiian: false, RaceOtherPacificIslander: false, RaceDecline: false, EthnicityHispanic: false, EthnicityNotHiospanic: false, EthnicityDecline: false, MatsMasks: false, MatsGloves: false, MatsEdMats: false, MatsFarmPackage: false, MatsNone: false, HPIntroductions: false, HPCOVID19Symptoms: false, HPCOVID19Transmission: false, HPCOVID19InImmokalee: false, HPPrevention: false, HPTesting: false, HPInHouseTestsPositive: false, HPResources: false
}
);
Firstly, I would avoid naming controls with the same name of column names in the data, this will avoid confusion and naming conflicts.
Also, I am not sure what you are doing with that original collect statement you have, but I would get rid of that with great speed. That is a harbor of problems to come.
That said, for the two columns - CovidKnowledge and DoorAnswer - you will need to format those with a valid record for a Choice column.
So, for your DoorAnswer, you need to set it as such:
DoorAnswer: {Value: DoorAnswer.Selected.Value, '@odata.type': "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference"}
For the CovidKnowledge, it would be the same thing, but I am not sure what that is based on exactly. You said "Record" in your response, but also "Dropdown". So that is a little confusing.
But, if it is a DropDown, then the same applies for that one:
CovidKnowledge: {Value: CovidKnowledge.Selected.Value, '@odata.type': "#Microsoft.Azure.Connectors.SharePoint.SPListExpandedReference"}
Well, would you mind clearing somethings up for me, then, please?
I thought that naming the columns in the collection the same as in the file would make it easier to append one to the other with:
Collect(colCollection, "LocalFileName")
As you might have guessed, that did not work; please advise.
DoorAnswer was gathered by a dropdown, and PowerApps says it is a Record; I think that all of my dropdowns are Records.
I am unsure to which Collect call you are referring. As I am very early in my experience with Power Apps, and as it will be my bread and butter for the foreseeable future, I really want to develop the habits that will keep me from visiting, or creating, any harbors full of problems, so I appreciate the advice, for sure.
No worries and welcome to the PowerApps world - there's a lot of butter for the bread (or I should say a lot of "bread" to be made from the butter)!
So I am not sure what you are doing with the
Collect(colCollection, "LocalFileName")
What you will get from this is a table called colCollection that has a single column called Value with one row with the Value "LocalFileName".
I am not sure if you are being generic or if there is an actual problem you are trying to solve with that. If it has to do with LocalFiles - give that concept up now, PowerApps cannot access local files.
BUT...
Some Tips:
I usually avoid collections for the concept of pulling in records and then writing them back - it's redundant.
They have their purpose for sure, but get overused.
If you create a collection from a datasource, the collection will have the schema of that datasource. You never have to explicitly define them, PowerApps infers them automatically.
Always refer to things you already have. For example, if you have calculated a value in a property, let's say a Visible property, to determine if something should be visible or not, don't duplicate (copy/paste) the formula to another control that you want to have the same visibility for. Instead, have the visible of the other controls refer to the visible property of the control where you have the formula. Similarly, if you have some complex calculations or formulas for other values you need, put them in a Label and then refer to that value when you need it - skip the variables all the time they will just become a pain to deal with.
Dropdowns, Comboboxes, Galleries, Listboxes, etc, etc. are all lists - they always need Tables for their items. And you will see a plural Items property where you set them - and they must be tables. Tables ALWAYS have records. So, if you refer to a properties that are singular such as Selected, it will always be a record. If you refer to properties that are plural such as SelectedItems, it will be a table of records.
I could rattle off a million other tips, but those seem relative to what you are working on, so I will put them at that.
I am continuing to put together videos to address some of these specific aspects and tips. It takes a while to do them, so as time permits! Feel free to check them out. They might give you some good insight for things you are doing or going to do.
@RandyHayes ,
I did not have the kind of luck with the above code as we would have liked:
We are probably really close, though, right? I know I awarded you the Solution already (twice); would you mind helping me through this last little bit to success, please?
Thank you for all your help, past, present and (hopefully) future.
No problem - always glad to help.
So, from the image, it appears that it is not seeing the DoorAnswer properly. You said that DoorAnswer is a dropdown (or combobox) in your app. Please verify. Also, consider renaming it as this is going to be confusing that the control and the data column are the same name.
@RandyHayes, I apologize for ghosting on you like that, especially as you are taking time from your day to help; I got called away from that task unexpectedly.
Regarding this part:
Collect(colCollection, "LocalFileName")
I was trying to do this:
SaveData(colCollection, "LocalFileName")
as part of making the app offline capable.
As to the other issues, most of it turned out to be a schema issue that was reset once I (finally) tracked down and deleted the last Collect.
I appreciate your direct help with my specific problem, in addition to your advice and wise words; thank you, and, see you around.
User | Count |
---|---|
228 | |
103 | |
98 | |
57 | |
31 |
User | Count |
---|---|
283 | |
113 | |
107 | |
63 | |
63 |