Guia de Integratpo ECM

download Guia de Integratpo ECM

of 45

Transcript of Guia de Integratpo ECM

  • 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/