Escolar Documentos
Profissional Documentos
Cultura Documentos
Externos
ndice
Consideraes Gerais ....................................................................... 4
Viso Geral ......................................................................................... 5
WebServices ....................................................................................... 7
Acessando os WebServices do TOTVS | ECM ............................................ 7
Via Adobe Flex .................................................................................... 7
Via Java ................................................................................................ 12
Observaes ............................................................................................ 14
Via Progress 4GL .................................................................................. 15
Acessando WebServices a partir do TOTVS | ECM................................... 18
Consideraes Gerais
As informaes contidas neste documento tm por objetivo demonstrar como
feita a integrao entre o TOTVS | ECM e aplicativos externos. Para que se
tenha uma compreenso completa destas informaes, alguns
conhecimentos so considerados pr-requisitos, entre eles:
JavaScript
WebServices
SOAP
Progress 4GL
Java
Adobe Flex
Viso Geral
Ainda que empricos, toda empresa possui processos de negcios que
permitem empresa cumprir o seu objetivo, seja ele a prestao de um
servio, a produo de bens materiais ou o comrcio de mercadorias. Uma
empresa possui uma infinidade de processos, sendo que cada pessoa na
organizao 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 (controle
de envio de cartes de aniversrios).
Com o advento das tecnologias de Sistema da Informao, vrios sistemas
passaram a dar apoio a estes processos de negcio, especialmente queles
considerados mais crticos para a operao da empresa. O melhor exemplo
disto a adoo dos sistemas de ERP que do suporte aos processos de
vrias reas da empresa.
O TOTVS | ECM tem como objetivo servir de ferramenta para agilizar e
automatizar processos de negcio, especialmente aqueles que no so
atendidos plenamente pelos demais sistemas da empresa. Isto pode ser
percebido em maior ou menor grau em cada uma das suas funcionalidades,
desde as mais simples (como colaborao) at as mais complexas (como
GED e Workflow).
Entretanto, parte destes processos tm alta dependncia dos sistemas de
informao j existentes na empresa e, por isso, a arquitetura do TOTVS |
ECM planejada para permitir integrar-se a estes sistemas, permitindo que os
processos 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 outros
sistemas venham a conectar-se para a consulta de informaes ou para
execuo de operaes transacionais.
WebServices
A integrao via WebServices utiliza o protocolo SOAP e , por ser um padro
aberto, permitem que sistemas desenvolvidos em plataformas totalmente
diferentes como Java, Microsoft .Net, C, C++, PHP, Ruby, Pearl ou
Python possam trocar informaes entre si de forma transparente.
Na ltima tela, deve-se informar o package que ser utilizado e qual o nome
da classe principal (j sugeridos pelo Flex Builder).
10
11
Via Java
Existem muitas implementaes de uso de WebServices em Java e neste
exemplo vamos utilizar as bibliotecas disponveis no Java 6.
Da mesma forma como no exemplo anterior, em Adobe Flex, o primeiro
passo consiste em utilizar o endereo WSDL para a gerao dos stubs em
Java. O comando abaixo apresenta um exemplo de como gerar estes
stubs.
12
13
Observaes
Ao utilizar os WebServices via Java, deve-se atentar para o tipo de cada
atributo e para o tipo de retorno do WebService. Exemplos:
XMLGregorianCalendar: Utilizado ao passar valores do tipo data.
Exemplo de utilizao:
14
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);
Com a execuo deste utilitrio, sero gerados alguns arquivos HTML com as
informaes sobre como consumir o servio, como na imagem abaixo:
15
16
OUTPUT CLOSE.
DELETE OBJECT hValues.
DELETE OBJECT hText.
DELETE OBJECT hEntry.
17
18
19
O primeiro passo para invocar o servio solicitar do TOTVS | ECM que faa
a
carga
do
servio,
a
partir
do
mtodo
ServiceManager.getService('PeriodicTable'). O nome passado
como 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 do
mtodo instantiate. Atravs deste utilitrio, possvel instanciar objetos
disponveis e que esto listadas no cadastro do Servio, conforme a Figura
10.
Uma vez que se tenha instanciado o objeto utilitrio do servio, as classes
que devem ser instanciadas e os mtodos que devem ser invocados
dependem de cada WebService utilizado, e deve-se recorrer sua
documentao para mais informaes.
Observe na tabela abaixo, os passos exigidos pelo servio da tabela peridica
e como foi criado o cdigo do dataset.
Passo
Cdigo
var serviceLocator =
Instanciar a classe
NET.webserviceX.www.Periodicta serviceHelper.instantiate('N
ET.webserviceX.www.Periodict
20
Cdigo
ableLocator');
Invocar o mtodo
getperiodictableSoap para
instanciar o servio.
var service =
serviceLocator.getperiodicta
bleSoap();
var retorno =
service.getAtoms();
ou
21
22
Caso de Uso
Os exemplos exibidos a seguir, tm por objetivo a criao de quatro datasets
no TOTVS | ECM:
23
24
Configurao do AppServer
Algumas 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 de
acesso ao diretrio informado.
25
26
27
28
Observe apenas que no arquivo gerado, preciso que as classes estejam nos
diretrios corretos. No exemplo acima, o diretrio com deve ser includo e
estar no raz do arquivo Jar.
Por ser compatvel com o formato zip, um opo gerar um arquivo com as
classes geradas (respeitando-se os diretrios) e renome-lo para a extenso
.JAR.
Progress 9.X
OpenEdge 10.X
o4glrt.jar
common.jar
progress.jar
commonj.sdo.jar
ecore.change.jar
ecore.jar
ecore.resources.jar
ecore.sdo.jar
ecore.xmi.jar
o4glrt.jar
openedge.jar
progress.jar
29
Onde:
Configurando o Servio
A configurao do Servio Progress no TOTVS | ECM permite isolar as
informaes de conexo aos servidor de aplicao da lgica que utiliza
servios 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.
30
Onde:
31
32
Onde:
Service
Provider:
Objeto
recuperado
via
mtodo
ServiceManager.getService e que fornece o acesso s
funcionalidades do servio. Este objeto responsvel por gerenciar a
conexo e recursos alocados pelo servio durante a execuo do
script.
33
Construindo os Datasets
Uma vez que o servio tenha sido configurado no TOTVS | ECM, possvel
utiliz-lo em qualquer ponto do produto onde sejam inseridos cdigos
JavaScript para execuo no lado servidor (em especial, nas customizaes
de 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 o
entendimento do uso dos servios no produto e facilitar a reproduo dos
exemplos apresentados no ambiente do cliente, todos os exemplos abaixo
utilizaro Datasets como alvo.
Conforme visto anteriormente, os Datasets que sero apresentados aqui so
Tipos de Centro de Custo, Natureza dos Centros de Custo, Centros de
Custo, Usurios em Comum.
34
Onde:
35
36
Centros de Custo
O Dataset de Centros de Custo possui uma estrutura muito semelhante aos
dois datasets vistos anteriormente. A diferena principal que, neste caso, a
procedure retorna uma temp-table com os centros de custo, o que altera a
forma como os dados so manipulados.
Dependendo da verso do Progress, os objetos utilizados podem variar. A
seguir, so apresentados exemplos da codificao no Progress 9 e
OpenEdge 10, respectivamente. Em ambos os casos, o resultado
apresentado pelo Dataset ser o mesmo.
Codificao Progress 9
As temp-table no Progress 9 so tratadas atravs de objetos que
implementam a interface java.sql.ResultSet.
37
Codificao OpenEdge 10
No OpenEdge 10, as temp-tables retornadas so encapsuladas como
objetos da classe ProDataGraph. Esta classe tambm utilizada quando se
utilizam parmetros do tipo DATASET.
38
Usurios em Comuns
A primeira diferena entre o Dataset de usurios comuns e os exemplos
anteriores, que neste caso preciso passar uma temp-table como
parmetro para a procedure invocada.
A segunda diferena que o cdigo 4GL est implementado em um programa
no-persistente, o que altera a forma como a lgica invocada a partir do
cdigo JavaScript.
A terceira diferena que podemos observar neste caso que possvel
transformar um dataset nos tipos de dados requeridos pelo Progress
(ResultSet ou ProDataGraph).
Codificao Progress 9
function createDataset(fields, constraints, sortFields) {
// Passo 1 Recupera os usurios do TOTVS | ECM.
var campos = new Array("colleaguePK.colleagueId", "colleagueName");
var dataset = DatasetFactory.getDataset("colleague",
campos,
null,
null);
// Passo 2 - Instancia o servico
var servico = ServiceManager.getService("ems2_v9");
var serviceHelper = servico.getBean();
// Passo 3 - Transforma o dataset em um ResultSet (v9) e
// cria holder para saida
var inputTT = dataset.toResultSet();
var holder = serviceHelper.createResultSetHolder();
// Invoca a procedure no Progress
serviceHelper.getProxy().verifyUsers(inputTT, holder);
// Cria o novo Dataset
var newDataset = DatasetBuilder.newDataset();
newDataset.addColumn("usuario");
newDataset.addColumn("nome");
39
Codificao OpenEdge 10
function createDataset(fields, constraints, sortFields) {
// Primeiro, recupera os colaboradores correntes
var campos = new Array("colleaguePK.colleagueId", "colleagueName");
var dataset = DatasetFactory.getDataset("colleague",
campos,
null,
null);
// Instancia o servico
var servico = ServiceManager.getService("ems2_v10");
var serviceHelper = servico.getBean();
// Transforma o dataset em um ProDataGraph (v10) e cria holder para saida
var inputTT = serviceHelper.toProDataGraph(dataset);
var holder = serviceHelper.createProDataGraphHolder();
// Invoca a procedure no Progress
serviceHelper.getProxy().verifyUsers(inputTT, holder);
// Cria o novo Dataset
var 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;
}
40
Service Helper
A tabela abaixo apresenta a lista de mtodos existentes na classe utilitria
para servios Progress:
Method Summary
java.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.String
objName)
41
42
Links Externos
Acesso direto a pasta
Para facilitar o acesso a uma pasta no sistema, utilizado um parmetro na
url do servidor. Sendo enviada a url <servidor>:<porta>/webdesk/
?state=navigation&folderId=<Nmero da pasta ou do documento>
Exemplo:
http://localhost:8080/webdesk/?state=navigation&folderId=8
_parent
_self
_top
_blank
Exemplo:
http://localhost:8080/webdesk/documentviewer?WDNrDocto=44056&WDNrVe
rsao=1000&target=_blank
43
44
45