Search Suggest

June 2023
Restricted Delete Action in Dynamics 365 Finance and Operations

In a previous article, I had shown how to add a cascade delete in Dynamics 365 finance and operations. In this article, I will show you how to add a restricted delete action in dynamics 365 Finance and Operations. When a Delete Action comes into the picture? Normally delete actions come into the picture when a user is trying to delete a database record. Delete actions are used to maintain the data integrity and consistency of the database. At the time of development, a developer must take care of the delete actions to implement in the project.

In Dynamics 365 Finance and Operations (D365 FO), the delete action refers to the deletion of a record from a table in the database. When a record is deleted, it is permanently removed from the system and cannot be recovered. Therefore, it is important to exercise caution when performing this action and ensure that it is necessary and appropriate to do so. In D365 FO, the Deleted action can be performed using various methods, including:

  • Using the "Delete" button on a record's form.
  • Using the "Delete" command on a record's right-click menu.
  • Using X++ code to delete records programmatically.

It is important to note that some records in D365 FO cannot be deleted due to system constraints or dependencies on other records. In such cases, the system will prevent the deletion and display an error message. A delete action is performed when related tables are existing in the project, and deleting records from any table must be restricted for keeping the database consistent.

Imagine we have two tables. One is a product category table with the name PrdCategoryTable, and another is a product table with the name PrdTable. Where PrdCategoryTable stores different product categories, and PrdTable stores the details of different products. PrdTable refers CategoryId of PrdCategoryTable as the reference key. Here PrdCategoryTable is the parent table and PrdTable is the child table. Since PrdTable alone has no existence without PrdCategoryTable.  So, deleting any records from both tables must be restricted.

In Microsoft Dynamics 365 Finance & Operations, there are four types of Delete Actions.

  • None.
  • Cascade.
  • Restricted.
  • Cascade + Restricted

Check out the Delete Actions tutorial to learn more about its concepts.

Check out the Cascade Delete Action tutorial to learn more about its concepts.

All four Delete Action methods In Microsoft Dynamics 365 Finance & Operations have major roles in Dynamics 365 development. In this article, I am going to explain the Restricted deletion action property with a simple example.

What is Restricted Delete Action? 

Setting up the Delete Action property to Restricted also extends the functionality of the tables' delete method. In this case, the system checks that while deleting a record from the parent table first the system checks whether any related records exist in the related child tables if exist the system will generate a warning message. This warning message will generate only if the delete action is performed through the user interface. If you are trying to delete through X++ code this will delete only the records from the child table.

Note: - A programmer can use .validateDelete() and this will return true or false values, based on the result, a developer can do the action.

As a result, super(), in validateDelete, checks whether records exist on related tables. If records do exist, validateDelete returns false. The forms system ensures that the deletion is not performed. In your own X++ code, check the return value of validateDelete. Don't delete the primary or related records if the method returns false.

Example: -  On the VendTable table, a restricted delete action has been defined for the VendTrans table. When a vendor is deleted in the VendTable table, the validateDelete method ascertains whether transactions exist for the vendor in the VendTrans table. If so, validateDelete returns false.

Add Restricted Delete Action in Dynamics 365 FO

Here I will show you the steps of how to set a restricted delete action in Dynamics 365 Finance and Operations. For this,

1. Create a normal relation

Restore the table structure,  we have had tables, one is a product category table PrdCategoryTable which has three columns CategoryId, CategoryCode, and CategoryName, and another product table PrdTable, which has four columns PrdId, PartNumber, Description, and CategoryId where PrdCategoryTable stores different product categories, and PrdTable stores the product details. Here PrdCategoryTable is the parent table and PrdTable is the child table. PrdTable refers CategoryId of PrdCategoryTable as the reference keyYou remember that PrdTable refers PrdCategoryTable, PrdTable alone has no existence without PrdCategoryTable.

Once you created these two tables, 

Read the article  how to create a normal relation in Dynamics 365 fo

After creating the normal relationship between the two tables, you need to set the restricted delete action to the table, you always note one important point is that , always set the delete action in the parent table.

Restricted Delete Action in Dynamics 365 Finance and Operations

Add a restricted delete action.

For setting up the restricted delete action, you need to follow the below steps,

  • Expand the parent table PrdCategoryTable. Find the delete action node, and right-click delete actions.

Restricted Delete Action in Dynamics 365 Finance and Operations

  • Then click New Delete Action and right-click the new delete action, and then click Properties.

Restricted Delete Action in Dynamics 365 Finance and Operations

  • Select  Table Reference property from the Table property list. In our example select PrdTable.
  • Choose Restricted in the Action property as shown in the below screen shot.

Restricted Delete Action in Dynamics 365 Finance and Operations

This is the basic setup for adding restricted delete action in Dynamics 365 finance and operations. Once you have done all the above steps, you need to build the project successfully. After the successful build of the project, Right-click on the table PrdCategoryTable and select Open Table Browser to open the table in the browser. Wait for a minute, a table browser will open in the browser, and you can enter some dummy data into the PrdCategoryTable as shown in the below figure.

Restricted Delete Action in Dynamics 365 Finance and Operations

Similarly, Right click on the table PrdTable and select Open Table Browser to open the table in the browser. Wait for a minute, a table browser will open in the browser, and you can add some dummy data into the PrdTable as shown in the below figure. here I added some product records by referring to the CategoryId 1000 from the table PrdCategoryTable.

Restricted Delete Action in Dynamics 365 Finance and Operations


Now we are going to test the restricted delete action applied to the tables. For this, Delete a record from the parent table.

Restricted Delete Action in Dynamics 365 Finance and Operations

When I tried to delete a record from PrdCategoryTable with CategoryId as "1000", which showing a warning message (This warning message will generate only if the delete action is performed through the user interface). This is because PrdTable refer cateoryId "1000" from the table PrdCategoryTable. if we set the delete action property to restricted, if any related records exist, system will not allow to delete record from parent table untill the child records deleted. In this case you need to delete the related recods from child table. 

Delete record from PrdTable

Restricted Delete Action in Dynamics 365 Finance and Operations

Restricted Delete Action in Dynamics 365 Finance and Operations

Delete record from PrdCategoryTable

Restricted Delete Action in Dynamics 365 Finance and Operations

Restricted Delete Action in Dynamics 365 Finance and Operations

Now you can see that , once the related records from child table (PrdTable) is deleted, you can easily delete the record from parent table (PrdCategoryTable).

Note: - A programmer can use .validateDelete() and this will return true or false values, based on the result, a developer can do the action.

As a result, super(), in validateDelete, checks whether records exist on related tables. If records do exist, validateDelete returns false. The forms system ensures that the deletion is not performed. In your own X++ code, check the return value of validateDelete. Don't delete the primary or related records if the method returns false.

I think this article will be very useful for beginners to get the exact concept ot restricted delete action. if the article is useful, please try to share it with your friends who are planning a career in D365 FO. Happy coding with D365Snippets.

What is Power BI Desktop & The flow of work in Power BI

What is Power BI Desktop? Power BI Desktop is a powerful business intelligence tool developed by Microsoft. It is part of the Power BI suite, which includes other components like Power BI Service (cloud-based service) and Power BI Mobile (mobile app). Power BI Desktop allows users to create interactive visualizations, reports, and dashboards from various data sources.

With Power BI Desktop, you can connect to a wide range of data sources such as databases, Excel files, CSV files, SharePoint lists, cloud services, and more. It provides a user-friendly interface for data transformation and modeling, allowing you to shape and clean your data before analysis. You can apply various transformations, such as filtering, merging, appending, and creating calculated columns.

Power BI Desktop offers a rich set of visual elements like charts, tables, maps, matrices, and gauges. These visuals can be customized and formatted to suit your needs. You can also create interactive reports with slicers, filters, and drill-through capabilities, enabling users to explore data and gain insights. Once you have connected to your data and transformed it, you can create compelling visualizations using a drag-and-drop interface.

Power BI Desktop supports the creation of advanced calculations and measures using a formula language called DAX (Data Analysis Expressions). DAX allows you to define complex calculations based on your data model, enabling calculations such as aggregations, time intelligence, and custom calculations. Additionally, Power BI Desktop provides the ability to create relationships between different data tables, enabling cross-filtering and data synchronization across visuals. This allows you to build comprehensive dashboards with interactive elements that provide a holistic view of your data.

What is Power BI Desktop

The flow of work in Power BI

Once you have created your report or dashboard in Power BI Desktop, you can publish it to the Power BI Service, where you can share it with others, collaborate, and schedule data refreshes. The Power BI Service also provides additional features like data alerts, natural language queries, and the ability to embed reports and dashboards in other applications.

What is Power BI Desktop & The flow of work in Power BI
A common flow of work in Power BI begins in Power BI Desktop, where a report is created. That report is then published to the Power BI service and then shared so users of Power BI Mobile apps can consume the information.

In summary, Power BI Desktop is a comprehensive and versatile tool for data analysis and visualization. It empowers users to connect to various data sources, transform and model data, create interactive reports and dashboards, and share insights with others.