Sie sind auf Seite 1von 47

Manual de Customizao Metadados

Linha Datasul
Framework

Manual de Customizao Metadados

Sumrio
1.

Introduo ................................................................................................................................................... 2

2.

Ambiente Para Desenvolvimento de Customizaes e Especficos ................................................................. 2

3.

Customizao de Formulrios ....................................................................................................................... 2


3.1. Scripts de Customizao......................................................................................................................... 2
3.2. Desabilitando e Escondendo Campos Padres ........................................................................................ 2
3.3. Adicionando Novos Componentes Grficos ............................................................................................ 2
3.4. Criando Scripts Para Eventos de Novos Componentes ............................................................................. 2
3.5. Customizando Atravs de Datasets ........................................................................................................ 2
3.6. Passagem de Parmetros para BOs......................................................................................................... 2

4.

Criao de Objetos Especficos ..................................................................................................................... 2


4.1. Processo de Criao de Especficos ......................................................................................................... 2
4.2. Criao de Includes e Procedures Para Uso em Scripts Especficos e de Customizao ............................. 2

5.

Expedio .................................................................................................................................................... 2
5.1. Expedio de Customizaes .................................................................................................................. 2
5.2. Expedio de Objetos Especficos ........................................................................................................... 2

Verso 1.0

Manual de Customizao Metadados

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:

Ambiente para desenvolvimento de customizaes e especficos.


Customizao de formulrios atravs da criao de scripts.
Customizao de Datasets.
Passagem de parmetros customizados para BOs.
Criao de includes e procedures para uso em scripts de customizao e/ou formulrios especficos.
Processo para criao de objetos especficos (aplicaes, formulrios, datasets, etc).
Expedio de customizaes e espefcios.

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

Manual de Customizaes Dataset


http://tdn.totvs.com/pages/viewpage.action?pageId=57411975

Manual de Customizao Metadados

2. Ambiente Para Desenvolvimento de Customizaes e Especficos

Na configurao de um ambiente Metadados a nvel do servidor de aplicaes (JBoss), existem contextos de


desenvolvimento a serem definidos na preparao do ambiente. Os contextos so:

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:

No se pode acrescentar componentes em um formulrio padro atravs da paleta de componentes. A


adio de novos componentes deve ser feita atravs do comando ADD-COMPONENT como ser visto
mais adiante nesse documento.

No se pode mudar as propriedades dos componentes de um formulrio padro atravs da paleta de


componentes, para tanto deve-se utilizar o comando SETPROPERTY.

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

Manual de Customizao Metadados

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

Manual de Customizao Metadados

A figura 3.1.b mostra um exemplo da ordem de execuo do evento customizado de


creationComplete dentro de um FreeForm.

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

Manual de Customizao Metadados

No exemplo da figura 3.1.c temos o arquivo:


MD_CUSTOM\view\treina\freeform\LivrosVendidos_customize.abl
A pasta MD_CUSTOM armazena todos os scripts de customizao de um ambiente Metadados. Essa pasta
fica localizada dentro de <JBOSS_HOME>\server\<INSTANCIA>\metadados.
A pasta treina corresponde ao nome da aplicao nesse exemplo.
O nome do arquivo inicia com o nome do formulrio padro sendo customizado, seguido de _customize.abl.
Nesse exemplo o formulrio customizado um freeform chamado LivrosVendidos da aplicao treina.
Esse arquivo conter todos os scripts de BEFORE e AFTER criados para a customizao do formulrio
LivrosVendidos.
Veremos agora um exemplo de customizao do formulrio LivrosVendidos. A figura 3.1.d mostra o
formulrio, apresentando a lista de itens do combobox de Assunto:

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

Manual de Customizao Metadados

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

Manual de Customizao Metadados

Figura 3.1.h

3.2.

Desabilitando e Escondendo Campos Padres

Em customizaes comum haver a necessidade de desabilitar ou esconder um ou mais campos em um


formulrio padro, de acordo com a necessidade do cliente. Para desabilitar um campo, bastam duas linhas em um
script de AFTER. Por exemplo:
DEFINE VARIABLE btoSalvar AS WIDGET-HANDLE.
btoSalvar:SENSITIVE = false.
O cdigo acima pode ser utilizado em um evento de AFTER no creationComplete de um FreeForm ou no
caso de CRUDFreeForm, nos eventos de onDetailFormShow, onCreateFormShow ou onUpdateFormShow.
A seguir veremos um exemplo de customizao onde escondemos um campo do formulrio de detalhe de
um CRUDFreeForm. A figura 3.2.a mostra o formulrio de detalhe com todos os campos.

Manual de Customizao Metadados

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

No script de AFTER do evento onDetailFormShow utilizaremos o seguinte cdigo:


DEFINE VARIABLE dsLog_livre_2 AS WIDGET-HANDLE.
dsLog_livre_2:VISIBLE = false.
SETPROPERTY(dsLog_livre_2, "includeInLayout", false).

Ao executar novamente o formulrio teremos o resultado apresentado na Figura 3.2.c.


10

Verso 1.0

Manual de Customizao Metadados

Figura 3.2.c

3.3.

Adicionando Novos Componentes Grficos

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

Manual de Customizao Metadados

Figura 3.3.a

O script para adicionar esses novos componentes o seguinte:

Figura 3.3.b

12

Verso 1.0

Manual de Customizao Metadados

ADD-COMPONENT: Comando responsvel por criar novos componentes em um formulrio metadados


(CRUDFreeForm e FreeForm). Abaixo os parmetros utilizados:
Parmetros
1 name
2 type
3 parent
4 properties

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

Manual de Customizao Metadados

Os componentes grficos disponveis so:


AdvancedCompose
BigNumberInput
Button
ButtonOperation
ButtonPopup
CheckBox
ColorPicker
ComboBox
DataGrid
DatasetFormField
DatasulText
DatasulUpload
DatasulZoom
DateChooser
DateFieldClear
DateFieldRange
FormHeading
HRule
HSlider
Label
LinkButton
LinkButtonOperation
LinkButtonPopup
List
MaskedTextInput
MDComboBox
NumericStepper
PopUpButton
PopUpMenuButton
ProgressBar
RadioButton
RelatedActions
RelatedActionsOperation
Spacer
Text
TextArea
TextInput
TextInputClear
TextInputIcon
TextInputRange
TimeInput
Tree
VRule
VSlider
ZoomContainer

14

Verso 1.0

Manual de Customizao Metadados

Os containers disponveis so:


Accordion
AdvancedFilter
ApplicationControlBar
BarOperation
Canvas
ControlBar
DatasulFormItem
DomainFormField
Form
FormField
FormInput
GridContainer
GroupContent
GroupHeader
HBox
HDividedBox
Panel
SimpleFilterView
TabNavigator
Tile
TitleWindow
ToggleButtonNavigator
ValidateLayoutContainer
VBox
VDividedBox
ViewStack
Muitos desses componentes so padres do Flex e na IDE eles so encontrados dentro de Containers e
Controls. As propriedades e funes disponveis para cada um deles podem ser consultadas no seguinte endereo:
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/Button.html
Para os componentes que so da TOTVS (pasta TOTVS na IDE), a documentao pode ser encontrada no
TDN:
http://tdn.totvs.com/display/home/TDN+-+TOTVS+Developer+Network

15

Manual de Customizao Metadados

3.4.

Criando Scripts Para Eventos de Novos Componentes

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:

ON event OF component DO : Possibilita a adio de um novo evento em um componente no


metadados. Abaixo os parmetros utilizados:

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

/*Adicionar um evento ao componente*/


ON "click" OF "btnTestABL" DO:
/*Comando que sera executado no click do botao*/
DISPLAY "Clique no boto !!!".
/*Finaliza o evento*/
END.

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

Manual de Customizao Metadados

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

Manual de Customizao Metadados

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

Manual de Customizao Metadados

3.5.

Customizando Atravs de Datasets

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

String Informar o componente que ir receber o componente criado.

5 properties

String Informa o nome/valor das propriedades do componente.


Essa propriedade opcional, e dever utilizada de acordo com o
componente que ser renderizado.
Exemplos de Cdigo ABLScript

19

Manual de Customizao Metadados

/*Adicionando campo no filtro simples*/


ADD-DATASET-COMPONENT("DS_CRUDendereco_crm_ender", "num_id", "simpleFilter",
"filterView").

/*Adicionando campo no filtro avancado*/


ADD-DATASET-COMPONENT("DS_CRUDendereco_crm_ender", "num_id", "advancedFilter",
"advancedFilterView").

/*Adicionando campo no filtro avanado em um determinado GroupContent*/


ADD-DATASET-COMPONENT("DS_CRUDendereco_crm_ender", "num_id", "advancedFilter",
"advancedFilterView", "position:2").

/*Adicionando campo no datagrid */


ADD-DATASET-COMPONENT("DS_CRUDendereco_crm_ender", "idi_tip_ender", "gridContainer",
"gridContainer").

/*Adicionando campo no formulario de insero*/


ADD-DATASET-COMPONENT("DS_CRUDendereco_crm_ender",
"num_id",
"formInsert",
"create.formContainerInsert").

/*Adicionando campo no formulario de detalhes usando propriedades adicionais para criar um


DatasulZoom*/
ADD-DATASET-COMPONENT("DS_CRUDendereco_crm_ender",
"num_id_cidad",
"formDetail",
"detail.formContainerDetail",
"xmlName:view.crm1150.crudfreeform.CRUDcidade").

20

Verso 1.0

Manual de Customizao Metadados

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

Manual de Customizao Metadados

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

Manual de Customizao Metadados

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

label: Rotulo do campo.


defaultValue: Valor inicial do campo.
required: Informa se o valor obrigatrio.
readOnly: Informa se o campo no pode ser modificado.
mask: Informa mascara para formatao.
size: Informa quantidade de caracteres que poderam ser
informados.
roundMethod: Indica a forma de arredondamento do
valor do campo.
range: Indica o intervalo utilizado para limitar o valor a ser
preenchido.

String Informar rtulo/valor, para valores pr-definidos. Ex: (Sexo:


Masculino/feminino).
Essa informao no obrigatria.
Exemplo de Cdigo ABLScript

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

Manual de Customizao Metadados

3.6.

Passagem de Parmetros para BOs

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.

Consulte tambm o Manual de Customizaes Dataset:


http://tdn.totvs.com/pages/viewpage.action?pageId=57411975

Exemplo de camada itermediria(BO Customizada).

FLEX

JAVA

PROGRESS

Dataset.p

CUSTOM_BO

BO

Figura 3.6.a

24

Verso 1.0

Manual de Customizao Metadados

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

Manual de Customizao Metadados

/* _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

Manual de Customizao Metadados

DEFINE VARIABLE queryHandle AS HANDLE


DEFINE VARIABLE bufferHandle AS HANDLE

NO-UNDO.
NO-UNDO.

CREATE QUERY queryHandle.


ASSIGN bufferHandle = ttDataset:DEFAULT-BUFFER-HANDLE.
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE afterSelectedRecord DBOProgram
PROCEDURE afterSelectedRecord :
/*-----------------------------------------------------------------------------Purpose:
Esta procedure tem por objetivo ser executada A CADA registro
encontrado.
Parameters:
ttDataset - Handle da temp-table ttDataset
Notes:
------------------------------------------------------------------------------*/
DEFINE INPUT PARAMETER tableName AS CHARACTER.
DEFINE INPUT-OUTPUTPARAMETER ttDataset AS HANDLE.
RUN prepareDatasetFields (INPUT-OUTPUT ttDataset).
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE beforePersistRecord DBOProgram
PROCEDURE beforePersistRecord :
/*:T-----------------------------------------------------------------------------Purpose: Validacoes pertinentes ao DBO
Parameters:
pType - Recebe o tipo de validacao (Create, Delete, Update).
ttDataset - Handle da temp-table ttDataset
RowObject - Handle da temp-table RowObject
Notes:
------------------------------------------------------------------------------*/
DEFINE INPUT PARAMETER pType AS CHARACTER NO-UNDO.
DEFINE INPUT-OUTPUTPARAMETER ttDataset AS HANDLE.
DEFINE INPUT-OUTPUTPARAMETER RowObject AS HANDLE.
DEFINE INPUT PARAMETER hBoHandle AS HANDLE NO-UNDO.
/* captura os campos do Dataset */
RUN prepareDatasetFields (INPUT-OUTPUT ttDataset).
RUN prepareRowObjectFields (INPUT-OUTPUT RowObject).
27

Manual de Customizao Metadados

/*:T--- Utilize o parametro pType para identificar quais as validacoes a serem


executadas ---*/
/*:T--- Os valores possiveis para o parametro sao: Create, Delete e Update ---*/

/*IF pType = "CREATE":U THEN DO:


END.*/
/*IF pType = "UPDATE":U THEN DO:
END.*/
/*IF pType = "DELETE":U THEN DO:
END.*/
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME
&ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE prepareQuery DBOProgram
PROCEDURE prepareQuery :
/*-----------------------------------------------------------------------------Purpose:
Esta procedure tem por objetivo disponibilizar para o usuario poder
customizar a query.
Parameters:
ttDataset - Handle da temp-table ttDataset
Notes:
------------------------------------------------------------------------------*/
DEFINE INPUT-OUTPUT PARAMETER queryHandler AS HANDLE NO-UNDO.
END PROCEDURE.
/* _UIB-CODE-BLOCK-END */
&ANALYZE-RESUME

Dataset - Programa de Customizao


Aps a criao do programa (BO customizada) necessrio informar no Metadados que o dataset utilizado
pelo formulrio deve utilizar uma BO customizada.
Cadastrar um programa de customizao:
1- Acessar IDE Metadados.
2- Acessar Cadastro de Dataset
3- Informar o nome do programa no campo Programa de Customizao.

28

Verso 1.0

Manual de Customizao Metadados

Figura 3.6.b

29

Manual de Customizao Metadados

Exemplo de Customizao CREATE UPDATE


Neste exemplo iremos criar a customizao de um objeto padro utilizando programa progress como
camada intermediara (BO Customizada) e customizao de eventos Metadados (BEFORE / AFTER).
1. Cadastro de programa de customizao.
a. Acessar a IDE Metadados e realizar o cadastro do programa de customizao
fnboCustom/bofn049Custom.p no Dataset DSsist_dtsul.
2. Criar BO Customizada utilizando o Exemplo de programa.
a. Implementar procedure beforePersistRecord
b. PARAMETER pType AS CHARACTER NO-UNDO.
DEFINE INPUT
DEFINE INPUT-OUTPUT
PARAMETER ttDataset AS HANDLE.
c.
DEFINE INPUT-OUTPUT PARAMETER RowObject AS HANDLE.
DEFINE INPUT PARAMETER hBoHandle AS HANDLE NO-UNDO.
/* captura os campos do Dataset */
RUN prepareDatasetFields
(INPUT-OUTPUT ttDataset).
RUN prepareRowObjectFields (INPUT-OUTPUT RowObject).
/*:T--- Utilize o parametropType para identificar quais as validacoes a serem
executadas ---*/
/*:T--- Os valores possiveis para o parametrosao: Create, Delete e Update
---*/
DEFINE VARIABLE hDescricao
AS HANDLE
NO-UNDO.
DEFINE VARIABLE hDatasetVirtualDescricao
AS HANDLE
NO-UNDO.
DEFINE VARIABLE stringAux
AS CHARACTER
NO-UNDO.
IF pType = "CREATE":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.
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.
/*IF pType = "DELETE":U THEN DO:
END.*/

30

Verso 1.0

Manual de Customizao Metadados

Salvar o programa com o nome bofn049Custom.p;


e. Realizar a compilao do programa e adicionar o programa
<SERVIDOR>\totvs\datasul\dts11\ERP\fnd\fnboCustom\bofn049Custom.r
d.

no

do

servidor

3. Customizao Formulrios Metadados.


a. Criao de campo virtual com ABLSCRIPT.
i. Abrir o formulrio para edio (no exemplo estamos utilizando o formulrio
CRUDSistema).
ii. Selecionar o evento J existente no formulrio buildCompleteabrindo o mesmo para
edio.

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

Manual de Customizao Metadados

b.

Adicionando registro FormInsert.


i. O campo virtual criado em tempo de execuo.
ii.

Figura 3.6.d
iii. Aps salvar o item o mesmo deve ser exibido no grid do formulrio com o campo

concatenado Descriocom CAMPO VIRTUAL DESCRIO.

Figura 3.6.e

32

Verso 1.0

Manual de Customizao Metadados

A concatenao dos campos realizada atraves da BO Customizada.

IF pType = "CREATE":U THEN DO:


hDescricao = getRowObjFieldHandle("des_sist_dtsul").
hDatasetVirtualDescricao =
getDatasetFieldHandle("virtual_descricao").
IF VALID-HANDLE(hDatasetVirtualDescricao) THEN DO:
stringAux = hDescricao:BUFFER-VALUE +
c. Atualizando registro FormUpdate.
hDatasetVirtualDescricao:BUFFER-VALUE.
ASSIGN hDescricao:BUFFER-VALUE = stringAux.
END.
END.

i. O campo virtual criado em tempo de execuo.

Figura 3.6.f

33

Manual de Customizao Metadados

ii. Aps salvar o item o mesmo deve ser exibido no grid do formulrio com o campo

concatenado Descrio com CAMPO VIRTUAL DESCRIO.

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

Manual de Customizao Metadados

4. Criao de Objetos Especficos

O processo de criao de objetos especficos atravs da IDE do Metadados semelhante ao de criao do


produto padro. Isso significa que os recursos visuais da IDE para criao de formulrios, podem ser utilizados para
criao de formulrios especficos. Assim possvel criar um novo formulrio FreeForm ou CRUDFreeForm e
acrescentar novos componentes atravs da paleta de componentes. Da mesma forma que no produto padro, os
objetos especficos ficam armazenados no banco de dados do metadados (com exceo para as libraries). No item
4.1 veremos maiores detalhes sobre esse processo.

4.1.

Processo de Criao de Especficos

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

Manual de Customizao Metadados

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

Manual de Customizao Metadados

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

Manual de Customizao Metadados

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

Manual de Customizao Metadados

4.2.

Criao de Includes e Procedures Para Uso em Scripts Especficos e


de Customizao

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:

libType pode ser include ou procedure.

libName o nome da library informado na IDE.

Exemplo de nome de arquivo de library:


include_crmDesabilitaChavePrimariaEdit.abl
As libraries globais, ou seja, as que so criadas atravs da TAB Biblioteca no Navegador da IDE, so
armazenadas diretamente na pasta metadados/MD_CUSTOM/library.
As libraries de aplicao so armazendas dentro de uma pasta com o nome da aplicao.

39

Manual de Customizao Metadados

Exemplo:
metadados/MD_CUSTOM/library/cmr1150/include_crmDesabilitaChavePrimariaEdit.abl

A imagem a seguir mostra a estrutura de pasta com alguns arquivos de exemplo:

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

Manual de Customizao Metadados

Exemplo de Procedure:
Arquivo: procedure_crmValidaDataInicialMaiorDataFinal.abl
Contedo:

Apresentao da Lista de Libraries na IDE


Na IDE ao apresentar as listas de libraries no navegador, os cones para include e procedures customizadas so
ser diferenciados, contendo a letra C, para indicar que aquela include ou procedure customizada. A
imagem a seguir mostra exemplo dos cones diferenciados:

Figura 4.2.c

41

Manual de Customizao Metadados

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

Manual de Customizao Metadados

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.

Expedio de Objetos Especficos

Os objetos especficos ficam armazenados no banco de dados do Metadados. Para expedio desses objetos
existem dois cenrios possveis.
1.

No existe customizao ou alterao de especfico feito direto no ambiente do cliente

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.

Figura 5.2.a Selecionar Assistente > Instalar Produto


43

Manual de Customizao Metadados

Figura 5.2.b Selecionar Formulrios > Avanar

Figura 5.2.c Selecionar os Formulrios Especficos

44

Verso 1.0

Manual de Customizao Metadados

c. Aps a gerao dos XMLs de runtime, obter os mesmos na pasta:


<JBOSS_HOME>\server\<INSTANCIA>\metadados\MD\view\<NomeAplicacao>
Esses arquivos devem ser enviados para o cliente e colocados nas mesmas pastas no JBoss.

2. Existe customizao ou alterao de especfico feito direto no ambiente do cliente

a. Repetir os passos do item 1 (anterior).


b. Atualizar o banco do metadados no cliente, possibilitando que alteraes sejam feitas
localmente nos objetos especficos. Para tanto seguir os passos apresentados nas imagens a
seguir:

Figura 5.2.d Assistente > Exportar Metadados

45

Manual de Customizao Metadados

Figura 5.2.e Selecionar Exportao Customizada


A partir desse ponto seguir os passos do exportador at ser criado o arquivo metadadosdb.zip.
c. Enviar o arquivo metadadosdb.zip para o cliente.
d. No ambiente do cliente descompactar o arquivo Zip em uma pasta temporria.
e. Importar os arquivos XMLs das pastas criadas a partir da descompactao do arquivo Zip,
seguindo os passos mostrados nas imagens a seguir:

Figura 5.2.f Selecionar a opo Importar Metadados

46

Verso 1.0

Manual de Customizao Metadados

Figura 5.2.g Selecionar a pasta temporria com os XMLs

Figura 5.2.h Tela do Importador


Aps o final da importao, o banco de dados do metadados estar atualizado com os objetos
especficos.

47