cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
OndrejBriza
Advocate I
Advocate I

Canvas App value in not compatible with datasource

Hello 

Im have an issue with my varible that I have to use in Item property bud system says its not compatible with datasource. 
I have Gallery and 2 forms. I take data from gallery thru select edit them in first Form than take submitted data from first and want to use then in second with variable declared on succes in previous form it works except for the last step, last form where I try to put my variable into Item property and its not compatabile with datsource. Data source is same every where on gallery and both forms. Any idea would be  appreciated.

1 ACCEPTED SOLUTION

Accepted Solutions
poweractivate
Community Champion
Community Champion

@OndrejBriza 

 

You can get this result:

101921-clone-edit-edit2.gif

 

Here in above, 

 

1. A precursor to a clone is created (without editing anything) - the clone is not created yet here.

2. On the second screen, changes can already be made. After using button, the clone is made with any changes from here.

3. On the third screen, the same clone from #2 is edited with further changes.

4. If you want to edit again and again in more chains than this, repeat a similar approach like in #3.

 

You can try it like this:

 

1. Screen1

 

Form1_2 DefaultMode as FormMode.View

Form1_2 DataSource as List01 (your real data source)

Form1_2 Item as Gallery1.Selected

 

Also presuming a Gallery on this page, Gallery1:

Gallery1 should have Items as List01 (your real data source)

Gallery1 DisplayMode as Edit

 

Then:

 

OnVisible Screen1 as this:

 

 

Set(glbNewCopy,Defaults(List01));

 

 

 

OnSuccess of Form1_2 as this:

 

 

Set(glbNewCopy, Patch(Self.LastSubmit, {ID: Blank()}));

 

 

 

 

Screen1 Button as this:

 

EditForm(Form1_2);SubmitForm(Form1_2);ViewForm(Form1_2);Navigate(Screen2)

 

 

 

 

Replace Form1_2 in above with Form that is on this first screen. Screen2 replace with name of next screen.

 

Reason of the above is to make it very clear - here, no changes should be made yet to the stuff for this first form part - because if any are made in this first form part before SubmitForm called here for first time, this will already change the existing record which is probably not desired. So to make it very explicit, the mode is set to View. Then on button press the code quickly set it to Edit (it is needed to do this or it won't work correctly) then to use the trick mentioned by @RandyHayes  for OnSuccess to begin to clone the record (yes that same trick he gave actually does work, by the way, but must be used in specific way - this also require to set the form Edit mode, that's why it is set to Edit mode quickly and back to View again after done) in order to make a clone of it. When done this way I do not get that error of the mismatch type.

 

But keep in mind the purpose of this was just to make a clone of the Record that a Power Apps Canvas App Form Control would understand - so that it would not keep editing the actual existing ID record - but to eventually create a new Record instead on the Data Source side and auto-assign it with new ID - yet somehow for this to happen even while form is in Edit mode (since New mode cannot take pre-populated values).  This part with the trick strips the ID out to prepare it to be creating new ID when submitted even in the Edit mode - however note that the new record has not been made just yet on the Data Source side, this is what the next step will be. We need the next step, which involves another Form in Edit mode (for clarity purposes and for this example) whose Item property is pointing to the Variable we just Set in the first step - this is so we could get a prepopulated form in Edit Mode, but now when we submit this second form, we will get the actual clone created. Also here in this step, we can already make changes even before the clone is created for very first time in Data Source side.

 

Now the next part, in Screen2 do like this:

 

Form1_1 DefaultMode as FormMode.Edit

Form1_1 DataSource as List01 (your real data source)

Form1_1 Item as glbNewCopy

 

Button Onselect (the button on Screen2) as 

 

 

SubmitForm(Form1_1);Navigate(Screen2_1)

 

 

 

 

Finally the record created clone in data source for first time, and it have some changes too that were desired from original record if they were put there in that second form - otherwise it will keep same values.

 

OK now to make even more changes to same record, let's suppose - do like this:

 

Screen2_1 (third screen)

 

Same for everything as the second screen above with copy of same form and same button, except for this Form put for Item property as follows:

 

 

Form1_1.LastSubmit

 

 

 

 

And for this Button should be:

 

SubmitForm(Form1_3);Navigate(Screen3)

 

 

 

 

 

 

And now add another screen 4th screen (Screen3)

 

In this screen just a Label and it says It's Finished.

 

That's it. It works and you can check it on the top of this posting the visuals, where it is shown working and how it is creating the record in the data source the first time, with changes, then taking another set of changes on same record again.

 

Obviously this all can be placed in one screen if you really wanted to and knew what to show and hide but it is separate just for the clarity in this case as example. If it is clearer for you like that too you can keep in separate screens as well.

 

Anyway check if the above help you now @OndrejBriza 

 

 

View solution in original post

20 REPLIES 20
poweractivate
Community Champion
Community Champion

Check if this similar topic below helps you or is similar to your issue:

Invalid Formula. Expected a value compatible with 'DataSource' 

BimaSahalatua
New Member

Hello,

I cant  use ogc inspector,  cant do inloggen

Why?

Outcome error is the same but I cant use solution in post you mention because my Item property field has to be filled with my variable with loaded data from Form.

@OndrejBriza On the form, what is the type of data (e.g. Text, Whole Number, Lookup, Date and Time, etc.) the underlying data source's column (or equivalent) for that field is expecting? After determining this, check what kind of data is in the Variable and being set for the field. If the types do not match, that is causing this error, and you will need to make the types match. What you need to do depends on the data type. For example to convert a date/time or a number to a Text, you can use the Text function of Power Apps - in your case, you might have to do something else though, depending on the kind of mismatch it is.

Thats is kind a funny because on my first Form Im using OnSuccess this formula Set(glbNewCopy; Patch(Self.LastSubmit; {ID: Blank()})) to copy the record from submit and I was told that if I blank the ID the system will create new copy on the next submit in second edit Form from the exact data I last submitted but from what you told me it looks like the missmatch is in the blank ID no ? 

@OndrejBriza 

 

I think so.

 

I didn't try this, so tell me if something kind of like the following works instead:

 

 

 Set(glbNewCopy; Patch(Defaults( YourDataSourceNameHere ); Self.LastSubmit))

 

 

Well the error is gone thats good but it seems the blank ID to create the new record did not. Gallery (took data done) -> Edit Form1(edit data done) -> Edit Form2(Took the data to prepopulate) but after submit instead of new copy did same thing as regular edit form. Im so lost in this it should be simple task as is implemented in onpremis CRMs and its that complicated :((( but thanks a lot if you dont have the idea how to fix the ID blank thing or how to create new record from edit Form I will accept ur solution and I will keep digging.

@OndrejBriza 

 

Interesting. Just curious, do you get an "Attachments, ID required" error?

 

I do when I try this. Do you also get this kind of error if trying something similar to below?

 

poweractivate_0-1634633167398.png

(note: for you, use semicolon where I use comma - double semicolon where I use semicolon)

 

Or did you get a different kind of error when you tried something like above?

Nono if I use your formula without the ID blank its works fine but the the Forms do just double edit not one edit and  second save new record. Blanking ID was supposed to do that by advice from my post Solved: Re: Canvas App - pre populate new form - Page 2 - Power Platform Community (microsoft.com) 
But if I add he ID blank its a miss match and value is not compatible.

Helpful resources

Announcements
2022 Release Wave 1 760x460.png

2022 Release Wave 1 Plan

Power Platform release plan for the 2022 release wave 1 describes all new features releasing from April 2022 through September 2022.

User Group Leader Meeting January 768x460.png

Calling all User Group Leaders!

Don't miss the User Group Leader meetings on January, 24th & 25th, 2022.

Community Connections 768x460.jpg

Community & How To Videos

Check out the new Power Platform Community Connections gallery!

Top Solution Authors
Top Kudoed Authors
Users online (2,262)