DSHRWorkflowUtil d365fo x++

DSHRWorkflowUtil d365fo x++

Code:

class DSHRWorkflowUtil
{

    void submit(Args args)
    {
        recId recId;
        str note;
        WorkflowTypeName    workFlowType;
        WorkflowVersionTable workflowVersionTable;

        workflowVersionTable = args.caller().getActiveWorkflowConfiguration();
        WorkflowType = workflowVersionTable.workflowTable().TemplateName;
        WorkflowSubmitDialog workflowSubmitDialog;
        workflowSubmitDialog = WorkflowSubmitDialog::construct(workflowVersionTable);
        
        recId = args.record().RecId;
        ;
       

        workflowSubmitDialog.run();

        if (workflowSubmitDialog.parmisClosedOK())
        {
            note = workflowSubmitDialog.parmWorkflowComment();
            try
            {
                Workflow::activateFromWorkflowType(workFlowType,recId,note,NoYes::No);

                this.callSubmitEventHandler(WorkflowType,recId);

                info("Submitted to workflow");
            }
            catch (Exception::Error)
            {
                info("Error on workflow activation.");
            }
        }
        args.caller().updateWorkflowControls();
    }

    void reSubmit(Args _args)
    {
        WorkflowWorkItemTable           workItem            = _args.caller().getActiveWorkflowWorkItem();
        WorkflowWorkItemActionDialog    workflowWorkItemActionDialog;
        
        if (workItem.RecId > 0)
        {
            try
            {
                workflowWorkItemActionDialog = WorkflowWorkItemActionDialog::construct( workItem,
                                                                                    WorkflowWorkItemActionType::Resubmit,
                                                                                    new MenuFunction(_args.menuItemName(),_args.menuItemType()));
                workflowWorkItemActionDialog.run();
                if (workflowWorkItemActionDialog.parmIsClosedOK())
                {
 
                    workItem    = _args.caller().getActiveWorkflowWorkItem();
                    WorkflowWorkItemActionManager::dispatchWorkItemAction(  workItem,
                                                                    workflowWorkItemActionDialog.parmWorkflowComment(),
                                                                    workflowWorkItemActionDialog.parmTargetUser(),
                                                                    WorkflowWorkItemActionType::Resubmit,
                                                                    _args.menuItemName());
               
                }
            }
 
            catch(Exception::Error)
            {
                throw error('Error in resubmitting workflow');
            }
        }
        _args.caller().updateWorkflowControls();
    }

    private void callSubmitEventHandler(WorkflowTypeName _workflowTypeName, RecId _tableRecId)
    {
        SysDictWorkflowType sysDictWorkflowType;
        ClassName   workflowTypeClassName;
        DSHRWorkflowSubmittedEventHandler workflowSubmittedEventHandler;
        classId classId;
        SysDictClass dictClass;

        sysDictWorkflowType = new SysDictWorkflowType(_workflowTypeName);
        
        if(sysDictWorkflowType)
        {
            workflowTypeClassName = sysDictWorkflowType.startedEventHandler();
            
            classId = className2Id(workflowTypeClassName);

            dictClass = new SysDictClass(classId);

            if(dictClass.isImplementing(classNum(DSHRWorkflowSubmittedEventHandler)))
            {
                WorkflowSubmittedEventHandler = dictClass.makeObject() as DSHRWorkflowSubmittedEventHandler;
                workflowSubmittedEventHandler.submitted(_tableRecId);
            }
            else
            {
                warning('Implement WorkflowSubmittedEventHandler in workflow type event handler');
            }
        }
    }

}

Comments

Popular posts from this blog

D365FO – AX – X++ –Refresh, Reread, Research, and ExecuteQuery

Create Inventory Journal through Code in D365FO X++

SalesLine Reservation in D365fo x++