all workflow actions / submit

PHOTO EMBED

Tue Apr 02 2024 13:11:16 GMT+0000 (Coordinated Universal Time)

Saved by @MinaTimo

// prevent actions by user in setup
// for all actions 
[ExtensionOf(classStr(WorkflowWorkItemActionManager))]
final class WorkflowWorkItemActionManager_Proc_Extension
{
    public static void dispatchWorkItemAction(  WorkflowWorkItemTable _workItem,
                                                WorkflowComment _comment,
                                                WorkflowUser _toUser,
                                                WorkflowWorkItemActionType _workItemActionType,
                                                menuItemName _menuItemName,
                                                Name _queueName )
    {
        NW_UserWorkflowAction   NW_UserWorkflowAction;
        WorkflowTable           WorkflowTable;
        NW_WFAction             action;
        switch(_workItemActionType)
        {
            case WorkflowWorkItemActionType::Complete :
                action = NW_WFAction::Approve;
                break;
            case WorkflowWorkItemActionType::Delegate :
                action = NW_WFAction::Delegate;
                break;
            case WorkflowWorkItemActionType::Deny :
                action = NW_WFAction::Cancel;
                break;
            case WorkflowWorkItemActionType::RequestChange :
                action = NW_WFAction::RequestChange;
                break;
            case WorkflowWorkItemActionType::Return :
                action = NW_WFAction::Reject;
                break;
        }
        SysWorkflowTable sysworkflowTable = SysWorkflowTable::find(_workItem.CorrelationId);

        while select NW_UserWorkflowAction 
            join WorkflowTable 
            where NW_UserWorkflowAction.SequenceNumber == WorkflowTable.SequenceNumber
            && WorkflowTable.TemplateName == sysworkflowTable.TemplateName
            && NW_UserWorkflowAction.NW_WFAction == action
        {
            if(NW_UserWorkflowAction.NW_UserGroup == NW_UserGroup::User
                && NW_UserWorkflowAction.UserId == curUserId())
                throw error(strFmt('This user %1 not able to %2 this workflow',curUserId(), action));
            
            if(NW_UserWorkflowAction.NW_UserGroup == NW_UserGroup::Group)
            {
                UserGroupList UserGroupList;
                select UserGroupList
                where UserGroupList.userId == curUserId()
                && UserGroupList.groupId == NW_UserWorkflowAction.UserGroup;
                if(UserGroupList)
                {
                    throw error(strFmt('This user %1 not able to %2 this workflow',curUserId(), action));
                }
            }
        }

        next dispatchWorkItemAction( _workItem,
                                     _comment,
                                    _toUser,
                                    _workItemActionType,
                                    _menuItemName,
                                    _queueName );
        
    }

}


// for submit only
[ExtensionOf(classStr(Workflow))]
final class NW_Workflow_Proc_Extension
{
    public static server WorkflowCorrelationId activateFromWorkflowType(workflowTypeName _workflowTemplateName,
                                                                    recId _recId,
                                                                    WorkflowComment _initialNote,
                                                                    NoYes _activatingFromWeb,
                                                                    WorkflowUser _submittingUser)
    {
        NW_UserWorkflowAction NW_UserWorkflowAction;
        WorkflowTable  WorkflowTable;

        select NW_UserWorkflowAction join WorkflowTable where NW_UserWorkflowAction.SequenceNumber==WorkflowTable.SequenceNumber
            && WorkflowTable.TemplateName==_workflowTemplateName  && NW_UserWorkflowAction.NW_WFAction==NW_WFAction::Submit;
        if(NW_UserWorkflowAction)
        {
            if(NW_UserWorkflowAction.NW_UserGroup == NW_UserGroup::User)
                throw error(strFmt('This user %1 not able to submit this workflow',_submittingUser));
            else
            {
                UserGroupList UserGroupList;
                select UserGroupList where UserGroupList.userId==_submittingUser && UserGroupList.groupId==NW_UserWorkflowAction.UserGroup;
                if(UserGroupList)
                {
                    throw error(strFmt('This user %1 not able to submit this workflow',_submittingUser));
                }
            }
        
        }
 
      
        WorkflowCorrelationId ret = next activateFromWorkflowType(  _workflowTemplateName,
                                                                    _recId,
                                                                    _initialNote,
                                                                    _activatingFromWeb,
                                                                    _submittingUser);
        return ret; 
    }

}
content_copyCOPY