Cliente externo sem usuário Fluig startar um processo e anexar documentos

1- Na estrutura HTML do seu formulário insira o seguinte código para capturar o base64 do input file e salvar em um campo do tipo textarea oculto em seu formulário:

<input type="file" />

<script>
  const fileInput = document.querySelector("input");
  		fileInput.addEventListener("change", (e) => {
   const file = e.target.files[0];
   const reader = new FileReader();
    	reader.onloadend = () => {
   const base64String = reader.result.replace("data:", "").replace(/^.+,/, "");
   document.getElementById("attachment").value = base64String ;

    };
    reader.readAsDataURL(file);
  });</script>

2 - Crie um arquivo XML com a estrutura abaixo e insira-o no seguinte endereço da sua widget: //wcm/widget//src/main/webapp/resources/js/startProcess.XML e substitua as informações ou adapte o XML de acordo com o que for melhor para o seu projeto (todos os detalhes dos parâmetros deste método estão disponíveis na documentação):

   <?xml version="1.0" encoding="ISO-8859-1" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.workflow.ecm.technology.totvs.com/">
    <soapenv:Header />
        <soapenv:Body>
            <ws:startProcess>
                <username>usuariowebservice</username>
                <password>senha</password>
                <companyId>1</companyId>
                <processId>codprocesso</processId>
                <choosedState>2</choosedState>
                <colleagueIds>
                    <item>usuariodestino</item>
                </colleagueIds>
                <comments>Processo iniciado via Widget</comments>
                <userId>usuarioinicio</userId>
                <completeTask>true</completeTask>
                <attachments name="attachments">
                  <item>
                     <attachmentSequence>1</attachmentSequence>
                        <attachments>
                           <attach>true</attach>
                           <fileName name="fileName"></fileName>
                           <filecontent name="filecontent"></filecontent>
                           <mobile>true</mobile>
                           <fileSize>0</fileSize>
                           <principal>true</principal>
                        </attachments>
                     <description name="description"></description>
                     <fileName name="fileName"></fileName>
    	            </item>
                </attachments>
                <cardData>
                <item>
                   <item>field1</item>
                   <item name="field1"></item>
                </item>
                  <item>
                   <item>field2</item>
                   <item name="field2"></item>
                </item>
                </cardData>
                <appointment></appointment>
                <managerMode>false</managerMode>
            </ws:startProcess>
        </soapenv:Body>
    </soapenv:Envelope>

3 - Crie a função para registrar a solicitação

bindings: {
         local: {
            'registrar': ['click_registrar']
         },
         global:{}
        },

        startProcess: function () {
         let xml;
         $.ajax({
            url: '/<NOMEWiDGET>/resources/js/startProcess.xml',
           async: false,
           type: "get",
           datatype: "xml",
           success: function (data) {
             xml = $(data);
           },
         });
         return xml;
       },

    registrar: function() {
      let _xml = this.startProcess();  // get xml
         _xml.find('[name="field1"]').text(document.getElementById('field1').value);
         _xml.find('[name="field2"]').text(document.getElementById('field2').value);
         _xml.find('[name="filecontent"]').text(document.getElementById('attachment').value);

         // ...
         //complete a variável _xml com todos os dados restantes do seu formulário, inclusive os dados do anexo
         // ...

         WCMAPI.Create({
            url: "/webdesk/ECMWorkflowEngineService?wsdl",
            contentType: "text/xml;charset=ISO-8859-1",
            dataType: "xml",
            data: _xml[0],
            success: function(data) {
            // retorno do webservice com os dados da solicitação iniciada
            },error: function(err) {
            // retorno do webservice com erro
            }
        })
    }
5 curtidas