X++

Working with Entity Store and DIXF in AX

There is an excellent tool available for advanced reporting and BI capabilities that partners and customers should start exploring. In this post I would like to show how to work with Entity Store and DIXF in AX, which has been published shortly after the Technical Conference held in Seattle last year: https://www.daxrunbase.com/2016/02/24/technical-conference-day-1/

Working with the Entity Store and DIXF in AX takes some time to set up, but once it is running, it is acting as an up-to-date Data Warehouse for you, where you could utilize advanced features such as Clustered Columnstore Indexes, and make truly amazing visualizations which will please the eyes of your managers whom loves KPIs, and will make your teams more productive by knowing what to look for.

You can find the Public PowerBI built for the stock and items at JJ Food Service as an example of what could be achieved for visualizations built on data that is coming out of your AX environment:

PowerBI

(more…)

By |2017-06-07T11:36:34+02:00June 7th, 2017|Categories: AX 2012|Tags: , , , , , , , , |4 Comments

Improved TFS Version Control tools

All companies should be using some form of Version Control nowadays, as Microsoft is also pushing us in that direction with Dynamics 365 for Operations already. The frameworks in AX are mostly open, ready for improvement – and there is a lot of room for that. You can find below some of my improved TFS Version Control tools below. If you have additional tools or ideas, feel free to share it.

  1. XPO Import dialog

    A new Check out button has been added, so when trying to import an object from XPO that is already under VCS, you do not have to navigate to the AOT, but can directly access it from here.
  2. Version Control Pending objects

    The Version Control Changes > Contents list already had an Open new window button for the currently selected objects, but it was missing from the Pending objects list – which is more frequently used -, until now.
  3. Version Control Check-in dialog

    IDs are now sorted in a descending order to have the most recent tasks on the top.
    I am now hiding the TFS entries in a Closed state by default and can be shown by a checkbox.
    Developers are typically working on Tasks, which was opened from a User Story using the Agile methodology setup in VCS, and check-ins are done against Tasks, so now I am hiding User Stories by default.

Please find attached the Improved TFS Version Control tools.

By |2017-05-20T10:08:38+02:00May 20th, 2017|Categories: AX 2012, TFS|Tags: , , , , , , |0 Comments

Investigating Workflow security issues

Many of us might have encountered the below error messages when trying to run a newly created workflow. I would like to provide this neat troubleshooting tip with the below code snippet for investigating workflow security issues.

Stopped (error): X++ Exception: Work item could not be created. 
Insufficient rights for user %1.

In most of the cases it is due to the lack of security access for the execution account on a menu item, for which we could add a couple of lines of code to resolve the problem.

Change \AOT\Classes\SysWorfklowDocument\assertAsUser method and for each fork of menu item type you may add the entry point in a security privilege or role, for which you need to provide access for on the user account you have been using. That means for each section of workflowPermission you need to add the appropriate menu item in the error log.

    if (workflowPermission.parmDisplayMenuItem())
    {
        permission = SysWorkflowDocument::assertMenuItem(workflowPermission.parmDisplayMenuItem(), MenuItemType::Display);
        if (!permission)
        {
            error(strFmt('Entry point %1', workflowPermission.parmDisplayMenuItem()));
            return [permission, buf2Con(rec)]; // buf2Con() needed to support packing buffers participating in SC/sc hierarchies
        }
    }

Also you need to add the following pieces to \AOT\Classes\SysWorkflowEventDispatcher\onWorkItemCreate() method:

    if (workflowPermission.parmDisplayMenuItem())
    {
        permission = SysWorkflowDocument::assertMenuItem(workflowPermission.parmDisplayMenuItem(), MenuItemType::Display);
        if (!permission)
        {
            error(strFmt('Entry point %1', workflowPermission.parmDisplayMenuItem()));
            return [permission, buf2Con(rec)]; // buf2Con() needed to support packing buffers participating in SC/sc hierarchies
        }
    }

(...)
 
    if (!SysWorkflowHelper::userHasPermission(
        _workItemContext.parmWorkflowCorrelation().parmWorkflowContext(),
        stepTable.workflowElementTable().workflowVersionTable().workflowTable().TemplateName,
        sysDictWorkflowElement.actionMenuItem(completingOutcome),
        menuItemName,
        user))
    {
        error(strFmt('Entry point %1 / Menu item action %2', menuItemName, sysDictWorkflowElement.actionMenuItem(completingOutcome)));
        throw error(strfmt("@SYS109561", user));
    }

Using the above changes you will be able to set up the missing security pieces easily by taking a look at the workflow execution history, where the infolog in the tracking history will contain the entry points causing the issues.

External references for the same issue:

https://workflowax.wordpress.com/2012/05/02/x-exception-workitem-could-not-be-created/

http://axfaq.blogspot.hu/2014/08/workflow-ax-2012-insufficient-rights.html

By |2017-05-18T12:18:42+02:00May 18th, 2017|Categories: AX 2012|Tags: , , |0 Comments
Go to Top