UPDATE: If you’re using Unified Interface Apps, check out this updated post: https://carldesouza.com/overriding-the-retrievemultiple-integration-pattern-updated-for-unified-client-interface/
There are different ways to integrate data with Dynamics 365. In this post, we will look at overriding the RetrieveMultiple through a plugin so we can display data from a 3rd party system on a form in Dynamics 365.
Let’s say for our accounts, we would like to link to a retail sales database to pull in products our accounts have ordered. Instead of using the out of the box sales entities, we will create a new entity called Retail Sales:
We will add the fields:
Now, let’s create a N:1 relationship between the Retail Sales and the Account:

Add the relationship:

Created:

Now change the Active Retail Sales view to add these fields. We will use this view on an Account subgrid:


Next, to display this on the Account, edit the main Account form and add a subgrid to the form just created:

Add it to it’s own section:

Publish all customizations.
Now we will integrate it with our 3rd party system.
Create a new plugin:

Add the NuGet references for Plugin, and add the code.
For the sake of this demo, we will fake a 3rd party connection rather than actually connecting to a system. We will create a list of type RetailSales, which includes retail sales records. Note in a real example we would look up the retail sales record using a unique key from the plugin context – here we will just “retrieve” all records.
We will then loop through our retrieved data, create a new Entity object of “new_retailsale” and add our records to an EntityCollection object. We then assign our context.OutputParameters[“BusinessEntityCollection”] to the EntityCollection object.
Here is the code:
using System.Collections.Generic; |
using System.Threading.Tasks; |
namespace Carl.OverrideRetrieveMultiple |
public class GetRetailSales : IPlugin |
public void Execute(IServiceProvider serviceProvider) |
var retailSales = new List<RetailSale>(); |
var retailSales1 = new RetailSale |
var retailSales2 = new RetailSale |
var retailSales3 = new RetailSale |
retailSales.Add(retailSales1); |
retailSales.Add(retailSales2); |
retailSales.Add(retailSales3); |
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService( typeof (IPluginExecutionContext)); |
EntityCollection entityCollection = new EntityCollection(); |
entityCollection.EntityName = "new_retailsale" ; |
foreach (var retailSale in retailSales) |
Entity crmRetailSale = new Entity( "new_retailsale" ); |
crmRetailSale.Attributes.Add( "new_product" , retailSale.Product); |
crmRetailSale.Attributes.Add( "new_amount" , retailSale.Amount); |
entityCollection.Entities.Add(crmRetailSale); |
context.OutputParameters[ "BusinessEntityCollection" ] = entityCollection; |
public string Product { get ; set ; } |
public Int32 Amount { get ; set ; } |
Now, open Dynamics 365 and navigate to an account record.
We will see the 3 records have been “pulled from a 3rd party system” and displayed by overriding the RetrieveMultiple of the Retail Sales entity:

Note, if you select one of these records, it will open the new entity record but not populate it.
Note also, the RetrieveMultiple plugin runs regardless of it having no data originally.
THANKS FOR READING. BEFORE YOU LEAVE, I NEED YOUR HELP.
I AM SPENDING MORE TIME THESE DAYS CREATING YOUTUBE VIDEOS TO HELP PEOPLE LEARN THE MICROSOFT POWER PLATFORM.
IF YOU WOULD LIKE TO SEE HOW I BUILD APPS, OR FIND SOMETHING USEFUL READING MY BLOG, I WOULD REALLY APPRECIATE YOU SUBSCRIBING TO MY YOUTUBE CHANNEL.
THANK YOU, AND LET'S KEEP LEARNING TOGETHER.
CARL
https://www.youtube.com/carldesouza
Have You tested this with Unified Client ?
I keep getting problems..
Hi Per, do you have a primary id attribute in your collection? See if adding that solves the problem. Looks like Unified Client behaves a little differently.
Hi Carl,
I have the tested in unified client. it is showing the top record only not all the records in the grid.
Hi Carl/Dhandapani
I also only having 1 record displaying. Have you perhaps resolved the issue?
Hi
Did you solve the problem?
I have the same issue in unified Interface
thanks!