Friday, 29 March 2013

EP AX2012: Data source metadata error > Unable to logon to Microsoft Dynamica AX

You will encounter this type of error from Enterprise portal, when you try to add AX data set to Dynamics AX user control.




Root cause: The root cause of this issue is “The WSDL Port and/or TCP/IP port number “is not matching with Enterprise portal WSDL / TCP IP port number.



Resolution:

Step1: Check the server configuration on EP server.

Step2: Map the same configuration on the local client.



Hope this will help… Best of luck.-- Mallik

Wednesday, 20 March 2013

Setup Debugger in EP & Debug X++ Code on EP Pages

X++ code can be used in various resources that are accessed by a page, such as tables, data sets, and classes. You can debug X++ code for elements that are accessed by pages by using the debugger for Microsoft Dynamics AX. You can debug Enterprise Portal code only on the system that is running Internet Information Services (IIS).
To set up X++ debugging for pages


1. Log into the server that is running the AOS.

2. Open the Microsoft Dynamics AX Server Configuration utility with administrative privileges (Start > Administrative Tools > Microsoft Dynamics AX 2012 Server Configuration). To run the utility with administrative privileges, you must right-click its icon in the Start menu and choose Run as administrator.

3. Create a new configuration that allows debugging.

1. Click Manage and then click Create configuration. In the Create Configuration window, name the new configuration, such as "DAX Debugging". Click OK.

2. On the Application Object Server tab, select Enable breakpoints to debug code X++ code running on this server. Click Apply. If you receive a message about the AOS, indicate that it should be restarted.

4. Click OK to close the configuration window.

5. Log in to the server that is running IIS and Enterprise Portal. If the system is remote, you can do this using a Remote Desktop Connection. From the Start menu, click Run. Type the following in the Open box and then click OK:

mstsc /console

This opens a console session in Remote Desktop.

6. Enable desktop interaction for the World Wide Web Publish Service.

1. Open the Services window for the system (Start > Administrative Tools > Services).

2. Right-click the World Wide Web Publishing Service, and then click Properties.

3. Click the Log On tab.

4. Select Allow service to interact with desktop.

5. Click OK to close the properties window.

7. Open the web.config file located in \Inetpub\wwwroot\wss\VirtualDirectories\\, where is the port number of the site where Enterprise Portal is installed. Modify the file by doing the following:

1. Locate the compilation element, and then set the debug attribute to true. This reduces the chance of the Web session having a time-out error when it is stopped at a breakpoint.

2. Save the changes.

8. Reset IIS by typing the iisreset command at the command-line window that has been started with administrative privileges.

9. Open the Microsoft Dynamics AX Configuration utility with administrative privileges (Start > Administrative Tools > Microsoft Dynamics AX 2012 Configuration). To run the utility with administrative privileges, you must right-click its icon in the Start menu and choose Run as administrator.

10. Set the Configuration Target drop-down menu to Business Connector (non-interactive use only).

11. Create a new configuration that allows debugging.

1. Click Manage and then click Create configuration. In the Create Configuration window, name the new configuration, such as "DAX Debugging". Click OK.

2. On the Developer tab, select Enable user breakpoints to debug code running in the Business Connector. Click Apply.

12. Click OK to close the configuration window.

13. Open the Microsoft Dynamics AX client with administrative privileges. To do this, you must right-click on the icon for Microsoft Dynamics AX and then choose Run as administrator.

14. Open the Development Workspace.

15. On the Tools menu, click Options to display the Options window.

16. Click the Development link. In the Debug area, select When Breakpoint from the Debug mode list box. This enables debugging mode on the client.

17. Close the Options window.

To debug X++ code from a Web page
 1. Log in to the server that is running Internet Information Services (IIS) and Enterprise Portal. If the system is remote, you can do this using a Remote Desktop Connection. From the Start menu, click Run. Type the following in the Open box and then click OK:


mstsc /console

This opens a console session in Remote Desktop, and is necessary if you want to debug on a remote system.

Note:If you are debugging on a remote system, you must use console mode when connecting. Otherwise, debugging will not work.

2. Open the Microsoft Dynamics AX client with administrative privileges. To do this, you must right-click on the icon for Microsoft Dynamics AX and then choose Run as administrator.

3. Be sure that you are logged on as a user who is also the following:

o The user who started the session of Microsoft Dynamics AX

o The user who will set breakpoints in X++ code

o A member of the Microsoft Dynamics AX Debugging Users local group on Windows

4. Open the Development Workspace.

5. In the AOT, locate the element that you want to debug. Typically, you will debug data sets, tables, or classes.

6. Set breakpoints in the X++ code by using the Code Editor.

7. Open the debugger by clicking Tools, and then clicking Debugger. The Debugger must be open before you can run code that contains breakpoints.

8. Open the Web page that accesses the element that you want to debug. As the page is rendered, the Debugger should stop at the breakpoints that you set.

Monday, 9 July 2012

Tree node to Excel file

static void CreateExcelMallik(Args _args)


{



SysExcelApplication xlsApplication;

SysExcelWorkBooks xlsWorkBookCollection;

SysExcelWorkBook xlsWorkBook;

SysExcelWorkSheets xlsWorkSheetCollection;

SysExcelWorkSheet xlsWorkSheet;

SysExcelRange xlsRange;

AsciiIO tmpfile;

Filename tmpfilename;

FileIOPermission permission;

TreeNode treeNode;

TreeNode treeNodeTables;

#File

#AOT

int row = 1;

str fileName;

;



treeNodeTables = TreeNode::findNode(#SecurityKeysPath);



// Name of the Excel document.



fileName = "C:\\test.xsl";



// Excel open and initialize.



xlsApplication = SysExcelApplication::construct();

xlsApplication.visible(true); //Generate new Excel worksheet.

xlsWorkBookCollection = xlsApplication.workbooks();

xlsWorkBook = xlsWorkBookCollection.add();

xlsWorkSheetCollection = xlsWorkBook.worksheets();

xlsWorkSheet = xlsWorkSheetCollection.itemFromNum(1);

// Write headlines cells in the worksheet.

xlsWorkSheet.cells().item(row,1).value('Name'); xlsWorkSheet.cells().item(row,2).value('ID');

row++;

// first table

treeNode = treeNodeTables.AOTfirstChild();

// Excel worksheet with fill data (Excel fill-cells).

while (treeNode != null)

{

xlsWorkSheet.cells().item(row,1).value(treeNode.AOTname()); xlsWorkSheet.cells().item(row,2).value(treeNode.applObjectId());

row++; // next table

treeNode = treeNode.AOTnextSibling();

}

// Check whether the document already exists.

if(WinApi::fileExists(fileName))

{

WinApi::deleteFile(fileName);

}

// Excel document store.

xlsWorkbook.saveAs(fileName);

//Close Excel.

xlsApplication.quit(); xlsApplication.finalize();

}

Tree Node for Security Key and write to text file.

static void TextFile_TreeNood_Demo(Args _args)


{

AsciiIO tmpfile;

Filename tmpfilename;

FileIOPermission permission;

#File

#AOT

TreeNode treeNode;

TreeNode treeNodeTables = TreeNode::findNode(#SecurityKeysPath);

tmpfilename = WinApi::getTempFilename(WinAPI::getTempPath(),'SecurityKey');

permission = new FileIOPermission(tmpfilename,#IO_write);

permission.assert();

tmpfile = new AsciiIO(tmpfilename, #IO_write);

if(tmpfile.status()==IO_Status::Ok)

{

tmpfile.outRecordDelimiter('\n');

tmpfile.outFieldDelimiter(';');

}

else

{

return;

}



while (treeNode != null)

{

tmpfile.write(strfmt('Name: %1, ID: %2',treeNode.AOTname(), treeNode.applObjectId())); /

}

tmpfile = null;

CodeAccessPermission::revertAssert();

}

AIF Test JOB

static void AIFTesting(Args _args) { AifGatewayReceiveService AifGatewayReceiveService; AifInboundProcessingService AifInboundProcessingService; ; AifGatewayReceiveService = new AifGatewayReceiveService(); AifInboundProcessingService = new AifInboundProcessingService(); AifGatewayReceiveService.run(); AifInboundProcessingService.run(); //ttsabort; }

Sunday, 8 July 2012

Table Tuning (to check this if all tables have Primary,Cluster Index and Caching.

//This Script will check if all tables have // //Primary index //Cluster index //Caching ////NOTE: temp tables are skipped static void TableTuningTest_Mallik(Args _args) { boolean skipEmptyTables = true; boolean result; treeNode treeNode; SysDictTable sdt; str TableAndCound; int recordCount; boolean skipEmptyrecordCount = false; treeNodeIterator treeNodeIterator =TreeNode::findNode("\\Data Dictionary\\Tables").AOTiterator(); ; treeNode = treeNodeIterator.next(); setPrefix("Tuning"); while (treeNode) { sdt = new SysDictTable(tablename2id(treeNode.AOTname())); recordCount = sdt.recordCount(); if(!sdt.isTmp() && (!skipEmptyTables || (recordCount != 0)) ) { TableAndCound = treeNode.AOTname()+ ' ('+ int2str(sdt.recordCount())+')'; setPrefix(TableAndCound); result = false; result = result || sdt.treeNode().AOTgetProperty("CreatedDateTime") == "yes" ? true : false; result = result || sdt.treeNode().AOTgetProperty("ModifiedDateTime")== "yes" ? true : false; if(result && sdt.treeNode().AOTgetProperty("CreateRecIdIndex") == "No" ) { setPrefix(TableAndCound); info("RecIdIndex"); } if(sdt.treeNode().AOTgetProperty("CacheLookup") == "None") { setPrefix(TableAndCound); info("CacheLookup"); } if(sdt.treeNode().AOTgetProperty("ClusterIndex") == "") { setPrefix(TableAndCound); Warning("ClusterIndex"); } if(sdt.treeNode().AOTgetProperty("PrimaryIndex") == "") { setPrefix(TableAndCound); Error("PrimaryIndex"); } } treeNode = treeNodeIterator.next(); } }

AX Job to export Security Key to CSV file.

static void AOTGetProperty(Args _args) { #aot #properties Boolean writeFile; Boolean infoDebug; CommaIo outFile; TreeNode tn = TreeNode::findNode(#SecurityKeysPath); str securityKeysName; str securityKeyID, Property; int sID; str errMsg; ; infoDebug = false; // ***OPTION*** View InfoLog Output (true / false) writeFile = true; // ***OPTION*** Export results to CSV file (true / false) errMsg = ""; //"--- NOT DEFINED ---"; //C:\Users\m.a.gudidevuni\Documents outFile = new AsciiIo("C:\\GTA\\SecurityKey.CSV","W"); outFile.outFieldDelimiter("\r\n"); outFile.outRecordDelimiter("\r"); tn = tn.AOTfirstChild(); while (tn) { securityKeysName = findProperty(tn.AOTgetProperties(), #PropertyName); securityKeyID = findProperty(tn.AOTgetProperties(),#PropertyId); sID = tn.applObjectId(); if(infoDebug) { info(strfmt('SecurityKeysName %1 with ID : %2',securityKeysName,sID)); } if(writeFile) { outFile.write(securityKeysName + " , " + strReplace(int2str(sID),",","")); } // info(strfmt('SecurityKeysName %1 with ID : %2',securityKeysName,sID)); // Property = tn.AOTgetProperties(); // info(strfmt('%1', findProperty(Property, 'ID'))); // info (strfmt( // 'SecurityKeysName %1 has the ID property specified as %2', // securityKeysName, securityKeyID)); tn = tn.AOTnextSibling(); } }

How to Get Trade Agreement Line Discount Percentage by Item and Date in D365FO Using X++

  In Microsoft Dynamics 365 Finance and Operations (D365FO), trade agreements are used to manage prices and discounts for customers, vendor...