HOW TO load xml from a file in C/AL

In the following example we are going to: open a file, create an InStream object, create an XmlDocument using the DotNet component and load the xml from the InStream.

This example requires that you create the following variables:

Name DataType Subtype
TestFile File
Istream InStream
XmlDoc DotNet
System.Xml.XmlDocument.'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'

HOW TO load xml from a file in C/AL?

TestFile.OPEN('C:\TestFolder\TestFile.xml');
TestFile.CREATEINSTREAM(Istream);

XmlDoc := XmlDoc.XmlDocument();
XmlDoc.Load(Istream);

Did my HOW TO help you? Leave a reply.

HOW TO test if a DateFormula variable is empty

We can learn a lot reading Microsoft standard C/AL code.

HOW TO test if a DateFormula variable is empty?

An example is offered in the Table 5088 Profile Questionnaire Line

TESTFIELD("Starting Date Formula",ZeroDateFormula);

Solution:
Create a Global Variable named like ZeroDateFormula of DataType DateFormula and don’t assign any value to it.

Now you can use this variable to test if a DateFormula variable is empty.

IF PeriodLength = ZeroDateFormula THEN
  ERROR(Text001); 

Did my HOW TO help you? Leave a reply.

TableData does not exist

—————————
Microsoft Dynamics NAV Development Environment
—————————
TableData 404 does not exist.
—————————
OK
—————————

TableData 404 does not exist

TableData does not exist

Cause:
You are trying to import from a fob file an existing table in which was changed the value of the property DataPerCompany.

Solution:

  1. delete the Table with number as from the error message (in my case it was 404)
  2. import the object

Related Post: TableData 2000000001 does not exist.

Did my solution solve your problem? Leave a comment.

Method not found

Microsoft Dynamics NAV
—————————

Method ‘Page43.a60Action123a62_a45_OnAction’ not found.
—————————
OK
—————————

Method not found

Method not found

Solution:

  1. open in Design the Page as from the error message (in my case it was Page 43)
  2. press Ctrl+Alt+F4 or go in View -> Page Actions
  3. delete the value from the column “Name” (in my case it was Release)
  4. exit and save the object

Tips & Tricks: To find what is the action the error message is referring, in the message, after the word “Action” there is the value of the ID property (in my case it was 123)

Did my solution solve your problem? Leave a reply.

Root element is missing

Microsoft Dynamics NAV
—————————

This message is for C/AL programmers: A call to System.Xml.XmlDocument.Load failed with this message: Root element is missing.
—————————
OK
—————————

This message is for C/AL programmers: A call to System.Xml.XmlDocument.Load failed with this message: Root element is missing

Assumption:
You verified that the code you are going to load as XML is not empty.

Solution 1:
Verify that each tag has the corresponding closing tag

Solution 2:
Make sure that the stream Position is set to 0 (zero) before to load the Stream

IF stream.Position > 0 THEN
  stream.Position := 0;

Did my solution solve your problem? Leave a reply.

HOW TO change data for all Companies

HOW TO change data for all Companies?

You have different ways to complete this task, the choice depends from how many lines or Companies you have. In the following steps I will explain you how to change data for all Companies in C/SIDE using the CHANGECOMPANY Function (Record):

  1. Create a new ProcessingOnly Report using with the System Table 2000000006 – Company as Data Source of a DataItem.
  2. Declare a C/AL Globals Variable of DataType Record with the table that you need.
  3. Insert the following code in the OnAfterGetRecord trigger

    TO MODIFY

    GLSetup.CHANGECOMPANY(Name);
    
    GLSetup.MODIFYALL("Allow Posting From", 010114D); 
    GLSetup.MODIFYALL("Allow Posting To", 310114D);
    

    or

    TO DELETE

    ChangeLogSetup.CHANGECOMPANY(Name);
    
    ChangeLogSetup.DELETEALL; 
    
    1. Did my HOW TO help you? Leave a reply.

HOW TO calculate the Day of the Year number in C/SIDE

You can calculate the Day of the Year number in C/SIDE by the difference between the date (in my example I use the current date defined by the operating system using the function TODAY) and the first day of year of the date using the CALCDATE function. You need to add 1 to the result to include the day of the date that you are using.

HOW TO calculate the Day of the Year number in C/SIDE

Number := TODAY-CALCDATE('<-CY>',TODAY)+1;

If you need it as Text you need to convert it using the FORMAT function

String := FORMAT(TODAY-CALCDATE('<-CY>',TODAY)+1);

Did my HOW TO help you? Leave a reply.