I have a customized a list form in power Apps to preview the attachments.
The form is customized
with the help of the below link :-
And a collection is being created on the 'On Visible' property of the Screens to collect the Attachments from the attachmentbox
eg :- ClearCollect(colAttachments, attachmentBox_2.Attachments)
and finally a Gallery is loaded with the above collection (in the edit and view Screens) to show the Image.
The problem I am facing is the when I try to View or edit the Item the first time I donot see the Image Preview Bascically my collection is empty.
Any thought or ideas here!!
Can you explain why you have a gallery for each slide of your app ?
If your collection is empty that's maybe because when you create for the first time, nothing (in your galleries) is selected, so the application don't know where the data is.
Maybe I didn't understand the problem ?
Hi LouisC ,
I have a list with items each one having one or more attachments. So when the item is Viewed / edited the custom Power app should get the Attachments from the attachment box put them in a collection which is connected to the Gallery . (as per the written logic)
But the collection is empty (attachment has values) when i refresh the list and click to view the item and from there when i click on edit All the gallery shows the correct attachemnt previews .
Similarly when i refresh the list and click to edit the item the first time collection is empty so no preview in the Gallery.
Hope things are more understandable.
@jk13is it possible that you are dealing with the order of execution? Perhaps when the OnVisible happens, the attachmentBox_2 object has not loaded?
One thing to test on is to throw a button on the form and put your OnVisible statement in the OnSelect action and see if, when your form is displayed and then you click the button, if the collection actually gets values. If so, perhaps it is an order in which it is executed and data is "ready".
One potential fix (if this is a correct hypothosis) is to make use of a hidden toggle control.
Move your OnVisible logic to the OnCheck of the toggle and set the Default property to CountRows(attachmentBox_2.Attachments)>0
This way, the toggle logic will fire whenever the attachments list is greater than 0 and your statement will execute then. If it takes a few moment for that to become "valid" it is not a problem because your toggle is "watching" it all the time.
Just a suggestion (and probably not syntactically correct as I am not a a point to test this out at the moment). But this concept works, I use it often for this and many other "fire on demand" actions.
Clicking a button on the form loaded the collection with the correct values. But the toggle logic didn't work as expected. I am guessing it also has an order of execution .
WHen i toggle it off and then on i see the updated collection.
I didnt underatand "If it takes a few moment for that to become "valid" it is not a problem because your toggle is "watching" it all the time."
So the "concept" is quite simple once you dicover it. The idea is to use a Toggle Control as a "sub routine".
Consider this: You have a toggle control on the form. The Default property is set to a condition - in this case CountRows(attachmentBox_2.Attachments)>0. This says that anytime this condition is true, the toggle will be On (checked). Any time the condition is false, the toggle will be Off (unchecked).
BTW - you can set this to variables as well - like subResetCollection and then in your App when you change the value of that variable to true, your "routine" will execute.
In the OnCheck action of the Toggle you have the following formula:
In the OnUnCheck action of the Toggle you have the following formula:
So with this concept, whenever there are attachments in the attachments field, the toggle will fire (OnCheck) and create a collection from them. Whenever there are not, the toggle will fire (OnUncheck) and clear the collection.
This way , in the case that *perhaps* there is a order of execution from the OnVisible to the attachment field having valid results, it will not make a difference because, with that formula on the toggle, it is always "watching" for those conditions to be met. So, *if* the order of execution is the issue - Your OnVisible will have executed and then perhaps the attachments then become vaild after that - once they do, the toggle will fire.
I hope that is a little clearer. Actually using toggle like this is a great way to consolidate your formulas into "routines" that you don't have to maintain all over the place.
I have tried this method but each time the item is opened to view the toogle stays ON unless there are no attachments it is OFF . So here the toggle is not being reset (OFF to ON )each time an item is opened to view .
I looks like on each open of an item the OnView command from the Sharepoint Integration is not called.
OnView :- Set(Form,"ShowForm");ViewForm(ShowItemForm);Navigate(ShowScreen,ScreenTransition.None)
I have a toggle added on the Show Item form
Default :-If(Form = "ShowForm",false,true)
OnCheck :- ClearCollect(colAttachments, attachmentBox_Show.Attachments);Gallery1.Visible=true
Gallery Visible :-If(Form = "ShowForm",false,If(Toggle1.Value = true,true, If(Toggle1.Value = false,false)))
So when an item is opened for the first time
toggle off ,
Variable Form :- ShowForm
when toggle is ON the gallery is shown with the items
Variable Form is cleared
Now when this item is closed and another item is open
Toggle still stays on
Variable Form is Empty
and gallery shows the wrong collection.
Is it an expected behaviour!!
Did you put the Clear(colAttachments) in the OnUncheck action?
If you didn't then it will still have the previous collection values.
You need to make sure the collection gets cleared when the condition is false (unchecked)
Check that out.
@jk13 Let's review...
Sharepoint Integration OnView :- Set(Form,"ShowForm");ViewForm(ShowItemForm);Navigate(ShowScreen,ScreenTransition.None) all fine here. But, keep reading as you might not need some of this in the end. I have a toggle added on the Show Item form Default :-If(Form = "ShowForm",false,true) Might simplifiy to this: !(Form="ShowForm")
However - the suggestion before was to set your Toggle Default to: (CountRows(attachmentBox_2.Attachments)>0)
You're trying to create variables to update other variables to base conditions on...but the reality is, you want your toggle to "fire" when that item has attachments and that is it.
OnCheck :- ClearCollect(colAttachments, attachmentBox_Show.Attachments)
; Gallery1.Visible=trueThis is not going to work. You cannot set the properties of a control like that. Instead, remove this and on your Gallery1.Visible property, put the following formula:
(CountRows(colAttachments)>0) This will make the gallery visible whenever the collection has items in it. OnChange :-Set(Form,""); This should be changed to clear your collection - Clear(colAttachments) Gallery Visible :-If(Form = "ShowForm",false,If(Toggle1.Value = true,true, If(Toggle1.Value = false,false)))
Too much "logic" here that is just going to confuse you and is somewhat incorrect. The reality is, you want the Gallery to be visible if the collection has attachments - so, use the formula I suggested above for your Gallery.Visible.
Don't over complicate what you are trying to do. The simplicity of this is...
If an item in the current view (attachmentsBox_2.Attachments) has any items in it (CountRows((attachmentsBox_2.Attachments) >0) then load them into a collection.
If it doesn't, then clear the collection.
Then - If the collection has items (CountRows(colAttachments)>0) then display the gallery.
That is all there is to it.
Of course...in retrospect, we really don't even have to go down this whole road. You originally mentioned a collection for your attachments, but IF this gallery is the ONLY place you intend to use it, then you can simplify everything even more...
1- Forget the Toggle
2- Set Visible property of Gallery to: (CountRows(attachmentBox_2.Attachments)>0)
3 -Set Items property of Gallery to attachmentBox_2.Attachments
Give some of this a try in your App. It is hard for me to say definitively about everything as I do not know your app like you do.
Hope it helps.
Join us for an in-depth look at the new innovations across Dynamics 365 and the Microsoft Power Platform.
Voting Ends: October 30, 2019!
Continue your learning in our online communities.
Features releasing from October 2019 through March 2020
Coming to a city near you
Fill out a quick form to claim your user group badge now!
Connect, share, and learn with your peers year-round