Workflow Configuration Displays Error Icon despite being valid

13 02 2018

I’ve recently found a scenario where my workflow configuration has an “invalid” icon next to the workflow configuration, this all despite the latest version being fully validated.


Tracing back the issue it seems that Microsoft displays the “valid/invalid” icon based on the latest workflow version sorted by workflow version “RecId” (See Table: WorkflowTable.validIcon).

So searching the workflow version Table I found an old invalid workflow configuration version (based on modifiedDateTime) that has an out of sync (i.e. newer) RecId than the actual newest versions. Deleting this record resolved the issue.

There should be no issues deleting this invalid version as actual workflow instances can’t be created against invalid versions.

I think the way the icons are displayed is a bug in AX, but so far doesn’t appear to affect too much.



Determine if a document has an outstanding task.

20 05 2015

In AX2009 you used to have two different status for assigned Purchase Requisitions in workflow, namely: “Pending Completion” and “Pending Approval”. Unfortunately in AX2012 this has become simply “In Review” to signify it being in workflow. This allows a more flexible approach to the ordering and reuse of elements in workflow. However it does not provide a clear way to distinguish where the Purchase Requisition is currently in the workflow process especially whether or not the item is currently assigned as a task or an approval.

The code below provides the X++ select statement to determine whether a document in workflow has at least one pending Task based workitem linked to it.

public display NoYes isTask()
  WorkflowWorkItemTable workflowWorkItemTable;
  WorkflowElementTable workflowElementTable;
  select firstonly ElementId from workflowWorkItemTable
    where workflowWorkItemTable.RefTableId == this.TableId &&
    workflowWorkItemTable.RefRecId == this.RecId &&
    workflowWorkItemTable.Status == WorkflowWorkItemStatus::Pending
    join ElementId, ElementType from workflowElementTable
    where workflowElementTable.ElementId == workflowWorkItemTable.ElementId &&
    workflowElementTable.ElementType == WorkflowElementType::Task;
  return (workflowWorkItemTable.RecId == 0) ? NoYes::No : NoYes::Yes;

Note: If you’re using line level workflows or parallel branches you may not be guaranteed that the result is what you are logically looking for. It will simply return if there is at least one pending task workitem linked.

This post was inspired by forum question:

New Blog: Explore

24 07 2014

Hi All.

compass-1I have decided to start a new blog to run alongside where I can capture some of the daily tips and tricks that I’m finding in AX 2012, without polluting this workflow dedicated blog. Please feel free to visit it, subscribe to it, comment on it, like it, share it etc over at

For the moment its very basic but will hopefully get some nice new features in the coming weeks.

Kind Regards

AX2012 – On Reassign: Failed to create a session

23 01 2014

When trying to reassign a record via workflow history in AX2012 we received the error: Failed to create session; confirm that the user has the proper privileges to log in to Microsoft Dynamics.

Screen Shot 2014-01-23 at 2.31.28 PM

The cause of our problem was a faulty CIL. We performed a full CIL compile, restarted AX and then were then able to perform the re-assign

Subworkflow Tutorial

13 01 2014

Since the launch of Dynamics AX 2012 I’ve been amazed at the amount of really good blogs that have started springing up. One such blog is Collin’s Dynamics AX2012 blog. After finding a whole load of question on Subworkflows in Dynamics AX, I considered writing up an article, but found a his tutorial very way more helpful than I could ever be, so please pay his site a visit!

Collin’s Dynamics AX2012 Blog – Subworkflows

Using JSON in Dynamics AX

22 10 2013

I’ve recently had a requirement to integrate an external system (Toggl with Dynamics AX 2012’s Timesheet system. However the external system only provided a JSON API which isn’t supported natively by the Dynamics AX AIF system.  After some research and trial and error (using various DLL’s) I eventually stumbled across some really useful classes provided by the Retail module in Dynamics AX2012. These classes (although named “Retail…”) provide a really easy and elegant JSON interaction for any use. Here is a very basic code sample of how to consume JSON using these classes in Dynamics AX 2012.


static void myJob(Args _args)
    RetailWebRequest request; 
    RetailWebResponse response; 
    str rawResponse, value; 
    Map data; 
    RetailCommonWebAPI webApi = RetailCommonWebAPI::construct(); 
    request = RetailWebRequest::newUrl(""); 
    response = webApi.getResponse(request); 
    rawResponse = response.parmData(); 
    data = RetailCommonWebAPI::getMapFromJsonString(rawResponse); 
    value = data.lookup("elementname"); 
    info(strFmt("Element name: %1",value)); 

If you are interested in some more advanced examples of using JSON in AX (e.g. using authentication, retrieving subsets of info or arrays)  or doing some of your own integration into Toggl timekeeping please let me know and I’ll post some more info.


Upcoming AX2012 Workflow Apps and Features

10 04 2013

I was recently pointed to this video from msdyncomm highlighting some very cool upcoming features for workflow in Dynamics AX 2012. I reviewed it this morning and was very encouraged to see the direction that workflow is going in. Workflow should make users lives simpler and more streamlined and the features highlighted will certainly go a long way in accomplishing this goal.

%d bloggers like this: