cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
David283
Helper II
Helper II

Writing all records from one gallery to another. And Filtering one gallery with records from another.

@RandyHayes

Or anyone else that is willing to assist 🙂

 

In my app, I am trying to setup a feature where users are selected from a first list and added to a second list to be able to view and order an item.  So to that end I have 2 galleries and 2 collections with some buttons that move records between them.

David283_0-1623082751902.png

 

The left gallery is 'GalVisibleChosen' and it displays the users that have been selected and will eventually be patched out to a SharePoint list that contains the ItemID and the UserName/Email that will be able to order this item.  For now it is connected to collection 'ColVisiblePerson'.

 

The second gallery is called 'GalLocations' and displays the collection 'ColLocations'.  ColLocations is populated directly from a SharePoint list that includes several text fields including UserNames and Emails.

 

Both Collections are created and populated when the edit screen becomes visible = 

 

 

OnVisible = 
ClearCollect(ColLocations, OALocation);
If(ItemEditForm1.Mode <> FormMode.View, ClearCollect(ColVisiblePerson, {DisplayName:"", Mail:""}));
Clear(ColVisiblePerson)

 

 

(I had to add that final clear, or my first option in the gallery was a blank username)

 

My Left and right facing arrows both work fine:

Left (this needs a check for duplicate feature, will add that later)=

 

 

Patch(ColVisiblePerson,Defaults(ColVisiblePerson),{DisplayName:GalLocations.Selected.Title,Mail:GalLocations.Selected.UserEmail})

 

 

And Right=

 

 

Remove(ColVisiblePerson, LookUp(ColVisiblePerson, DisplayName=GalVisibleChosen.Selected.DisplayName))

 

 

 And the bottom clear all button also works = 

 

 

RemoveIf(ColVisiblePerson, true)

 

 

 

My problem is 2 remaining areas, my second to last button is an "Add All" button to add all records from Gal2 to Gal1 (but not duplicates).  And my second problem is filtering on Gal2, if a name is already in Gal1, it should disappear as an option in Gal2

 

I attempted this for the 'Add All' button, but it just wrote the same username and email multiple times = 

 

 

ForAll(GalLocations.AllItems, Patch(ColVisiblePerson,Defaults(ColVisiblePerson),{DisplayName:GalLocations.Selected.Title,Mail:GalLocations.Selected.UserEmail}))

 

 

 

And nothing I have tried for filtering has even half worked...

 

Could anyone assist with these 2 problem areas?

1 ACCEPTED SOLUTION

Accepted Solutions
RandyHayes
Super User
Super User

@David283 

GalVisibleChosen

GalLocations

Change your Items property on GalLocations to: 

    Filter(OALocation, !(ID in GalVisibleChosen.ID)) 

There is no need to duplicate the datasource data and bog down your app with doing so.

 

Set your Items property of GalVisibleChosen to:

   colSelections

(I have changed the collection name here to not collide with your old one...which can be removed)

 

On the Left Arrow icon, set the OnSelect to:

   Collect(colSelections, GalLocations.Selected)

 

On the Right Arror icon, set the OnSelect to:

   RemoveIf(colSelections, ID=GalVisibleChosen.ID)

 

On the Add All OnSelect action, set it to:

   Collect(colSelections, GalLocations.AllItems)

 

Note, you will be working with the complete records, so set your labels in your Gallery as such (i.e. in the GalVisibleChosen gallery label text property : ThisItem.Title, etc.)

 

I hope this is helpful for you.

 

 

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up below. Solved your problem? - Click on Accept as Solution below. Others seeking the same answers will be happy you did.
Check out my PowerApps Videos too! And, follow me on Twitter @RandyHayes

Really want to show your appreciation? Buy Me A Cup Of Coffee!

View solution in original post

15 REPLIES 15
RandyHayes
Super User
Super User

@David283 

GalVisibleChosen

GalLocations

Change your Items property on GalLocations to: 

    Filter(OALocation, !(ID in GalVisibleChosen.ID)) 

There is no need to duplicate the datasource data and bog down your app with doing so.

 

Set your Items property of GalVisibleChosen to:

   colSelections

(I have changed the collection name here to not collide with your old one...which can be removed)

 

On the Left Arrow icon, set the OnSelect to:

   Collect(colSelections, GalLocations.Selected)

 

On the Right Arror icon, set the OnSelect to:

   RemoveIf(colSelections, ID=GalVisibleChosen.ID)

 

On the Add All OnSelect action, set it to:

   Collect(colSelections, GalLocations.AllItems)

 

Note, you will be working with the complete records, so set your labels in your Gallery as such (i.e. in the GalVisibleChosen gallery label text property : ThisItem.Title, etc.)

 

I hope this is helpful for you.

 

 

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up below. Solved your problem? - Click on Accept as Solution below. Others seeking the same answers will be happy you did.
Check out my PowerApps Videos too! And, follow me on Twitter @RandyHayes

Really want to show your appreciation? Buy Me A Cup Of Coffee!

View solution in original post

I will give all of that a try, thank you.

 

The reason for the ColLocations collection is because the 2 galleries are inside a DataCard.  I haven't found any way to extend the length of a screen other than using forms and data cards, so I added a custom card and put my interface for selecting users on that.  But Galleries inside datacards wont read/write to outside data sources directly it seems, so that extra collection was needed as a workaround.

RandyHayes
Super User
Super User

@David283 

Yes, actually you can access datasource inside the datacard and a gallery in the Datacard...However, I do not recommend using a Gallery in a DataCard in a form as there is a long running bug that causes them to not behave properly.

If you need your Gallery to scroll with your form, then the trick is to put your entire form in a scrollable Canvas Datacard (not a form datacard).  

 

Please have a look at this post where I described the method of doing this.

 

 

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up below. Solved your problem? - Click on Accept as Solution below. Others seeking the same answers will be happy you did.
Check out my PowerApps Videos too! And, follow me on Twitter @RandyHayes

Really want to show your appreciation? Buy Me A Cup Of Coffee!

Very nice, that's what I needed.  I followed your linked post and got everything moved over.

 

I bet this will fix my bug with picture controls not working too (they where also on a datacard in the form).  I will play with this today and try to get everything working again, thank you.

RandyHayes
Super User
Super User

@David283 

Excellent!  Glad that it was helpful.

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up below. Solved your problem? - Click on Accept as Solution below. Others seeking the same answers will be happy you did.
Check out my PowerApps Videos too! And, follow me on Twitter @RandyHayes

Really want to show your appreciation? Buy Me A Cup Of Coffee!

Still working through this a bit, but one issue is holding me up.

 

For 'GalLocations', Filter(OALocation, !(ID in GalVisibleChosen.ID)) doesn't work unfortunately.   It says the 'Not' operation is not supported by the connector.  SharePoint issue?  When I just put 'OALocation' in Items property it works fine.

 

Also, I think I will need to rework this a bit to use Patch commands, so that it will work both in new and edit mode, in edit mode the GalVisibleChosen will need to be populated by existing records from the new 'OAItemRelation' sharepoint list.

 

As you recommended in the last post, I removed the persons column from my item list, and the new 'OAItemRelation' list just has columns for ItemID, DisplayName, and UserEmail.  And I will be populating these or changing the records using the Gallery and linked collection from GalVisibleChosen. 

 

RandyHayes
Super User
Super User

@David283 

The formula can be changed to this then:

With({_items: OALocation},
   Filter(_items, !(ID in GalVisibleChosen.ID))
)

That should get past the connector warning.

 

Since you seemed to indicate this is all for a form record, there is no need for patches unless you are trying to patch another datasource.  It can all be included in the editform.

 

Since this GalVisibleChosen gallery is based on a collection, the key for redisplaying the values when editing will be to load the collection with the values.

Tell me more about how you are getting to the form and determining if you are editing, viewing or creating.

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up below. Solved your problem? - Click on Accept as Solution below. Others seeking the same answers will be happy you did.
Check out my PowerApps Videos too! And, follow me on Twitter @RandyHayes

Really want to show your appreciation? Buy Me A Cup Of Coffee!

To Navigate to the Item edit / view detail / new item screen (all the same screen) I have  an item gallery screen with navigation buttons built into the gallery to allow view or edit of each item. 

 

View button =

Navigate(ItemDetailScreen, ScreenTransition.None, {selectedItem:ItemListGallery.Selected}); ViewForm(ItemEditForm1)

Edit button = 

Navigate(ItemDetailScreen, ScreenTransition.None); EditForm(ItemEditForm1)

( I just noticed the edit button doesn't have the "{selectedItem:ItemListGallery.Selected}" part, but it still works and I get the edit screen for the correct item each time, weird.)

 

And also a new item button at the top of the page outside the gallery =

Navigate(ItemDetailScreen, ScreenTransition.None); NewForm(ItemEditForm1)

 

 

 

RandyHayes
Super User
Super User

@David283 

Make the following changes:

View Button OnSelect formula:

ViewForm(ItemEditForm1);
Navigate(ItemDetailScreen, ScreenTransition.None, {selectedItem: ThisItem})

Edit Button OnSelect formula:

EditForm(ItemEditForm1);
Navigate(ItemDetailScreen, ScreenTransition.None, {selectedItem: ThisItem})

New Button OnSelect formula:

NewForm(ItemEditForm1); 
Navigate(ItemDetailScreen, ScreenTransition.None)

 

Beside adding the selectedItem - which you will want on the Edit button - the order of operation makes sure your form is actually in that mode when you navigate.

 

I don't believe I have gotten an idea on how you are saving the selections you have when you create a record.

Is that in the OAItemRelation list?  What is the linking column to the current record?

What is your current OnSuccess action formula on the form?

_____________________________________________________________________________________
Digging it? - Click on the Thumbs Up below. Solved your problem? - Click on Accept as Solution below. Others seeking the same answers will be happy you did.
Check out my PowerApps Videos too! And, follow me on Twitter @RandyHayes

Really want to show your appreciation? Buy Me A Cup Of Coffee!

Helpful resources

Announcements
UG GA Amplification 768x460.png

Launching new user group features

Learn how to create your own user groups today!

Community Connections 768x460.jpg

Community & How To Videos

Check out the new Power Platform Community Connections gallery!

M365 768x460.jpg

Microsoft 365 Collaboration Conference | December 7–9, 2021

Join us, in-person, December 7–9 in Las Vegas, for the largest gathering of the Microsoft community in the world.

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