Prezados, boa tarde. Estou fazendo alguns testes aqui, e preciso consumir um serviço do próprio fluig, mas, não estou conseguindo.
Me baseei pelo link: http://tdn.totvs.com/display/public/fluig/Consumo+de+um+WS+SOAP+de+um+Widget
Mas, ao montar a url
var wsUrl = WCMAPI.serverURL + "/webdesk/ECMWorkflowEngineService?wsdl";
da o erro: Uncaught ReferenceError: WCMAPI is not defined
alguém poderia indicar algum exemplo que funcione com formulários?
1 curtida
Boa tarde Otto,
A usabilidade do WCMAPI, são apenas acessadas em casos no WCM.. Ou seja na utilização de widgets ou paginas no social..
Pelo que entendi, você esta acessando via formulário no BPM..Correto?
Recomendo testar somente assim: var wsUrl = "/webdesk/ECMWorkflowEngineService?wsdl";
Sem o WCMAPI.serverURL
Att,
OLá Lucas, obrigado por responder. Sim. queria poder consumir qualquer tipo de serviço do proprio fluig, como teste, peguei do ECMWorkflowEngineService
Recomendo testar somente assim: var wsUrl = “/webdesk/ECMWorkflowEngineService?wsdl”;
Sem o WCMAPI.serverURL
a solução recomendada passa pela primeira etapa que é montar a url do serviço, mas, na hora de executar o serviço, me baseando pelo link do tópico, seria tambem com o WCMAPI.Create(… Saberia dizer se tem alguma outra forma de executar o serviço?
Entao cara…
Conforme própria documentação que você colocou la em cima, este exemplo é para WIDGET… e não para formulário… Teria q analisar sua solicitação mas para formulário BPM… por isto recomendo procurar a documentação para BPM.
Bom dia Otto,
Uma alternativa (não necessariamente boa), seria montar o XML via javascript e chamar em uma função no seu formulário:
<script type="text/javascript">
var webServiceURL = '/webdesk/ECMWorkflowEngineService';
function callWebService(){
var cXML = "";
cXML += '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.workflow.ecm.technology.totvs.com/">';
cXML += '<soapenv:Header/><soapenv:Body><ws:startProcess>';
cXML += '<username>USUARIO</username><password>SENHA</password>';
cXML += '<companyId>1</companyId><processId>PROCESSO</processId><choosedState>ATIVIDADE</choosedState><colleagueIds></colleagueIds>';
cXML += '<comments>Processo criado via Webservice por '+window.parent.WCMAPI.user+'!</comments>';
cXML += '<userId>'+window.parent.WCMAPI.userCode+'</userId><completeTask>true</completeTask><attachments></attachments>';
cXML += '<cardData>';
cXML += '<item><item>CAMPO</item><item>VALOR</item></item>';
cXML += '<item><item>CAMPO_2</item><item>VALOR_2</item></item>';
cXML += '</cardData><appointment></appointment><managerMode>false</managerMode></ws:startProcess></soapenv:Body></soapenv:Envelope>';
$.ajax({
url: webServiceURL,
type: "POST",
dataType: "xml",
data: cXML,
processData: false,
contentType: "text/xml; charset=\"utf-8\"",
success: OnSuccess,
error: OnError
});
return false;
}
function OnSuccess(data, status)
{
console.log(data);
}
function OnError(request, status, error)
{
console.log(request);
alert("Ocorreu um erro: "+ error);
}
$(document).ready(function() {
jQuery.support.cors = true;
});
</script>
Quando seu formulário chamar a função callWebService()
será feito o POST no endereço do webservice com os dados montados na variável cXML
.
Veja se atende sua necessidade. Abs.
1 curtida
Olá Luiz, obrigado por responder, estou a chegar no escritório e testo. Logo mais dou feedback. obrigadi.
Prezado Luiz, obrigado pela solução. Sim, funcionou perfeitamente para o que eu estava pretendendo. obrigado pela ajuda.
1 curtida
Bom dia Otto,
Fiz um teste utilizando WCMAPI.Create e deu certo, segue exemplo:
//URL do Serviço
var wsUrl = window.parent.WCMAPI.serverURL + "/webdesk/ECMCardService?wsdl";
//Modelo da Requisição
var soapRequest = '' +
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.dm.ecm.technology.totvs.com/">' +
' <soapenv:Header/>' +
' <soapenv:Body>' +
' <ws:create>' +
' <companyId/>' +
' <username/>' +
' <password/>' +
' <card>' +
' <item>' +
' <cardData>' +
' <field>campo_nome</field>' +
' <value name="campo_nome"/>' +
' </cardData>' +
' <cardData>' +
' <field>campo_ramal</field>' +
' <value name="campo_ramal"/>' +
' </cardData>' +
' <parentDocumentId/>' +
' </item>' +
' </card>' +
' </ws:create>' +
' </soapenv:Body>' +
'</soapenv:Envelope>';
//Convertendo para XML, para facilitar a manipulação
var parser = new DOMParser();
var xmlRequest = parser.parseFromString(soapRequest,"text/xml");
//Código da empresa
xmlRequest.getElementsByTagName("companyId")[0].innerHTML = window.parent.WCMAPI.organizationId;
//Código do template de formulário, já publicado
xmlRequest.getElementsByTagName("parentDocumentId")[0].innerHTML = 899;
//Valores para os campos
xmlRequest.getElementsByName("campo_nome")[0].innerHTML = "Meu nome...";
xmlRequest.getElementsByName("campo_ramal")[0].innerHTML = "9999";
//Enviando a requisição
window.parent.WCMAPI.Create({
url: wsUrl,
contentType: "text/xml",
dataType: "xml",
data: xmlRequest,
success: function(data){
var xmlResp = parser.parseFromString(data.firstChild.innerHTML,"text/xml");
console.log("Documento Publicado: " + xmlResp.getElementsByTagName("documentId")[0].innerHTML);
}
});
Tem como fazer sim, basta você acessar o WCMAPI chamando ele como parent.WCMAPI. Por padrão os formulários e os Widgets WCM são montados em iFrames, porem o WCMAPI é um objeto global do fluig que é instanciado no frame "top".
Logo abaixo você pode conferir o código de exemplo:
var parant_cardid = '6537';
var ecmCardService = parent.WCMAPI.serverURL + "/webdesk/ECMCardService?wsdl";
var xmlItem = '<item><field>numAtividade</field><value>70</value></item>';
var item = new Array({
item: {'field': 'textObs', 'value': 'WCMAPI_UPDATE'}
},{
item:{'field': 'aux_gateway', 'value': 'act1'}
});
$.each(item, function(index, value){
xmlItem += '<item><field>'+value.item.field+'</field><value>'+value.item.value+'</value></item>';
});
var soapRequest = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.dm.ecm.technology.totvs.com/">'+
'<soapenv:Header/><soapenv:Body><ws:updateCardData>'+
'<companyId>'+parent.WCMAPI.organizationId+'</companyId>'+
'<username></username><password></password>'+
'<cardId>'+parant_cardid+'</cardId>'+
'<cardData>'+xmlItem+'</cardData>'+
'</ws:updateCardData></soapenv:Body></soapenv:Envelope>';
parent.WCMAPI.Create({
async: false,
url: ecmCardService,
contentType: "text/xml; charset=UTF-8",
dataType: "xml",
data: soapRequest,
success: function(data, status, jqXHR) {
console.log(data);
console.log(status);
console.log(jqXHR);
}
});