Manual Customizacao Metadados
Manual Customizacao Metadados
Manual Customizacao Metadados
Linha Datasul
Framework
Sumrio
1.
Introduo ................................................................................................................................................... 2
2.
3.
4.
5.
Expedio .................................................................................................................................................... 2
5.1. Expedio de Customizaes .................................................................................................................. 2
5.2. Expedio de Objetos Especficos ........................................................................................................... 2
Verso 1.0
1. Introduo
Novos mdulos da Linha de Produtos Datasul esto sendo desenvolvidos utilizando-se Metadados, que consiste
de um conjunto de ferramentas que permitem a especificao e desenvolvimento de aplicativos de forma dinmica.
A principal ferramenta, conhecida como IDE do Metadados, permite o cadastramento de aplicaes e a criao de
formulrios que formam a interface do usurio de diversos mdulos do produto. Quando um cliente necessitar de
customizao do produto padro ou a criao de mdulos ou formulrios especficos, os desenvolvedores utilizaro
tambm a IDE do Metadados para realizar essas tarefas.
Esse manual visa apresentar para analistas e desenvolvedores, os recursos disponveis na IDE do Metadados
para customizao de formulrios do produto padro e a criao de objetos especficos. Os seguintes tpicos sero
abordados:
Para um melhor entedimento desse manual, o leitor dever estar familiarizado com a IDE do Metadados e com
a codificao de ABLScripts. Em caso de dvidas consultar a seguinte documentao:
Manual do Metadados
http://tdn.totvs.com/display/dts/Manual+do+Metadados
Documentao do ABLScript
http://tdn.totvs.com/display/dts/ABLScript
CORPORATE
FACTORY
CUSTOMER
O contexto CORPORATE dever ser utilizado nos ambientes corporativos para desenvolvimento do produto
padro. Para desenvolvimento em fbrica e no cliente devero ser utilizados respectivamente os contextos
FACTORY e CUSTOMER.
Para o correto funcionamento das funcionalidades apresentadas nesse documento, o ambiente Metadados
dever ser configurado para o contexto FACTORY ou CUSTOMER.
A configurao do contexto deve ser feita atravs da definio da propriedade metadados.mode no arquivo
<JBOSS_HOME>\server\<INSTANCIA>\conf\datasul\datasul_framework.properties. Conforme exemplo a seguir:
# Modo de execuo permitidos: customer , factory , corporate
metadados.mode=customer
No caso de ambiente de fbrica, alm da configurao do contexto, importante tambm que o banco do
metadados esteja populado com a mesma verso sendo utilizada no cliente que vai receber a customizao ou
especfico.
3. Customizao de Formulrios
Customizaes em formulrios do produto padro devem ser feitos atravs da criao de scripts (ABLScript)
especficos para essa finalidade. As seguintes regras devem ser seguidas:
Os pontos anteriores referem-se a operaes feitas na construo do produto padro. Nessas atividades todo
cadastramento feito atravs da IDE do Metadados so persistidas no banco do Metadados. Se as mesmas operaes
forem feitas em uma customizao, existe o risco das alteraes serem perdidas durante uma atualizao de verso
do produto padro. Pois nesse processo de atualizao o banco de dados do Metadados atualizado,
4
Verso 1.0
sobrescrevendo eventuais customizaes. Para evitar esse problema, toda customizao fica armazenada em
arquivos separados do banco do metadados, garantindo um processo de atualizao de verso que no afeta as
customizaes. Veremos nos prximos tens como as customizaes devem ser feitas e onde so armazenadas.
3.1.
Scripts de Customizao
A customizao de cdigo ABLScript feita atravs de scripts de BEFORE e AFTER. Para as equipes de
Fbrica e para os clientes, os scripts padres estaro disponveis para consulta(read only), porm para
todos os scripts padres possvel criar um script de BEFORE e um script de AFTER.
A edio dos scripts de BEFORE e AFTER feita abrindo-se o script padro no editor do ABLScript e
clicando na tab correspondente, conforme figura a seguir 3.1.a:
Figura 3.1.a
Figura 3.1.b
Os scripts de BEFORE e AFTER no so armazendos no banco do Metadados como os demais scripts, eles so
guardados em arquivos texto. Ser criado um arquivo de customizao (.abl) para cada formulrio customizado,
contendo todas as customizaes. A figura 3.1.c mostra a estrutura de pastas onde os arquivos de customizao so
armazenados.
Figura 3.1.c
6
Verso 1.0
Figura 3.1.d
O script varDefinition desse formulrio realiza a declarao de algumas variveis conforme a imagem a
seguir:
Figura 3.1.e
7
Na figura 3.1.f vemos o script do evento creationComplete do formulrio. Nesse script o combobox de
assunto populado com uma lista de 4 itens.
Figura 3.1.f
Atravs da criao de um script de AFTER para o evento creationComplete, iremos fazer uma pequena
customizao nesse formulrio acrescentando um novo item no combobox. A figura 3.1.g mostra esse script.
Figura 3.1.g
A figura 3.1.h mostra o resultado da execuo do formulrio com o novo item adicionado pelo script de
customizao.
Verso 1.0
Figura 3.1.h
3.2.
Figura 3.2.a
Iremos esconder o campo Tipo de Cliente, o nome desse componente dsLog_livre_2 conforme
apresentado na rvore de componentes da figura 3.2.b.
Figura 3.2.b
Verso 1.0
Figura 3.2.c
3.3.
Conforme visto anteriomente, para customizao no podemos adicionar novos componentes em telas do
produto padro, utilizando os recursos grficos da IDE do Metadados, ou seja, clicar e arrastar um componente a
partir da paleta de componentes. Para criar novos componentes em uma tela padro devemos utilizar o comando
ADD-COMPONENT conforme exemplo a seguir.
No formulrio LivrosVendidos iremos acrescentar dois componentes via script de AFTER do
creationComplete do formulrio. Os componentes adicionados sero um Label(Sinopse) e um TextArea logo abaixo
do Grid, conforme a figura 3.3.a.
11
Figura 3.3.a
Figura 3.3.b
12
Verso 1.0
Tipo
Descrio
String Nome para identificar o componente.
String Informar qual tipo de componente ser criado (Ex: TextInputClear,
DateFieldClear, etc.).
String Informar o componente que ir receber o componente criado.
String Informa o nome/valor das propriedades do componente.
Exemplo de Cdigo ABLScript
ADD-COMPONENT("btnTestABl", "Button",
botao, width:100, height:300").
"canvas01", "label:Novo
Aps a adio de um componente, podemos ler ou setar suas propriedades com os comandos
GETPROPERTY e SETPROPERTY conforme cdigo a seguir:
Figura 3.3.c
13
14
Verso 1.0
15
3.4.
Para realizar o tratamento de eventos para componentes adicionados com o comando ADD-COMPONENT ou
mesmo para componentes do produto padro, utilizamos a clusula a seguir:
Parmetros
1 event
2 component
Tipo
Descrio
String Nome do evento que ser adicionado ao componente.
String Nome do componente que receber o evento.
Exemplos de Cdigo ABLScript
No exemplo do formulrio LivrosVendidos iremos acrescentar um script para o evento de click no grid. O
objetivo que quando o usurio selecione um livro no grid, seja apresentado no campo customizado txtSinopse a
sinopse do livro. O texto com a sinopse ser obtido atravs de uma chamada a um programa Progress conforme o
cdigo da figura 3.4.a.
16
Verso 1.0
Figura 3.4.a
Conforme apresentado na figura 3.4.a foi criado um script para o evento de click do grid. Esse cdigo foi colocado
junto ao script de AFTER do creationComplete do formulrio. O resultado da execuo do script apresentado na
figura 3.4.b.
17
Figura 3.4.c
IMPORTANTE
Todas as variveis utilizadas dentro de uma clusula ON ... OF... DO: devem ser declaradas localmente.
No ser possvel utilizar variveis declaradas fora da clusula, mesmo que seja na mesma rea de script.
Tambm no possvel utilizar variveis declaradas no varDefinition.
18
Verso 1.0
3.5.
Em um formulrio do tipo CRUDFreeForm, os campo apresentados nas diversas reas do mesmo so obtidos
a partir de um Dataset. Essas reas podem ser: filtro simples, filtro avanado, grid, tela de detalhe, incluso e
atualizao. Podemos customizar essas reas acrescentando campos que existam no Dataset mas que ainda no
aparecem na rea em questo. Para tanto utilizaremos o comando ADD-DATASET-COMPONENT conforme a seguir:
ADD-DATASET-COMPONENT: Comando ser responsvel por criar novos componentes de acordo com o
campo disponvel no dataset (Somente no CRUDFreeForm). Abaixo os parmetros utilizados:
Parmetros
1 dataset
2 field
3
componentType
Tipo
Descrio
String Dataset ao qual o componente visual ir representar. Essa definio ser
importante para o prximo parmetro (field).
String Campo do dataset ao qual o componente ir representar. O campo
dever estar no dataset informado no parmetro anterior.
String Tipo de componente que dever ser. Abaixo os tipos disponveis:
searchView:
simpleFilter: Utilizado para adicionar componentes no filtro
simples.
advancedFilter: Utilizado para adicionar componentes no filtro
avanado.
gridContainer: Utilizado para adicionar componentes no grid.
formView:
formDetail: Utilizado para adicionar componentes no formulrio
de detalhe.
formInsert: Utilizado para adicionar componentes no formulrio
de insero.
formUpdate: Utilizado para adicionar componentes no
formulrio de alterao.
4 parent
5 properties
19
20
Verso 1.0
Veremos agora um exemplo atravs do formulrio CRUDFFPais. Esse formulrio est associado com o
Dataset DS_CRUDpais_crm_pais. Esse ltimo por sua vez possui um campo chamado nom_mascar_cep que no est
sendo utilizado no formulrio de detalhe do CRUD, conforme mostra a figura 3.5.a
Figura 3.5.a
Iremos criar um script de BEFORE no evento buildComplete para adicionar o campo nom_mascar_cep no
formulrio de detalhe conforme mostra a figura 3.5.b.
21
Figura 3.5.c
O resultado final, com o novo campo adicionado no formulrio de detalhe apresentado na figura 3.5.d.
Figura 3.5.d
22
Verso 1.0
Alm de podermos adicionar novos campos em um formulrio atravs do comando ADD-DATASETCOMPONENT, utilizando campos j existentes no dataset, possvel tambm adicionar novos campos a um dataset.
Esses campos sero do tipo Virtual e so criados atravs do comando ADD-VIRTUAL-FIELD, conforme a seguir:
ADD-VIRTUAL-FIELD: Comando responsvel por criar novos campos virtuais no dataset (Somente no
CRUDFreeForm). Abaixo os parmetros utilizados:
Parmetros
1 name
2 type
3 - properties
Tipo
Descrio
String Nome do novo campo que ser adicionado no dataset.
String Tipo do novo campo que ser adicionado no dataset.
Tipos disponveis: String, Smallint, Integer, Decimal, Date, Datetime,
Varchar, Serial, Boolean, Long, Time, Version.
String Propriedades referentes ao campo virtual. Abaixo as propriedades que
poderam ser utilizadas:
3 selectList
/*Definir o dataset*/
DEFINE VARIABLE dsPessoa AS DATASET.
/*Adicionando uma novo campo virtual no dataset*/
dsPessoa:ADD-VIRTUAL-FIELD ("idi_tipo", "String", "label:Tipo, required:true", "Juridica:J,
Fisica:F").
No item 3.6. Passagem de Parmetros para BOs veremos um exemplo mais completo de como
utilizar o comando ADD-VIRTUAl-FIELD.
23
3.6.
Passagem de parmetros para a BO tem como objetivo realizar a customizao dos dados que sero exibidos
e tambm armazenados no banco de dados atravs de uma camada intermediria, assim sendo, podendo ajustar
valores dos campos ou at mesmo passar valores que no se encontram na tabela fsica atravs dos chamados
campos virtuais.
FLEX
JAVA
PROGRESS
Dataset.p
CUSTOM_BO
BO
Figura 3.6.a
24
Verso 1.0
O programa destinado a realizar estas customizaes dividido em 5 (cinco) procedures. So elas e seus pontos
de execuo:
afterAllSelectedRecords: Esta procedure executada aps ter lido todos os registros da pgina.
afterPersistRecord: Esta procedure executada aps realizar qualquer tipo de persistncia (CREATE,
DELETE, UPDATE).
afterSelectedRecord: Esta procedure executada para cada registro que encontrado na pgina.
beforePersistRecord: Esta procedure executada antes de realizar qualquer tipo de persistncia (CREATE,
DELETE, UPDATE).
prepareQuery: Esta procedure executada antes de realizar a pesquisa dos registros para que se possa
customizar a query.
Exemplo de programa
&ANALYZE-SUSPEND _VERSION-NUMBER UIB_v8r12
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS DBOProgram
/*:T-------------------------------------------------------------------------File
: customHandler.p
Purpose : O Custom Handler e um programa PROGRESS que tem por objetivo
disponibilizar para o usuario uma maneira para poder realizar
customizacoes nas informacoes que sao passadas para a o By You
e tambem gerar os dados dos campos virtuais do Dataset.
Parameters :
Notes :
------------------------------------------------------------------------*/
/*
Este parametro foi adicionado para que exista a compatibilidade com a
forma antiga de desenvolver os Query Handlers. A tratativa referente
ao QueryHandler deve ser feita dentro da procedure prepareQuery
*/
DEFINE INPUT-OUTPUT PARAMETER queryHandler AS HANDLE NO-UNDO.
RETURN "OK":U.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK
/* ******************** Preprocessor Definitions ******************** */
&Scoped-define PROCEDURE-TYPE DBOProgram
&Scoped-define DB-AWARE no
25
/* _UIB-PREPROCESSOR-BLOCK-END */
&ANALYZE-RESUME
/* *********************** Procedure Settings ************************ */
&ANALYZE-SUSPEND _PROCEDURE-SETTINGS
/* Settings for THIS-PROCEDURE
Type: DBOProgram
Allow:
Frames: 0
Add Fields to: Neither
Other Settings: CODE-ONLY COMPILE
*/
&ANALYZE-RESUME _END-PROCEDURE-SETTINGS
/* ************************* Create Window ************************** */
&ANALYZE-SUSPEND _CREATE-WINDOW
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _XFTR "DBO 2.0 Wizard" DBOProgram _INLINE
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _INCLUDED-LIB DBOProgram
/* ************************* Included-Libraries *********************** */
{java/datasetHandler.i}
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK DBOProgram
/* *************************** Main Block *************************** */
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
/* ********************** Internal Procedures *********************** */
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE afterAllSelectedRecords DBOProgram
PROCEDURE afterAllSelectedRecords :
/*-----------------------------------------------------------------------------Purpose:
Esta procedure tem por objetivo ser executada Apos a selecao de
TODOS os registros.
Parameters:
ttDataset - Handle da temp-tablettDataset
Notes:
------------------------------------------------------------------------------*/
DEFINE INPUT PARAMETER tableName AS CHARACTER.
DEFINE INPUT-OUTPUTPARAMETER ttDataset AS HANDLE.
26
Verso 1.0
NO-UNDO.
NO-UNDO.
28
Verso 1.0
Figura 3.6.b
29
30
Verso 1.0
no
do
servidor
Figura 3.6.c
iii. Adicionar codigo no evento BEFORE(Depois).
/* DEFINIO DO DATASET */
DEFINE VARIABLE DSsist_dtsul AS DATASET.
/* ADICIONA NOVO CAMPO VIRTUAL */
DSsist_dtsul:ADD-VIRTUAL-FIELD("virtual_descricao", "String", "label:CAMPO
VIRTUAL - DESCRIO, required:true", "").
/* ADICIONA NOVO CAMPO VIRTUAL NA TELA DE UPDATE */
ADD-DATASET-COMPONENT("DSsist_dtsul", "virtual_descricao", "formUpdate",
"update.formContainerUpdate").
/* ADICIONA NOVO CAMPO VIRTUAL NA TELA DE CREATE */
ADD-DATASET-COMPONENT("DSsist_dtsul", "virtual_descricao", "formInsert",
"create.formContainerInsert").
31
b.
Figura 3.6.d
iii. Aps salvar o item o mesmo deve ser exibido no grid do formulrio com o campo
Figura 3.6.e
32
Verso 1.0
Figura 3.6.f
33
ii. Aps salvar o item o mesmo deve ser exibido no grid do formulrio com o campo
Figura 3.6.g
A concatenao dos campos realizada atraves da BO Customizada.
IF pType = "UPDATE":U THEN DO:
hDescricao = getRowObjFieldHandle("des_sist_dtsul").
hDatasetVirtualDescricao =
getDatasetFieldHandle("virtual_descricao").
IF VALID-HANDLE(hDatasetVirtualDescricao) THEN DO:
stringAux = hDescricao:BUFFER-VALUE +
hDatasetVirtualDescricao:BUFFER-VALUE.
ASSIGN hDescricao:BUFFER-VALUE = stringAux.
END.
END.
34
Verso 1.0
4.1.
Veremos a seguir atravs de um exemplo passo a passo, o processo para criao de um formulrio especfico
em uma aplicao do produto padro. A figura 4.1.a mostra a tela de cadastro de aplicaes, nela vemos que a
aplicao crm1150, que uma aplicao padro, est no estado de Somente Leitura. Iremos selecionar a mesma e
clicar no boto Iniciar Desenvolvimento. Isso criar uma cpia da aplicao no contexto do usurio, dessa forma o
mesmo poder trabalhar livremente, sem interferir na aplicao padro ou em atividades de outros usurios.
Figura 4.1.a
35
Aps clicar no boto Iniciar Desenvolvimento a IDE solicitar uma confirmao para reiniciar a rea de
trabalho conforme a figura 4.1.b
Figura 4.1.b
Aps reiniciar a rea de trabalho, veremos na TAB de Aplicao que a aplicao crm1150 foi duplicada,
porm o novo item aponta para o contexto do usurio (nesse nosso exemplo o usurio chamado framework). Isso
apresentado na figura 4.1.c.
Figura 4.1.c
36
Verso 1.0
Iremos agora criar um novo formulrio FreeForm (especfico) dentro da aplicao crm1150, porm no
contexto do usurio. Para tanto faremos o processo normal de criao de formulrio, nesse caso um FreeForm.
Acrescentamos os componentes de forma visual, arrastando os mesmos a partir da paleta de componentes, como
mostra a figura 4.1.d.
Figura 4.1.d
Aps desenhar a interface e criar os scripts para tratamento de eventos, testamos o formulrio. Uma vez
finalizado o desenvolvimento do formulrio, devemos informar isso na IDE, clicando no boto Finalizar
Desenvolvimento como mostra a figura 4.1.e.
Figura 4.1.f
37
Aps clicar no Finalizar Desenvolvimento a IDE far uma cpia do novo formulrio na aplicao padro,
deixando o mesmo no estado de somente leitura. Como mostra a figura 4.1.g.
Figura 4.1.g
A partir desse ponto, o formulrio estar pronto para expedio, como veremos no captulo 5.
Conforme vimos no exemplo anterior, podemos utilizar o boto Iniciar Desenvolvimento para criar um
objeto no contexto do usurio, onde s ele ter acesso. Dessa maneira o usurio pode trabalhar livremente no
objeto, sem causar impacto no trabalho de outros desenvolvedores. Quando ele finalizar o seu trabalho, utiliza o
boto Finalizar Desenvolvimento para compartilhar suas alteraes com os demais desenvolvedores e atualizar os
registros oficiais relacionados com o objeto. Esse operao pode ser feita com os objetos do tipo:
Dataset
Banco de Dados
Domnio
Formulrio
Evento Global
Lista de Seleo
Tabela
Template
38
Verso 1.0
4.2.
Quando o contexto de desenvolvimento for CUSTOMER ou FACTORY, ao criar ou alterar uma include ou
procedure atravs da IDE do Metadados, ser criado ou alterado um arquivo na seguinte estrutura de pasta:
Figura 4.2.a
Dessa maneira, para contexto CORPORATE, as operaes de incluso/alterao de library feita sempre no
banco no metadados. Para os contextos CUSTOMER e FACTORY no ser utilizado o banco e fica tudo
armazenado em arquivo.
A pasta metadados/MD_CUSTOM encontra-se dentro da pasta de instncia correspondente no JBoss. Essa
pasta j utilizada para armazenar os scripts de BEFORE e AFTER (dentro da pasta view). As includes e
procedures ficam armazenadas na pasta library.
Os arquivos que armazenam as includes e procedures de customizao tero os nomes de arquivo seguindo a
seguinte nomeclatura:
libType_libName.abl
Onde:
39
Exemplo:
metadados/MD_CUSTOM/library/cmr1150/include_crmDesabilitaChavePrimariaEdit.abl
Figura 4.2.b
O contedo de um arquivo de library tem o formato conforme os exemplos a seguir:
Exemplo de Include:
Arquivo: include_crmDesabilitaChavePrimariaEdit.abl
Contedo:
40
Verso 1.0
Exemplo de Procedure:
Arquivo: procedure_crmValidaDataInicialMaiorDataFinal.abl
Contedo:
Figura 4.2.c
41
Edio de Include/Procedure
Na IDE ao abrir uma include ou procedure para edio, ser apresentado ao lado do label Cadastro de Library
a informao (Customizao), indicando que a include/procedure em questo de customizao. A imagem a seguir
mostra um exemplo:
Figura 4.2.d
A forma de utilizao das includes e procedures nos cdigos ABLScript a mesma independente se uma
library de customizao ou padro.
42
Verso 1.0
5. Expedio
5.1.
Expedio de Customizaes
Todo cdigo de customizao (scripts de BEFORE e AFTER), assim como as includes e procedures so
armazenados na pasta <JBOSS_HOME>\server\<INSTANCIA>\metadados\MD_CUSTOM.
Essa pasta MD_CUSTOM deve ser compactada e enviada para o cliente, para ento ser colocada no
ambiente do mesmo. Basta descompactar o arquivo e atualizar a MD_CUSTOM do JBoss no cliente para todas as
customizaes estarem disponveis.
5.2.
Os objetos especficos ficam armazenados no banco de dados do Metadados. Para expedio desses objetos
existem dois cenrios possveis.
1.
Nesse caso no necessrio atualizar o banco do metadados no ambiente do cliente, basta enviar os XMLs
binrios (de runtime) dos formulrios especficos. O procedimento o seguinte:
a. Todos os objetos a serem expedidos devem estar com o desenvolvimento finalizado (boto
Finalizar Desenvolvimento)
b. Na IDE do Metadados faa a instalao dos formulrios especficos conforme mostra as imagens
a seguir.
44
Verso 1.0
45
46
Verso 1.0
47