Based on my patch statement below:
Patch(
SPList,
Defaults(SPList),
{Photos: First(PhotoCollection).Image}
);
How could I use FirstN to capture a number of table records and not just the first record. This gives me an error:
Patch(
SPList,
Defaults(SPList),
{Photos: FirstN((PhotoCollection).Image), 10)}
);
Is it possible to use FirstN for this? This documentation does not seem to provide clear limitations: https://docs.microsoft.com/en-us/powerapps/maker/canvas-apps/functions/function-first-last
Hi @DBJ
If you have a collection with say, 50 records, and you want to Patch the first 10 to SharePoint, you can use the ForAll function to do this. Here's how the syntax would look...
ForAll(
FirstN(PhotoCollection, 10),
Patch(
SPList,
Defaults(SPList),
{
PhotoField: Image
}
)
)
Hi @timl ,
Thanks for the helpful info...my complete patching statement also includes other forms:
Patch(
SPList,
Defaults(SPList),
EditFormA.LastSubmit,
EditFormB.Updates,
{Photos: First(PhotoCollection).Image}
);
how would I fit those with the statement you provided for patching multiple photos with FirstN?
Hi @DBJ
Can you try to use the expression as:
Patch(
SPList,
Defaults(SPList),
{Photos: FirstN(PhotoCollection,10).Image}
);
This will return a list of 10 pictures in the column. What is the type of "Photos" column? If you get an error, please share more details, so that we might be able to help you better.
Also, In case you are looking for a way to get the 10th photo, then the expression needs to be changed to:
Patch(
SPList,
Defaults(SPList),
{Photos: Last(FirstN(PhotoCollection,10)).Image}
);
Hope this Helps!
If this reply has answered your question or solved your issue, please mark this question as answered. Answered questions helps users in the future who may have the same issue or question quickly find a resolution via search. If you liked my response, please consider giving it a thumbs up. THANKS!
Hi @yashag2255 ,
Patch(
SPList,
Defaults(SPList),
EditForm1.LastSubmit,
EditForm2.Updates,
{Photos: FirstN(PhotoCollection,10).Image}
);
does not work, I get error "The function 'Patch' has some invalid arguments. The type of this argument 'Photos' does not match the expected type 'Text'. Found type 'Table'."
The SP column I'm trying to patch to is a multiline text column.
Hi @DBJ
Can you just clarify what you want to achieve here?
For your SharePoint list SPList, is it the case that you want to add 10 new rows to this list? The 10 rows will include an image that corresponds to the first 10 rows in your PhotoCollection collection. For each record that you want to add SPList, you want to merge the other fields that come from EditFormA.LastSubmit and EditFormB.Updates.
If that's the case, this should theoretically work...
ForAll(
FirstN(PhotoCollection, 10),
Patch(
SPList,
Defaults(SPList),
EditFormA.LastSubmit,
EditFormB.Updates,
{
PhotoField: Image
}
)
)
Hi @timl ,
Ultimately, I'm trying to patch an entire photo collection to a multi-line text column in a SharePoint list item along with two other forms. Right now I'm able to patch all the fields from the two forms, but from the photo collection only one photo gets patched with First(PhotoCollection).Image into the list item. I want to patch all the photos from the photo collection. I thought this would also be straightforward/possible using FirstN but having trouble formatting the statement within my patch statement.
Thanks for the assistance!
Hi @DBJ
There is a maximum limit on number of characters that can be saved in a Multiple Lines of Text column in SharePoint.
When you say, saving 10 images in the multiple line of text column, does it mean on the same record or it is 10 different records, with same data to the all the other fields and just different pictures?
In case this is 10 pictures in a single record, I would recommend you to use attachments and upload the images there.
You can do a concat function to add all the Images data seperated by two semi-colon as: Concat(PhotoCollection, Image, ";;") -> But this will not display the images properly and will not be a good approach to proceed with considering the limitation on number of characters.
In case, this is about creating 10 different records, you can update the expression to:
ForAll(
FirstN(PhotoCollection, 10),
Patch(
SPList,
Defaults(SPList),
EditFormA.Updates,
EditFormB.Updates,
{
PhotoField: Image
}
)
)
Hope this Helps!
If this reply has answered your question or solved your issue, please mark this question as answered. Answered questions helps users in the future who may have the same issue or question quickly find a resolution via search. If you liked my response, please consider giving it a thumbs up. THANKS!
Hi @DBJ
I would agree with @yashag2255 - it's preferable to store images in attachments, or to store each image as a separate row in a list.
But if you want to try to combine all 10 images together, you could use the Concat function. According to this, we can use the comma symbol to separate base64 image strings.
https://stackoverflow.com/questions/5350590/best-way-to-separate-two-base64-strings
Your Patch function would look like this.
Patch(
SPList,
Defaults(SPList),
EditFormA.LastSubmit,
EditFormB.Updates,
{
Photos: Concat(FirstN(PhotoCollection, 10), Photo & ",")
}
)
To retrieve the images, you could then then call the Split function
Split(CombinedPhotoString, ",")
Thanks for the helpful info @timl and @yashag2255 . I ended up using a separate list to store the images via an upload with a PowerApps/flow action and referencing the images list from the master list via a custom id field I created with the GUID() function.
User | Count |
---|---|
258 | |
110 | |
90 | |
52 | |
44 |