Como avançar solicitação para uma atividade específica através de um botão na widget?

Tenho uma widget onde cada registro possui um botão, e quando o usuário clicar nesse botão, a solicitação se movimenta automaticamente para outra atividade. No caso seriam dois botões: Aprovar = avançar para atividade 10. Reprovar = avançar para atividade 20.

Estou a procura de um link para inserir no botão e iria alterar o número da solicitação e o número da atividade, de acordo com cada registro. Mas não encontrei nada parecido.

Vi essa solução, mas só funciona em eventos do processo: hAPI.setAutomaticDecision(7, users, "Decisao tomada automaticamente pelo Fluig");

Gostaria desse tipo de comando, mas para a widget.

Você pode usar o WS ECMWorkflowEngineService para fazer a movimentação.

Eu tive uma situação assim em um processo e fizemos mais ou menos assim:


const workflowServiceUrl = `${WCMAPI.serverURL}/webdesk/ECMWorkflowEngineService?wsdl`
    , username = 'login do usuário'
    , password = 'senha do login do usuário'
    , userId = 'matrícula do usuário que fez o movimento'
    , processInstanceId = 'número da solicitação / processo'
    , colleagueId = 'matrícula de quem recebe a atividade'
    , nextState = 31;

let xml = `<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.workflow.ecm.technology.totvs.com/">
    <soapenv:Header/>
    <soapenv:Body>
        <ws:saveAndSendTask>
            <username>${username}</username>
            <password>${password}</password>
            <companyId>${WCMAPI.organizationId}</companyId>
            <processInstanceId>${processInstanceId}</processInstanceId>
            <choosedState>${nextState}</choosedState>
            <colleagueIds>
                <item>${colleagueId}</item>
            </colleagueIds>
            <comments>Movimentado pela Widget</comments>
            <userId>${userId}</userId>
            <completeTask>true</completeTask>
            <attachments />
            <cardData />
            <appointment />
            <managerMode>false</managerMode>
            <threadSequence>0</threadSequence>
        </ws:saveAndSendTask>
    </soapenv:Body>
</soapenv:Envelope>`;

fetch(
    workflowServiceUrl,
    {
        method: "POST",
        redirect: "follow",
        credentials: "omit",
        headers: {
            "Content-Type": "text/xml;charset=utf-8"
        },
        body: xml
    }
)
.then(response => response.text())
.then(xmlText => (new DOMParser()).parseFromString(xmlText, "text/xml"))
.then(() => console.log("Tudo certo"))
.catch(() => console.error(`Erro ao movimentar a Solicitação.`));

Mas como inicia esse serviço por um botão dentro da widget. E com o identificador da solicitação no botão.

Aí é trabalhando o JavaScript no Navegador. A widget tem que buscar o processo e as informações de algum lugar e quando o usuário clicar no botão você tem que tratar esse evento de click e executar essa chamada ao Web Service do Fluig.