Skip to main content

CSV failing to load Staging in D365 FO (The data value violates integrity constraints)

 


There are many ways to implement integration with Dynamics 365 for Finance and Operations.

The file-based approach is probably the oldest and most commonly used integration type. Using this approach, an external system and D365FO send messages by reading/writing files into some shared network folder. It has the following advantages:

Very clear responsibility (you either have a file in the correct folder or not);

It is easy to troubleshoot (you can view the file, can modify it, etc..);


There are a few reasons behind failing files(CSV) to import before staging in the DMF process.

  •  Primary Index at staging table

 This is the most common issue we will reason behind failing data behind staging, to fix this issue either make sure we have corrected our import data based on the Table index structure we designed to import data or modify Index as per the incoming XML file.

 

  • File format issues

  1.  The Other reason could be due to the file having incorrect/ in proper data. Always make sure we had all columns coming in the file which we used for mapping.
  2.  Due to additional Special characters ( ex: Description: Amex, Joe), CSV file will consider as two separate columns  
  3.  Files generated by Third-party applications

         While files are getting generated by third-party applications, at times we will get with specific     Row Delimiters and they will start failing in staging with error (The data value violates integrity constraints.)

 We will not see a difference if we try to open a file using notepad/CSV formats.

Open the file in NotePad ++



Go to View -> show symbols -> show All characters


Now you can find the exact Delimiter coming in a file, generated by an external application.


Make sure we had the right setup in the Source data format used at our entity.
Note: While modifying make sure only source data formats using by your entity, else it will start failing for other entities which are expected to come in different Delimiter formats.







Comments

Popular posts from this blog

Form Auto refresh in D365 fo

Here I will explain one of the requirements I came across to refresh from automatically without User interaction.  Note: Make sure we do have all the handlers to stop UIrefreshing after certain hours of execution, else it causes the system to slow down after a certain time of continuous usage of this UI in the below example to overcome this case we use to check session login time and stopping form to refresh after certain hours of execution. Recommended to use this on pages that hold less data or smaller data sets. - NoofSeconds .value() is an integer control on UI that allows the user to choose a value.( best to fix a value like 5 seconds or a Minimum value to avoid unnecessary executions) Create a new form method and create as of below. void refreshFormWithTimeout (AsyncTaskResult _result)     {         System.Exception ex;         try         {              if(!element.closed...

Splitting Sring through X++ in DAX

  Splits a string into a list of substrings delimited by elements in the specified delimiter string. static void StringSplit(Args _args) {        List            list = new List(Types::String);     container PackedList;     ListIterator  iterator;     str can = "Lev_Sales00001_1";         list = Global::strSplit(can,"_");     iterator = new ListIterator(list);     while(iterator.more())     {       PackedList +=   iterator.value();         iterator.next();     }     info(conPeek(PackedList,1));         } output :  

SQL script to Fetching Tables list holding more data

  There may be times when we need to restore a database from a non-production or production environment for troubleshooting purposes, and we may encounter a DB size issue or need to know a list of tables with large amounts of data in order to enable purging them. This query returns a list of tables that contain large amounts of data in sequential order.  Query to Execute in SQL SELECT s.Name AS SchemaName             ,t.Name AS TableName             ,p.rows AS RowCounts             ,CAST(ROUND((SUM(a.used_pages) / 128.00), 2) AS NUMERIC(36, 2)) AS Used_MB             ,CAST(ROUND((SUM(a.total_pages) - SUM(a.used_pages)) / 128.00, 2) AS NUMERIC(36, 2)) AS Unused_MB             ,CAST(ROUND((SUM(a.total_pages) ...