You are on page 1of 11

Application Package

for

Dummies

by Luiz Alencar
(Peopletools v8.4x e acima)
março/2018

Páá giná: 1 de 11
Índice
Introduçáã o....................................................................................................................................................................... 3
Entendendo Applicátion Páckáge.......................................................................................................................... 4
Entendendo Applicátion Cláss................................................................................................................................ 5
Linhás 1 e 2.......................................................................................................................................................... 6
Linhás 4 á 7.......................................................................................................................................................... 7
Linhá 9................................................................................................................................................................... 7
Linhás 10 á 12..................................................................................................................................................... 8
Linhás 15 á 27..................................................................................................................................................... 8
Linhá 45................................................................................................................................................................ 9
Convençoã es............................................................................................................................................................. 10

Páá giná: 2 de 11
Introdução

Manter o profiiional de Ti capacitado é a melhor maneira de garantr trabalho.


Com eite peniamento, reiolvi criar eite manual como forma de contribuição,

compartlhando o conhecimento adquirido durante ài oportunidadei que tve

durante oi maii de 20 anoi atuando como deienvolvedor de ioftare. Eipero que

eite documento cumpra o ieu propóiito, que é eniinar ai vantageni em ie utliiar a

tecnologia do applicatio package.

Sinceramente,

Luii S. Alencar

Páá giná: 3 de 11
Entendendo Application Package

Um applicaton package é um conjunto organiiado de classes de aplicações que


podem ier ieparadai pelo limite de até 2 (doii) níveii de subpackages (análogo à
paita de rede).

Quando há à poiiibilidade de inierir iubpackagei, iito é, quando ainda não ie


atngiu o limite de 2 (doii) níveii, um menu do tpo popuup deiaa o item “iniert
Package” diiponível.

Páá giná: 4 de 11
Entendendo Application Class

Um applicaton claii é um conjunto compoito de métidis e pripriedades. A


groiio modo, um método é igual a uma functon tradicional. Veja um eaemplo:

Métidi Fuoctio
method AddNumbers Local number &c;
/+ &a as Number, +/
/+ &b as Number +/ Function AddNumbers(&a As
/+ Returns Number +/ number, &b As number) Returns
number
Local number &c;
&c = &a + &b;
&c = &a + &b;
Messagebox(0,"", 0, 0,"My Result
MessageBox(0,"",0,0,"My Result is: "| &c);
is: " | &c);
Return &c;
Return &c;
End-Function;
end-method;

Tantométodoi, quanto ai propriedadei podem ter viiibilidade eaterna ou


apenai interna na claiie de aplicação. Com baie na codifcação abaiao vou
demonitrar eita queitão da viiibilidade de métodoi e propriedadei entre outrai
informaçõei.

1 REM Este Package foi produzido para ser acionado por peoplecode em um Application
2 Engine;
3
4 import DPSP_IFO_SAP_PKG:UTL:Arquivo;
5 import DPSP_IFO_SAP_PKG:UTL:Formato;
6 import DPSP_IFO_SAP_PKG:UTL:Registro;
7 import DPSP_IFO_SAP_PKG:UTL:Log;
8
9 class ImportarFornecedor
10 method ImportarFornecedor(&ProcInst As number, &RunControlName As string,
11 &OperatorId As string);
12 method Importar() Returns boolean;
13
14 private
15 instance number &ProcessInstance;
16 instance number &HeaderId;
17 instance number &Seq_Nbr;
18 instance string &RunCntlName;
19 instance string &Operator;
20 instance string &FilePathBase;
21 instance string &FilePath;
22 instance Rowset &RS;
23 instance string &ArquivosCSV;

Páá giná: 5 de 11
24 instance string &DiretorioExclusivo;
25 instance File &ArquivoCSV;
26 instance DPSP_IFO_SAP_PKG:UTL:Log &oLog;
27 instance array of string &ArrayCSV;
28 method getSetup() Returns boolean;
29 method moveArquivos() Returns boolean;
30 method convertString(&sLinha As string out);
31 method insereTipoOperacao(&sLinha As string out);
32 method loopArrayCSV() Returns boolean;
33 method loopArrayCSV2() Returns boolean;
34 method loopConteudoArquivo();
35 method gravaLinha(&aLinha As array of string, &sRegistro As string) Returns
36 boolean;
37 method aplicarFormato(&aValoresString As array of string, &rcRegistro As Record)
38 Returns array of any;
39 method temTodasColunas(&aColunas As array of string) Returns boolean;
40 method EditRecord(&REC As Record) Returns boolean;
41 method ImportSegment(&RS2 As Rowset, &RSParent As Rowset, &nHeader As number);
42 method codigoLancamento(&sRegistro As string) Returns string;
43 end-class;
44
45 Declare Function GetDirSeparator PeopleCode PSXPFUNCLIB.FUNCLIB FieldFormula;
46
47 /* Construtor da Classe */
48 method ImportarFornecedor
49 /+ &ProcInst as Number, +/
50 /+ &RunControlName as String, +/
51 /+ &OperatorId as String +/
52 Local string &URL_ID;
53 Local DPSP_IFO_SAP_PKG:UTL:Arquivo &oArquivo = create
54 DPSP_IFO_SAP_PKG:UTL:Arquivo();
55
56 &ProcessInstance = &ProcInst;
57 &RunCntlName = &RunControlName;
58 &Operator = &OperatorId;
59 &ArquivosCSV = "IFO*.CSV";
60
61 rem Recupera os parametros do arquivo de run control;
62 %This.DiretorioExclusivo = &oArquivo.getDiretorioExclusivo(&ProcInst,
63 &RunControlName, &OperatorId, "");
64 %This.FilePathBase = &oArquivo.getDiretorioBase(&RunControlName, &OperatorId);
65 &oArquivo = Null;
66 rem Recupera os parametros do arquivo de run control;
67 &oLog = create DPSP_IFO_SAP_PKG:UTL:Log();
68 &oLog.Open(%This.DiretorioExclusivo | GetDirSeparator() |
69 "ImportarFornecedor.LOG", "W");
70 &oLog.LogInstance = &ProcInst;
71 &oLog.LogProcName = "INTFCFORNSAP";
72 &oLog.LogFileName = "ImportarFornecedor.LOG";
73
74 end-method;

Linhas 1 e 2
O comentário eaprime um aviio importante. Ele indica que a claiie de aplicação
foi criada para trabalhar iob chamadai de applicaton engine, ou ieja, o ciotexti
em que a claiie vai trabalhar é o eicopo criado pela eaecução de um aplicaton
engine. O ciotexti onde uma claiie de aplicação vai operar, é de eatrema
importância e deve eitar preiente nai preocupaçõei do deienvolvedor no initante
do deienvolvimento. Por qual raião? A raião é o uio de initruçõei diiponíveii

Páá giná: 6 de 11
dentro de tal ciotexti. Eaemplo: Uio de pricess_iostaoce que eitará carregada no
ciotexti de um applicaton engine, mai não eitará no ciotexti de um component.

Linhas 4 a 7
A palavra reiervada impirt é a forma como ie trai funcionalidadei de outrai
claiiei de aplicação, tal qual o #ioclude de um SQR ou o declare fuoctio... que trai
o uio de funçõei diiponíveii em evento de tabela. Doii pontoi “:” tem a função de
ieparar o caminho na hierarquia dentro de um aplicaton package, até chegar na
claiie de aplicação. Tomemoi como eaemplo: import
DPSP_IFO_SAP_PKG:UTL:Arquivi;

Pacite 1º Nivel 2º Nível Classe


DPSP_IFO_SAP_PKG UTL N/A Arquivo

Linha 9

A declaração do bloco da claiie class...eod-class ió ocorre uma vei, e o nome da


claiie deve refetr o nome que foi colocado na hierarquia.

class ImportarFornecedor
method ImportarFornecedor(&ProcInst As number, &RunControlName As string, &OperatorId As
string);
end-class

Toda claiie de aplicação tem um método que receberá, eaatamente, o meimo


nome da claiie de aplicação. Eite método é o ciostrutir da classe, um inicialiiador
da claiie que ierá eaecutado no initante em que a claiie de aplicação for
initanciada. No fragmento acima, foi defnido que o método conitructor

Páá giná: 7 de 11
ImpirtarFiroecedir deverá receber 3 (trêi) parâmetroi no initante em que a claiie
de aplicação for initanciada. Veja como a claiie acima é initanciada num evento
peoplecode qualquer:

1 import DPSP_IFO_SAP_PKG:INTFC:ImportarFornecedor;
2
3 Local DPSP_IFO_SAP_PKG:INTFC:ImportarFornecedor &oImportar;
4
5 &oImportar = create DPSP_IFO_SAP_PKG:INTFC:ImportarFornecedor(1000,”ALENCAR”,
6 %OperatorId);

Uma coiia a ie notar, quando ie olha um initanciamento de claiie, é que a


declaração da claiie de aplicação (linha 3) ie torna um tpi, tal como: itring,
number, date, etc. A variável &iImpirtar recebe toda a defnição da claiie, ie torna
um tpo compleao de variável. O initanciamento ocorre na linha 5, com o uio da
palavra reiervada create. Agora, uma dica muito importante de boai pratcai com o
uio de tpoi compleaoi de variável: Uma vei uiada a variável, antei que ie encerre o
código, atribua o valor “null” para a variável. Eaemplo: &iImpirtar = oull; . Iito
provoca a liberação do endereçamento de memória uiada pela variável, evitando o
memiry leak (vaiamento de memória).

Linhas 10 a 12
Apenai doii métodoi eitão aceiiíveii numa initância da claiie de aplicação
ImportarFornecedor: o método conitrutor ImpirtarFiroecedir() e o método
Impirtar(). Todo o reitante, abaiao da declaração PRIVATE é coniiderado de uio
interno da claiie. Para melhor entendimento veja o eaemplo a ieguir:

1 import DPSP_IFO_SAP_PKG:INTFC:ImportarFornecedor;
2
3 Local DPSP_IFO_SAP_PKG:INTFC:ImportarFornecedor &oImportar;
4
5 &oImportar = create DPSP_IFO_SAP_PKG:INTFC:ImportarFornecedor(1000,”ALENCAR”,
6 %OperatorId);
7
8 &oImportar.Importar(); (executa normalmente)
9 &oImportar.getSetup(); (erro, metodo não acessível)

Eita queitão em deiaar funcionalidadei de uio apenai interno da função é que


garante a integridade do produto deienvolvido, encapiulando o que lhe pertence
garantndo que não haverá erroi de confito com outrai funcionalidadei.

Linhas 15 a 27
O que ie vê em todo eite trecho, é o uio da palavra reiervada iostaoce. O que
Páá giná: 8 de 11
ela fai é criar variáveii que pertencerão a initância da claiie de aplicação, quando
eita for criada. Meimo que a initância ieja criada por maii de uma vei, com o uio
da palavra reiervada create, eitai variáveii de initância contnuarão a ier eacluiivai
de cada uma delai. Iito quer diier que valorei carregadoi neitai variáveii, ie
manterão durante o tempo de vida da reipectva initância de claiie. Por eaemplo,
na eaigência de paiiagem de parâmetroi do conitrutor da claiie
ImpirtarFiroecedir, todoi oi parâmetroi ierão guardadoi em variáveii de
initância, ai quaii, ierão uiadai peloi métodoi privadoi da claiie de aplicação
(liohas 28 a 42). Nai liohas 56 a 59 é poiiível ver atribuição de informação para
algumai variáveii de initância; uma forma diferente para atribuir poderia ier aiiim:

%this.ProcessInstance = &ProcInst;
%this.RunCntlName = &RunControlName;
%this.Operator = &OperatorId;
%this.ArquivosCSV = "IFO*.CSV";

A metauvariável %thii referência o próprio applicaton package.

Linha 45

Uma evidência que funçõei criadai ainda podem ier referenciadai e uiadai
dentro de uma claiie de aplicação. É claro que converter taii funçõei para a forma
de aplicaton package é o recomendado, porém, não uma obrigação enquanto
funcionarem. Neite trecho de código é referenciada a função GetDirSeparator(), que
pertence a um pacote de funçõei que acompanha o peopletooli 8.4a, criada por
Judi Doolitle (arquiteta de ioluçõei da oracle), e que foi utliiada na lioha 68. A
função verifca em que plataforma de iiitema operacional (ciotexti iperaciioal) o
código eitá iendo eaecutado, retornando uma barra ieparadora de caminho de
paita: “\” ie tindoti ou “/” unia/linua.

Páá giná: 9 de 11
Convenções

Em minha codifcação, eu procuro manter uma certa convenção de prefao para


a criação de nomei de variáveii. Abaiao compartlho algumai de minhai
convençõei:

Tipi Cioveoçãi
Array A variável começa com &a
Striog A variável começa com &s
Numeric A variável começa com &n
Date A variável começa com &dt
DateTime A variável começa com &dtm
Biileao A variável começa com &b
Classe A variável começa com &o
Recird A variável começa com &rc
RiwSet A variável começa com &rw
SQL A variável começa com &sql
File A variável começa com &f ou &o

Objetoi criadoi com baie na API do peopletooli, geralmente terão como prefao &i.

Páá giná: 10 de 11
O pacote principal, o que ierá lido na eitrutura do projeto peopleiof, deve ier
todo em letrai maiúsculas, iendo o iufao como “_PKG”. Oi iupackagei, também
em letrai maiúsculas, com atenção em não uiar nomei longoi. Já, oi nomei dai
claiiei de aplicação, devem paiiar a ideia do ieu objetvo, mantendo a eitrutura do
nome, quando em compoiição de nome, na forma “capitaliiada” iem “eipaçoi”.
Eaemplo: Cadaitro de Fornecedor, que pode ier eicrito como: CadaitroFornecedor.
A imagem a ieguir repreienta em iua eitrutura ai convençõei que utliio para
nomear oi packagei e claiiei.

Quando conitruir um applicaton package, certfqueuie de adicionar ao projeto


peopleiof oi ieguintei iteni:

Páá giná: 11 de 11

You might also like