Skip to content

Commit 70fa203

Browse files
committed
Updated content
1 parent bdf998d commit 70fa203

File tree

2 files changed

+27
-24
lines changed

2 files changed

+27
-24
lines changed

powerapps-docs/developer/data-platform/register-plug-in.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: "Register a plug-in (Microsoft Dataverse) | Microsoft Docs" # Intent and product brand in a unique string of 43-59 chars including spaces
33
description: "Learn how to register a plug-in assembly and step with the Microsoft Dataverse event framework pipeline." # 115-145 characters including spaces. This abstract displays in the search result.
4-
ms.date: 06/22/2023
4+
ms.date: 08/06/2024
55
ms.reviewer: "pehecke"
66
ms.topic: "article"
77
author: MicroSri
@@ -18,9 +18,9 @@ contributors:
1818

1919
[!INCLUDE[cc-terminology](includes/cc-terminology.md)]
2020

21-
After a plug-in is written and compiled, it must be registered with the [event framework](event-framework.md) to execute when a specific entity (table row) and message (operation) is processed by Dataverse. To register a plug-in with the Dataverse event framework requires use of a tool - Plug-in Registration tool (PRT), or the Power Platform Tools extension for Visual Studio.
21+
After a plug-in is written and compiled, it must be registered with the [event framework](event-framework.md) to execute when a specific entity (table row) and message (operation) is processed by Microsoft Dataverse. To register a plug-in with Dataverse requires use of a tool - either the Plug-in Registration tool (PRT) or the Power Platform Tools extension for Visual Studio.
2222

23-
The PRT creates Dataverse object registrations and supports editing those registrations. This article describes how to register a plug-in assembly and step, add an assembly to a solution, and perform other common plug-in related operations using the Plug-in Registration tool.
23+
The PRT creates Dataverse object registrations and supports editing those registrations. This article describes how to register a plug-in assembly and message processing step, add an assembly to a solution, and perform other common plug-in related operations using the Plug-in Registration tool.
2424

2525
The Visual Studio extension provides a more feature rich development environment and covers the entire coding, deployment, and debugging/profiling development process. For information about using the Power Platform Tools extension for Visual Studio, see the [quickstart](tools/devtools-create-plugin.md).
2626

@@ -43,7 +43,7 @@ When an assembly is uploaded, it's stored in the `PluginAssembly` table. Most of
4343

4444
### View registered assemblies
4545

46-
You can view information about registered plug-in assemblies in the Power Apps classic **Solution Explorer**, under **Solutions** in Power Apps left navigation pane, and in the PRT assembly view. To access **Solution Explorer** in Power Apps, choose **Solutions** and then choose **Switch to classic** in the toolbar. To access the default solution from Power Apps, choose **Solutions**, select "Default Solution" in the list, and then choose **Plug-in assemblies** within the left **Objects** pane.
46+
You can access information about registered plug-in assemblies and steps in Power Apps and in the PRT assembly view. To access plug-in information in Power Apps, choose **Solutions** in the left navigation pane and then choose an available solution from the list. Next, choose **Plug-in assemblies** or **Plug-in steps** within the left **Objects** pane.
4747

4848
> [!NOTE]
4949
> Each assembly you register will be added to the **Default Solution** which should not be confused with the **Common Data Services Default Solution**.
@@ -60,9 +60,9 @@ To learn more about solutions and how to create one see [Solutions overview](../
6060
6161
## Step registration
6262

63-
When an assembly is loaded or updated, any classes that implement <xref:Microsoft.Xrm.Sdk.IPlugin> are made available in the PRT. Use the instructions in [Register a new step](tutorial-write-plug-in.md#register-a-new-step) in the [Tutorial: Write and register a plug-in](tutorial-write-plug-in.md) to create a new step registration.
63+
Registering a message processing step informs Dataverse under what conditions your plug-in should execute, and how to execute it. By conditions we are referring to the table and message operation being processed by Dataverse. Other configuration options such as synchronous or asynchronous execution, before or after the core operation, and more can be specified during step registration. These runtime configuration options are detailed in the next section.
6464

65-
When you register a step, there are several registration options available to you depending on the stage of the event pipeline and the type of operation you intend to register your code on.
65+
When an assembly is loaded or updated, any classes that implement <xref:Microsoft.Xrm.Sdk.IPlugin> are made available in the PRT. Use the instructions in [Register a new step](tutorial-write-plug-in.md#register-a-new-step) in the [Tutorial: Write and register a plug-in](tutorial-write-plug-in.md) to create a new step registration.
6666

6767
### General Configuration Information Fields
6868

@@ -71,7 +71,7 @@ When you register a step, there are several registration options available to yo
7171
|**Message**|PRT auto-completes available message names in the system. More information: [Use messages with the SDK for .NET](org-service/use-messages.md)|
7272
|**Primary Entity**|PRT auto-completes valid tables that apply to the selected message. These messages have a `Target` parameter that accepts an <xref:Microsoft.Xrm.Sdk.Entity> or <xref:Microsoft.Xrm.Sdk.EntityReference> type. If valid tables apply, you should set this field value when you want to limit the number of times the plug-in is called. <br />If you leave it blank for core table messages like `Update`, `Delete`, `Retrieve`, and `RetrieveMultiple` or any message that can be applied with the message the plug-in will be invoked for all the tables that support this message.|
7373
|**Secondary Entity**|This field remains for backward compatibility for deprecated messages that accepted an array of <xref:Microsoft.Xrm.Sdk.EntityReference> as the `Target` parameter. This field is typically not used anymore.|
74-
|**Filtering Attributes**|With the `Update` or `OnExternalUpdated` message, when you set the **Primary Entity**, filtering columns limits the execution of the plug-in to cases where the selected columns are included in the update. Setting this field is a best practice for performance. Don't include the primary key of the entity in the filtering attributes. The primary key is always included in update operations, so doing this will negate all other filtered attributes. |
74+
|**Filtering Attributes**|With the `Update` or `OnExternalUpdated` message, when you set the **Primary Entity**, filtering columns limits the execution of the plug-in to cases where the selected columns are included in the update. Setting this field is a best practice for performance. Don't include the primary key of the entity in the filtering attributes. The primary key is always included in update operations, so doing this will negate all other filtered attributes. |
7575
|**Event Handler**|This field value will be populated based on the name of the assembly and the plug-in class. |
7676
|**Step Name**|The name of the step. A value is pre-populated based on the configuration of the step, but this value can be overridden.|
7777
|**Run in User's Context**|Provides options for applying impersonation for the step. The default value is **Calling User**. If the calling user doesn't have privileges to perform operations in the step, you may need to set this field value to a user who has these privileges. More information: [Set user impersonation for a step](#set-user-impersonation-for-a-step) |
@@ -105,7 +105,7 @@ Asynchronous plug-ins can only be registered for the **PostOperation** stage. Fo
105105

106106
There are certain scenarios where a step registration and table combination isn't obvious. This is the result of how the system is designed internally where there's a special relationship between tables or operations. The information below identifies these cases and provides step registration guidance.
107107

108-
- There are certain cases where plug-ins registered for the _Update_ event can be called twice. More information: [Behavior of specialized update operations](special-update-operation-behavior.md)
108+
- There are certain cases where plug-ins registered for the *Update* event can be called twice. More information: [Behavior of specialized update operations](special-update-operation-behavior.md)
109109
- Register a plug-in step on **account** or **contact** when you want to handle data changes to **customeraddress**, **leadaddress**, **publisheraddress**, or **competitoraddress** records.
110110

111111
### Deployment
Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: "Get started with virtual tables (entities) (Microsoft Dataverse) | Microsoft Docs"
33
description: "Virtual tables enable the integration of data residing in external systems by seamlessly representing that data as tables in Microsoft Dataverse, without replication of data and often without custom coding."
4-
ms.date: 04/01/2022
4+
ms.date: 08/06/2024
55
author: mkannapiran
66
ms.author: kamanick
77
ms.reviewer: pehecke
@@ -12,69 +12,72 @@ applies_to:
1212
search.audienceType:
1313
- developer
1414
contributors:
15-
- PHecke
15+
- phecke
1616
- JimDaly
1717
---
1818

1919
# Get started with virtual tables (entities)
2020

2121
[!INCLUDE[cc-terminology](../includes/cc-terminology.md)]
2222

23-
*Virtual tables* (also known as *virtual entities*) enable the integration of data residing in external systems by seamlessly representing that data as tables in Microsoft Dataverse, without replication of data and often without custom coding.
23+
*Virtual tables*, also known as *virtual entities*, enable the integration of data residing in external systems by seamlessly representing that data as tables in Microsoft Dataverse, without replication of data and often without custom coding.
2424

25-
Virtual tables replace previous client-side and server-side approaches to integrating external data, which required customized code and suffered from numerous limitations, including imperfect integration, data duplication, or extensive commitment of development resources. In addition, for administrators and system customizers, the use of virtual tables greatly simplifies administration and configuration.
25+
Virtual tables replace previous client-side and server-side approaches to integrating external data which required customized code and suffered from numerous limitations. These limitations include imperfect integration, data duplication, or extensive commitment of development resources. In addition, for administrators and system customizers, the use of virtual tables greatly simplifies administration and configuration.
2626

2727
> [!NOTE]
2828
> This section discusses the implications of virtual tables for developers. For more information about managing virtual tables from the user interface, see [Create and edit virtual tables that contain data from an external data source](../../../maker/data-platform/create-edit-virtual-entities.md).
2929
3030
## Virtual tables, data providers and data sources
3131

32-
A virtual table is a definition of a table in the Dataverse platform without the associated physical tables for records created in the Dataverse database. Instead during runtime, when a record is required, its state is dynamically retrieved from the associated external system. Each virtual table type is associated with a *virtual table data provider* and (optionally) some configuration information from an associated *virtual table data source*.
32+
A virtual table includes a definition of a table in Dataverse without the associated physical table for record storage in the Dataverse database. During runtime, when a record is required, its state is dynamically retrieved from the associated external system. Each virtual table type is associated with a *virtual table data provider* and (optionally) some configuration information from an associated *virtual table data source*.
3333

3434
<!-- TODO:
3535
A data provider is a particular type of Dataverse plug-in, which is registered against CRUD events that occur in the platform. More information: [Write a plug-in](../write-plugin.md) -->
3636

3737
The following data providers ship with Dataverse:
3838

39-
- An [OData v4](https://www.odata.org/documentation/) provider is included with the service and is installed by default. This provider supports create, read (retrieve, retrieve multiple), update and delete operations.
39+
- An [OData v4](https://www.odata.org/documentation/) provider is included with the service and is installed by default. This provider supports create, read (retrieve, retrieve multiple), update and delete (CRUD) operations.
4040
- An [Azure Cosmos DB](/azure/cosmos-db) (formerly *Microsoft Document DB*) provider is available from [AppSource](https://appsource.microsoft.com).
4141

42+
If a data provider cannot be found for your external data source, you can develop a *custom virtual table data provider*. More information: [Virtual table data providers](custom-ve-data-providers.md)
4243

43-
If a data provider cannot be found for your external data source, you can develop a *custom virtual table data provider*; for more information, see [Virtual table data providers](custom-ve-data-providers.md). Full CRUD operation is now supported for custom virtual table data provider. Developers can implement plug-ins and register them using the Plug-in Registration tool for each of the CRUD operation supporting the virtual table.
44+
Full CRUD operation is now supported for custom virtual table data provider. Developers can implement plug-ins, and register them using the Plug-in Registration tool, for each of the CRUD operations supporting the virtual table.
4445

4546
## Virtual table creation and mapping
4647

47-
Initially, defining a virtual table is the same as defining a custom table: you specify the table, columns, and relationships for the new virtual table type. However, additionally, you then connect the virtual table to a data provider to manage data operations. The custom table type and its columns must be mapped to the corresponding data in the external data source. For example, a virtual table might be represented as a row in an external relational database, and each of its columns might correspond to a column in that row. (Note that these external data names are often different than their corresponding virtual table names.) A specific, required mapping occurs for the entity ID field: the data provider must be able to provide this GUID and associate it to the external record that represents this record. The most direct way to achieve this is to actually use GUIDs as primary keys in the external data source.
48+
Initially, defining a virtual table is the same as defining a custom table. You specify the table, columns, and relationships for the new virtual table type. You then connect the virtual table to a data provider to manage data operations.
49+
50+
The custom table type and its columns must be mapped to the corresponding data in the external data source. For example, a virtual table might be represented as a row in an external relational database, and each of its columns might correspond to a column in that row. Note that these external data names are often different than their corresponding virtual table names. A specific and required mapping occurs for the entity ID field - the data provider must be able to provide this GUID and associate it to the external record that represents this record. The most direct way to achieve this is to actually use GUIDs as primary keys in the external data source.
4851

4952
In this example, a corresponding virtual table data source would also be provided to supply user and connection information for the external database.
5053

5154
## Limitations of virtual tables
5255

53-
Following are the limitations in virtual tables that must be considered.
56+
The following are limitations of virtual tables that should be considered.
5457

5558
- Only organization-owned tables are supported. The security filtering applied to user-owned tables is not supported. Access to the virtual table data can be turned on or off for individual users based on their security role. Field-level security is not supported.
5659
- It must be possible to model the external data as a Dataverse table. This means:
57-
- All tables in the external data source must have an associated GUID primary key.
58-
- All table properties must be represented as Dataverse table columns. You can use simple types representing text, numbers, choices, dates, images, and lookups.
59-
- You must be able to model any table relationships in Dataverse.
60-
- A column on a virtual table cannot be calculated or rollup.  Any desired calculations must be done on the external side, possibly within or directed by the data provider.
61-
- Although you can add virtual table columns as a lookup on a grid or other UI views, you cannot filter or sort based on this virtual table lookup column.
60+
- All tables in the external data source must have an associated GUID primary key.
61+
- All table properties must be represented as Dataverse table columns. You can use simple types representing text, numbers, choices, dates, images, and lookups.
62+
- You must be able to model any table relationships in Dataverse.
63+
- A column on a virtual table cannot be calculated or rollup.  Any desired calculations must be done on the external side, possibly within or directed by the data provider.
64+
- Although you can add virtual table columns as a lookup on a grid or other UI views, you cannot filter or sort based on this virtual table lookup column.
6265
- Auditing is not supported.
6366
- Search functionality is not supported for virtual tables as they do not persist data.
6467
- Charts and dashboards are not supported for virtual tables.
6568
- Virtual tables cannot be enabled for queues.
6669
- Offline caching of values is not supported for virtual tables.
6770
- A virtual table cannot represent an activity and do not support business process flows.
68-
- Once created, a virtual table cannot be changed to be a standard (non-virtual) table. The reverse is also true: a standard table cannot be converted into a virtual table.
71+
- Once created, a virtual table cannot be changed to be a standard (non-virtual) table. The reverse is also true whereas a standard table cannot be converted into a virtual table.
6972
- Selecting attributes in Retrieve and RetrieveMultiple queries will not be applied since all attributes will be returned
7073

7174
For more information about how these limitations are reflected in the Dataverse API, see [API considerations of virtual tables](api-considerations-ve.md).
7275

7376
### See also
77+
7478
[Virtual table walkthrough using the OData v4 Data Provider](../../../maker/data-platform/virtual-entity-walkthrough-using-odata-provider.md)<br/>
7579
[API considerations of virtual tables](api-considerations-ve.md)<br />
7680
[Custom virtual table data providers](custom-ve-data-providers.md)<br />
7781
[Sample: Generic virtual table data provider plug-in](sample-generic-ve-plugin.md)
7882

79-
8083
[!INCLUDE[footer-include](../../../includes/footer-banner.md)]

0 commit comments

Comments
 (0)