cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
comandante
Frequent Visitor

Clear a (HTML) collection inside ForAll

Hello everyone,

I appreciate your help or suggestion with the following issue:

1. I have a gallery with thousand items which belong to many users. Each user can have multiple items. I select an item from gallery with combobox (distinct user)

2. Selected records go to Collection1 (on Combobox OnCheck): 

Collect(Collection1,{SerialNr:ThisItem.SerialNr, Description:ThisItem.Descr, User:ThisItem.User, ID:ThisItem.ID});

 

3. After that I create a unique collection for every user ClearCollect(UserUnique,Distinct(Collection1, User));

My goal is to send separate emails with all items that were selected from a gallery to every unique user

For that,

On my SendEmail button OnSelect property I have this:

Set(_emailRecipientString,UserMail);

ClearCollect(myHTML,{htmlString:"<table>

  <tr>

        <th>Description</th>

    <th>SerialNr</th>

  </tr>"});

  ForAll(UserUnique,

  Collect(UniqueCollection,Filter(Collection1,User=Result));

  ForAll(UniqueCollection,

        Patch(

        myHTML,

        First(myHTML),

                {htmlString: First(myHTML).htmlString&"

  <tr>

    <td>"&'SerialNr'&"<p></td>

    <td>"&'Description'&"</td>

      </tr>

      <td><img src='https://barcode.tec-it.com/barcode.ashx?data="&'SerialNr'&"'width=100/></p></td>

      <td>"&'Description'&"</td>"});

);

Office365Outlook.SendEmailV2(_emailRecipientString,Result(//This is the Subject of email with Unique User), First(myHTML).htmlString //(This is the body of email with my data patched for every unique user);

);

 

4. I also have this on my Combobox UnCheck 

Remove(Collection1, First(Filter(Collection1, SerialNr=ThisItem.SerialNr)))

ClearCollect(myHTML,{htmlString:"<table>

  <tr>

    <th>SerialNr</th>

    <th>Description</th>

      </tr>"});

ForAll(

    Collection1,

    Remove(

        myHTML,

        First(myHTML),

        {htmlString: First(myHTML).htmlString&"

  <tr>

    <td>"&'SerialNr'&"<p></td>

    <td>"&'Description'&"</td>

          </tr>"})

);

Patch(myHTML,First(myHTML),{htmlString: First(myHTML).htmlString&"

</table>"});

 

And finally my issue: when I select 2 and more unique users from my Combobox I recieve 2 separate emails, for the 1st user all is Ok, and for the 2d I also have the items selected for the 1st user. This means that my HTML collection for 1st user wasn't cleared before patching the items for 2d user

Can you please suggest how to correctly use Remove or RemoveIf as we can't use Clear inside ForAll?

I appreciate any help, especially from @mdevaney , as the html part of this code was taken from his Collections CookBook (Thank you so much for that post, Matthew, it was extremely helpful for me)

 

Thank you very much in advance)

1 ACCEPTED SOLUTION

Accepted Solutions
RandyHayes
Super User
Super User

@comandante 

Collections are great if you need an in-memory database with add/remove and edit capabilities.  They are way overkill in your scenario, so put the cookbook down!  

Also, you are trying to use the ForAll function as a ForLoop like in some development language - which PowerApps is NOT.  ForAll is a function that returns a table of records based on your iteration table and record schema. It is more efficient to use the function as intended and will provide better performance.

As ForAll is a function, you cannot "execute" specific behavioral actions in the ForAll...so use it more like it was intended and you will have much better outcomes.

 

However - that said, in your case, since you are trying to send multiple emails - and the SendEmail function does not support providing a table to work on, then you will have to suffer the performance hit and utilize it backward.  But, what you have in your email formula needs some help!

 

Now it is a little hard to tell some of the sources of your formula as they are all in those collections which are not explained (and mostly not needed).

 

You also have some Html tag issues in your original formula.

 

So, there are some assumptions in the following suggestions based on what is not known.

 

Please consider changing your Formula to the following:

ForAll(UserUnique As _userItem,

    Office365Outlook.SendEmailV2(
        _userItem.UserMail,
        _userItem.Result, //This is the Subject of email with Unique User -assumed this was in your collection.
      "<table>
         <tr>
             <th>Description</th>
             <th>SerialNr</th>
         </tr>" &
         Concat(Filter(Collection1,User=_userItem.Result), 
             "<tr>
                 <td>" & 'SerialNr' & "</td>
                 <td>" & 'Description' & "</td>
             </tr>
             <tr>
                 <td><img src='https://barcode.tec-it.com/barcode.ashx?data=" & 'SerialNr' & "' width=100/></td>
                 <td>" & 'Description' & "</td>"
         ) &
         "</table>"
    )
)    

What you were trying to do with collections is not really valid and certainly not needed, so proceed with the above (which will no doubt have errors or issues because there are too many other unknowns to your scenario) and see what the problems are that come from it and we can continue from that.

 

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.
NOTE: My normal response times will be Mon to Fri from 1 PM to 10 PM UTC (and lots of other times too!)
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

4 REPLIES 4
RandyHayes
Super User
Super User

@comandante 

Collections are great if you need an in-memory database with add/remove and edit capabilities.  They are way overkill in your scenario, so put the cookbook down!  

Also, you are trying to use the ForAll function as a ForLoop like in some development language - which PowerApps is NOT.  ForAll is a function that returns a table of records based on your iteration table and record schema. It is more efficient to use the function as intended and will provide better performance.

As ForAll is a function, you cannot "execute" specific behavioral actions in the ForAll...so use it more like it was intended and you will have much better outcomes.

 

However - that said, in your case, since you are trying to send multiple emails - and the SendEmail function does not support providing a table to work on, then you will have to suffer the performance hit and utilize it backward.  But, what you have in your email formula needs some help!

 

Now it is a little hard to tell some of the sources of your formula as they are all in those collections which are not explained (and mostly not needed).

 

You also have some Html tag issues in your original formula.

 

So, there are some assumptions in the following suggestions based on what is not known.

 

Please consider changing your Formula to the following:

ForAll(UserUnique As _userItem,

    Office365Outlook.SendEmailV2(
        _userItem.UserMail,
        _userItem.Result, //This is the Subject of email with Unique User -assumed this was in your collection.
      "<table>
         <tr>
             <th>Description</th>
             <th>SerialNr</th>
         </tr>" &
         Concat(Filter(Collection1,User=_userItem.Result), 
             "<tr>
                 <td>" & 'SerialNr' & "</td>
                 <td>" & 'Description' & "</td>
             </tr>
             <tr>
                 <td><img src='https://barcode.tec-it.com/barcode.ashx?data=" & 'SerialNr' & "' width=100/></td>
                 <td>" & 'Description' & "</td>"
         ) &
         "</table>"
    )
)    

What you were trying to do with collections is not really valid and certainly not needed, so proceed with the above (which will no doubt have errors or issues because there are too many other unknowns to your scenario) and see what the problems are that come from it and we can continue from that.

 

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.
NOTE: My normal response times will be Mon to Fri from 1 PM to 10 PM UTC (and lots of other times too!)
Check out my PowerApps Videos too! And, follow me on Twitter @RandyHayes

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

@RandyHayes 

Thank you very much for your reply

Let me try to apply this and come back to you with new questions! 

 

RandyHayes
Super User
Super User

@comandante 

Sounds good!

_____________________________________________________________________________________
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.
NOTE: My normal response times will be Mon to Fri from 1 PM to 10 PM UTC (and lots of other times too!)
Check out my PowerApps Videos too! And, follow me on Twitter @RandyHayes

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

@RandyHayes 

It worked!!!!!

Thank you so much for your help!

Helpful resources

Announcements
Microsoft 365 Conference – December 6-8, 2022

Microsoft 365 Conference – December 6-8, 2022

Join us in Las Vegas to experience community, incredible learning opportunities, and connections that will help grow skills, know-how, and more.

Difinity Conference 2022

Difinity Conference 2022

Register today for two amazing days of learning, featuring intensive learning sessions across multiple tracks, led by engaging and dynamic experts.

European SharePoint Conference

European SharePoint Conference

The European SharePoint Conference returns live and in-person November 28-December 1 with 4 Microsoft Keynotes, 9 Tutorials, and 120 Sessions.

Power Apps Ideas

Changes to Ideas Coming

We are excited to announce a new way to share your ideas for Power Apps!

Top Solution Authors
Top Kudoed Authors
Users online (1,625)