Encryption error occurred with exception or CryptoEncryptionException error in D365 FO - D365 F&O

Hello everyone, 

Today I came across the below error after restoring the data base from a Tier-2 (SIT/UAT/TEST) environment which has integrations enabled (Dual Write, Business Events... etc., etc.,)



Root cause:

There could be many reasons why this issue might have come but in my case this occurred due to the left over records(data looks like API keys, Dual Write configuration details, Azure key vault related data) caused the issue.

X++ Code to Create and Release a Product in D365 F&O

Hello everyone,

Today I came across a requirement for Creating and Releasing a Product in D365 FO. Earlier version Ax 2012 has a lot of class's to achieve the requirement but those got deprecated and below is the new way(at least for me) to achieve the requirement.

Args args;
EcoResProductEntity ecoResProductEntity;
EcoResProductEntityToCrossTableDataAdaptor adaptor;
EcoResProduct product;
EcoResProductReleaseSessionManager productReleaseSessionManager;
EcoResReleaseSessionRecId releaseSessionRecId;
NumberSequenceReference numberSequenceReference = EcoResProductParameters::numRefProductNumber();
NumberSequenceTable numberSequenceTable = numberSequenceReference.numberSequenceTable();
NumberSeq numberSeq = NumberSeq::newGetNumFromId(numberSequenceTable.RecId);
CompanyInfo companyInfo = CompanyInfo::find();

X++ Code to create, validate & post "Project Journal" ( Fee, Hour, Expense type journals) in D365 FO || Ax2012

Hello everyone,

Today i would like to post a code snippet for creating and posting a project journal, by using this we can also Create/post Fee(Revenue), Hour, Expense type journals as well.

static void ProjJournalCreateAndPost(Args _args)
{
       // Variable declaration
        ProjJournalTable            jourTable;  
        ProjJournalTrans            jourTrans;  
        ProjJournalTableData    jourTableData;
        ProjJournalTransData    jourTransData;
        ProjJournalStatic            jourStatic;
        ProjJournalCheckPost    jourPost;
 

X++ Code to Create Zip Files in D365 - D365 F&O

Hello Everyone,

Today we will be looking at, how to create a Zip file by using X++ code, while exporting data from the system. Let us see how the code is build.

using System.IO.Compression;

public void createZipFile(Map _cStoreErrorData)
{
    MapEnumerator mapEnumerator = _cStoreErrorData.getEnumerator();
       
        if (_cStoreErrorData.elements() > 0)
        {
            using(System.IO.MemoryStream zipStream  = new System.IO.MemoryStream())
            {
                using(System.IO.Compression.ZipArchive archive  = new System.IO.Compression.ZipArchive(zipStream, System.IO.Compression.ZipArchiveMode::Create, true))

X++ Code To Use Existing NumberSeq While importing Data via OData Services - D365 F&O

Hello Everyone,

Today we will be looking at using the existing number sequence while importing a record using Odata and to have the record imported with automatic number sequence on any field. We need to overwrite the initValue method of DataEntity. Let us see how is the code is build.

public void initValue()

{
    if  (!this.skipNumberSequenceCheck())
    {
        NumberSeqRecordFieldHandler::enableNumberSequenceControlForField(this,
                                                                         fieldNum(

X++ Code to Post Sales Order Invoice line by line - D365 F&O || AX 2012

Hello Everyone,

Today we will be looking at how to invoice a Sales order line by line. We usually use "SalesFormLetter" class and "run" method to post and SO which will post the entire SO and all the lines in it. Recently I have come across a new requirement while posting an SO i.e.., to post the SO invoice line by line. So lets see how the code is build.


Public static void salesOrderInvoiceByLine(SalesLine    _salesline)
{
        salesFormLetter         salesFormLetter;
        salesFormletterParmData salesFormLetterParmData;
        salesParmUpdate         salesParmUpdate;
        salesParmTable          salesParmTable;
        salesParmLine           salesParmLine;
        salesTable              salesTable;
      
        ttsbegin;
        salesTable  = salesTable::find(_salesline.SalesId);
        salesFormLetterParmData = salesFormletterParmData::newData(DocumentStatus::Invoice, VersioningUpdateType::Initial);

        salesFormLetterParmData.parmOnlyCreateParmUpdate(true);
        salesFormLetterParmData.createData(false);
        salesParmUpdate = salesFormLetterParmData.parmParmUpdate();

        salesParmTable.clear();
        salesParmTable.TransDate                = _salesline.ReceiptDateRequested;
        salesParmTable.Ordering                 = DocumentStatus::Invoice;
        salesParmTable.ParmJobStatus            = ParmJobStatus::Waiting;
        salesParmTable.salesId                  = salesTable.salesId;

X++ Code to get Address Lookup Based On Purpose D365 FO || Ax2012

Hello everyone, 

In our day to day life we(Developers) always come across address requirements very frequently, so today's post is related to it.  

Fetching customer/Vendor address based on purpose.

public static void customerInvoiceAddresslookup(FormStringControl   _control,
                                                                                  DirPartyRecId          _party)
{
    query                                    query;
    QueryBuildDataSource        qbds;
    SysTableLookup                   sysTableLookup;
    LogisticsPostalAddress        address = null;
    DirPartyLocation                   partyLocation;
    DirPartyLocationRole            partyLocationRole;
    LogisticsLocationRole           locationRole;

    query   = new Query();
    sysTableLookup = SysTableLookup::newParameters(tableNum(LogisticsPostalAddress), _control);

AX 2012 Development Introduction

These materials are very helpful to the beginners.

Click Here To Download

DIXF:"Entity name must be filled in" In Ax 2012 R3 CU8, CU9, CU 10

Hi Friends, today while I was working on DIXF framework, I faced this warning message (Which is not allowing me to perform any other operations) "Entity name must be filled in".


This Issue has occurred in AX 2012 R3 CU8 version(for myself). I also found that when ever we upgrade to any higher version of AX 2012 like CU9, CU10 we will encounter with this same warning.

Solution to this issue can be done in two ways,

Important Note:
1st workaround will be helpful for the people who are working on AX 2012 R3 CU9, CU10.
2nd workaround will be helpful for the people who are working on AX 2012 R3 CU8 or any  older versions.

SSRS DrillThrough Reports in Ax 2012

Hi Friends, today I would like to share my learning related to SSRS DrillThrough reports, Please follow the below steps to achieve the DrillThrough functionality.

1.  Open the report for which DrillThrough functionality needs to be applied.
2.  Create a new data method as shown below
3. Rename the newly added data method to PurchaseOrder
4. Open the data method PurchaseOrder and we will find the newly added Business logic project added to the same solution as show below.
Method Content:












X++ code for getting "BusinessUnit" Address based on "OmOperatingUnitNumber" & "OmOperatingUnitType" in D365 F&O || Ax 2012

Hi everyone, 

The blow code snippet is used to get the Business unit address based on OmOperationUnitNumber and OmOperationUnitType.

static void getBusinessUnitaddress(Args _args)
{
    OMOperatingUnit   operatingUnits;

    select firstOnly * from operatingUnits
        where operatingUnits.OMOperatingUnitNumber  == "047" && // operating unit number
        operatingUnits.OMOperatingUnitType          == OMOperatingUnitType::RetailChannel; // operating type

    info(strFmt("%1",operatingUnits.primaryAddress()));
}

Proud To Be a DAX Developer :-) 

X++ code to get the Mandatory Fields in table in Ax 2012

Hi Friends, To day i would like to post a small job/Snippet which will be helpful in our day to day development to get the list of mandatory fields from a specified table.

Let me put it this way, some times we have to duplicate/Mimic a standard functionality without disturbing the standard flow/objects etc.etc..  in such cases this will be very helpful for us to get the list of mandatory fields from each table, instead of going to the each table and find out the properties.

Please find the below code snippet 

static void CheckMandatoryFieldsOnTable(Args _args)
{
        DictTable   dictTable;
        DictField    dictField;
        Counter      i;

        TableId       tableId = tablenum(SalesTable);//Table name
     
        dictTable = new DictTable(tableId);
 
        info(strFmt("Total No. of fields in: %1 are: %2\n\n\n",tableId2name(tableId),  dictTable.fieldCnt()));

        info('Mandatory Fields are following');

        for (i=1 ; i<=dictTable.fieldCnt() ; i++)
        {
            dictField = new DictField(tableId, dictTable.fieldCnt2Id(i));
            if (dictField.mandatory())
            {
                info(dictField.name());
            }
        }
}

Proud To Be a DAX Developer :-)

SSRS Tips: X++ code to get Company Logo in D365 F&O || Ax 2012

Hi Everyone, 

There are multiple ways for presenting Company logo in SSRS reports(i.e. RDP reports). Today I would like to share my way of inserting the company logo into  tempTable.

   // Variable declaration
   CompanyInfo        companyInfo = companyInfo::find();

How to write X++ methods on the list page Form in Dynamics AX 2012

Scenario: I have a menu item that calls some class to execute business logic on the list page Form. List pages do not allow writing of code on the Form, as they used interaction class.

Solution: You can write the code on list page buttons by setting DisplayTarget property to “Client” from auto, as shown in the below Fig:1.0


Fig: 1.0
Note: After this change, you won’t be able to use this button on the EP, so if you are thinking of using the same list page on the EP and planning to use the same button there, then do not do it. However if you are using only the Rich client Form then you are good to do this.

Proud To Be a DAX Developer :-) 

SSRS:How to create SSRS Reports using AOT Query & Auto design in Ax 2012

OverView:
There are multiple ways to develop SSRS reports in Dynamics AX. This tutorial will guide you through the process of developing SSRS reports using an AOT query and auto design.
Pre-requisites
  1. Microsoft Dynamics AX 2012
  2. Visual studio 2012
  3. SQL Server report server must be configured
  4. Reporting services extensions must be installed in Dynamics AX
Steps
  1. First of all we need an AOT query which will fetch data from AX and display it in a report. For this tutorial, I am using an existing query in AX which displays a list of customers.
  2. CustTableListPage query will be used in this tutorial. To find this query, open AOT àQueriesàCustTableListPage.
  3. The development of the SSRS report is done in Visual studio. So a new project needs to be created in Visual studio.
  4. Open Visual studio. Go to File à New à Project.
  5. In the section Installed templates select Microsoft Dynamics AX and then select Report Model in the right pane. Name the project “QueryBasedDemo“. Press OK.

Table Inheritance In Microsoft Dynamics Ax 2012

Table Inheritance :

  • A table can extend from or derive from another table. Each table has the SupportInheritance property and the Extends property, which together control table inheritance.
  • The default for each new table is to implicitly extend from the Common table. The extension from the Common table cannot be set or seen in the Extends property. A variable that is declared of a specific table also implicitly inherits methods from the xRecord class.
  • In the terminology for table inheritance, we say that the derived table extends its base table. But we never use the terms parent or child to explain tables in an inheritance relationship. The terms parent and child can be used to describe foreign key relationships between tables.
  • In Microsoft Dynamics AX, a table can inherit from another table. The AOT node for each table has the Extends property which you can use to derive your table from a table that you specify. 

Table inheritance is mainly controlled by the following properties:

  1. SupportInheritance – specifies if a table is a part of a hierarchy.
  2. InstanceRelationType – specifies the field that is used as a type discriminator. TableIds of concrete types are used as values of the InstanceRelationType field.
  3. Abstact – specifies if a table is abstract. Tables without derived tables cannot be abstract.
  4. Extends – specifies table’s parent.

Difference Between LinkType and JoinType in Dynamics Ax 2012

Hi Everyone today i would like share information on Link types and Join Types. 
  • Link type is a property of the form data source. We can add more than one tables as a data source to the form.
  • Those data sources should have the table level relation, So, that the developer don't need to work on the coding part to find the related records. 
For example, if we create the order form, that order form has orders and orderdetails tables as form data sources. We can add both tables as a data sources to the form.

Link Type:

  •  Active:  Parent and child- data source is updated immediately when a new record in the parent data source is selected. Continuous updates consume lots of resources consuming.

CrossCompany Vs ChangeCompany In Dynamics Ax 2012

Hi Everyone today i would like share information regarding how to retrieve data from Selected companies or from a specified company by using Keywords known as CrossCompany and ChangeCompany in Dynamics Ax, with a simple example.  

CrossCompany :  By using this keyword we can retrieve data from multiple selected companies or from all companies.
Example:-  We'll be using the well known demo data table (i.e, CustTable).

                    CustTable                 custTable;
                    Container                  con;
                 // Assigning the required Companies to the container 
                    con = ["CEU","DAT","CEE"];
                // CrossCompany:Object is the syntax for using CrossCompany keyword
                    Select crosscompany:con custTable;
                    
info( strfmt("%1",custTable.accountnum));

ChangeCompany : By using this keyword we can change company any time and retrieve data from specific companies. 

For Easy Understanding: Let say i'm in the CEU Company and i would like to get the data belonging to the CEE Company. Then i would Prefer to Use ChangeCompany Keyword.

Example:-
                    CustTable                 custTable;
                    Select * from custTable;
                    
info( strfmt("%1",custTable.accountnum));
//Accessing the data from a specified company by using the ChangeCompany Keyword
// changecompany("Company Name")  is the Syntax for ChangeCompany Keyword.
                    changecompany("CEE")
                    {
                        
custTable = null
                        Select * from 
custTable;
                        
info( strfmt("%1",custTable.accountnum));
                     }
// Retrieving from another selected Company
                    changecompany("CEEU")
                    {
                         
custTable = null
                         Select * from 
custTable;
                         
info( strfmt("%1",custTable.accountnum));
                     }                    

Proud To Be a DAX Developer :-)