guia de integratpo ecm
TRANSCRIPT
-
7/25/2019 Guia de Integratpo ECM
1/45
Integrao com AplicativosExternos
Guia de Referncia para
Customizao
Integrao Com Aplicativos Externos
-
7/25/2019 Guia de Integratpo ECM
2/45
2
Integrao com AplicativosExternos
Copyright 2009 TOTVS S.A. Todos os direitos reservados.
Nenhuma parte deste documento pode ser copiada, reproduzida, traduzida ou transmitida porqualquer meio eletrnico ou mecnico, na sua totalidade ou em parte, sem a prvia autorizaoescrita da TOTVS S.A., que reserva-se o direito de efetuar alteraes sem aviso prvio. A TOTVSS.A no assume nenhuma responsabilidade pelas conseqncias de quaisquer erros ouinexatides que possam aparecer neste documento.
TOTVS S.A.Av. Santos Dumont, 831, Joinville, SC, Brasil, CEP 89.222-900
-
7/25/2019 Guia de Integratpo ECM
3/45
3
Integrao com AplicativosExternos
ndice
Consideraes Gerais ....................................................................... 4
Viso Geral ......................................................................................... 5
WebServices ....................................................................................... 7
Acessando os WebServices do TOTVS | ECM ............................................ 7Via Adobe Flex.................................................................................... 7Via Java................................................................................................ 12Observaes ............................................................................................ 14Via Progress 4GL .................................................................................. 15
Acessando WebServices a partir do TOTVS | ECM................................... 18
Progress Open AppServer ............................................................ 23
Caso de Uso ................................................................................................ 23Configurao do AppServer ........................................................................ 25Expondo cdigos 4GL com ProxyGen ......................................................... 26
Configurando o Ambiente Progress no TOTVS | ECM ............................. 29
Configurando o Servio ............................................................................... 30Viso geral dos Objetos Envolvidos ............................................................ 32
Procedures Persistentes e No-Persistentes .......................................... 33Parmetros de Entrada e Sada .............................................................. 34
Construindo os Datasets.............................................................................. 34Tipos de Centros de Custo ...................................................................... 34Naturezas de Centro de Custo ................................................................ 36Centros de Custo ..................................................................................... 37Usurios em Comuns .............................................................................. 39
Service Helper ............................................................................................. 41
Links Externos ................................................................................. 43
Acesso direto a pasta .................................................................................. 43
Acesso a documentos com destino ............................................................. 43Acesso sem efetuar login............................................................................. 43
Third Party Trademarks ................................................................... 45
-
7/25/2019 Guia de Integratpo ECM
4/45
4
Integrao com AplicativosExternos
Consideraes Gerais
As informaes contidas neste documento tm por objetivo demonstrar como feita a integrao entre o TOTVS | ECM e aplicativos externos. Para que setenha uma compreenso completa destas informaes, algunsconhecimentos so considerados pr-requisitos, entre eles:
Viso geral sobre o produto TOTVS | ECM
Viso geral sobre integrao de sistemas
JavaScript
WebServices
SOAP
Progress 4GL
Progress Open App Server
Progress Open Client for Java
Datasets (TOTVS | ECM)
Java Adobe Flex
Em vrias partes deste documento sero apresentados trechos de cdigosem diferentes linguagens de programao, com o intuito de demonstrar o usodas capacidades de integrao do TOTVS | ECM. Entretanto, este documentono tem por objetivo capacitar o leitor no uso destas tecnologias alm dopropsito acima descrito, sendo responsabilidade do leitor buscar informaesaprofundadas sobre estas linguagens.
Com o intuito de facilitar o entendimento das informaes apresentadas e asimulao dos conceitos apresentados, os exemplos citados neste documentoutilizam a funcionalidade de Datasets como exemplo de uso das capacidades
de integrao do produto. Entretanto, importante ressaltar que outros pontosdo produto possuem disponveis as mesmas caractersticas de integraoexistentes nos Datasets, em especial as customizaes de processos efichrios.
-
7/25/2019 Guia de Integratpo ECM
5/45
5
Integrao com AplicativosExternos
Viso Geral
Ainda que empricos, toda empresa possui processos de negcios quepermitem empresa cumprir o seu objetivo, seja ele a prestao de umservio, a produo de bens materiais ou o comrcio de mercadorias. Umaempresa possui uma infinidade de processos, sendo que cada pessoa naorganizao obrigatoriamente participa em pelo menos um destes processos,e todos eles trocam informaes entre si em algum momento. Os processos
podem ser formais (como a contratao de um profissional) ou informais(como um incentivo inovao), crticos (faturamento) ou satlites (controlede envio de cartes de aniversrios).
Com o advento das tecnologias de Sistema da Informao, vrios sistemaspassaram a dar apoio a estes processos de negcio, especialmente quelesconsiderados mais crticos para a operao da empresa. O melhor exemplodisto a adoo dos sistemas de ERP que do suporte aos processos devrias reas da empresa.
O TOTVS | ECM tem como objetivo servir de ferramenta para agilizar eautomatizar processos de negcio, especialmente aqueles que no soatendidos plenamente pelos demais sistemas da empresa. Isto pode serpercebido em maior ou menor grau em cada uma das suas funcionalidades,
desde as mais simples (como colaborao) at as mais complexas (comoGED e Workflow).
Entretanto, parte destes processos tm alta dependncia dos sistemas deinformao j existentes na empresa e, por isso, a arquitetura do TOTVS |ECM planejada para permitir integrar-se a estes sistemas, permitindo que osprocessos modelados tenham maior valor agregado.
O TOTVS | ECM permite tanto o acesso pelo produto aos sistemas externos(para consultar ou alimentar informaes), bem como habilita que outrossistemas venham a conectar-se para a consulta de informaes ou paraexecuo de operaes transacionais.
-
7/25/2019 Guia de Integratpo ECM
6/45
6
Integrao com AplicativosExternos
Figura 1 - Diagrama geral de integrao
O principal canal de integrao do produto atravs de WebServices, quevm se tornando o padro mais comum de integrao com qualqueraplicativo. Atravs deles, possvel ter acesso s funcionalidades do TOTVS |ECM e dar acesso pelo produto aplicativos externos. Este documentodedica uma seo especfica sobre integrao via WebServices.
A outra forma de integrao via chamadas ao Progress Open AppServer e indicada para usurios que precisem integrar o TOTVS | ECM comaplicativos desenvolvidos nesta plataforma.
-
7/25/2019 Guia de Integratpo ECM
7/45
7
Integrao com AplicativosExternos
WebServices
A integrao via WebServices utiliza o protocolo SOAP e , por ser um padroaberto, permitem que sistemas desenvolvidos em plataformas totalmentediferentes como Java, Microsoft .Net, C, C++, PHP, Ruby, Pearl ouPython possam trocar informaes entre si de forma transparente.
Acessando os WebServices do TOTVS | ECMO TOTVS | ECM disponibiliza um conjunto de WebServices que permitem oacesso s informaes do produto ou a execuo de tarefas, como iniciarprocessos workflow por exemplo.
Para ter uma lista dos processos disponveis, abra o navegador no endereohttp://:/webdesk/services.
Cada link apresentado direciona o browser para a URL do WSDL do servio.O WSDL (Web Service Description Language) possui a descrio do serviono formato XML e utilizado pelas ferramentas de desenvolvimento para acriao dos componentes que representaro este servio.
Observao:Atente para cada tipo do atributo que esperado, por exemplo,o atributo expirationDate do objeto DocumentDto[] uma data, porm cadalinguagem interpreta de maneira diferente, veja alguns exemplos abaixo:
C#: dateTime
Java: XMLGregorianCalendar(exemplo de utilizao)
Progress: DATETIME-TZ
Via Adobe Flex
Como a grande maioria das ferramentas de desenvolvimento, o AdobeFlex permite criar stubs para o acesso a web services. Estes stubs
encapsulam todas as operaes de empacotamento e desempacotamentodas informaes do padro XML para os tipos nativos da plataforma.
-
7/25/2019 Guia de Integratpo ECM
8/45
8
Integrao com AplicativosExternos
A criao dos stubs no Flex feito no menu Data, Opo ImportWebService (WSDL), conforme a imagem abaixo.
Na primeira janela, solicitada a pasta dentro do projeto corrente onde devemser gerados os stubs.
Na tela a seguir, deve ser informado o endereo do WSDL onde se encontra oservio. Tambm possvel definir se ele ser acessado da estao clienteou do servidor LifeCycle Data Services.
Figura 3 Flex Builder - Criando Stubs no Flex
Figura 2 Flex Builder - Definindo pasta de destino
-
7/25/2019 Guia de Integratpo ECM
9/45
9
Integrao com AplicativosExternos
Na ltima tela, deve-se informar o package que ser utilizado e qual o nomeda classe principal (j sugeridos pelo FlexBuilder).
Figura 4 Flex Builder - Informando o WSDL
Figura 5 Flex Builder - Informando o WSDL
-
7/25/2019 Guia de Integratpo ECM
10/45
10
Integrao com AplicativosExternos
Uma vez finalizado o processo, o FlexBuilderadicionar ao projeto um
conjunto de classes que sero utilizadas pelo programador para invocar osservios, conforme a figura abaixo:
O trecho de cdigo abaixo apresenta um exemplo de invocao doWebService de acesso aos Datasets do TOTVS | ECM.
importgenerated.webservices.ValuesDto;importgenerated.webservices.DatasetDto;importgenerated.webservices.GetDatasetResultEvent;importgenerated.webservices.SearchConstraintDtoArray;importgenerated.webservices.StringArray;importgenerated.webservices.DatasetServiceService;importmx.rpc.events.FaultEvent;importmx.collections.ArrayCollection;
/* Cria uma instncia do Stub de acesso ao servio */privatevards:DatasetServiceService = new
DatasetServiceService();
/* Cria tipos auxiliares, que sero utilizados na chamado do servio*/
privatevarfields:StringArray;privatevarconstraints:SearchConstraintDtoArray;privatevarorder:StringArray;privatevarsearch:SearchConstraintDtoArray;privatevarcolumnsArray:ArrayCollection;privatevarvaluesArray:ArrayCollection;
Figura 6 - Objetos gerados pelo Flex Builder
-
7/25/2019 Guia de Integratpo ECM
11/45
11
Integrao com AplicativosExternos
publicfunctionstart() : void{
/* Busca dataset especifico */fields = newStringArray();constraints = newSearchConstraintDtoArray();order = newStringArray();
/* Define as funes para tratamento do retorno */
ds.addEventListener(GetDatasetResultEvent.GetDataset_RESULT, resultGetDataset);ds.addEventListener(FaultEvent.FAULT,faultGetDataset);ds.getDataset(1,/* Empresa */
"adm",/* Usuario */"adm",/* Senha */"estados",/* Nome
Dataset */fields,/* Campos a Retornar
*/constraints,/* Condies de
busca */order);/* Campos p/
Ordenao */}
// Tratamento dos dados retornados do servio invocado.publicfunctionresultGetDataset(ev:GetDatasetResultEvent) : void
{
/* Recupera o retorno do servio, na forma de umDatasetDto */
vardataset:DatasetDto = ev.result asDatasetDto;
/* Determina o nmero de colunas e linhas do dataset */columnsArray = newArrayCollection(dataset.columns);
valuesArray = newArrayCollection(dataset.values);
/* Monta uma string com todos os dados do dataset */varline:String = "";
/* Cabealho com o nome dos campos */for(varj:int=0; j
-
7/25/2019 Guia de Integratpo ECM
12/45
12
Integrao com AplicativosExternos
paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5"/>
Aviso: Existe um bug do Adobe Flexque impede o funcionamento corretode servios que trabalhem com matrizes multidimensionais de dados, comono exemplo acima, onde retornado um array (de linhas do dataset) de array(das colunas de cada registro).
Para contornar este problema, preciso alterar a classe gerada pelo FlexBuilder que ir encapsular o array multidimensional. No exemplo acima,este classe a DatasetDto, que dever ser alterada conforme o exemploabaixo:
public class DatasetDto{
/*** Constructor, initializes the type class*/public function DatasetDto() {}
[ArrayElementType("String")]public var columns:Array;[ArrayElementType("ValuesDto")]public var values:Array= new Array(); /* inicializado o array *//* public var values:Array ; */
}
Outros servios que no trabalhem com arrays multidimensionais no exigemalteraes no cdigo gerado.
Via Java
Existem muitas implementaes de uso de WebServices em Javae nesteexemplo vamos utilizar as bibliotecas disponveis no Java6.
Da mesma forma como no exemplo anterior, em Adobe Flex, o primeiropasso consiste em utilizar o endereo WSDL para a gerao dos stubs emJava. O comando abaixo apresenta um exemplo de como gerar estesstubs.
wsimport -d
-
7/25/2019 Guia de Integratpo ECM
13/45
13
Integrao com AplicativosExternos
Atravs deste comando so gerados os stubs no diretrio de destino
(output_directory), conforme a descrio do arquivo wsdl (wsdl_url).
A partir dos stubs gerados, possvel consumir o WebService como noexemplo abaixo:
packageExemplosDatasetService;
importjavax.xml.ws.BindingProvider;
importnet.java.dev.jaxb.array.StringArray;
import com.datasul.technology.webdesk.dataservice.ws.DatasetDto;import com.datasul.technology.webdesk.dataservice.ws.DatasetService;import com.datasul.technology.webdesk.dataservice.ws.DatasetServiceService;import com.datasul.technology.webdesk.dataservice.ws.SearchConstraintDtoArray;import com.datasul.technology.webdesk.dataservice.ws.ValuesDto;
/**
* Classe para invocar servio DatasetService.*/publicclassDataServiceClient {
Figura 7 - Classes geradas pelo utilitrio wsimport
-
7/25/2019 Guia de Integratpo ECM
14/45
14
Integrao com AplicativosExternos
// Instancia DatasetServiceService.DatasetServiceService datasetServiceService= newDatasetServiceService();DatasetService service= datasetServiceService.getDatasetServicePort();
// Inicia execuo da classe.publicstaticvoidmain (String args[]) {
System.out.println("\nClasse DatasetService");
// Instancia classe DatasetServiceClient.DataServiceClient dsc = newDataServiceClient();
// Configura acesso ao WebServices.BindingProvider bp = (BindingProvider) dsc.service;
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,"http://localhost:8080/webdesk/DatasetService");
try{dsc.getDataset();
} catch(Exception e) {e.printStackTrace();
}}
// Retorna dataset.publicvoidgetDataset() throwsException {
System.out.println("\nMtodo getDataset\n");
/* Cria os parmetros utilizados na chamada */StringArray fields = newStringArray();StringArray order = newStringArray();SearchConstraintDtoArray constraints = newSearchConstraintDtoArray();
/* Invoca o dataset */
DatasetDto result = service.getDataset(1, /* Empresa */"adm", /* Usuario */"adm", /* Senha */"colleague", /* Dataset */fields, /* Campos a Retornar*/constraints, /* Condies */order); /* Ordem dos campos */
/* Apresenta o cabealho */for(String columnName : result.getColumns())
System.out.print(columnName + "\t");System.out.println();
/* Apresenta as linhas do dataset */for(ValuesDto row : result.getValues()) {
for(Object field : row.getValue())
System.out.print(field + "\t");System.out.println();
}}
}
Observaes
Ao utilizar os WebServices via Java, deve-se atentar para o tipo de cadaatributo e para o tipo de retorno do WebService. Exemplos:
XMLGregorianCalendar:Utilizado ao passar valores do tipo data.
Exemplo de utilizao:
-
7/25/2019 Guia de Integratpo ECM
15/45
15
Integrao com AplicativosExternos
DocumentDto document = new DocumentDto();
XMLGregorianCalendar date;
date = DatatypeFactory.newInstance().newXMLGregorianCalendar();
date.setYear(2009);
date.setMonth(10);
date.setDay(16);
date.setHour(0);
date.setMinute(0);
date.setSecond(0);
document.setExpirationDate(date);
Via Progress 4GL
Assim como nos exemplos anteriores, o primeiro passo para consumir umWebservice em Progress utilizar um utilitrio que ir ler o endereo WSDLe gerar as informaes necessrias para acess-lo. Diferente do Java eFlex, o Progress no gera objetos de stub mas apenas umadocumentao sobre como consumir os servios descritos no arquivo WSDL.Embora em algumas situaes seja possvel utilizar os tipos nativos doProgress como parmetros, dependendo do tipo de dado utilizado precisomanipular o XML SOAP para extrair ou enviar uma informao.
Para gerar a documentao de um servio, deve-se utilizar o utilitriobprowsdldoc como no exemplo abaixo:
Com a execuo deste utilitrio, sero gerados alguns arquivos HTML com as
informaes sobre como consumir o servio, como na imagem abaixo:
bprowsdldoc
-
7/25/2019 Guia de Integratpo ECM
16/45
16
Integrao com AplicativosExternos
/* Parte IInvocar o WebService */DEFINE VARIABLE hWebService AS HANDLE NO-UNDO.DEFINE VARIABLE hDatasetService AS HANDLE NO-UNDO.
DEFINE VARIABLE companyId AS INTEGER NO-UNDO.DEFINE VARIABLE username AS CHARACTER NO-UNDO.DEFINE VARIABLE password AS CHARACTER NO-UNDO.DEFINE VARIABLE name AS CHARACTER NO-UNDO.DEFINE VARIABLE fields1 AS CHARACTER EXTENT 0 NO-UNDO.
DEFINE TEMP-TABLE item NO-UNDONAMESPACE-URI ""FIELD fieldName AS CHARACTERFIELD finalValue AS CHARACTERFIELD initialValue AS CHARACTER .
DEFINE DATASET constraints NAMESPACE-URI"http://ws.dataservice.webdesk.technology.datasul.com/"
FOR item.DEFINE VARIABLE order AS CHARACTER EXTENT 0 NO-UNDO.DEFINE VARIABLE dataset1 AS LONGCHAR NO-UNDO.
CREATE SERVER hWebService.hWebService:CONNECT("-WSDL'http://norberto.datasul.net:8080/webdesk/DatasetService?wsdl'").RUN DatasetService SET hDatasetService ON hWebService.
/* Procedure invocation of getDataset operation. */RUN getDataset IN hDatasetService(INPUT 1,
INPUT "joyce",INPUT "adm",INPUT "colleague",INPUT fields1,
Figura 8 - Exemplo de Documentao do WebService gerada pelo Progress
-
7/25/2019 Guia de Integratpo ECM
17/45
17
Integrao com AplicativosExternos
INPUT DATASET constraints,INPUT order,OUTPUT dataset1).
DELETE OBJECT hDatasetService.hWebService:DISCONNECT().DELETE OBJECT hWebService.
/* Parte II - Faz o parser do XML e criar um arquivo separado por tabulacao */DEFINE VARIABLE iCount AS INTEGER NO-UNDO.DEFINE VARIABLE iCount2 AS INTEGER NO-UNDO.DEFINE VARIABLE hDoc AS HANDLE NO-UNDO.DEFINE VARIABLE hRoot AS HANDLE NO-UNDO.DEFINE VARIABLE hValues AS HANDLE NO-UNDO.DEFINE VARIABLE hEntry AS HANDLE NO-UNDO.DEFINE VARIABLE hText AS HANDLE NO-UNDO.DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
OUTPUT TO c:\temp\saida.txt.
CREATE X-DOCUMENT hDoc.hDoc:LOAD("longchar", dataset1, FALSE).
CREATE X-NODEREF hRoot.hDoc:GET-DOCUMENT-ELEMENT(hRoot).
CREATE X-NODEREF hEntry.CREATE X-NODEREF hText.CREATE X-NODEREF hValues.
/* Percorre as colunas primeiro */DO iCount = 1 TO hRoot:NUM-CHILDREN WITH 20 DOWN:
hRoot:GET-CHILD(hEntry, iCount).IF hEntry:NAME "columns" THEN
NEXT.
hEntry:GET-CHILD(hText, 1).
PUT UNFORMATTED hText:NODE-VALUE "~t".DOWN.
END.PUT UNFORMATTED SKIP.
/* Percorre os registros */DO iCount = 1 TO hRoot:NUM-CHILDREN WITH 20 DOWN:
hRoot:GET-CHILD(hValues, iCount).IF hValues:NAME "values" THEN
NEXT.
/* Percorre os campos */DO iCount2 = 1 TO hValues:NUM-CHILDREN:
hValues:GET-CHILD(hEntry, iCount2).
IF hEntry:NUM-CHILDREN = 0 THENcValue = "".
ELSE DO:hEntry:GET-CHILD(hText, 1).cValue = hText:NODE-VALUE.
END.PUT UNFORMATTED cValue "~t".
END.
PUT UNFORMATTED SKIP.END.
OUTPUT CLOSE.
DELETE OBJECT hValues.DELETE OBJECT hText.DELETE OBJECT hEntry.
-
7/25/2019 Guia de Integratpo ECM
18/45
18
Integrao com AplicativosExternos
DELETE OBJECT hRoot.
DELETE OBJECT hDoc.
Acessando WebServices a partir do TOTVS | ECMO TOTVS | ECM permite fazer chamadas a WebServices de terceiros atravsdo cadastro de Servios, no Painel de Controle.
Para adicionar um novo WebService, preciso entrar na opo Adicionar einformar um nome para o servio, o seu tipo (neste caso WebService), a suadescrio e a URL para o WSDL. No exemplo abaixo, ser utilizado umWebService pblico para consulta tabela peridica, cujo endereo do WSDLhttp://www.webservicex.com/periodictable.asmx?wsdl.
Figura 9 - Cadastro de Servi os, no Painel de Controle
http://www.webservicex.com/periodictable.asmx?wsdlhttp://www.webservicex.com/periodictable.asmx?wsdlhttp://www.webservicex.com/periodictable.asmx?wsdlhttp://www.webservicex.com/periodictable.asmx?wsdl -
7/25/2019 Guia de Integratpo ECM
19/45
19
Integrao com AplicativosExternos
Com base nestas informaes, o TOTVS | ECM ir extrair as informaessobre o WebService informado e finalizar o cadastro deste servio.
Uma vez que o servio esteja cadastrado, possvel visualizar as classes emtodos disponveis neste servio e que sero utilizados nos cdigosJavaScript que faro uso do mesmo. A tela abaixo apresenta um exemplo devisualizao de WebService.
Figura 10 - Cadastro do WebService
Figura 11 - Visualizando Classes e mtodos do Servio
-
7/25/2019 Guia de Integratpo ECM
20/45
20
Integrao com AplicativosExternos
A partir do cadastro do servio, possvel instanci-lo nos pontos onde o
TOTVS | ECM customizado utilizando-se JavaScript, como nos eventos defichrios, processos, ou no cadastro de Datasets. No exemplo a seguir, sercriado um dataset que far uso deste servio para trazer os dados da tabelaperidica. Para mais informaes sobre o uso de datasets no TOTVS | ECM ecomo criar Datasets customizados, verifique a documentao tcnica doproduto.
O cdigo abaixo apresenta uma implementao de exemplo do uso de umservio na construo de um Dataset.
function createDataset(fields, constraints, sortFields) {// Cria o datasetvar newDataset = DatasetBuilder.newDataset();newDataset.addColumn("ElementName");
// Conecta o servico e busca os livrosvar periodicService = ServiceManager.getService('PeriodicTable');var serviceHelper =periodicService.getBean();var serviceLocator =
serviceHelper.instantiate('NET.webserviceX.www.PeriodictableLocator');var service = serviceLocator.getperiodictableSoap();// Invoca o servicotry {var retorno = service.getAtoms();var NewDataSet = new XML(retorno);for each(elemento in NewDataSet.Table) {newDataset.addRow(new Array(elemento.ElementName.toString()));
}
} catch(erro) {
newDataset.addRow(new Array(erro.message));}
return newDataset;}
O primeiro passo para invocar o servio solicitar do TOTVS | ECM que faaa carga do servio, a partir do mtodoServiceManager.getService('PeriodicTable') . O nome passadocomo parmetro, deve ser o mesmo nome utilizado no cadastro do Servio,no Painel de Controle.
Uma vez que o servio tenhasido carregado, utilizado o mtodo getBean()para retornar um utilitrio para acesso s classes do servio, atravs domtodo instantiate. Atravs deste utilitrio, possvel instanciar objetos
disponveis e que esto listadas no cadastro do Servio, conforme a Figura10.
Uma vez que se tenha instanciado o objeto utilitrio do servio, as classesque devem ser instanciadas e os mtodos que devem ser invocadosdependem de cada WebService utilizado, e deve-se recorrer suadocumentao para mais informaes.
Observe na tabela abaixo, os passos exigidos pelo servio da tabela peridicae como foi criado o cdigo do dataset.
Passo Cdigo
Instanciar a classeNET.webserviceX.www.Periodicta
var serviceLocator =serviceHelper.instantiate('NET.webserviceX.www.Periodict
-
7/25/2019 Guia de Integratpo ECM
21/45
21
Integrao com AplicativosExternos
Passo Cdigo
bleLocator para ter acesso ao
localizador do servio.
ableLocator');
Invocar o mtodo
getperiodictableSoap para
instanciar o servio.
var service =serviceLocator.getperiodictableSoap();
Invocar o mtodo getAtoms para
ter a lista dos elementos.
var retorno =service.getAtoms();
No caso deste servio, o mtodo getAtoms retorna uma string contendo umXML com a lista de todos os elementos, conforme o exemplo abaixo:
Actinium
Aluminium
..
Para percorrer o XML e extrair o dados disponveis, so utilizadas asfuncionalidades de tratamento de XML do JavaScript que facilita amanipulao de dados deste tipo. Para mais informaes sobre esta
funcionalidade, acesse:http://www.ecma-international.org/publications/standards/Ecma-357.htm ouhttp://www.xml.com/pub/a/2007/11/28/introducing-e4x.html.
O exemplo abaixo apresenta o cdigo utilizado para percorrer o XMLretornado. Observe que as partes destacadas so correspondentes estrutura do XML retornado.
var NewDataSet = new XML(retorno);for each(elemento in NewDataSet.Table) {
newDataset.addRow(new Array(elemento.ElementName.toString()));}
Uma vez implementado o cdigo do dataset, possvel visualiz-lo, conformea figura abaixo.
http://www.ecma-international.org/publications/standards/Ecma-357.htmhttp://www.ecma-international.org/publications/standards/Ecma-357.htmhttp://www.xml.com/pub/a/2007/11/28/introducing-e4x.htmlhttp://www.xml.com/pub/a/2007/11/28/introducing-e4x.htmlhttp://www.xml.com/pub/a/2007/11/28/introducing-e4x.htmlhttp://www.ecma-international.org/publications/standards/Ecma-357.htm -
7/25/2019 Guia de Integratpo ECM
22/45
22
Integrao com AplicativosExternos
Figura 12 - Exemplo de dataset que utiliza um WebService
-
7/25/2019 Guia de Integratpo ECM
23/45
23
Integrao com AplicativosExternos
Progress Open AppServer
Assim como possvel invocar operaes em WebServices, o TOTVS | ECMtambm permite fazer chamadas a programas em Progress 4GL (ou ABL)expostos via Progress Open AppServer.
Nos exemplos a seguir, sero criados Datasets que, via camada de servio,faro o acesso lgicas em 4GL que faro a extrao dos dados. Embora oscdigos 4GL, neste exemplo, sejam muito simples, eles compreendem os
casos mais comuns exigidos no dia-a-dia, uma vez que a complexidade daintegrao se encontra nas interfaces (parmetros de entrada e sada) decada procedure exposta, e no na sua lgica interna.
Observe que os exemplos aqui apresentados tm por objetivo demonstrar adinmica de integrao entre Progress e o TOTVS | ECM sem entrar emdetalhes especficos das tecnologias envolvidas. A camada de servioProgress do TOTVS | ECM cria uma interface em JavaScript para abiblioteca Java Open AppServer Client, da Progress e, por isso, para maisinformaes sobre como integrar aplicativos Java e Progress consulte adocumentao fornecida pela Progress.
Caso de UsoOs exemplos exibidos a seguir, tm por objetivo a criao de quatro datasets 1no TOTVS | ECM:
1) Tipos de Centro de custo, que deve retornar os tipos de centro decusto existentes no aplicativo em Progress (neste caso, o EMS2).
2) Natureza dos Centros de Custo, que deve retornar os tipospossveis de natureza, conforme o aplicativo em Progress (nestecaso, o EMS2).
3) Centros de Custo, que deve retornar os registros na tabela conta2.
4) Usurios Comuns, que deve gerar uma lista de usurios comunsentre o TOTVS | ECM e o aplicativo em Progress (utilizando a tabelausar_mestre).
Para os trs primeiros casos, a lgica de extrao das informaes desejadasser exposta em um programa com vrias procedures, uma para cadanecessidade aqui apresentada.
1 Os exemplos utilizam uma base de dados do EMS2 para consulta de centros de
custo e usurios. Entretanto, apenas duas tabelas e 6 campos so utilizados no total,
o que no deve prejudicar o entendimento da lgica pelo leitor, nem impedir a
criao de um esquema equivalente para testes, caso necessrio.
2 O cdigo apresentado para extrao dos centros de custo tem fins meramentedidticos e no pode ser considerado para uso em produo. Para ter maisinformaes sobre como extrair centros de custos do EMS2, consulte a
documentao tcnica do mesmo.
-
7/25/2019 Guia de Integratpo ECM
24/45
24
Integrao com AplicativosExternos
CostCenterUtils.p
/**************************************************************************** Utilitrio que disponibiliza procedures para a extrao de informaes** sobre centros de custo.**************************************************************************/DEFINE TEMP-TABLE ttCC NO-UNDO
FIELD conta LIKE conta.ct-codigo /* CHARACTER */FIELD natureza LIKE conta.natureza /* INTEGER */FIELD tipo LIKE conta.tipo /* INTEGER */FIELD titulo LIKE conta.titulo. /* CHARACTER */
/*-------------------------------------------------------------------Procedure: readCostCentersObjetivo: Retorna uma temp-table com a lista de centros de custo.
----------------------------------------------------------------------*/
PROCEDURE readCostCenters:DEFINE OUTPUT PARAMETER TABLE FOR ttCC.
FOR EACH conta:CREATE ttCC.ASSIGN
ttCC.conta = conta.ct-codigottCC.natureza = conta.naturezattCC.tipo = conta.tipottCC.titulo = conta.titulo.
END.END.
/*-------------------------------------------------------------------Procedure: readCostNatureTypesObjetivo: Retorna uma string com as naturezas dos centros de custo,
separadas por vrgula.----------------------------------------------------------------------*/PROCEDURE readCostNatureTypes:
DEFINE OUTPUT PARAMETER cNatureList AS CHARACTER NO-UNDO.cNatureList = {adinc/i01ad047.i 03}.
END.
/*-------------------------------------------------------------------Procedure: readCostTypesObjetivo: Retorna uma string com os tipos de centro de custo,
separados por vrgula.----------------------------------------------------------------------*/PROCEDURE readCostTypes:
DEFINE OUTPUT PARAMETER cTypeList AS CHARACTER NO-UNDO.cTypeList = {adinc/i02ad047.i 3}.
END.
-
7/25/2019 Guia de Integratpo ECM
25/45
25
Integrao com AplicativosExternos
No caso da extrao de usurios comuns aos dois produtos, ser utilizado umprograma nico, conforme o cdigo abaixo:
verifyUsers.p
/**************************************************************************** Utilitrio que recebe um temp-table com uma lista de usurios e retorna** outra, apenas com os usurios da lista que existam na base de dados.**************************************************************************/DEFINE TEMP-TABLE ttUsers
FIELD cod_usuar AS CHARACTERFIELD nom_usuario AS CHARACTERINDEX principal IS PRIMARY UNIQUE
cod_usuar.DEFINE TEMP-TABLE ttOutUsers LIKE ttUsers.
DEFINE INPUT PARAMETER TABLE FOR ttUsers.DEFINE OUTPUT PARAMETER TABLE FOR ttOutUsers.
FOR EACH ttUsers:IF CAN-FIND(usuar_mestre
WHERE usuar_mestre.cod_usuar = ttUsers.cod_usuar) THEN DO:CREATE ttOutUsers.BUFFER-COPY ttUsers TO ttOutUsers.
END.END.
Os dois cdigos apresentados tm diferenas significativas na forma comoso utilizados e na forma como sero expostos pelo Progress. No primeiro,o programa carregado de forma persistente e suas procedures podem serexecutadas de forma independente. No segundo caso, o programa executado de forma no-persistente e a lgica principal se encontra no main-block. As procedures internas, caso existam, tm por objetivo melhorar aorganizao do cdigo e no podem ser utilizadas de forma isolada.
Configurao do AppServerAlgumas informaes importantes na configurao do AppServer:
1) O AppServer deve ser carregado no modo Stateless.
2) Na configurao do agente, no campo Propath, deve ser adicionado o
diretrio onde esto localizados os arquivos compilados (.r).IMPORTANTE: Quando utilizado um caminho relativo(\\servidor\pasta), o servio Windows do Progress (AdminService)deve ser iniciado com um usurio de rede que possua permisso deacesso ao diretrio informado.
http://servidor/pastahttp://servidor/pastahttp://servidor/pastahttp://servidor/pasta -
7/25/2019 Guia de Integratpo ECM
26/45
26
Integrao com AplicativosExternos
Expondo cdigos 4GL com ProxyGenO primeiro passo para que seja possvel executar rotinas em Progress 4GL criar a biblioteca cliente, o que feito com o uso do aplicativo ProxyGen,que acompanha a instalao do Progress, conforme o exemplo abaixo3:
Na primeira tela do ProxyGen o principal ponto que deve ser observado onome do Projeto (no exemplo acima, EMSProxies). A informao destecampo ser utilizada pelo ProxyGen para nomear a classe de acesso aoservio, e que ser utilizada na configurao do servio no TOTVS | ECM.Nesta tela tambm preciso configurar o PROPATH corretamente, para que
seja possvel encontrar os arquivos compilados (.r).
3 Note que dependendo da verso do Progress, as telas podem sofrer algumavariao na quantidade e disposio dos campos. Consulte a documentao em
caso de dvida.
Figura 13 - ProxyGen - Nome do Projeto
-
7/25/2019 Guia de Integratpo ECM
27/45
27
Integrao com AplicativosExternos
A segunda etapa consiste em inserir quais procedures sero expostas deforma persistente ou no-persistente. A escolha de qual opo utilizardepende da forma como cada objeto exposto foi construdo.
Figura 14 - ProxyGen - Incluso de procedures
-
7/25/2019 Guia de Integratpo ECM
28/45
28
Integrao com AplicativosExternos
Durante o processo de gerao dos proxies, observe o campo AppService.Este deve ser o nome do servio que deve ser publicado no AppServer, casocontrrio no ser possvel conectar o servidor.
A ltima informao relevante para a gerao dos proxies o nome do pacote(package) onde as classes sero criadas. Esta informao utilizada durantea configurao do servio Progress no TOTVS | ECM.
Figura 15 - ProxyGen - Configurando nome do Servio
Figura 16 - ProxyGen - Definindo o package das classes
-
7/25/2019 Guia de Integratpo ECM
29/45
29
Integrao com AplicativosExternos
Uma vez criadas as classes, preciso empacot-las em um arquivo .JAR. Isto
pode ser feito via linha de comando, utilizando-se o comando abaixo:jar -cvf
Observe apenas que no arquivo gerado, preciso que as classes estejam nosdiretrios corretos. No exemplo acima, o diretrio com deve ser includo eestar no raz do arquivo Jar.
Por ser compatvel com o formato zip, um opo gerar um arquivo com asclasses geradas (respeitando-se os diretrios) e renome-lo para a extenso.JAR.
Configurando o Ambiente Progress no TOTVS |ECMComo mencionado anteriormente, a camada de servio de acesso Progress no TOTVS | ECM baseada nas bibliotecas Java Open AppServerClient, da Progress. Uma vez que estas bibliotecas no so distribudas noTOTVS | ECM, e como os arquivos que compem estas bibliotecas variam deacordo com a verso do Progress utilizada, preciso que o usurio faa aconfigurao destes ambientes no produto.
Para configurar o ambiente Progress no TOTVS | ECM, preciso identificarquais os arquivos .JAR que so exigidos para a execuo dos proxies. Atabela abaixo apresenta o conjunto padro de arquivos para as verses 9 e10, embora ela possa sofrer variaes dependendo do ambiente do usurio.Verifique a documentao do Progress em cada verso para mais detalhes.
Progress 9.X OpenEdge10.X
o4glrt.jar common.jar
progress.jar commonj.sdo.jar
ecore.change.jar
ecore.jar
ecore.resources.jar
ecore.sdo.jar
ecore.xmi.jaro4glrt.jar
openedge.jar
progress.jar
ATENO: O conjunto de arquivos deve tambm ser copiado para a pasta\server\default\lib. necessrio parar o servio antes de efetuar acpia e reinici-lo em seguida.
No efetuando este procedimento pode ocorrer o erro:java.lang.NoClassDefFoundError : com/progress/open4gl/SDOFactoryna
execuo dos servios que utilizam este ambiente.
-
7/25/2019 Guia de Integratpo ECM
30/45
30
Integrao com AplicativosExternos
O TOTVS | ECM permite configurar mais de um ambiente Progress em uma
mesma instalao, desde que sejam fornecidos os arquivos .JAR de cada umdestes ambientes. Note, entretanto que o ambiente deve ser configurado deacordo com a verso do ProxyGen utilizada para criao dos proxies e nonecessariamente verso do servidor de aplicao. Por exemplo, se osproxies foram gerados com o ProxyGen na verso 9, o ambiente deve serconfigurado com esta verso, ainda que o servidor de aplicao estejarodando com o OpenEdge 10.
Para configurar um ambiente Progress, acesse no painel de controle aopo Ambientes Progress, conforme a imagem abaixo:
Figur a 17Tela de Con figu rao d os Ambient es Pro gress
Onde:
Cdigo do Servio:Cdigo pelo qual o ambiente ser identificado.Ex.: dlc101a, dlc91e, etc.
Descrio:Descrio do ambiente
Arquivos: Arquivos .JAR que compem o ambiente. Todos osarquivos .JAR que forem necessrios para a execuo devem serinformados.
Configurando o ServioA configurao do Servio Progress no TOTVS | ECM permite isolar asinformaes de conexo aos servidor de aplicao da lgica que utilizaservios nele disponibilizados. Com isto possvel alterar estas informaes(como nome do servidor AppServer ou usurio de conexo), sem impactar as
customizaes que so baseadas neste servio.
-
7/25/2019 Guia de Integratpo ECM
31/45
31
Integrao com AplicativosExternos
O cadastrado de um servio feito no Painel de Controle, na opo Servios.
A tela abaixo apresenta os campos utilizados para o cadastro do ServioProgress.
Figur a 18Tela de cadastro do Serv io Prog ress
Onde:
Nome do Servio: Nome nico que ir identificar o servio nosistema. Este nome ser utilizado nos cdigos JavaScript para teracesso a este servio
Descrio:Texto que descreve o servio de dados.
URL do Servio: Identifica a URL de acesso ao servio AppServer,como por exemplo AppServer:///.
No caso de no estar utilizando o NameServer padro deve serinformada a porta de acesso ao NameServer. Ex:
AppServer://:/.Observe que dependendo da configurao do servio e/ou da formade conexo, a URL pode sofrer alteraes. Verifique a documentaodo Open AppServer para mais informaes.
Tipo do Servio: Identifica o tipo de servio (Progress ouWebService)
Objeto Remoto:Identifica a classe de acesso do proxy. Esta classenormalmente formada pelo nome do pacote utilizado para a geraodas classes Proxy, mais o nome do projeto no ProxyGen. Exemplo:Nas telas que apresentam o ProxyGen, foi utilizado o pacotecom.datasul.technology.webdesk.samples.ems, e o nome dado aoprojeto no ProxyGen foi EMSProxies. Neste caso, a classe do Objetoremoto ser com.datasul.technology.webdesk.samples.ems.EMSProxies.
Usurio:Usurio utilizado na conexo ao servio, conforme definido
-
7/25/2019 Guia de Integratpo ECM
32/45
32
Integrao com AplicativosExternos
nas configuraes do mesmo no AppServer.
Senha:Senha utilizada na conexo ao servio, conforme definida nasconfiguraes do mesmo no AppServer.
Parmetros Extras:Parmetros extras (e opcionais) utilizados paraconexo ao AppServer. Verifique a documentao do OpenAppServer para verificar as opes disponveis em cada verso doProgress.
Ambiente Progress: Identifica o ambiente que ser utilizado nesteservio. Observe que o ambiente deve ser compatvel com a versodo ProxyGen utilizada para gerao do proxy.
Arquivo Proxy: Arquivo .JAR contendo as classes geradas peloProxyGen.
Uma vez que o servio tenha sido configurado, possvel visualizar asclasses disponveis e os mtodos existentes em cada delas. Estasinformaes so importantes para guiar o desenvolvimento dos cdigos decustomizao que faro uso deste servio. Para visualizar as classes emtodos do servio, clique no boto visualizar no cadastro de Servios,conforme a tela abaixo:
Figur a 19Tela d e Vis uali zao d e Clas ses e mtod os do Serv io Pro gr ess
Viso geral dos Objetos EnvolvidosO acesso s procedures expostas no AppServer envolve quatro elementosque interagem entre si, conforme o diagrama abaixo:
-
7/25/2019 Guia de Integratpo ECM
33/45
33
Integrao com AplicativosExternos
Onde:
Script Code: o cdigo em JavaScript que far uso das proceduresexpostas no AppServer. Como mencionado anteriormente, esteJavaScript pode ser de qualquer natureza, como a implementao deum Dataset ou a customizao de um Workflow.
Service Provider: Objeto recuperado via mtodoServiceManager.getService e que fornece o acesso sfuncionalidades do servio. Este objeto responsvel por gerenciar a
conexo e recursos alocados pelo servio durante a execuo doscript.
Service Helper: Objeto recuperado via mtodo getBean noServiceProvider e que disponibiliza um conjunto de mtodos utilitriosque permitem, entre outras coisas, criar objetos especficos doProgress (StringHolder, ResultSetHolder, etc.), ter acesso ao objetoremoto do ProxyGen e instanciar classes. Mais informaes sobre oService Helper sero apresentadas ao final deste capitulo.
ProxyGen Classes: Classes geradas pelo ProxyGen e que seroutilizadas pelo programador para execuo das rotinas emProgress. A lista das classes disponveis bem como os seusmtodos, podem ser visualizados no cadastro de servio, na opo
visualizar.
Procedures Persistentes e No-Persistentes
Quando uma procedure adicionada ao projeto do ProxyGen, ela deve serconfigurada em duas listas: Procedures Persistentes ou No-Persistentes.Esta deciso implica diretamente na forma como estes objetos so acessadospela biblioteca gerada e, consequentemente, na forma como o programadorir acess-las nos cdigos JavaScript.
As procedures expostas de forma no-persistente do origem mtodos naclasse configurada como Objeto Remoto (ou Proxy) no Servio e a suaexecuo feita chamada ao mtodo correspondente, por exemplo:
serviceHelper.getProxy().verifyUsers(inputTT, holder).
Figura 20 - Viso geral de Classes
-
7/25/2019 Guia de Integratpo ECM
34/45
34
Integrao com AplicativosExternos
As procedures expostas de forma persistente do origem novas classes que
podem ser instanciadas via chamadas a mtodos no Objeto Remoto (verifiqueos mtodos disponveis da classe na opo Visualizar do cadastro deServios), ou via o mtodo createManagedObject. A chamada via o mtodocreateManagedObject permite que o TOTVS | ECM tenha controle sobre ociclo de vida deste objeto, liberando-o automaticamente ao fim do mtodo.Caso o objeto seja instanciado manualmente, o programador deve codificar aliberao do objeto (mtodo _release()), sob pena de bloquear um novo agentedo AppServer a cada invocao do mtodo.
Parmetros de Entrada e Sada
Outro ponto importante na invocao das rotinas em 4GL observar quais ostipos de parmetros de entrada e sada de cada procedure ou programa.
Dependendo do tipo de dado (CHARACTER, INTEGER, TEMP-TABLE, etc.),do tipo de parmetro (INPUT, INPUT-OUTPUT, BUFFER, etc.) e da versoutilizada do Progress, a forma de se manipular estes parmetros podevariar.
Para os tipos mais simples, como strings, datas ou valores inteiros, oProxyGen utiliza um mapeamento direto para os tipos ou classes padres dalinguagem Java. Para tipos complexos, como temp-tables e buffers, oProxyGen utiliza classes que fazem parte da biblioteca de runtime destesservios.
Quando os parmetros so de entrada e sada (INPUT-OUTPUT) ou de sada(OUTPUT), os tipos primitivos precisam ser substitudos por classesHolders, que contero o valor retornado aps a execuo do mtodo. Os
exemplos mais comuns so StringHolder ou ResultSetHolder.Os tipos de dados utilizados em cada mtodo podem ser consultadom naopo visualizar do cadastro de servio. Observe que dependendo da versodo Progress pode haver variao nos tipos de parmetros utilizados e naforma de utiliz-los. Em caso de dvida, consulte a documentao fornecidapela Progress.
Construindo os DatasetsUma vez que o servio tenha sido configurado no TOTVS | ECM, possvelutiliz-lo em qualquer ponto do produto onde sejam inseridos cdigosJavaScript para execuo no lado servidor (em especial, nas customizaesde fichrios, processos e na construo de Datasets).
A forma de se invocar as rotinas expostas pelo servio sempre a mesma,independente de qual ponto est sendo chamado. Entretanto, para facilitar oentendimento do uso dos servios no produto e facilitar a reproduo dosexemplos apresentados no ambiente do cliente, todos os exemplos abaixoutilizaro Datasets como alvo.
Conforme visto anteriormente, os Datasets que sero apresentados aqui soTipos de Centro de Custo, Natureza dos Centros de Custo, Centros deCusto, Usurios em Comum.
Tipos de Centros de Custo
O cdigo abaixo apresenta a implementao do Dataset de Tipos de Centrode custo. A explicao de cada passo da implementao ser apresentada aseguir:
-
7/25/2019 Guia de Integratpo ECM
35/45
35
Integrao com AplicativosExternos
function createDataset(fields, constraints, sortFields) {// Passo 1 - Recupera o servio cadastrado no Painel de Controlevar servico = ServiceManager.getService("ems2_v10");
// Passo 2 - Carrega o objeto utilitrio para integrao com Progressvar serviceHelper = servico.getBean();
// Passo 3 - Carrega a procedure persistente CostCenterUtils.pvar remoteObj = serviceHelper.createManagedObject("CostCenterUtils");
// Passo 4 - Invoca a procedure que retorna uma string com os tipos de CCvar types = serviceHelper.createStringHolder();remoteObj.readCostTypes(types);
// Passo 5 - Quebra a string em um array com cada um dos tiposvar typeArray = types.getStringValue().split(",");
// Passo 6 - Cria o Dataset e adiciona cada tipo retornadovar newDataset = DatasetBuilder.newDataset();newDataset.addColumn("id");newDataset.addColumn("descricao");
for(var pos = 0; pos < typeArray.length; pos++) {newDataset.addRow(new Array(pos + 1, typeArray[pos]));
}return newDataset;
}
Onde:
Passo 1Nesta etapa feita a invocao do servio configurado noPainel de Controle (getService). Note que neste ponto no precisoinformar qualquer parmetro de conexo ao servio, uma vez que istoj foi feito no seu cadastro.
Passo 2 feita a carga do objeto utilitrio para Servios Progress(getBean). Este utilitrio disponibiliza uma srie de mtodos quefacilitam a interao com o proxy gerado e seus mtodos seroapresentados em mais detalhes adiante neste documento.
Passo 3 Faz a carga do objeto CostCenterUtils de formagerenciada, atravs do mtodo (createManagedObject).
Passo 4 Invoca o mtodo desejado (readCostTypes) passando umStringHolder que ir receber o valor de sada.
Passo 5Transforma a string recebida por parmetro em um arraycom as opes. O caractere , utilizado para determinar os pontosde quebra da string.
Passo 6Cria o Dataset, adiciona os campos desejados e percorre oarray criado, adicionando um alinha no dataset para cada item doarray.
A tela abaixo apresenta a visualizao dos dados do Dataset criado.
-
7/25/2019 Guia de Integratpo ECM
36/45
36
Integrao com AplicativosExternos
Naturezas de Centro de Custo
O Dataset de Naturezas de Centro de Custo muito similar ao dataset de tipode centro de custo. Na prtica, a ltima alterao a procedure que
chamada.
function createDataset(fields, constraints, sortFields) {var servico = ServiceManager.getService("ems2_v10");var serviceHelper = servico.getBean();var remoteObj = serviceHelper.createManagedObject("CostCenterUtils");
// L os tipos de contasvar types = serviceHelper.createStringHolder();remoteObj.readCostNatureTypes(types);
var typeArray = types.getStringValue().split(",");
var newDataset = DatasetBuilder.newDataset();
newDataset.addColumn("id");newDataset.addColumn("descricao");for(var pos = 0; pos < typeArray.length; pos++) {
newDataset.addRow(new Array(pos + 1, typeArray[pos]));}return newDataset;
}
Aps o cadastro do Dataset, possvel visualizar o seu contedo.
Figura 21 - Visualizao do Dataset de Tipos de Centros de Custo
-
7/25/2019 Guia de Integratpo ECM
37/45
37
Integrao com AplicativosExternos
Centros de Custo
O Dataset de Centros de Custo possui uma estrutura muito semelhante aosdois datasets vistos anteriormente. A diferena principal que, neste caso, aprocedure retorna uma temp-table com os centros de custo, o que altera aforma como os dados so manipulados.
Dependendo da verso do Progress, os objetos utilizados podem variar. Aseguir, so apresentados exemplos da codificao no Progress 9 eOpenEdge 10, respectivamente. Em ambos os casos, o resultadoapresentado pelo Dataset ser o mesmo.
Codificao Progress 9
As temp-table no Progress 9 so tratadas atravs de objetos queimplementam a interface java.sql.ResultSet.
function createDataset(fields, constraints, sortFields) {// Recupera o servio e carrega o objeto remotovar servico = ServiceManager.getService("ems2_v9");var serviceHelper = servico.getBean();var remoteObj = serviceHelper.createManagedObject("CostCenterUtils");
// L as contas correntesvar holder = serviceHelper.createResultSetHolder();remoteObj.readCostCenters(holder);
// Cria a estrutura do Datasetvar newDataset = DatasetBuilder.newDataset();newDataset.addColumn("conta");newDataset.addColumn("titulo");newDataset.addColumn("natureza");
newDataset.addColumn("tipo");
// Percorre os registros, carregando o Dataset com os dadosvar rs = holder.getResultSetValue();
Figura 22 Visualizao do dataset de Naturezas de Centro de Custo
-
7/25/2019 Guia de Integratpo ECM
38/45
38
Integrao com AplicativosExternos
while(rs.next()) {var conta = rs.getObject("conta");var natureza = rs.getObject("natureza");var tipo = rs.getObject("tipo");var titulo = rs.getObject("titulo");
newDataset.addRow(new Array(conta, titulo, natureza, tipo));}return newDataset;
}
Codificao OpenEdge 10
No OpenEdge 10, as temp-tables retornadas so encapsuladas comoobjetos da classe ProDataGraph. Esta classe tambm utilizada quando se
utilizam parmetros do tipo DATASET.
function createDataset(fields, constraints, sortFields) {var servico = ServiceManager.getService("ems2_v10");var serviceHelper = servico.getBean();var remoteObj = serviceHelper.createManagedObject("CostCenterUtils");
// L as contas correntesvar holder = serviceHelper.createProDataGraphHolder();remoteObj.readCostCenters(holder);
var newDataset = DatasetBuilder.newDataset();newDataset.addColumn("conta");newDataset.addColumn("titulo");
newDataset.addColumn("natureza");newDataset.addColumn("tipo");
var ttCC = holder.getProDataGraphValue().getProDataObjects("ttCC");for(var row_index = 0; row_index < ttCC.size(); row_index++) {
var row = ttCC.get(row_index);newDataset.addRow(new Array(row.get("conta"),
row.get("titulo"),row.get("natureza"),row.get("tipo")));
}return newDataset;
}
-
7/25/2019 Guia de Integratpo ECM
39/45
39
Integrao com AplicativosExternos
Usurios em Comuns
A primeira diferena entre o Dataset de usurios comuns e os exemplosanteriores, que neste caso preciso passar uma temp-table comoparmetro para a procedure invocada.
A segunda diferena que o cdigo 4GL est implementado em um programano-persistente, o que altera a forma como a lgica invocada a partir docdigo JavaScript.
A terceira diferena que podemos observar neste caso que possveltransformar um dataset nos tipos de dados requeridos pelo Progress(ResultSet ou ProDataGraph).
Codificao Progress 9
function createDataset(fields, constraints, sortFields) {// Passo 1Recupera os usurios do TOTVS | ECM.var campos = new Array("colleaguePK.colleagueId", "colleagueName");var dataset = DatasetFactory.getDataset("colleague",
campos,null,null);
// Passo 2 - Instancia o servicovar servico = ServiceManager.getService("ems2_v9");var serviceHelper = servico.getBean();
// Passo 3 - Transforma o dataset em um ResultSet (v9) e// cria holder para saidavar inputTT = dataset.toResultSet();var holder = serviceHelper.createResultSetHolder();
// Invoca a procedure no ProgressserviceHelper.getProxy().verifyUsers(inputTT, holder);
// Cria o novo Dataset
var newDataset = DatasetBuilder.newDataset();newDataset.addColumn("usuario");newDataset.addColumn("nome");
Figura 23 - Visualizao do Dataset de Centros de Custo
-
7/25/2019 Guia de Integratpo ECM
40/45
40
Integrao com AplicativosExternos
var rs = holder.getResultSetValue();while(rs.next()) {
var cod_usuar = rs.getObject("cod_usuar");var nom_usuario = rs.getObject("nom_usuario");newDataset.addRow(new Array(cod_usuar, nom_usuario));
}return newDataset;
}
Codificao OpenEdge 10
function createDataset(fields, constraints, sortFields) {// Primeiro, recupera os colaboradores correntesvar campos = new Array("colleaguePK.colleagueId", "colleagueName");
var dataset = DatasetFactory.getDataset("colleague",campos,null,null);
// Instancia o servicovar servico = ServiceManager.getService("ems2_v10");var serviceHelper = servico.getBean();
// Transforma o dataset em um ProDataGraph (v10) e cria holder para saidavar inputTT = serviceHelper.toProDataGraph(dataset);var holder = serviceHelper.createProDataGraphHolder();
// Invoca a procedure no ProgressserviceHelper.getProxy().verifyUsers(inputTT, holder);
// Cria o novo Datasetvar newDataset = DatasetBuilder.newDataset();newDataset.addColumn("usuario");newDataset.addColumn("nome");
var ttCC = holder.getProDataGraphValue().getProDataObjects("ttOutUsers");for(var row_index = 0; row_index < ttCC.size(); row_index++) {
var row = ttCC.get(row_index);newDataset.addRow(new Array(row.get("cod_usuar"),
row.get("nom_usuario")));}return newDataset;
}
-
7/25/2019 Guia de Integratpo ECM
41/45
41
Integrao com AplicativosExternos
Service HelperA tabela abaixo apresenta a lista de mtodos existentes na classe utilitriapara servios Progress:
Method Summaryjava.lang.Object createBigDecimalHolder()
Cria um objeto Holder para o tipo DECIMAL
java.lang.Object createBooleanHolder()Cria um objeto Holder para o tipo LOGICAL
java.lang.Object createByteArrayHolder()
Cria um objeto Holder para o tipo RAW
java.lang.Object createCOMHandleHolder()
Cria um objeto Holder para o tipo COM-HANDLE
java.lang.Object createDateHolder()
Cria um objeto Holder para o tipo DATE
java.lang.Object createHandleHolder()
Cria um objeto Holder para o tipo WIDGET-HANDLE
(Handle)
java.lang.Object createIntHolder()
Cria um objeto Holder para o tipo INTEGER
java.lang.Object createLongHolder()
Cria um objeto Holder para o tipo RECID
java.lang.Object createManagedObject(java.lang.StringobjName)
Figura 24 - Visualizao do Dataset de Usurios Comuns
-
7/25/2019 Guia de Integratpo ECM
42/45
42
Integrao com AplicativosExternos
L um arquivo .p ou .r que tenha sido exposto via appserver
de forma persistente.java.lang.Object createMemptrHolder()
Cria um objeto Holder para o tipo MEMPTR
java.lang.Object createProDataGraph(java.lang.Objectmetadata)
Cria um objeto da classe ProDataGraph
java.lang.Object createProDataGraphHolder()
Cria um objeto Holder para o tipo ProDataGraphHolder
java.lang.Object createProDataGraphMetaData(java.lang.String name)
Cria um objeto da classe ProDataGraphMetadata
java.lang.Object createProDataObjectMetaData(java.lang.String tableName, int numFields, boolean
bimageFlag, int numIndexes,
java.lang.String multiIxCols,
java.lang.String XMLNamespace,
java.lang.String XMLPrefix)
Cria um objeto da classe ProDataObjectMetadata Cria um
objeto para um dataset (Temp-table)
java.lang.Object createResultSetHolder()
Cria um objeto Holder para o tipo TABLE
java.lang.Object createRowidHolder()
Cria um objeto Holder para o tipo ROWID
java.lang.Object createStringHolder() Cria um objeto Holder para o tipo CHARACTER.
java.lang.Object getProxy()
Retorna a instncia do objeto de conexo ao appserver, j
conectado e disponivel para uso.
java.lang.Object instantiate(java.lang.String className)
Instancia um objeto de uma classe dentro da biblioteca do
proxy.
java.lang.Object toProDataGraph(com.datasul.technology.webdesk.dataset.DefaultDataset d)
Transforma um dataset em um ProDataGraph.
-
7/25/2019 Guia de Integratpo ECM
43/45
43
Integrao com AplicativosExternos
Links Externos
Acesso direto a pastaPara facilitar o acesso a uma pasta no sistema, utilizado um parmetro naurl do servidor. Sendo enviada a url :/webdesk/?state=navigation&folderId=
Exemplo:http://localhost:8080/webdesk/?state=navigation&folderId=8
Importante: Esta situao s vlida para sesses que estejam autenticadas.Para sesses no autenticadas consulte o captulo Acesso sem efetuar login,abaixo.
Acesso a documentos com destinoPara acessar um documento dentro de uma iframe do navegador, ou
utilizando links de um documento para outro, pode ser utilizado o parmetrotarget, para definir o destino da URL. Os valores do target so os mesmo dopadro HTML, podendo ser:
_parent
_self
_top
_blank
Exemplo:
http://localhost:8080/webdesk/documentviewer?WDNrDocto=44056&WDNrVersao=1000&target=_blank
Acesso sem efetuar login possvel acessar o ECM externamente sem passar pela tela de login, bastautilizar as URL's informando o token de acesso. O token deve ser geradoutilizando o webservice TokenService do ECM. Para mais informaesconsultar o Guia de Referncia Utilizao de Webservices.
Os acessos disponveis so:
ECM:http://:/josso/signon/ExternalLogin.do?t=&josso_cmd=true&josso_back_to=/webdesk/
http://localhost:8080/webdesk/?state=navigation&folderId=8http://localhost:8080/webdesk/?state=navigation&folderId=8http://localhost:8080/webdesk/?state=navigation&folderId=8 -
7/25/2019 Guia de Integratpo ECM
44/45
44
Integrao com AplicativosExternos
Navegao posicionada em pasta:
http://:/josso/signon/ExternalLogin.do?t=&josso_cmd=true&josso_back_to=/webdesk?state=navigation%26folderId=
Aba de visualizao do fluxo do processo
http://:/josso/signon/ExternalLogin.do?t=&josso_cmd=true&josso_back_to=/webdesk/workflowstate?p=
Aba de visualizao do fluxo do processo de uma solicitao aberta:
http://:/josso/signon/ExternalLogin.do?t=&josso_cmd=true&josso_back_to=/webdesk/workflowstate?pi=
-
7/25/2019 Guia de Integratpo ECM
45/45
Integrao com AplicativosExternos
Third Party TrademarksAdobe, Flash, Flex, Flex Builder, PostScript and Reader are either registeredtrademarks or trademarks of Adobe Systems Incorporated in the United Statesand/or other countries.
Apache is a trademark of The Apache Software Foundation.
Apple is a trademark of Apple Inc., registered in the U.S. and other countries
Firefox and Mozilla are registered trademarks of the Mozilla Foundation.
Google, Android and Google Chrome are trademarks of the Google Inc.
IOS is a trademark or registered trademark of Cisco in the U.S. and othercountries and is used under license
JavaScript is a trademark of Oracle Corporation.
Liferay, Liferay Portal, and the Liferay logo are trademarks or registeredtrademarks of Liferay, Inc., in the United States and other countries.
Linux is the registered trademark of Linus Torvalds in the U.S. and othercountries.
Microsoft, Active Directory, Excel, Internet Explorer, Outlook, PowerPoint, SQLServer, Windows and Windows Vista are either registered trademarks ortrademarks of Microsoft Corporation in the United States and/or othercountries.
MySQL is a trademark of Oracle Corporation and/or its affiliates.
openDBcopy is an open-source project by Anthony Smith, published under theterms of the GNU General Public License
OpenLDAP is a registered trademark of the OpenLDAP Foundation
Oracle, Java and OpenOffice.org are registered trademarks of Oracle and/orits affiliates. Other names may be trademarks of their respective owners.
Progress and OpenEdge are trademarks or registered trademarks of ProgressSoftware Corporation or one of its subsidiaries or affiliates in the U.S. andother countries.
Red Hat and JBoss are registered trademarks of Red Hat, Inc. in the UnitedStates and other countries.
This product includes software developed by the Visigoth Software Society(http://www.visigoths.org/).
http://www.visigoths.org/http://www.visigoths.org/http://www.visigoths.org/http://www.visigoths.org/