Skip to main content

Working with email attachments in Power Automate

CDS connector

There are many blogs explaining how to fetch email attachments from CRM and uploading them to Sharepoint using the old Dynamics 365 connector. But since this connector has been announced as deprecated in April 2019, I tried to achieve the same using the Common Data Service connector.

My use case is to upload e-mail attachments to sharepoint, in case an e-mail contains attachments and it is linked to an opportunity.

So first we define the following trigger:


Then we add a condition to check, weither the e-mail is linked to an opportunity:


As a next step we query all attachments related to this e-mail, but wait there are two entities called "attachment" offered:


So let's try the first one:


And what we get back is some metadata about the attachment, but not the filename and the body of the attachment, we are looking for:


But at least we are a step closer to our attachments. Lets try the second "attachment" entity offered in the list/get records action, with the information returned from the first request:


But unfortunately we end up with a bad request, informing us that the "retrieve" function is not supported for the attachment entity:


Alternative - Web API

So lets try out another alternative and see if we can utilize the Web API for that. First we add the following action:


If you use this action for the first time, you have to define the connection properties:


Once connected we define our request for the Web API:


This returns a JSON like that:


As a next step we add a "Parse JSON" action and add the result of the HTTP request in the "Generate from sample" menu. This creates a schema like below:



As a last step we loop over the result and upload the files to Sharepoint. It is important to consider, that the attachments are stored as base64 in the CRM database, so you have to convert them to binary, before you create the files in Sharepoint.



Finally our e-mail attachment has been uploaded to Sharepoint:



BTW:
Of course the folder path would not be hard coded like in this short example and you would add additional steps, where you would create the document location in CRM, add additional checks, if attachments are returned in the response to our http request a.s.o.

Comments

Popular posts from this blog

Power Automate Get absolute Sharepoint URL from document location

Document Locations If you enable Sharepoint document integration in your model driven apps, you can define for which entities the possibility to upload documents to sharepoint shall be offered and you can define a folder structure. Possible folder structures can either be based on account or contact, which means if you create child items (e.g. opportunities, activities, ...) sub folders are created below. If an entity is enabled for document management a "Files" tab is added to the form of your model driven app and as soon as you click on that tab a folder is automatically generated on Sharepoint. Once the folder has been created you have options to create new or upload existing file or to open the document location (folder) on Sharepoint: What happens behind the scenes is, as soon as you click on the files tab your model driven app checks, weither a "document location" for this item already exists, or not. The document location is an own entity in C

Working with Optionset lables in Power Automate

Connector Types Power Automate currently offers 3 different connectors, to connect Power Automate with your Dynamics 365 instance: Dynamics 365 Common Data Service Common Data Service (current environment) Today we will look on ways how to retrieve option set labels via the different connectors, for our sample accounts: Dynamics 365 This connector should not be used any more , since in April 2019 it has been announced as being deprecated. https://flow.microsoft.com/en-us/blog/nine-new-connectors-in-april-and-improved-visibility-into-trigger-failures/ With the Dynamics 365 connector it was quite easy to work with optionsets, since it offered both the optionset value (int) and the optionset label (name) in the dynamic content: And here we go, these are our results: Common Data Service Since the Dynamics 365 connector has been deprecated, this is the connector you should use. If you perform a "Get record" or "List records&

Power Automate - Records modified during the last 30 minutes

Query operators Recently I have been working on a requirement to query accounts and contacts that have been modified during the last 30 minutes in Power Automate. Out of the box only the following time based filters are offered: https://docs.microsoft.com/en-us/powerapps/developer/common-data-service/use-fetchxml-fiscal-date-older-datetime-query-operators So as you can see a filter "Older than X minutes", but no filter "Last X minutes" is offered. Also the "On or After" filter only allows as to provide a date and not the time part into the filter: So we have to be a bit creative, to solve this challenge. Compose - Date Time in Power Automate As a first step we use the Compose action and provide the following expression to calculate the current date/time minus 30 minutes: And now it is time to define our filter expression to query all accounts, modified during the last 30 minutes: Lets prepare some test data and modify one a