cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
tvd_nzi
Advocate II
Advocate II

Creating and merging DataSet/EntityRecord

Hi community,

 

just wanted to ask if there's a possibility to either create a DataSet or merge, respectively push, new records?

 

Use case:

I want to display the dataset and additional records from a webapi response. To do this I would have to merge the templates into the custom entity dataset but don't really know how as I cannot create a DataSet from scratch nor push new items.

 

I'm using react and input components to render lookups, datetime fields etc. and they're using the dataset properties. Is there a possibility to add new items to an existing DataSet? Or how would you approach this problem?

 

let items: ComponentFramework.PropertyHelper.DataSetApi.EntityRecord[] = this.props.checklist.sortedRecordIds.map(rec => this.props.checklist.records[rec]);

Because of EntityRecord[] functions I'm unable to push new EntityRecords too.

 

Thanks in advance!

4 REPLIES 4
DianaBirkelbach
Super User
Super User

Hi @tvd_nzi , 

 

The dataset is read-only. To make update/merge to your dataset-data you need to implement the webAPI requests by yourself. That's possible for now only in model-driven PCFs. You can refresh the dataset afterwards using dataset.refresh(). This will trigger an updateView again, where the dataset is containing the new data.

 

It depends what kind of additional records to the dataset you need, but sometimes is good to consider that you can have two or more datasets in the PCF (all datasets are read-only).

 

Hope this helps!

 

Kind regards,

Diana

Kind regards,
Diana
----------
Please click "Accept as Solution" if my post answered your question so that others may find it more quickly. If you found this post helpful consider giving it a "Thumbs Up."
cchannon
Super User
Super User

There are a couple effective answers to this.

 

  1. A Virtual Entity. Virtual Entities allow you to create a table that doesn't ever store data. It is simply used to allow you to attach custom plugin code to the various table events (Retrieve, RetrieveMultiple, eg.) so that you can simulate a table where it doesn't really exist. Usually, this is used for integration purposes (I want to see all "orders" but orders are actually stored in a different database; we use a virtual entity to make it look like they are stored in Dataverse). But it can also be used for cases where you need to simulate the fusion of two tables (kind of like you're making your own ActivityPointer).
  2. Within your PCF, yes, you can absolutely merge those records, although you're right that the EntityRecord[] is a bit of a nuisance. To merge these sets, think about how your presentation layer is going to operate, then work backward from that. I would recommend using a Fluent UI Details List because it immediately replicates most of the functionality of a Dataverse grid and it matches the look and feel of the UI overall. If you go that way, then the DetailsList takes into props a simple Array<any> as the rows. That means that in your index, you will simply loop over all your EntityRecords from both sets and push each one to a new [] that will be your combined rows. The DetailsList then can readily consume that array without needing to worry about the complexities of how EntityRecord[] is structured.
tvd_nzi
Advocate II
Advocate II

@DianaBirkelbach 

Thanks for your feedback. I'm sorry I wasn't really specific about the use case.

 

In short the pcf needs to display these record sets as an aggregate

- dataset of checklists (bound custom entity)

- RetrieveMultipleResponse of template checklists (retrieved template checklist)

 

As soon the template checklists were retrieved I need to merge these two record sets into one.

 

@cchannon 

Thanks too.

The dataset grid is actually a DetailsList. I'll go with your second suggestion and tweak it to avoid having to rewrite the crm input react components. These components use the dataset, column etc. interfaces.

 

 

I'll be happy to share my solution and welcome any further ideas.

 

 

tvd_nzi
Advocate II
Advocate II

I ended up writing a wrapper class for the WebApi.EntityRecord interface and a module that creates a List of EntityLocalRecords (wrapper class) which contains the dataset records and the web api results.

Helpful resources

Announcements
UG GA Amplification 768x460.png

Launching new user group features

Learn how to create your own user groups today!

Microsoft Ignite 768x460.png

Find your focus

Explore the latest tools,training sessions,technical expertise, networking and more.

Community Connections 768x460.jpg

Community & How To Videos

Check out the new Power Platform Community Connections gallery!

Welcome Super Users.jpg

Super User Season 2

Congratulations, the new Super User Season 2 for 2021 has started!

Carousel 2021 Release Wave 2 Plan 768x460.jpg

2021 Release Wave 2 Plan

Power Platform release plan for the 2021 release wave 2 describes all new features releasing from October 2021 through March 2022.

Users online (2,796)