cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
jk13
Level: Powered On

Customize Forms

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 :- 

https://powerapps.microsoft.com/en-us/blog/separate-custom-forms/

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!!

 

Thanks&Regards

JAJ

 

9 REPLIES 9
Anonymous
Not applicable

Re: Customize Forms

Hi,

 

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 ?

 

Regards

 

Louis

jk13
Level: Powered On

Re: Customize Forms

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.

 

Regards

JAJ

Super User
Super User

Re: Customize Forms

@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.

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up. Solved your problem? - Click on Accept as Solution. Others seeking the same answers will be happy you did.
jk13
Level: Powered On

Re: Customize Forms

Hello RandyHayes,

 

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."

 

Regards JAJ

Super User
Super User

Re: Customize Forms

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:
  ClearCollect(colAttachments, attachmentBox_2.Attachments)
In the OnUnCheck action of the Toggle you have the following formula:
  Clear(colAttachments)

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.

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up. Solved your problem? - Click on Accept as Solution. Others seeking the same answers will be happy you did.
jk13
Level: Powered On

Re: Customize Forms

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.

 

Another senario,

Sharepoint Integration

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

OnChange :-Set(Form,"");

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 ,

gallery hidden 

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!!

 

 

 

Super User
Super User

Re: Customize Forms

@jk13 

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.

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up. Solved your problem? - Click on Accept as Solution. Others seeking the same answers will be happy you did.
jk13
Level: Powered On

Re: Customize Forms

@RandyHayes  Clear(colAttachments) is present in the OnUncheck action 

 

 

Super User
Super User

Re: Customize Forms

@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=true This 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...

First - 

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.

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up. Solved your problem? - Click on Accept as Solution. Others seeking the same answers will be happy you did.

Helpful resources

Announcements
thirdimage

Power Automate Community User Group Member Badge

Fill out a quick form to claim your user group badge now!

sixthImage

Power Platform World Tour

Find out where you can attend!

Power Platform 2019 release wave 2 plan

Power Platform 2019 release wave 2 plan

Features releasing from October 2019 through March 2020

fifthimage

Microsoft Learn

Learn how to build the business apps that you need.

Top Kudoed Authors
Users Online
Currently online: 351 members 5,971 guests
Please welcome our newest community members: