• Skip to main content
  • Skip to primary sidebar
  • Home
  • About
  • Recommended Readings
    • 2022 Book Reading
    • 2023 Recommended Readings
    • Book Reading 2024
    • Book Reading 2025
  • Supply Chain Management Guide
  • PKM
  • Microsoft Excel

Ali Raza Zaidi

A practitioner’s musings on Dynamics 365 Finance and Operations

Dynamics Ax 2012 Technical Side

Little helpful X++ editor extensions for Dynamics Ax 2012 R3.

July 14, 2014 by alirazazaidi

During search I found link codeplex for X++ extension, freely available Extensions at CodePlex by  José Antonio Estevan Estevan. This extension helped me to identify

  • Starting and ending of brackets.

–highlightbacket

  • Collapse and un-collapse sections wrapped with {- and }-brackets.

Collpase

  • Highlight the all occurrence of keyword in method similar to  NotePad++

HighlightKeyWords Installation of this extension is also very easy.

  • Download Zip file from following link from codeplex. http://ax2012editorext.codeplex.com/
  • Extract zip file.
  • Close all Dynamics Ax client instances on development machine.
  • Copy all files in extracted folder.
  • Paste all in following location.

X:\Program Files (x86)\Microsoft Dynamics AX\60\Client\Bin\EditorComponents Instal     Inspiration: http://yetanotherdynamicsaxblog.blogspot.com/2013/03/free-editor-extensions-for-ax2012.html

How to integrate Dynamics AX 2012 R3 AIF Document Service with BizTalk server

July 1, 2014 by alirazazaidi

Purpose: Purpose of this post is help to Consume AIF Document service in BizTalk and call its method.

Assumption: that target audience has deep knowledge of BizTalk, mapping, schema and orchestration.

 

First of all you have to create service group that is gateway to your document service. For this post I have to consume VendVendGroupService. I create a new service group  in AOT and drop VendVendGroupService to that node as follow

 

ServiceGroup

 

Right click and deploy the service group.

 

Deploy Service Group

 

 

Wait for generate Increment CIL and Infobox shows deployment of All possible Service group

VendorServiceGroupInfolog

 

Now to System Administration module of dynamics Ax. Click on System Administrationè Setup è Services and Integration frameworkè inbound port.

 

InBound Port

 

 

Now create a visual studio project for BizTalk. There are three sub solution, One for Schema, Map and third for orchestration.

 

In Schema solution. Add the generate Items and then select consume wcf Service

ConsumingAiFservice

 

Now add copy wsdl to generate Schemas.

Select metadata Exchange (MEX) endpoint

 

MetaData

 

 

Click next and generate schema

 

Schema Generation

 

Wsdl

 

 

Schema is generated.

 

VendorGroupSchema

 

Go to Schema project and delete the Vendor Group Service Orchestration.

 

 

Required Services

 

Important Schema which will used in mapping.

 

 

EntityKeyList Schema has following fields which are used to set values in Request response methods.

 

Entity List Schema

 

This key value pair used for search , Field represent table field Name and value is search field.

 

VendorGroupSchemaDetail

 

VendorGroup schema is replicate of VendorGroup table, here we use SenderId is used legal entity where operation will perform.

 

If we see the Service Schema, here all request and response methods are generated.

 

ServiceSchema

 

 

One Schema I create to take input to Interface, and decide which operation is performed I called it for InputSchema.

 

CustomSchema

 

This Schema will use for input to Interface. We will discuss it later when we start mapping one by one.

 

 

Bindings:

As compare to other wcf service, when we consume wcf service, empty binding files are generated, so we have create binding operations manually.

These operations are based on AIF service Object not AIF service Group, where I wasted hours on it.

Please consider the following screenshot for Service operations used in binding files.

ServiceOperations

 

The operations in BtsAction will be generated as follow.

Namespace +/+ExternalName+”/”+method name. All Action are similar. For example

 

http://WIN-IKPOSIU2SGD:8101/DynamicsAx/Services/VendorGroupService/read.

 

Settings for BizTalk Send Receive port is as follow.

 

NetTCPBindings

 

 

Pipeline settings:

Send Pipeline should be XML Transmit.

Receive Pipeline should be XML Receive.

Click on Configure Button and set as following.

 

WCF Settings.

 

Remember the Operation Name in SOAP action header mast be identical to Operation Name in logical port in Orchestration.

1234

 

All action mapping is as follow.

 

<BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<Operation Name="ReadOP" Action="http://schemas.microsoft.com/dynamics/2008/01/services/VendGroupService/read" />

<Operation Name="CreateOP" Action="http://schemas.microsoft.com/dynamics/2008/01/services/VendGroupService/create" />

<Operation Name="UpdateOP" Action="http://schemas.microsoft.com/dynamics/2008/01/services/VendGroupService/update" />

<Operation Name="DeleteOP" Action="http://schemas.microsoft.com/dynamics/2008/01/services/VendGroupService/delete" />

<Operation Name="FindOP" Action="http://schemas.microsoft.com/dynamics/2008/01/services/VendGroupService/find" />

</BtsActionMapping>

Mappings:

I attached  screenshots for mapping used for calling AIF methods.

 

Read Method:

 

Read method is two-step process, first step map the input to Entity list, and then Entity list  to VendGroupReadRequest

 

 

Input_To_EntityList

 

Entitylist_to_VendGroupRequestRead

 

 

Create Method:

In the case of Create Mapping is as follow.

 

InputSchema_to_VendorGroup

 

VendorGroup_to_CreatVendorGroupRequest

 

Delete Method:

 

EntityList_To_DeleteRequest

 

 

 

Update Method:

Update is little tricky, There is field in Update Request Schema, _DocumentHASH, This Field is hidden and every row has its unique value, without that row is did not updated. According to Microsoft Documentation, First you get /find required record using read or find method and then use response data to Update it. For saving time and for the sake of this tutorial, I just pic the_docuemntHash key form previously read response method and hardcode it in map. This is not generic way, but this solve the temporary and my wants to run the Update AIF document method.

 

FindMessage

 

 

Find method:

Find method is works wonder, if you want to search more than one or all records you can call Find method, where is field with Operation, where you can mentions, value Equal, not equal, greater then equal etc. I want to get all vendor group from Dynamics In response, so I sent its value “not equal”. Response message return all values.

 

FindMessage

 

The code of this tutorial is attached, you can download it from here.


Exception has been thrown by the target of invocation in dynamics Ax

June 23, 2014 by alirazazaidi

Exception has been thrown by the target of invocation in dynamics Ax.
I got this error on my VM. On closely examination, I found that In AOT Data dictionary is not synchronize with Sql Server . I perform following steps to resolve this error
Exception Has been thrown by the traget of an invocation

• Right click on data Dictionary and synchronize the data Dictionary.
• Right click on AOT and compile it, it step take longer time. In the case of any error in any class, fix the issue and compiled.
• Generate full CIL.

Exploring Report Controller class in dynamics AX 2012 R3

June 21, 2014 by alirazazaidi

In Dynamics AX 2012 Reports can be called from Class, and it is import part of MVC pattern implementation for reports
The report created from following link is called from controller class
http://tech.alirazazaidi.com/exploring-drill-through-reports-in-dynamics-ax-2012-r3/
Create a new class and extends it with “SRSReportRunController” class.
Add New method, and update it with following code

public static void main(Args args)
{
DyWorldDrillThroughReportController _Con= new DyWorldDrillThroughReportController();
    _Con.parmReportName(ssrsReportStr(DynamicCustomerList,DesignCustomerList));
    _Con.parmArgs(args);
    _Con.startOperation();
    
}


When you run the class report will be open.

ReportController

 

Very interestingly if you did not want to show report dialog, and just run the report form default parameter value you have to add following statement in above code

_con.parmShowDialog(false);

A call to the Microsoft Dynamics AX SRSFramework Service failed.

June 13, 2014 by alirazazaidi

Today while deploying Dynamics AX 2012 R3 SSRS reports on window 7 I got following when I run Report deployment command on publish-AXReport -ReportName *.

“A call to the Microsoft Dynamics AX SRSFramework Service service failed. An existing connection was forcibly closed by the remote host.“.

Errors

I perform following steps to solve this problem.
1. Stop reporting services,
2. Stop AOS.
3. Goto: C:\Users\\AppData\Local\

UAC files
4. Take the backup of all AUC files,
5. Remove them from there
6. Start reporting services
7. Start AOS.
8. Again run publish-AXReport -ReportName *. In powershell.

Reports are successfully deploy on my machine.

References:

http://dynamics-ax.blogspot.no/2013/03/ax-2012-fatal-axrdce-exception-error.html

https://community.dynamics.com/ax/f/33/t/115327.aspx

SQL Server 2012 Reporting Services UAC (User Access Control)

May 25, 2014 by alirazazaidi

While configuring Reporting server with Dynamics Ax 2012 R23, I got error that Dynamics Ax 2012 R3 did not validate the Reporting Server. On Opening reporting server in Browser I got following error.

“User ‘Domain\User’ does not have required permissions. Verify that sufficient permissions have been granted and Windows User Account Control (UAC) restrictions have been addressed.”

 

1-error

After searching and trouble shooting, I found that nor Dynamics Ax Client or IE run with administrator rights.

First I run the IE with Administrator rights
From Start > All Programs > Internet Explorer, Right Click and choose Run as administratorimage_thumb132

 

Enter the Reporting Server Address.

This open the Reporting server in IE.

2-Successfully Login

 

After That I open the Dynamics Ax client By right click and open with Administrator

3-Run As Administatrator

 

On Administrator section,  on validate the configuration settings, and SSRS successfully configured on My Machine.

4-Validation

Customer Form run from Job

February 22, 2014 by alirazazaidi

Here is the code in X++:
public static void CustomerForm(Args _args)
{
//Initialization
DictTable dictTable;
DictTable dictTable1;
Form form;
FormBuildDesign design;
FormBuildDataSource formBuildDataSource;
FormBuildDataSource formBuildDataSource1;
FormBuildActionPaneControl actionPane;
FormBuildActionPaneTabControl actionPaneTab;
FormBuildButtonGroupControl buttonGroup1;
FormBuildButtonGroupControl buttonGroup2;
FormBuildCommandButtonControl CommandNew;
FormBuildCommandButtonControl CommandDelete;
FormBuildMenuButtonControl CustomerButton;
FormBuildFunctionButtonControl NewCustomerButton;
FormBuildFunctionButtonControl ForecastButton;
FormBuildGroupControl Grp;
FormBuildGridControl grid;
FormBuildGroupControl grpBody;
Args args;
FormRun formRun;
#task
//Adding DataSources
dictTable1 = new DictTable(tableNum(CustTable));
dictTable = new DictTable(tableNum(DirPartyTable));
form = new Form();
form.name(“Customer Overview”);
formBuildDataSource = form.addDataSource(dictTable.name());
formBuildDataSource.table(dictTable.id());
formBuildDataSource1 = form.addDataSource(dictTable1.name());
formBuildDataSource1.table(dictTable1.id());
//Building Form Design
design = form.addDesign(‘Design’);
design.caption(“Overview”);
design.style(FormStyle::SimpleList);
design.titleDatasource(formBuildDataSource.id());
//Adding Action Pane and Buttons
actionPane = design.addControl(
FormControlType::ActionPane, ‘ActionPane’);
actionPane.style(ActionPaneStyle::Strip);
actionPaneTab = actionPane.addControl(FormControlType::ActionPaneTab, ‘ActionPaneTab’);
buttonGroup1 = actionPaneTab.addControl(FormControlType::ButtonGroup, ‘NewDeleteGroup’);
buttonGroup2 = actionPaneTab.addControl(FormControlType::ButtonGroup, ‘ButtonGroup’);
CommandNew = buttonGroup1.addControl(FormControlType::CommandButton, ‘NewButton’);
CommandNew.buttonDisplay(FormButtonDisplay::TextAndImageLeft);
CommandNew.normalImage(’11045′);
CommandNew.imageLocation(SysImageLocation::EmbeddedResource);
CommandNew.primary(NoYes::Yes);
CommandNew.command(#taskNew);
CommandDelete = buttonGroup1.addControl(FormControlType::CommandButton, ‘NewButton’);
CommandDelete.text(“Delete”);
CommandDelete.buttonDisplay(FormButtonDisplay::TextAndImageLeft);
CommandDelete.normalImage(’10121′);
CommandDelete.imageLocation(SysImageLocation::EmbeddedResource);
CommandDelete.saveRecord(NoYes::Yes);
CommandDelete.primary(NoYes::Yes);
CommandDelete.command(#taskDeleteRecord);
CustomerButton = buttonGroup2.addControl(FormControlType::MenuButton, ‘CustomerquickCreate’);
CustomerButton.helpText(“Create New Customer”);
CustomerButton.text(“Customer”);
NewCustomerButton = CustomerButton.addControl(FormControlType::MenuFunctionButton, ‘CustomerquickCreate’);
NewCustomerButton.text(‘New’);
NewCustomerButton.saveRecord(NoYes::No);
NewCustomerButton.dataSource(formBuildDataSource.id());
NewCustomerButton.menuItemName(menuitemDisplayStr(CustomerquickCreate));
ForecastButton = buttonGroup2.addControl(FormControlType::MenuFunctionButton, ‘SalesForecast’);
ForecastButton.text(‘Forecast’);
ForecastButton.saveRecord(NoYes::No);
ForecastButton.menuItemName(menuitemDisplayStr(ForecastSalesGroup));
//Body
grpBody = design.addControl(FormControlType::Group, ‘Body’);
grpBody.heightMode(FormHeight::ColumnHeight);
grpBody.columnspace(0);
grpBody.style(GroupStyle::BorderlessGridContainer);
grid = grpBody.addControl(FormControlType::Grid, “Grid”);
grid.dataSource(formBuildDataSource.name());
grid.widthMode(FormWidth::ColumnWidth);
grid.heightMode(FormHeight::ColumnHeight);
grid.addDataField(formBuildDataSource.id(), fieldNum(DirPartyTable,Name));
grid.addDataField(formBuildDataSource1.id(), fieldNum(CustTable,AccountNum));
grid.addDataField(formBuildDataSource.id(), fieldNum(DirPartyTable,LanguageId));
Grp = design.addControl(FormControlType::Group, ‘Group’);
ForecastButton = Grp.addControl(FormControlType::MenuFunctionButton, ‘SalesForecast’);
ForecastButton.text(‘Forecast’);
ForecastButton.menuItemName(menuitemDisplayStr(ForecastSalesGroup));
args = new Args();
args.object(form);
formRun = classFactory.formRunClass(args);
formRun.init();
formRun.run();
formRun.detach();
}

Restart Ax 2012 Services via the command line

February 10, 2014 by alirazazaidi

AOS services can be start or stop through command line. Similar other services, One way to make .bat files and run them.

net stop “<"service name">”
net start “<"service name">“

So restarting the AOS service named AOS60$01 would be:

net stop AOS60$01
net start AOS60$01

You can determine the service name by going to Control Panel -> Administrative Tools -> Services and double clicking on the Service and looking in the field ‘Service name’.

Similarly you can restart the report server using:

net stop ReportServer
net start ReportServer

Power script commands and Dynamics Ax 2012 SSRS reports.

January 13, 2014 by alirazazaidi

When you install dynamics Ax 2012, default reports automatically deployed. But sometimes we have to deployed the reports manually. Dynamics Ax provides build in PowerShell commands to perform various operations. For testing these commands, you have to run Power shell Management Shell as Administrator.

 

$reports = Get-AXReport -ReportName *

$reports

 

Above power shell scripts helps to get the list of Dynamics Ax 2012 SSRS reports available for deployment.

 

We can also filter the list of report . Dynamics Ax 2012 provide the only two filter options Report Name and changed date. You can use following statement.

$reports | Select-Object Name,ChangedDate

 

For example if we want all reports similar to ABC classification we can filter something like this

$reports | Select-Object Name,ChangedDate | Where { $_.Name -like "ABC*" }


If reporting Server is install and configured with Dynamics Ax 2012, we can use following statements to deploy all available reports.

If we want to deploy a single required report we have to use following statement.
Publish-AXReport –Id SSRSConfigID -ReportName CustTransList
In my case SSRSConfigID will be machine name
Publish-AXReport –Id dynamicsworld -ReportName CustTransList

If we have to deploy all reports then we can use following statement.

Publish-AXReport –Id SSRSConfigID –ReportName *

Above statement also works if we did not use SSRSConfigID.
Publish-AXReport –ReportName *
 
if you configured the multiple AOS and multiple reporting server then following command works

Publish-AXReport -Id SSRS_2712 –ReportName * -RestartReportServer -ServicesAOSName  <MACHINE NAME> -ServicesAOSWSDLPort 8101

Short introduction to AIF framework

January 5, 2014 by alirazazaidi

Usually we have to communicate with external systems with Dynamics Ax. In many business Scenario, Data is imported from other application or export form Dynamics Ax to external system. For Data Export or import Microsoft provide AIF or application Integration Framework. Consider the following Business scenarios in which Microsoft Dynamics Ax accesses information that is managed in external applications.
The arrows indicate the direction in which requests flow.

AIF
AIF

What can we do with Dynamics AX Aif Services.
• Encapsulate the Business Logic.
• Communicate with external systems.
Encapsulate the Business logic:
With the help of Microsoft Dynamics Ax services framework, we can encapsulate required business logic. For example we can create sales order, purchase order, Create Customers, vendors. These custom business logic will be publish as web service through the Application Integration Framework (AIF). AIF also participate in any Service Oriented architecture (SOA).
Communicate with external systems.
Microsoft Dynamics AX Application Integration Framework (AIF) enables companies to integrate and communicate with other systems (External Systems). This communication is based on external business processes and partners through the exchange of XML over various transport media.
AIF enables Dynamics Ax to integrate Business to business or application to application scenario.

AIF Documents
AIF provides this capabilities by enabling the exchange of data through formatted XML known as Document. These Document contains both data and business logic. These Documents are based on a document class and these document classes are defined by using Microsoft Dynamics AX.
AIF framework supports both synchronous and asynchronous transports.
In Synchronous mode, requests are tightly coupled to response. This means that submitter of request must wait for a response from AIF before processed.
In asynchronous mode, request are placed into a queue. Called the gateway queue. These queued messages are processed later time and AIF sends a response later.
Inbound exchange. AIF can be used to send data into Microsoft Dynamics AX.
Out bound exchange. AIF can also be used to retrieve data from Microsoft Dynamics Ax. This kind of exchange is called outbound exchange.

« Previous Page
Next Page »

Primary Sidebar

About

I am Dynamics AX/365 Finance and Operations consultant with years of implementation experience. I has helped several businesses implement and succeed with Dynamics AX/365 Finance and Operations. The goal of this website is to share insights, tips, and tricks to help end users and IT professionals.

Legal

Content published on this website are opinions, insights, tips, and tricks we have gained from years of Dynamics consulting and may not represent the opinions or views of any current or past employer. Any changes to an ERP system should be thoroughly tested before implementation.

Categories

  • Accounts Payable (2)
  • Advance Warehouse (2)
  • Asset Management (3)
  • Azure Functions (1)
  • Books (6)
  • Certification Guide (3)
  • Customization Tips for D365 for Finance and Operations (62)
  • D365OF (59)
  • Data Management (1)
  • database restore (1)
  • Dynamics 365 (58)
  • Dynamics 365 for finance and operations (135)
  • Dynamics 365 for Operations (165)
  • Dynamics AX (AX 7) (134)
  • Dynamics AX 2012 (274)
  • Dynamics Ax 2012 Forms (13)
  • Dynamics Ax 2012 functional side (16)
  • Dynamics Ax 2012 Reporting SSRS Reports. (31)
  • Dynamics Ax 2012 Technical Side (52)
  • Dynamics Ax 7 (65)
  • Exam MB-330: Microsoft Dynamics 365 Supply Chain Management (7)
  • Excel Addin (1)
  • Favorites (12)
  • Financial Modules (6)
  • Functional (8)
  • Implementations (1)
  • Lifecycle Services (1)
  • Logseq (4)
  • Management Reporter (1)
  • Microsoft Excel (4)
  • MS Dynamics Ax 7 (64)
  • MVP summit (1)
  • MVP summit 2016 (1)
  • New Dynamics Ax (19)
  • Non Defined (9)
  • Note taking Apps (2)
  • Obsidian (3)
  • Personal Knowledge Management (2)
  • PKM (13)
  • Power Platform (6)
  • Procurement (5)
  • procurement and sourcing (5)
  • Product Information Management (4)
  • Product Management (6)
  • Production Control D365 for Finance and Operations (10)
  • Sale Order Process (10)
  • Sale Order Processing (9)
  • Sales and Distribution (5)
  • Soft Skill (1)
  • Supply Chain Management D365 F&O (3)
  • Tips and tricks (278)
  • Uncategorized (165)
  • Upgrade (1)
  • Web Cast (7)
  • White papers (4)
  • X++ (7)

Copyright © 2025 · Magazine Pro On Genesis Framework · WordPress · Log in