Skip to main content

Notifications

Announcements

No record found.

Finance | Project Operations, Human Resources, ...
Unanswered

Submit button called in PSAProjInvoiceProposalSubmitToWF

Posted on by 8
 
class PSAProjInvoiceProposalSubmitToWF
{
    protected void new()
    {
        return;
    }
    public static void main(Args _args)
    {
        RecID                   recID               = _args.record().RecId;
        TableId                 tableId             = _args.record().TableId;
        ProjProposalJour        projProposalJour    = _args.record();
        WorkflowWorkItemTable   workItem            = _args.caller().getActiveWorkflowWorkItem();
        WorkflowSubmitDialog    workflowSubmitDialog;
        WorkflowComment         wfComment;
        workflowTypeName        workflowTemplateName = workFlowTypeStr('PSAProjInvoiceProposal');
        // The method has not been called correctly.
        if (tableId != tablenum(ProjProposalJour) ||
            recId == 0)
        {
            throw error(strfmt("@SYS19306", funcname()));
        }
        if (projProposalJour.RecId != 0)
        {
            // The journal does support workflow approvals.
            workflowSubmitDialog = WorkflowSubmitDialog::construct(_args.caller().getActiveWorkflowConfiguration());
            workflowSubmitDialog.run();
            if (WorkflowSubmitDialog.parmIsClosedOK())
            {
                wfComment=WorkflowSubmitDialog.parmWorkflowComment();
                if (ProjProposalJour::findRecid(recID).LineProperty == ProjLinePropertyCode::Open)
                {
                    // Validates and disallow workflow submission when project is in closed stage for invoice proposal.
                    PSAProjInvoiceProposalSubmitToWF::disallowSubmitIfProjStageIsClosed(projProposalJour.ProposalId);
                    // Create a new workflow from the workflow template used on the workflow configuration associated to the journal's journal name.
                    Workflow::activateFromWorkflowType(workflowTemplateName, _args.record().RecId, wfComment, NoYes::No);
                    // Set the workflow status to Submitted.
                    PSAProjInvoiceProposalStateChangeManager::updateProjInvoiceProposalStatus(_args.record().RecId,ProjLinePropertyCode::PSASubmitted);
                }
            }
        }
        // Make the form refresh its common workflow UI controls.
        PSAProjInvoiceProposalSubmitToWF::refreshCaller(_args);
    }
    public static void refreshCaller(Args _args)
    {
        FormRun         callerForm;
        FormDataSource  projProposalJourDS;
        if (_args.caller())
        {
            if (SysDictClass::isEqualOrSuperclass(classidget(_args.caller()), classnum(FormRun)))
            {
                callerForm = _args.caller();
                projProposalJourDS = FormDataUtil::getFormDataSource(_args.record());
                if (projProposalJourDS)
                {
                    projProposalJourDS.reread(); 
                    projProposalJourDS.refresh();
                    projProposalJourDS.active();
                    callerForm.updateWorkflowControls();
                }
            }
        }
    }
    /// <summary>
    /// Validates project stage to allow creation of invoice proposal before submit to workflow. An error will be thrown if project stage is not allowed for invoice proposal creation.
    /// </summary>
    /// <param name="_proposalId">
    /// Reference to invoice proposal ID.
    /// </param>
    protected static void disallowSubmitIfProjStageIsClosed(ProjProposalId _proposalId)
    {
        ProjProposalTransUnion projProposalTransUnion;
        ProjTable projTable;
        while select ProjId, Status, Type, ProjInvoiceProjId
              from projTable
                 exists join projProposalTransUnion
                     where projProposalTransUnion.ProjId == projTable.ProjId
                         && projProposalTransUnion.ProposalId == _proposalId
        {
            if (projTable && !ProjStatusTypeRule::exist(projTable.Status, projTable.Type, ProjStatusRule::CreateInvoiceProposal))
            {
                throw error(strFmt("@Proj:ProjClosedStageSubmitToWorkflowError", projTable.ProjId, projTable.Stage()));
            }
        }
    }
}
 guide me on which instruction where the submit button action triggered.
Thanks in advance.
 
  • André Arnaud de Calavon Profile Picture
    André Arnaud de Cal... 291,253 Super User 2024 Season 2 on at
    Submit button called in PSAProjInvoiceProposalSubmitToWF
    Hi,

    Can you explain your question, please? What is it exactly where and how you need help with?
  • Martin Dráb Profile Picture
    Martin Dráb 230,188 Most Valuable Professional on at
    Submit button called in PSAProjInvoiceProposalSubmitToWF
    I'm not sure what you're looking for, but probably for this:
    // Create a new workflow from the workflow template used on the workflow configuration associated to the journal's journal name.
    Workflow::activateFromWorkflowType(workflowTemplateName, _args.record().RecId, wfComment, NoYes::No);

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

December Spotlight Star - Muhammad Affan

Congratulations to a top community star!

Top 10 leaders for November!

Congratulations to our November super stars!

Tips for Writing Effective Suggested Answers

Best practices for providing successful forum answers ✍️

Leaderboard

#1
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 291,253 Super User 2024 Season 2

#2
Martin Dráb Profile Picture

Martin Dráb 230,188 Most Valuable Professional

#3
nmaenpaa Profile Picture

nmaenpaa 101,156

Leaderboard

Product updates

Dynamics 365 release plans