AX 2012 Workflow: Function run has been incorrectly called.
Workflow submit ends in error notification when submitting to workflow from code
AX 2012 Workflow: Function run has been incorrectly called.
Audience
Dynamics AX 2012 (FP, R2 R3) X++ Developers, Functional and Technical consultants and advanced users
Background
At the point of submitting a workflow, the comment dilog box appears. The class, is constructed needing a table buffer. The tupple must contain a row for the active workflow. This is usually passed by the statement
args.caller().getActiveWorkflowConfiguration()The following listing provides a detailed context
workflowSubmitDialog = WorkflowSubmitDialog::construct (args.caller().getActiveWorkflowConfiguration());workflowSubmitDialog.run();
Problem
Our working form stopped to resolve a particular configuration for the workflow. This was pretty strange behavior as a lot of records completed different scenarios of the workflow in success. we refreshed AOT items, generated incremental and FULL CIL, restarted the service, cleared the cache, but nothing worked.
Solution(s)
This must be a configuration or framework issue as a working workflow stopped being not able to find a particular version row (which exists in the table). Several investigatory steps were carried as mentioned in the problems section but none resolved the issue.
Alternatives
The solution should be a framework refresh. The only quick alternative for us was to write an alternative i.e fetch the existing version row our self and provide it to the WorkflowSubmitDialog[C] object. We did as follows;
- Write a custom method in [T]WorkFlowVersion that returns the buffer. The following query does the job
select firstOnly1 *
from
workflowVersionTblBfr
join workflowTblBfr
where
workflowVersionTblBfr.WorkflowTable == workflowTblBfr.RecId &&
workflowVersionTblBfr.Enabled == NoYes::Yes &&
workflowTblBfr.TemplateName == _wfTemplateName
;
- Call the new method in the submit method of the WorkFlow SubmitManager class once it is verified that the workflow version is not being fetched by the framework
Method navigation: Workflow submit manager class > Submit method > add call after workFlowSubmitDialog object is constructed
//
if (!workflowSubmitDialog || !workflowSubmitDialog.parmWorkflowConfiguration() )
workflowSubmitDialog = WorkflowSubmitDialog::construct(WorkflowVersionTable::T4ED_GetWFConfig
(workFlowTypeStr(T4EDPurchPORecWFType), tableName2id(tableStr(T4EDPOProdRecConfExtWF)), recId
));
//
Note: Since you are submitting a workflow, you don't need to look for the record specific workflow version. This would be mandatory if we are taking any action on an already submitted record. In such scenario, we will require to search for configurations that exists in WorkflowWorkItem table for specific table and record.
0 comments:
Post a Comment