Contexto
Os sistemas de CRM constituem um chapéu abrangente para variadíssimas funcionalidades e serviços que as organizações disponibilizam aos seus agentes, empregados e parceiros. Todos os negócios terão impreterivelmente as suas especificidades e necessidades próprias. As necessidade de negócio definem os objectivos e a implementação materializa a execução dos processos da forma mais rápida e eficiente possível.
Com esses objetivos em mente a integração de sistemas é muitas vezes fundamental e a utilização de Web Services uma solução técnica habitual.
No exemplo deste artigo o cliente pretende anexar um documento PDF gerado na UI do lado do cliente (local) ao contacto Siebel (servidor).
Implementação
No exemplo em causa, optámos como solução técnica pela invocação de um Web Service do lado do cliente que permitisse enviar esse mesmo ficheiro para o servidor, como um anexo.
Na aplicação desenvolvida o utilizador gera o documento e guarda-o localmente. Após a implementação da solução de integração, sempre que o documento é gerado, este é enviado automaticamente em background para o servidor. Para esse efeito, o método do botão, passou a invocar o Web Service que envia o documento para o servidor e o anexa ao contacto.
Abaixo o esquema demonstrativo de como invocar o Web Service no OpenUI.
O desenvolvimento foi realizado no Open UI da Applet que permite gerar o documento: no Physical Renderer associado à Applet deteta-se o evento Click associado ao botão e dentro desse método é invocado o Web Service específico.
Para podermos invocar um Web Service a partir de um Physical Renderer, necessitamos de criar alguns objetos/funções. Nomeadamente os passos necessários envolvem:
- Criar um objeto XMLHttpRequest:
- Para o objeto criado abrir uma instância XMLHttpRequest onde é necessário passar a seguinte informação:
- Indicar o método a ser usado: GET ou POST. Neste caso usou-se o método POST.
- Indicar o endpoint do Web Service.
- Indicar se o endpoint tem credenciais.
- Definir o conteúdo do cabeçalho.
- Definir o XML que se irá passar quando se fizer o pedido de envio de informação.
- Efetuar o pedido ao Web Service de dados.
- Obter a resposta do Web Service.
O código de invocação do Web Service deve ser colocado na função ShowUI do Physical Render.
Abaixo um pequeno exemplo do código utilizado:
//try to call WebService
var objXMLHttpRequest = CreateXMLHttpRequest();
//Getting the SystemPreference with url/username/pwd
var sysPrefUrl = "MM_SIEBEL_ENVIRONMENT";
var sysPrefUrlRes = GetSystemPreference(sysPrefUrl);
let sysPrefUser = "MM_PORTLET_USERNAME";
let sysPrefUserRes = GetSystemPreference(sysPrefUser);
let sysPrefPwd = "MM_PORTLET_PASSWORD";
let sysPrefPwdRes = GetSystemPreference(sysPrefPwd);
var urlEndpoint = sysPrefUrlRes + "eai_anon_enu/start.swe?SWEExtSource=SecureWebService&SWEExtCmd=Execute";
objXMLHttpRequest.open("POST", urlEndpoint, false);
objXMLHttpRequest.withCredentials = false;
objXMLHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
//XML Code from Soap Calling WebService
var soapXML = '<?xml version="1.0" encoding="utf-8" ?>'
+'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cus="http://siebel.com/CustomUI" xmlns:mm="http://www.siebel.com/xml/MM%20ANS%20Entity%20Attachment%20Request">'
+'<soapenv:Header>'
+'<wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext">'
+'<wsse:UsernameToken xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">'
+'<wsse:Username>'+sysPrefUserRes+'</wsse:Username>'
+'<wsse:Password Type="wsse:PasswordText">'+sysPrefPwdRes+'</wsse:Password>'
+'</wsse:UsernameToken>'
+'</wsse:Security>'
+'</soapenv:Header>'
+'<soapenv:Body>'
+'<cus:MM_spcANS_spcAdd_spcAttachment_spcTC_spcWF>'
+'<Input_spcMessage>'
+'<mm:ListOfMmAnsEntityAttachmentRequest>'
+'<mm:MmAnsEntityAttachmentRequest>'
+'<mm:Comments></mm:Comments>'
+'<mm:EntityId>'+IdTCond+'</mm:EntityId>'
+'<mm:FileExtension>PDF</mm:FileExtension>'
+'<mm:FileName>'+filename+'</mm:FileName>'
+'<mm:AttachmentId>'+base64+'</mm:AttachmentId>'
+'</mm:MmAnsEntityAttachmentRequest>'
+'</mm:ListOfMmAnsEntityAttachmentRequest>'
+'</Input_spcMessage>'
+'</cus:MM_spcANS_spcAdd_spcAttachment_spcTC_spcWF>'
+'</soapenv:Body>'
+'</soapenv:Envelope>';
objXMLHttpRequest.send(soapXML);
response = objXMLHttpRequest.responseXML;
…
}
Conclusão
A framework de Open UI permite mais sofisticação na utilização de recursos das máquinas locais, incluindo a criação de integrações usando Web Services invocados localmente.
Nota: No exemplo apresentado, a componente de segurança foi implementada mas não se encontra abordada no âmbito deste artigo.
#Siebel #WebService #OpenUI #worldIT