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
}
})
}