custom wf po action

PHOTO EMBED

Sun Jan 21 2024 08:29:13 GMT+0000 (Coordinated Universal Time)

Saved by @MinaTimo

public void takeAction(Description _action)
    {
        WorkflowWorkItemTable workflowWorkItemTable;
        WorkflowWorkItemActionType actionType;
        WorkflowUser workflowUser;
        str menuItemName;
        System.Exception exception;
        #define.Approve("Approve")
        #define.Reject("Reject")
        #define.WFDelegate("Delegate")
        #define.RequestChange("RequestChange")
        #OCCRetryCount
        UserId _fromuser = curUserId();
        UserId _toUser = NW_COODCOApprovalRequest.DelegateUser;
        str _comment = "";
        try
        {
            select firstonly workflowWorkItemTable
            order by RecId desc
            where workflowWorkItemTable.RefTableId  == tableNum(PurchTable)
                && workflowWorkItemTable.RefRecId   == purchTable.recid
                && workflowWorkItemTable.Status     == WorkFlowWorkItemStatus::Pending
                && workflowWorkItemTable.Type       == WorkflowWorkItemType::WorkItem;
 
            switch (_action)
            {
                case #Approve :
                    actionType      = WorkflowWorkItemActionType::Complete;
                    workflowUser    = _fromuser;
                    menuItemName    = menuItemActionStr(PurchTableApprovalApprove);
                    break;
                case #Reject :
                    actionType      = WorkflowWorkItemActionType::Return;
                    workflowUser    = _fromuser;
                    menuItemName    = menuItemActionStr(PurchTableApprovalReject);
                    break;
                case #WFDelegate :
                    actionType      = WorkflowWorkItemActionType::Delegate;
                    workflowUser    = _toUser;
                    menuItemName    = menuItemActionStr(PurchTableApprovalDelegate);
                    ttsbegin;
                    NW_COODCOApprovalRequest.DelegatePO = NoYes::No;
                    NW_COODCOApprovalRequest.DelegateUser = "";
                    NW_COODCOApprovalRequest.doUpdate();
                    ttscommit;
                    break;
                case #RequestChange :
                    actionType      = WorkflowWorkItemActionType::RequestChange;
                    workflowUser    = _fromuser;
                    menuItemName    = menuItemActionStr(PurchTableApprovalRequestChange);
                    ttsbegin;
                    NW_COODCOApprovalRequest.doDelete();
                    ttscommit;
                    break;
            }
            if (workflowWorkItemTable)
            {
                WorkflowWorkItemActionManager::dispatchWorkItemAction(workflowWorkItemTable
                                                                    , _comment
                                                                    , workflowUser
                                                                    , actionType
                                                                    , menuItemName);
            }
        }
        catch (Exception::Deadlock)
        {
            retry;
        }
        catch (Exception::UpdateConflict)
        {
            if(appl.ttsLevel() == 0)
            {
                if(xSession::currentRetryCount() >= #RetryNum)
                {
                    throw exception::UpdateConflictNotRecovered;
                }
                else
                {
                    retry;
                }
            }
            else
            {
                throw exception::UpdateConflict;
            }
        }
        catch (Exception::Error)
        {
            throw error("Error occurred.");
        }
      	// to refresh the page list
        FormDataSource  ds  = FormDataUtil::getFormDataSource(element.args().record());
        ds.executeQuery();
        element.close();
    }
content_copyCOPY