Você está na página 1de 25

A Tecnologia Protheus

O Advanced Protheus uma nova tecnologia desenvolvida sobre o sistema Advanced, que teve toda a
inteligncia dividida em duas camadas: Servidor de Aplicao (Protheus Server e !nter"ace (#emote$
Ou se%a, uma aplicao &' bits que se encarrega do gerenciamento das cone()es, da e(ecuo do
c*digo AdvPl e do acesso aos recursos de banco de dados (A+S, ,trieve, -.ree ou .op-onnect, e uma
aplicao thin/client que e"etua apenas a inter"ace com o usu0rio$
Caractersticas da Tecnologia Protheus
As principais caracter1sticas da tecnologia Protheus so:
Possibilidade de grande variao de topologias de rede e processamento distribu1do2
,ai(o tr0"ego de rede entre o AP3 Server e o AP3 #emote2
4tili5ao de con"igura)es, possibilitando o uso de cone()es simult6neas atravs de protocolos
di"erentes e o acesso a di"erentes reposit*rios de APO7s e diret*rios (o que permite o uso de
di"erentes idiomas, vers)es, etc, acessando a mesma base de dados2
+i"erentes possibilidades de impresso de relat*rios$ 8o Advanced Protheus pode/se imprimir os
relat*rios de trs "ormas:
9$ :m disco2
'$ ;ia <indo=s2
3. +ireto na Porta$
As impress)es e"etuadas via <indo=s ou diretamente na porta podem ser impressas no servidor (o que
evitar0 o tr0"ego de rede do relat*rio impresso ou na estao$ As impress)es e"etuadas em disco
tambm evitam o tr0"ego de rede$ Os relat*rios em disco so sempre mantidos no servidor e somente as
p0ginas requisitadas so enviadas > estao$
Os arquivos de banco de dados so sempre abertos no servidor$ :ntretanto, arquivos te(to podem ser
abertos na estao com a "uno ?Open$ A re"erncia a paths que no contiverem uma letra de drive
(por e(emplo, @ +A+OS A#A$.B.@, considerada a partir do servidor no diret*rio in"ormado na seo
@#ootPath@ do arquivo de con"igura)es do Protheus Server
8o e(iste o conceito de @m*dulos@ de sistema$ :(iste o conceito de programa inicial, de onde a
e(ecuo do #emote ser0 iniciada (e os outros APO7s utili5ados sero carregados e descarregados
dinamicamente de acordo com sua chamada a partir deste$ !sso permite que rotinas que eram de
@m*dulos@ di"erentes se%am e(ecutadas diretamente de um mesmo menu de usu0rio
As Camadas do Advanced Protheus
O Advanced Protheus dividido em quatro camadas para a operao so elas:
Servidor de Aplicao2
.erminal .hin/-lient2
+ados2
#eposit*rio de APO s
Servidor de Aplicao
O Protheus Server a aplicao encarregada da compilao e da e(ecuo do c*digo em AdvPl, no
qual o sistema Siga Advanced est0 escrito a partir da verso 3$CD$ 8a linguagem AdvPl, as rotinas so
mantidas em APO7s (Advanced Protheus Ob%ects individuais em reposit*rios$ !sso permite que as rotinas
se%am carregadasEdescarregadas dinamicamente da mem*ria da m0quina onde o Protheus Server est0
sendo e(ecutado, ou se%a, de acordo com a necessidade de e(ecuo dos .erminais conectados, e
"acilita a atuali5ao ap*s corre)es de no/con"ormidades ou criao de melhorias, pois apenas os
APO7s modi"icados necessitam ser atuali5ados$ +esse modo, a per"ormance alta e no requer muitos
recursos da m0quina para a e(ecuo do servidor$
Terminal Thin-Client
O #emote a aplicao encarregada da inter"ace com o usu0rio$ 8o e(iste processamento local, por
isso o tr0"ego de rede entre o .erminal e o Servidor de Aplicao bai(o, tratando/se apenas de
comandos para o desenho das telas e do tratamento do teclado e mouse$
Dados
O acesso aos dados e"etuado pelo Servidor de Aplicao utili5ando as seguintes bases de dados:
A+S, ,.rieve, -.ree e .op-onnect (para padro SAF$ Para bases de dados SAF, e(iste total suporte a
Stored Procedures$ 8o Protheus, todas as bases de dados tm suporte a controle de transao$
Repositrio de Apo s
: no reposit*rio que se encontram os programas escritos em AdvPl que sero carregados para a
e(ecuo de determinada tare"a$ G atravs do reposit*rio de Apo s que pode/se incluir novas
customi5a)es no sistema$
Estruturao
A estrutura de diret*rios do Advanced Protheus
A estrutura de diret*rios do Advanced Protheus depende da verso instalada$
;erso AP3
ap3
+iret*rio inicial do Protheus$ G a partir deste diret*rio que o sistema ir0 locali5ar os caminhos in"ormados
em par6metros, customi5a)es, etc$
ap3 apo
+iret*rio onde sero locali5ados os arquivos de reposit*rio de APO s$
ap3 bin
+iret*rio onde so locali5ados os arquivos do nHcleo do Protheus: e(ecut0veis, bibliotecas de carga
din6mica (+FF s e arquivos de con"igurao do sistema$
ap3 sigaadv
Similar ao S!IAA+; das vers)es Advanced '$C(EJ$C($ G o diret*rio onde se encontram os arquivos de
con"igurao do sistema :#P Advanced, arquivos de menus, etc$ G tambm o diret*rio inicial de
e(ecuo no #emote$
ap3 dadosadv
Similar ao +A+OSA+; das vers)es Advanced '$C(EJ$C($ G o diret*rio onde se locali5am os arquivos de
base de dados para vers)es no SAF$
ap3 relato
Similar ao #:FA.O das vers)es Advanced '$C(EJ$C($ +iret*rio para gravao de arquivos de impresso
em disco$
ap3 cprova
Similar ao -P#O;A das vers)es Advanced '$C(EJ$C($ +iret*rio para gravao de arquivos de
contabili5ao$
ap3 i(bpad
+iret*rio de locali5ao de programas de e(emplo escritos em AdvPl, nos padr)es de"inidos pela
Kicrosiga So"t=are S$A$
ap3 include
+iret*rio de arquivos de incluso padro (e(tenso $-L necess0rios para a compilao de programas
escritos em AdvPl$
ap3 util
+iret*rio de "erramentas adicionais do Protheus$
;erso APM
apM
+iret*rio inicial do Protheus$ G a partir deste diret*rio que o sistema ir0 locali5ar os caminhos in"ormados
em par6metros, customi5a)es, etc$
apM apo
+iret*rio onde sero locali5ados os arquivos de reposit*rio de APO s$
apM bin server
+iret*rio onde so locali5ados os arquivos do nHcleo do Protheus Server: e(ecut0veis, bibliotecas de
carga din6mica (+FF s e arquivos de con"igurao$
apM bin remote
+iret*rio onde so locali5ados os arquivos das aplica)es clientes (#emote, !+:, Konitor, etc:
e(ecut0veis, bibliotecas de carga din6mica (+FF s e arquivos de con"igurao$
apM sigaadv
Similar ao S!IAA+; das vers)es Advanced '$C(EJ$C($ G o diret*rio onde se encontram os arquivos de
con"igurao do sistema :#P Advanced, arquivos de menus, etc$ G tambm o diret*rio inicial de
e(ecuo no #emote$
apM dadosadv
Similar ao +A+OSA+; das vers)es Advanced '$C(EJ$C($ G o diret*rio onde se locali5am os arquivos de
base de dados para vers)es no SAF$
apM relato
Similar ao #:FA.O das vers)es Advanced '$C(EJ$C($ +iret*rio para gravao de arquivos de impresso
em disco$
apM cprova
Similar ao -P#O;A das vers)es Advanced '$C(EJ$C($ +iret*rio para gravao de arquivos de
contabili5ao$
apM i(bpad
+iret*rio de locali5ao de programas de e(emplo escritos em AdvPl, nos padr)es de"inidos pela
Kicrosiga So"t=are S$A$
apM include
+iret*rio de arquivos de incluso padro (e(tenso $-L necess0rios para a compilao de programas
escritos em AdvPl$
:stas so as estruturas para uma instalao padro do Protheus de acordo com a verso utili5ada$
Porm a locali5ao de instalao pode variar de acordo com o local de instalao$
Aplicativos do Advanced Protheus
O Advanced Protheus possui, basicamente, quatro aplicativos utili5ados com di"erentes "inalidades$ So
eles:
Protheus Server
.rata/se do servidor de aplicao do Advanced Protheus esta a parte do sistema que ser0 e(ecutada
no Servidor e ser0 respons0vel pela comunicao entre o -liente, a ,ase de +ados e o #eposit*rio de
Apo s$ O nome do e(ecut0vel depende da verso e sistema operacional utili5ados, por e(emplo:
AP3S#;$:B: ou APMS#;<!8$:B:$
Remote
G o #emote que utili5amos para interagir com todo o sistema, ele poder0 ser instalado de duas maneiras,
no servidor ou na pr*pria estao de trabalho$ O nome do e(ecut0vel depende da verso utili5ada, por
e(emplo: AP3#K.$:B: ou APM#K.$:B:$
DE
.rata/se do ambiente de desenvolvimento integrado do Advanced Protheus$ G atravs deste aplicativo
que todos os acessos aos reposit*rios de Apo s (compilao de customi5a)es, visuali5ao de "un)es
e(istentes etc$ so e"etuados, e tambm a "erramenta para desenvolvimento e depurao de
aplica)esEcustomi5a)es$ O nome do e(ecut0vel depende da verso utili5ada, por e(emplo:
AP3!+:$:B: ou APM!+:$:B:$
!onitor
:sta "erramenta permite a interao com os usu0rios conectados ao sistema: Analisar os programas em
uso, derrubar cone()es pendentes, enviar mensagens ao usu0rios etc$ O nome do e(ecut0vel depende
da verso utili5ada, por e(emplo: AP3KO8!.$:B: ou APMKO8!.$:B:
Alem destas aplica)es, o Siga Advanced Protheus conta ainda com outros utilit0rios diversos, como o
+i"" (utili5ado para comparao de arquivos te(to e +ump (utili5ado para edio de arquivos bin0rios$
"omenclaturas #tili$adas
:stas so as principais nomeclaturas utili5adas no Advanced Protheus:
,uild: ;erso completa do sistema com seus e(ecut0veis, +ll s e #PO completo$ O build do sistema
pode ser identi"icado atravs da opo Kiscel6neas Sobre dentro dos m*dulos do sistema$
#PO: G o arquivo bin0rio de reposit*rio de APO s, com o c*digo AdvPl$
Patch: Arquivo bin0rio semelhante ao reposit*rio contendo apenas atuali5a)es de APO s, corre)es
disponibili5adas pela Kicrosiga So"t=are S$A$, que ser0 aplicado no reposit*rio atravs do !+:$
;erso Kaster: Kesma de"inio de build porm neste caso a verso ser0 utili5ada como re"erncia para
a gerao de atuali5a)es do sistema (patch s$ Auando gerada, a verso encaminhada a todos os
envolvidos em processos de implantaoEutili5ao do sistema via correio ou disponibili5ada no site de
?.P do Protheus$
A de"inio dos nomes dos arquivos dos reposit*rios de APO7s e Patch s seguem o mesmo padro
(di"erenciando/se apenas na e(tenso PatchN$PA. e reposit*rioN#PO e e"etuada da seguinte maneira
AP9'&J3$#PO:
9 (+b", (.op, (Ads, (,trieve, (-.ree2
' (Portuguese, (:nglish, (Spanish2
& ;erso2
J ;erso2
3 ;erso2
Por e(emplo, AP,PMCO$#PO ser0 um reposit*rio de APO7s para base de dados ,.rieve, idioma
Portugus e verso MCO$
+evido > sua diviso em camadas, a tecnologia Protheus permite montar o ambiente de e(ecuo com
di"erentes topologias, priori5ando a e(ecuo, o tr0"ego de rede ou os recursos individuais das m0quinas
e(istentes, o que torna o processamento distribu1do$ :ssa uma das grandes vantagens da tecnologia
Protheus$
Caractersticas e Possi%ilidades de Topologias de Rede
Pode/se manter um ou mais servidores de aplicao do Protheus (Protheus Server$
4m Protheus Server pode estar na mesma m0quina que o gerenciador de banco de dados$
K0quinas melhores ou com mais recursos podem ter um Protheus Server sendo e(ecutado localmente
(na estao visando priori5ar o processamento local$ Porm h0 um aumento do tr0"ego de rede entre o
gerenciador de banco de dados e o Protheus Server local$
+o mesmo modo, pode/se e(ecutar servidores remotamente priori5ando o processamento de uma ou
mais esta)es$
4tili5ao do protocolo .-P/!P para as cone()es$ 8a verso AP3 pode/se utili5ar tambm o protocolo
8AK:+ P!P:S$
Pode/se disponibili5ar cone()es via !nternet atravs da montagem de um <eb Server na empresa ou
atravs de provedores de acesso (como a 4OF e o PAP$ 8este caso, o Protheus Server pode ser
e(ecutado no provedor ou na empresa utili5ando uma FP para a cone(o ao provedor de acesso$
A !nternet utili5ada apenas como o meio de comunicao, ou se%a, a cone(o .-P/!P entre o #emote e
o Protheus Server$ Alm da segurana o"erecida pelo sistema Advanced, a segurana dever0 ser
o"erecida pela cone(o$ Por isso, aconselh0vel que a m0quina onde o servidor <eb este%a sendo
e(ecutado no se%a o mesmo do servidor da banco de dados$
O Protheus Server tambm pode ser e(ecutado como um servidor !nternet, L..P eEou ?.P$
Pode/se manter uma p0gina para o do=nload do #emote, de modo que os usu0rio remotos possam
e"etuar o do=nload para conectar/se e utili5ar o sistema$ 8a verso APM pode/se con"igurar o #emote
para se atuali5ar automaticamente a partir do Protheus Server sendo e(ecutado como um servidor ?.P$
A de"inio da melhor topologia para e(ecuo um passo importante da implementao da tecnologia
Protheus, pois in"luenciar0 totalmente na per"ormance$ O maior tr0"ego de rede est0 locali5ado entre o
Protheus Server e o ,anco de +ados, %0 que o tr0"ego entre o Protheus Server e o #emote limita/se >s
in"orma)es para montagem de telas e controle de teclado e mouse$ +esta "orma, dependendo do tipo e
da velocidade da cone(o, pode se tornar invi0vel manter um Protheus Server em uma cidade conectado
ao banco de dados em outra$ Por outro lado, caso e(istam muitas cone()es nesta outra cidade, ou caso
estas cone()es e(ecutem processamentos pesados, priori5ar o processamento disponibili5ando um
Protheus Server para ser e(ecutado localmente nesta cidade pode ser uma boa soluo$
&alanceamento de Carga entre Servidores '(oad&alance)
ntroduo
Auando e(iste uma grande quantidade de usu0rios que utili5am o sistema e o servidor no possui uma
con"igurao ideal para comportar todos, mas h0 mais de um servidor dispon1vel, pode/se con"igurar um
esquema de balanceamento de carga para que nenhum servidor "ique sobrecarregado e comprometa
assim o desempenho da rede e do servidor$
Para que isto se%a poss1vel, nomeamos um servidor intitulado de servidor Kaster que ser0 o respons0vel
por administrar o balanceamento, alm de comportar cone()es tambm$
O balanceamento "eito por proporo, ou se%a, se tivermos MC usu0rios e de"inirmos que o servidor
Kaster ter0 9C cone()es, o servidor Server' 'C e o servidor Server& &C, a proporo aqui de 9:':&, ou
se%a, a cada 9 usu0rio pendurado no servidor Kaster, ' entraro no Server' e & no Server&$ ?icaria
assim:
4su0rio
Servidor
C9
Qoo
Kaster
C'
Rarla
Server'
C&
Paulo
Server'
CJ
K0rio
Server&
C3
Rarina
Server&
CM
+aniel
Server&
CD
#osana
Kaster
Con*igurando o Servidor !aster
O Hnico ap3srv$ini que ser0 alterado com as con"igura)es abai(o o do servidor master, pois ele
quem administrar0 o balanceamento de carga$ .odos os usu0rios se conectaro inicialmente ao servidor
Kaster, e este quem e"etuar0 o balanceamento de carga para os outros servidores$ 8os ini s dos
outros servidores ser0 alterado apenas o par6metro rootpath , para que eles peguem a mesma base de
dados do servidor master$ As se)es que devem ser alteradas so estas abai(o:
SServer8et=orTU
ServersNKaster,Server',Server&
aqui deve ser in"ormado o nome das se)es para cada servidor, que sero con"iguradas abai(o$
SKasterU
.VP:N.-P!P
ServerNS!IAKAS.:#
o nome indicado no par6metro Server nesta seo o nome do servidor$ Pode/se indicar tambm o
endereo !P do mesmo$
-onnectionsN9C
SServer'U
.VP:N.-P!P
ServerNS!IAS:#;:#'
-onnectionsN'C
SServer&U
.VP:N.-P!P
ServerNS!IAS:#;:#&
-onnectionsN&C
Con*igurao dos outros Servidores
-omo %0 "oi citado acima, nos demais servidores a Hnica coisa que ser0 alterada o par6metro rootpath
do arquivo ap3srv$ini $ Para isso, o diret*rio/ra15 AP3 do servidor Kaster dever0 ser compartilhado com
direitos apenas para um usu0rio que ser0 usado por todos os servios$ Assim, os outros usu0rios no
conseguiro acesso a este diret*rio$ !sto necess0rio para que todos os servidores en(erguem a mesma
base de dados$ Supondo que a base de dados este%a no servidor Kaster, os ini s "icariam assim:
S:nvironmentU
SourcePathN-: AP3 APO
#ootPathN S!IAKAS.:# AP3
ve%a que o rai5 est0 sendo apontado para o servidor Kaster$
StartPathN S!IAA+;
(demais con"igura)es continuam iguais
Observa)es
-ada servidor dever0 ter o seu build e reposit*rio, sendo que a base de dados "ica centrali5ada no
servidor Kaster ou no servidor de banco de dados$
Auando "or "eita qualquer atuali5ao de build e reposit*rio no servidor Kaster, a mesma alterao
dever0 ser "eita nos outros servidores$
4m mesmo usu0rio <indo=s dever0 ter direitos na pasta compartilhada (rootpath e dever0 ser um
usu0rio Administrador, para que possa ser associado ao servio de cada servidor$
Para checar onde os usu0rios esto conectados, basta utili5ar o aplicativo Ap3Konitor em cada servidor$
DE - ntegrated Development Environment
O !+: (!ntegrated +evelopment :nvironment uma "erramenta de edio, compilao e depurao de
erros$ G atravs do !+: que o sistema :#P Siga Advanced desenvolvido$ .ambm atravs do !+:
que os analistas da Kicrosiga e os usu0rios do Protheus podem criar e manter suas rotinas espec1"icas$
O !+: o Hnico modo de compilar os arquivos de programas escritos em AdvPl para a gerao dos
APO7s no reposit*rio$
-omo "erramenta de edio e depurao, engloba todos os recursos dispon1veis nas melhores
"erramentas de desenvolvimento do mercado$
Caractersticas do DE
Para a e(ecuo do !+: no necess0rio conectar/se ao Protheus Server, e(ceto nas opera)es de
atuali5ao ou consulta de um reposit*rio (compilao, obteno do Kapa de Ob%etos, aplicao de
patch s, etc e durante o processo de depurao$
8o aconselh0vel e(ecutar o !+: remotamente (via !nternet ou via modem, pois a cone(o do #emote
ao Protheus, quando e"etuada atravs do !+:, mais lenta$
Os passos para o desenvolvimento de programas em AdvPl utili5ando o !+: so:
9$-riao do c*digo atravs do editor$ 8a linguagem AdvPl, os analistas e os usu0rios do Protheus tm
todos os recursos dispon1veis para o desenvolvimento de suas rotinas$ : di"erentemente do antigo
#+KAR:, no mais uma linguagem interpretada$ Por isso, a per"ormance das rotinas espec1"icas de5
ve5es maior do que era nos #+KAR:s antigos$
'$Kontagem do Irupo de Pro%etos$ O Irupo de Pro%etos um gerenciador e(istente dentro do !+:, onde
o usu0rio pode manter os arquivos de c*digo separados por pro%etos e pastas$ -om um grupo de
pro%etos os arquivos podem ser organi5ados de uma "orma l*gica, em pro%etos e pastas$
&$-ompilao$ +urante a compilao, os arquivos so enviados ao Protheus Server$ .oda a compilao
e a gravao no reposit*rio so e"etuadas no servidor$
J$+epurao$ O !+: permite aos usu0rios depurar as rotinas criadas, e(ecutando/as linha a linha ou em
modo de animao$ Permite visuali5ar in"orma)es como vari0veis em di"erentes escopos, pilha de
chamadas, lista de breaT points, etc$ :(atamente como as melhores "erramentas de desenvolvimento
e(istentes no mercado$ 8o !+: pode/se depurar pontos de entrada simplesmente colocando/se um
ponto de parada (breaT point em uma linha qualquer do c*digo do ponto de entrada2
!onitor
O Konitor utili5ado para monitorar as cone()es de terminais ao Protheus Server$ Atravs dele pode/se:
;eri"icar as cone()es ativas$
:nviar mensagens para uma ou mais cone()es$
+esabilitar novas cone()es$ !sto Htil quando se precisa e"etuar alguma manuteno e se precisa evitar
que outros usu0rios se conectem$
!n"orma)es ,0sicas das -one()es
4su0rio$ G o nome do usu0rio na rede local$ Para cone()es remotas este nome est0 em branco$
-omputador$ 8ome da m0quina onde o #emote est0 sendo e(ecutado$
-one(o$ !ndica a data e hora de in1cio da cone(o do #emote$
.empo de 4so$ !ndica o tempo em horas, minutos e segundos desde que o #emote se conectou$
Programa !nicial$ G o nome do programa inicial (APO com o qual o #emote iniciou a e(ecuo$
:nvironment$ 8ome do ambiente sendo utili5ado pelo terminal$
,trieve
!n"orma)es ,0sicas
Para manipulao de tabelas ,trieve o driver utili5ado @,.;-+B@2
Para programar algo espec1"ico para o ,trieve pode/se utili5ar o teste @ i"de" ,.;@2
A e(tenso padro das tabelas @$dat@2
Os 1ndices so criados no mesmo arquivo de dados (@$dat@2
As manipula)es e visuali5a)es de dados devem ser "eitas atravs do @APSdu@, pois as antigas
"erramentas so incompat1veis2
O ,trieve verso M$93 no precisa ser instalado, pois as +FFs necess0rias so disponibili5adas %unto
com o Protheus$ Os arquivos necess0rios "icam no diret*rio @,!8@ (=btrv&'$dll, =&'mTrc$dll, =btrvres$dll e
=&'mTde$e(e$ O "uncionamento praticamente igual ao ,trieve Server, portanto pode/se e(ecutar os
testes na verso M$93 normalmente2
O =&'mTde continua um per1odo em e(ecuo ap*s o trmino do Protheus, pois se o Protheus "or
e(ecutado novamente no necess0rio seu rein1cio$ Auando o usu0rio dese%ar renomear o diret*rio
@,!8@, o mesmo no ser0 permitido por esse motivo, deve/se portanto "inali5ar a e(ecuo do mesmo2
As in"orma)es das tabelas, campos e 1ndices so arma5enados no diret*rio @++?@, criado abai(o do
@#ootPath@, atravs dos arquivos (?ield$btv, ?ile$btv, ?in"o$btv, !in"o$btv e !nde($btv$ Se estes arquivos
"orem apagados as tabelas sero recriadas e todos os dados sero P:#+!+OS$ 8o se pode copiar
uma tabela com estrutura di"erente para este diret*rio, pois seus dados devem ser atuali5ados nos
arquivos do ++? tambm$ -omo os dados e o diret*rio ++? devem estar @sincronisados@ os arquivos do
++? devem ser inclu1dos no esquema de @bacTup@ dos dados2
As tabelas s* podem ter @um@ campo do tipo memo e este campo deve ser o Hltimo, por isso na hora da
criao da tabela o Protheus automaticamente desloca o campo memo para o "inal e mostra uma
mensagem de aviso2
Para apagar os 1ndices, entrar em APSdu, abrir a tabela e escolher !nde(Eerase all$ :le apagar0 todos os
1ndices da tabela e tambm a sua de"inio no ++?$ Para "a5er via programa, selecione a tabela e
chame a "uno W ,.;+rop!d(s($ Portanto aconselha/se utili5ar o 1ndice do tipo permanente somente
se o mesmo "or utili5ado posteriormente (outras aberturas da tabela caso contr0rio deve/se utili5ar os
1ndices tempor0rios2
Para gerar os arquivos +?? s compat1veis com outras "erramentas que manipulam arquivos btrieve,
inclusive -rXstal #eports, e(istem duas "un)es para criar os arquivos necess0rios: W ,.;.ables e W
,.;-reate++?s2
Con*igurao do &trieve+PervasiveS,(-.../
Para con"igurar o ,trieve Server deve/se e(ecutar os seguintes passos:
9$.erminar a e(ecuo do Protheus e parar o servio =&'mTde2
'$+eletar os arquivos bin0rios do ,trieve do diret*rio @Protheus ,in@ (=btrv&'$dll, =&'mTrc$dll,
=btrvres$dll e =&'mTde$e(e2
&$!nstalar o PervasiveSAF'CC com os respectivos @Services PacTs@2
J$:ntrar no Pervasive -ontrol -enter (menu !niciar / Pervasive / Pervasive -ontrol -enter2
3$;isuali5ar os nomes dos servidores dispon1veis (no caso de Finu(, 8ovell e Solaris deve/se
acrescentar um servidor2
M$Atravs de um duplo clicT sobre o servidor que se dese%a utili5ar entrar em @con"igurao@
(con"iguration2
D$Para <indo=s 8. e 'CCC deve/se acertar os valores de alguns par6metros:
Pasta Access:
Accept #emote #equest : O8
Active -lients :9CCCC
Fogical ?ile Landles :9CCCCC
Ka(+atabases: 9C
Ka(imum Open ?iles: 9CCCC
8umber o" Sessions: 'C
Pasta -ommunication ,u""er Si5e:
-ommunication ,u""er Si5e : M&
KR+: -ommunication ,u""er Si5e: M&
#ead ,u""er Si5e: J
Pasta +ata !ntegritX:
9C$!nitiation .ime Fimit: 9CCCCC
99$Operation ,undle Fimit: 9CCCC
Pasta KemorX usage:
Allocate #esource at Startup: On
,acT to Kinimal State i" !nactive: On
:(tended Operation ,u""er Si5e: 9M
SXstem -ache: On
Pasta Per"ormance .unning:
-ache Allocation Si5e: Y/ 9&9CD' (m1nimo de 9'CCC
-ommunications .hreads : MJ
!nde( ,alancing: O""
Fargest -ompressed #ecord Si5e: C
Fog ,u""er Si5e: MJ
8umber o" !nputE Output .hreads : MJ
8umber o" <orTer .hreads: MJ
.ransaction Fog Si5e: 39'
ZObs: O -ache Allocation Si5e aloca mem*ria do servidor para uso do banco de dados$ Auanto mais
mem*ria, mais r0pidas so e(ecutadas as opera)es$
A verso M$93 possui uma limitao: Se dois servidores 8.J estiverem acessando o mesmo arquivo,
ocorrer0 lentido na rede$ !sso acontece se "or utili5ado o mesmo #PO (que um arquivo btrieve para
dois servidores no AP3$ A soluo sempre replicar os reposit*rios em cada servidor ou adquirir (deve
ser comprado a verso a partir da PervasiveSAF'CCC$ :m m0quinas <in'CCC, no nem mesmo
poss1vel abrir um arquivo btrieve de dois servidores$ :ste problema de conhecimento da Pervasive,
mas no ser0 alterado porque esta verso "oi descontinuada por volta de agosto de 'CC9$
-.ree
!n"orma)es ,0sicas
Para manipulao de tabelas -tree o driver utili5ado -.#::-+B 2
Para programar algo espec1"ico para o -tree pode/se utili5ar o teste i"de" -.#:: 2
A e(tenso padro das tabelas $dtc $ Auando o Focal?ile estiver utili5ando o banco -tree os SBs
continuam tendo como padro a e(tenso $db" , mas as tabelas criadas (SB9OOC$+,?, SB'OOC$+,?, etc
so -tree$ Portanto recomenda/se que se con"igure outra e(tenso padro para arquivos locais do tipo
-tree atravs da chave Focal+b:(tension no arquivo apMsrv$ini como $dtc 2
As manipula)es e visuali5a)es de dados devem ser "eitas atravs do APSdu , pois as antigas
"erramentas so incompat1veis2
O -tree no precisa ser instalado, pois sua biblioteca gerada %unto com o Protheus2
Os campos do tipo memo devem ser os Hltimos da tabela, por isso na hora da sua criao o Protheus
automaticamente desloca/os para o "inal e mostra uma mensagem de aviso2
As tabelas geradas pelo -tree so totalmente compat1veis entre as plata"ormas <indo=s e Finu(, pode/
se inclusive copiar uma tabela gerada no Finu( e abr1/la no <indo=s e vice/e/versa$
[ndices
/ O 1ndice interno do -tree (ordem do recno criado em outro arquivo com e(tenso $int $ 4ma pasta
( ctreeint criada abai(o da pasta com a tabela$ 8esta pasta sero arma5enados todos os 1ndices
internos daquele diret*rio$ -aso no e(ista o arquivo de 1ndice interno o mesmo gerado
automaticamente pelo Protheus mostrando um aviso de que reconstruiu o 1ndice no servidor na hora da
abertura da tabela$ Para apag0/lo pode ser utili5ada uma "uno W -.#::+:F!8.2
/ Os arquivos de 1ndices permanentes so criados "ora do arquivo da tabela com e(tenso padro como
nos outros #++s ( $cd( , mas suas in"orma)es so arma5enadas no arquivo da tabela ( $dtc $ Portanto
para se criar ou e(cluir 1ndices permanentes a tabela deve estar aberta em modo e(clusivo$ 8a hora da
abertura da tabela, todos os arquivos de 1ndices permanentes relacionados em sua estrutura so abertos
tambm, por isso no se pode deletar o arquivo de 1ndice permanente com a respectiva tabela aberta$
-aso no e(ista um ou mais arquivos de 1ndices da tabela na hora de sua abertura, o Protheus ir0 recri0/
los automaticamente de "orma semelhante ao 1ndice interno$ O diret*rio do arquivo de 1ndice tambm
arma5enado na estrutura da tabela, mas quando a tabela aberta e constatado que a tabela est0 em
outro diret*rio o Protheus automaticamente atuali5a esta in"ormao$ Para se deletar os 1ndices de uma
tabela -tree pode/se utili5ar a "uno W -.#::+:F!+BS ou utili5ar a opo !nde(Eerase all no APSdu$
Portanto aconselha/se utili5ar o 1ndice do tipo permanente somente se o mesmo "or utili5ado
posteriormente (outras aberturas da tabela caso contr0rio deve/se utili5ar os 1ndices tempor0rios2
/ O 1ndice tempor0rio criados dentro de um subdiret*rio com o nome do arquivo especi"icado na hora
de sua criao, por e(emplo ind9$id( contendo os arquivos ind9$ind , ind9c$ind e ind9r$ind $ :ste tipo de
1ndice no possui de"inio arma5enada no arquivo da tabela, por ser tempor0rio$
Sistemas Operacionais e Plata"ormas (verso APM e posteriores
Sistemas Operacionais e Plata"ormas
O Protheus Server "oi desenvolvido em A8S! -Y e, portanto, independe de AP!7s especi"icas para
"uncionar$ Iraas a isso, o nHcleo do Protheus pode ser recompilado em todos os sistemas operacionais
e plata"ormas que suportem A8S! -Y$
Outra preocupao durante o desenvolvimento do Protheus "oi garantir total compatibilidade dos
reposit*rios de ob%etos do Protheus (#PO7s e das corre)es dos reposit*rios (Patch7s entre os sistemas
operacionais e plata"ormas$
Plata"ormas e SO7s suportados
<indo=s e Finu( !ntel,
<indo=s !AMJ,
Sun Solaris ( #!S- ,
LP 4B ( #!S- ,
-ompaq .rueMJ ( #!S- ,
!,K A!B ( Po=er P- e #SEMCCC
8ovos SO7s a serem suportados
PalmOS ( em "ase ,eta
PocTetP-
A Finguagem AdvPl
A Finguagem AdvPl teve seu in1cio em 9OOJ, sendo na verdade uma evoluo na utili5ao de
linguagens no padro (,ase pela Kicrosiga So"t=are S$A$ (-lipper, ;isual Ob%ects e depois ?ive<in$
-om a criao da tecnologia Protheus, era necess0rio criar uma linguagem que suportasse o padro
(,ase para a manuteno de todo o c*digo e(istente do sistema de :#P Siga Advanced$ ?oi ento
criada a linguagem chamada Advanced Protheus Fanguage$
O AdvPl uma e(tenso do padro (,ase de comandos e "un)es, operadores, estruturas de controle
de "lu(o e palavras reservadas, contando tambm com "un)es e comandos disponibili5ados pela
Kicrosiga que a torna uma linguagem completa para a criao de aplica)es :#P prontas para a
!nternet$ .ambm uma linguagem orientada a ob%etos e eventos, permitindo ao programador
desenvolver aplica)es visuais e criar suas pr*prias classes de ob%etos$
Auando compilados, todos os arquivos de c*digo tornam/se unidades de inteligncia b0sicas, chamados
APO s (de Advanced Protheus Ob%ects$ .ais APO s so mantidos em um reposit*rio e carregados
dinamicamente pelo APM Server para a e(ecuo$ -omo no e(iste a linTedio, ou unio "1sica do
c*digo compilado a um determinado m*dulo ou aplicao, "un)es criadas em AdvPl podem ser
e(ecutadas em qualquer ponto do ambiente Advanced Protheus$
O compilador e o interpretador da linguagem AdvPl o pr*prio servidor APM (APM Server, e e(iste um
ambiente visual para desenvolvimento integrado (APM !+: onde o c*digo pode ser criado, compilado e
depurado$
Os programas em AdvPl podem conter comandos ou "un)es de inter"ace com o usu0rio$ +e acordo com
tal caracter1stica, tais programas so subdivididos nas seguintes categorias:
Programao -om !nter"ace Pr*pria com o 4su0rio
8esta categoria entram os programas desenvolvidos para serem e(ecutados atravs do terminal remoto
do Protheus, o APM #emote$ O APM #emote a aplicao encarregada da inter"ace e da interao com
o usu0rio, sendo que todo o processamento do c*digo em AdvPl, o acesso ao banco de dados e o
gerenciamento de cone()es e"etuado no APM Server$ O APM #emote o principal meio de acesso a
e(ecuo de rotinas escritas em AdvPl no APM Server, e por isso permite e(ecutar qualquer tipo de
c*digo, tenha ele inter"ace com o usu0rio ou no$ Porm nesta categoria so considerados apenas os
programas que reali5em algum tipo de inter"ace remota utili5ando o protocolo de comunicao do
Protheus$
Pode/se criar rotinas para a customi5ao do sistema :#P Advanced Protheus, desde processos
adicionais at mesmo relat*rios$ A grande vantagem aproveitar todo o ambiente montado pelos
m*dulos do :#P Advanced Protheus$ Porm, com o AdvPl poss1vel at mesmo criar toda uma
aplicao, ou m*dulo, do comeo$
.odo o c*digo do sistema :#P Advanced Protheus escrito em AdvPl$
Programao Sem !nter"ace Pr*pria com o 4su0rio
As rotinas criadas sem inter"ace so consideradas nesta categoria porque geralmente tm uma utili5ao
mais espec1"ica do que um processo adicional ou um relat*rio novo$ .ais rotinas no tm inter"ace com o
usurio atravs do APM #emote, e qualquer tentativa nesse sentido (como a criao de uma %anela
padro ocasionar0 uma e(ceo em tempo de e(ecuo$ :stas rotinas so apenas processos, ou Qobs,
e(ecutados no APM Server$ Algumas ve5es, a inter"ace destas rotinas "ica a cargo de aplica)es
e(ternas, desenvolvidas em outras linguagens, que so respons0veis por iniciar os processos no
servidor APM atravs dos meios dispon1veis de integrao e conectividade no Protheus$
+e acordo com a utili5ao e com o meio de conectividade utili5ado, estas rotinas so subcategori5adas
assim:
Programao por Processos
#otinas escritas em AdvPl podem ser iniciadas como processos individuais (sem inter"ace no APM
Server atravs de duas maneiras: !niciadas por outra rotina AdvPl atravs da chamada de "un)es como
StartQob ou -allProc ou iniciadas automaticamente na iniciali5ao do APM Server (quando propriamente
con"igurado$
Programao de #P-
Atravs de uma biblioteca de "un)es dispon1vel no Protheus (uma AP! de comunicao, pode/se
e(ecutar rotinas escritas em AdvPl diretamente no APM Server, atravs de aplica)es e(ternas escritas
em outras linguagens$ !sto o que se chama de #P- (de #emote Procedure -all, ou -hamada de
Procedimentos #emota$
O servidor Protheus tambm pode e(ecutar rotinas em AdvPl em outros servidores Protheus atravs de
cone(o .-PE!P direta utili5ando o conceito de #P-$ +o mesmo modo, aplica)es e(ternas podem
requisitar a e(ecuo de rotinas escritas em AdvPl atravs de cone(o .-PE!P direta$
Programao <eb
O APM Server pode tambm ser e(ecutado como um servidor <eb, respondendo a requisi)es L..P$
8o momento destas requisi)es, pode e(ecutar rotinas escritas em AdvPl como processos individuais,
enviando o resultado das "un)es como retorno das requisi)es para o cliente L..P (como por e(emplo
um ,ro=ser de !nternet$ Aualquer rotina escrita em AdvPl que no contenha comandos de inter"ace
pode ser e(ecutada atravs de requisi)es L..P$ O Protheus permite a compilao de arquivos L.KF
contendo c*digo AdvPl embutido$ So os chamados arquivos AdvPl ASP, para a criao de p0ginas
din6micas$
Programao .el8et
.el8et parte da gama de protocolos .-PE!P que permite a cone(o a um computador remoto atravs
de uma aplicao cliente deste protocolo$ O APM Server pode emular um terminal .el8et, atravs da
e(ecuo de rotinas escritas em AdvPl$ Ou se%a, pode/se escrever rotinas AdvPl cu%a inter"ace "inal ser0
um terminal .el8et ou um coletor de dados m*vel$
-riao de um Programa
4m programa de computador nada mais do que um grupo de comandos logicamente dispostos com o
ob%etivo de e(ecutar determinada tare"a$ :sses comandos so gravados em um arquivo te(to que
trans"ormado em uma linguagem e(ecut0vel por um computador atravs de um processo chamado
compilao$ A compilao substitui os comandos de alto n1vel (que os humanos compreendem por
instru)es de bai(o n1vel (compreendida pelo sistema operacional em e(ecuo no computador$ 8o
caso do AdvPl, no o sistema operacional de um computador que ir0 e(ecutar o c*digo compilado,
mas sim o APM Server$
+entro de um programa, os comandos e "un)es utili5ados devem seguir regras de sinta(e da linguagem
utili5ada, pois caso contr0rio o programa ser0 interrompido por erros$ Os erros podem ser de compilao
ou de e(ecuo$
:rros de compilao so aqueles encontrados na sinta(e que no permitem que o arquivo de c*digo do
programa se%a compilado$ Podem ser comandos especi"icados de "orma err\nea, utili5ao inv0lida de
operadores, etc$
:rros de e(ecuo so aqueles que acontecem depois da compilao, quando o programa est0 sendo
e(ecutado$ Podem ocorrer por inHmeras ra5)es, mas geralmente se re"erem a "un)es no e(istentes,
ou vari0veis no criadas ou iniciali5adas, etc$
Finhas de Programa
As linhas e(istentes dentro de um arquivo te(to de c*digo de programa podem ser linhas de comando,
linhas de coment0rio ou linhas mistas$
Finhas de -omando
Finhas de comando possuem os comandos ou instru)es que sero e(ecutadas$ Por e(emplo:
Focal n-nt
Focal nSoma :N C
?or n-nt :N 9 .o 9C
nSoma YN n-nt
8e(t n-nt
Finhas de -oment0rio
Finhas de coment0rio possuem um te(to qualquer, mas no so e(ecutadas$ Servem apenas para
documentao e para tornar mais "0cil o entendimento do programa$ :(istem trs "ormas de se comentar
linhas de te(to$ A primeira delas utili5ar o sinal de Z (asterisco no comeo da linha:
Z Programa para c0lculo do total
Z Autor: Kicrosiga So"t=are S$A$
Z +ata: ' de outubro de 'CC9
.odas as linhas iniciadas com um sinal de asterisco so consideradas como coment0rio$ Pode/se utili5ar
a palavra 8O.: ou dois s1mbolos da letra @e@ comercial (]] para reali5ar a "uno do sinal de asterisco$
Porm todas estas "ormas de coment0rio de linhas so obsoletas e e(istem apenas para
compatibili5ao com o padro (,ase$ A melhor maneira de comentar linhas em AdvPl utili5ar duas
barras transversais:
EE Programa para c0lculo do total
EE Autor: Kicrosiga So"t=are S$A$
EE +ata: ' de outubro de 'CC9
Outra "orma de documentar te(tos utili5ar as barras transversais %untamente com o asterisco, podendo/
se comentar todo um bloco de te(to sem precisar comentar linha a linha:
EZ
Programa para c0lculo do total
Autor: Kicrosiga So"t=are S$A$
+ata: ' de outubro de 'CC9
ZE
.odo o te(to encontrado entre a abertura (indicada pelos caracteres EZ e o "echamento (indicada pelos
caracteres ZE considerado como coment0rio$
Finhas Kistas
O AdvPl tambm permite que e(istam linhas de comando com coment0rio$ !sto poss1vel inclu1ndo/se
as duas barras transversais (EE ao "inal da linha de comando e adicionando/se o te(to do coment0rio:
Focal n-nt
Focal nSoma :N C EE !niciali5a a vari0vel com 5ero para a soma
?or n-nt :N 9 .o 9C
nSoma YN n-nt
8e(t n-nt
.amanho da Finha
Assim como a linha "1sica, delimitada pela quantidade de caracteres que pode ser digitado no editor de
te(tos utili5ado, e(iste uma linha considerada linha l*gica$ A linha l*gica, aquela considerada para a
compilao como uma Hnica linha de comando$
A princ1pio, cada linha digitada no arquivo te(to di"erenciada ap*s o pressionamento da tecla :nter $
Ou se%a, a linha l*gica, a linha "1sica no arquivo$ Porm algumas ve5es, por limitao "1sica do editor de
te(to ou por esttica, pode/se @quebrar@ a linha l*gica em mais de uma linha "1sica no arquivo te(to$ !sto
e"etuado utili5ando/se o sinal de ponto/e/v1rgula (2$
!" ^:mptX(c8ome $And$ ^:mptX(c:nd $And$ 2 enter
^:mptX(c.el $And$ ^:mptX(c?a( $And$ 2 enter
^:mptX(c:mail
Irava+ados(c8ome,c:nd,c.el,c?a(,c:mail
:ndi"
8este e(emplo e(iste uma linha de comando para a checagem das vari0veis utili5adas$ -omo a linha
torna/se muito grande, pode/se divid1/la em mais de uma linha "1sica utili5ando o sinal de ponto/e/v1rgula$
Se um sinal de ponto/e/v1rgula "or esquecido nas duas primeiras linhas, durante a e(ecuo do programa
ocorrer0 um erro, pois a segunda linha "1sica ser0 considerada como uma segunda linha de comando na
compilao$ : durante a e(ecuo esta linha no ter0 sentido$
:strutura de um Programa
Apesar de no ser uma linguagem de padr)es r1gidos com relao > estrutura do programa, importante
identi"icar algumas de suas partes$ -onsidere o programa de e(emplo abai(o:
EZ
YNY
Programa: -0lculo do ?atorial
Autor : Kicrosiga So"t=are S$A$
+ata : C' de outubro de 'CC9
YNY
ZE
Focal n-nt
Focal n#esultado :N 9 EE #esultado do "atorial
Focal n?ator :N 3 EE 8Hmero para o c0lculo
EE -0lculo do "atorial
?or n-nt :N n?ator .o 9 Step /9
n#esultado ZN n-nt
8e(t n-nt
EE :(ibe o resultado na tela, atravs da "uno alert
Alert(@O "atorial de @ Y c;al.o-har(n?ator Y 2
@ @ Y c;al.o-har(n#esultado
EE .ermina o programa
#eturn
Pode/se classi"icar um programa em AdvPl em quatro partes b0sicas:
9$_rea de !denti"icao
'$_rea de A%ustes !niciais
&$-orpo do Programa
J$_rea de :ncerramento
A _rea de !denti"icao
:sta uma 0rea que no obrigat*ria e dedicada a documentao do programa$ Auando e(istente,
contm apenas coment0rios e(plicando a sua "inalidade, data de criao, autor, etc, e aparece no
comeo do programa, antes de qualquer linha de comando$
O "ormato para esta 0rea no de"inido$ Pode/se colocar qualquer tipo de in"ormao dese%ada e
escolher a "ormatao apropriada$
EZ
YNY
Programa: -0lculo do ?atorial
Autor : Kicrosiga So"t=are S$A$
+ata : C' de outubro de 'CC9
YNY
ZE
Opcionalmente pode/se incluir de"ini)es de constantes utili5adas no programa ou incluso de arquivos
de cabealho nesta 0rea$
A _rea de A%ustes !niciais
8esta 0rea geralmente se "a5em os a%ustes iniciais, importantes para o correto "uncionamento do
programa$ :ntre os a%ustes se encontram declara)es de vari0veis, iniciali5a)es, abertura de arquivos,
etc$ Apesar do AdvPl no ser uma linguagem r1gida e as vari0veis poderem ser declaradas em qualquer
lugar do programa, aconselh0vel "a5/lo nesta 0rea visando tornar o c*digo mais leg1vel e "acilitar a
identi"icao de vari0veis no utili5adas$
Focal n-nt
Focal n#esultado :N C EE #esultado do "atorial
Focal n?ator :N 9C EE 8Hmero para o c0lculo
O -orpo do Programa
G nesta 0rea que se encontram as linhas de c*digo do programa$ G onde se reali5a a tare"a necess0ria
atravs da organi5ao l*gica destas linhas de comando$ :spera/se que as linhas de comando este%am
organi5adas de tal modo que no "inal desta 0rea o resultado esperado se%a obtido, se%a ele arma5enado
em um arquivo ou em vari0veis de mem*ria, pronto para ser e(ibido ao usu0rio atravs de um relat*rio
ou na tela$
EE -0lculo do "atorial
?or n-nt :N n?ator .o 9 Step /9
n#esultado ZN n-nt
8e(t n-nt
A _rea de :ncerramento
G nesta 0rea onde as "inali5a)es so e"etuadas$ G onde os arquivos abertos so "echados, e o
resultado da e(ecuo do programa utili5ado$ Pode/se e(ibir o resultado arma5enado em uma vari0vel
ou em um arquivo ou simplesmente "inali5ar, caso a tare"a %0 tenha sido toda completada no corpo do
programa$ G nesta 0rea que se encontra o encerramento do programa$ .odo programa em AdvPl deve
sempre terminar com a palavra chave return$
EE :(ibe o resultado na tela, atravs da "uno alert
Alert(@O "atorial de @ Y c;al.o-har(n?ator Y 2
@ @ Y c;al.o-har(n#esultado
EE .ermina o programa
#eturn
.ipos de +ados
O AdvPl no uma linguagem de tipos r1gidos (stronglX tXped, o que signi"ica que vari0veis de mem*ria
podem receber di"erentes tipos de dados durante a e(ecuo do programa$ ;ari0veis podem tambm
conter ob%etos, mas os tipos prim0rios da linguagem so:
8umrico
O AdvPl no di"erencia valores inteiros de valores com ponto "lutuante, portanto pode/se criar vari0veis
numricas com qualquer valor dentro do intervalo permitido$ Os seguintes elementos so do tipo de dado
numrico:
'
J&$3&
C$3
C$CCCC9
9CCCCCC
4ma vari0vel do tipo de dado numrico pode conter um nHmero de de5oito d1gitos incluindo o ponto
"lutuante, no intervalo de '$''3CD&`3`3CD'C9J : &C` at 9$DODMO&9&J`M'&93` :Y&C`$
F*gico
;alores l*gicos em AdvPl so identi"icados atravs de $.$ ou $V$ para verdadeiro e $?$ ou $8$ para "also
(independentemente se os caracteres estiverem em maiHsculo ou minHsculo$
-aracter
Strings ou cadeias de caracteres so identi"icadas em AdvPl por blocos de te(to entre aspas duplas (@
ou aspas simples (7:
@Ol0 mundo^@
7:sta uma string7
@:sta 7outra7 string@
4ma vari0vel do tipo caracter pode conter strings com no m0(imo 9 Kb, ou se%a, 9CJ`3DM caracteres$
+ata
O AdvPl tem um tipo de dados espec1"ico para datas$ !nternamente as vari0veis deste tipo de dado so
arma5enadas como um nHmero correspondente a data Quliana$
;ari0veis do tipo de dados +ata no podem ser declaradas diretamente, e sim atravs da utili5ao de
"un)es espec1"icas como por e(emplo ctod que converte uma string para data$
Katri5 (ArraX
Katri5es so um tipo de dado especial$ G a disposio de outros elementos em colunas e linhas$ O AdvPl
suporta matri5es uni ou multidimensionais$ Os elementos de uma matri5 so acessados atravs de
1ndices numricos iniciados em 9, identi"icando a linha e coluna para quantas dimen)es e(istirem$
4ma matri5 pode conter no m0(imo 9CCCCC elementos, independentemente do nHmero de dimens)es$
Katri5es devem ser utili5adas com cautela, pois se "orem muito grandes podem e(aurir a mem*ria do
servidor$
,loco de -*digo
O bloco de c*digo um tipo de dado especial$ G utili5ado para arma5enar instru)es escritas em AdvPl
que podero ser e(ecutadas posteriormente$
-riao e Atribuio de ;ari0veis
-riao e Atribuio de ;ari0veis
;ari0veis de mem*ria so um dos recursos mais importantes de uma linguagem$ So 0reas de mem*ria
criadas para arma5enar in"orma)es utili5adas por um programa para a e(ecuo de tare"as$ Por
e(emplo, quando o usu0rio digita uma in"ormao qualquer, como o nome de um produto, em uma tela
de um programa esta in"ormao arma5enada em uma vari0vel de mem*ria para posteriormente ser
gravada ou impressa$
A partir do momento que uma vari0vel criada, no necess0rio mais se re"erenciar ao seu conteHdo, e
sim ao seu nome$ O nome de uma vari0vel um identi"icador Hnico que segue duas regras regras:
K0(imo de 9C caracteres$ O AdvPl no impede a criao de uma vari0vel de mem*ria cu%o nome
contenha mais de 9C caracteres, porm apenas os 9C primeiros sero considerados para a locali5ao
do conteHdo arma5enado$ Portanto se "orem criadas duas vari0veis cu%os 9C primeiros caracteres "orem
iguais, como n.otalIeralAnual e n.otalIeralKensal, as re"erncias a qualquer uma delas no programa
resultaro o mesmo$ Ou se%a, sero a mesma vari0vel:
n.otalIeralKensal :N 9CC
n.otalIeralAnual :N &CC
Alert(@;alor mensal: @ Y c;al.o-har(n.otalIeralKensal
Auando o conteHdo da vari0vel n.otalIeralKensal e(ibido, o seu valor ser0 de &CC$ !sso acontece
porque no momento que esse valor "oi atribuido > vari0vel n.otalIeralAnual, o AdvPl considerou apenas
os 9C primeiros caracteres (assim como o "a5 quando deve e(ibir o valor da vari0vel n.otalIeralKensal,
ou se%a, considerou/as como a mesma vari0vel$ Assim o valor original de 9CC "oi substituido pelo de &CC$
Fimitao de caracteres no nome$ Os nomes das vari0veis devem sempre comear por uma letra ou o
caracter de sublinhado ( $ 8o restante, pode conter letras, nHmeros e o caracter de sublinhado$ Aualquer
outro caracter, incluindo espaos em branco, no so permitidos$
O AdvPl permite a criao ilimitada de vari0veis, dependendo apenas da mem*ria dispon1vel$ A seguir
esto alguns nomes v0lidos para vari0veis:
.O.C9
c8umero
;A# A4AFA4:#
K -A#IO
A99
: alguns inv0lidos:
9-O+!IO (!nicia por um nHmero
K -A#IO (contm um espao em branco
FO-AF (palavra reservada do AdvPl
O AdvPl no uma linguagem de tipos r1gidos para vari0veis, ou se%a, no necess0rio in"ormar o tipo
de dados que determinada vari0vel ir0 conter no momento de sua declarao, e o seu valor pode mudar
durante a e(ecuo do programa$ .ambm no h0 necessidade de declarar vari0veis em uma seo
espec1"ica do seu c*digo "onte, embora se%a aconselh0vel declarar todas as vari0veis necess0rias no
comeo, tornando a manuteno mais "0cil e evitando a declarao de vari0veis desnecess0rias$
Para declarar uma vari0vel deve/se utili5ar um identi"icador de escopo, seguido de uma lista de vari0veis
separadas por v1rgula (,$ 4m identi"icador de escopo uma palavra chave que indica a que conte(to do
programa a vari0vel declarada pertence$ O conte(to de vari0veis pode ser local (visuali5adas apenas
dentro do programa atual, pHblico (visuali5adas por qualquer outro programa, entre outros$ Os
di"erentes tipos de conte(to de vari0veis so e(plicados na documentao sobre escopo de vari0veis$
-onsidere as linhas de c*digo de e(emplo:
n#esultado :N '3C Z (9 Y (nPercentual E 9CC
Se esta linha "or e(ecutada em um programa AdvPl, ocorrer0 um erro de e(ecuo com a mensagem
@variable does not e(ist: nPercentual@, pois esta vari0vel est0 sendo utili5ada em uma e(presso de
c0lculo sem ter sido declarada$ Para solucionar este erro, deve/se declarar a vari0vel previamente:
Focal nPercentual, n#esultado
n#esultado :N '3C Z (9 Y (nPercentual E 9CC
8este e(emplo, as vari0veis so declaradas previamente utili5ando o identi"icador de escopo local$
Auando a linha de c0lculo "or e(ecutada, o erro de vari0vel no e(istente, no mais ocorrer0$ Porm
vari0veis no iniciali5adas tm sempre o valor de"ault nulo (8il e este valor no pode ser utili5ado em um
c0lculo pois tambm gerar0 erros de e(ecuo (nulo no pode ser dividido por 9CC$ A resoluo deste
problema e"etuada iniciali5ando/se a vari0vel atravs de uma das "ormas:
Focal nPercentual,n#esultado
Store 9C .o nPercentual
n#esultado :N '3C Z (9 Y (nPercentual E 9CC
ou
Focal nPercentual, n#esultado
nPercentual :N 9C
n#esultado :N '3C Z (9 Y (nPercentual E 9CC
ou
Focal nPercentual :N 9C, n#esultado
n#esultado :N '3C Z (9 Y (nPercentual E 9CC
A di"erena entre o Hltimo e(emplo e os dois anteriores que a vari0vel iniciali5ada no momento da
declarao$ 8os dois primeiros e(emplos, a vari0vel primeiro declarada e ento iniciali5ada em uma
outra linha de c*digo$ O comando store e(iste apenas por compatibilidade com vers)es anteriores e
outras linguagens (,ase, mas obsoleto$ +eve/se utili5ar o operador de atribuio (:N ou somente N$ G
aconselh0vel optar pelo operador de atribuio composto de dois pontos e sinal de igual, pois o operador
de atribuio utili5ando somente o sinal de igual pode ser "acilmente con"undido com o operador
relacional (para comparao durante a criao do programa$
4ma ve5 que um valor lhe se%a atribu1do, o tipo de dado de uma vari0vel igual ao tipo de dado do valor
atribu1do$ Ou se%a, uma vari0vel passa a ser numrica se um nHmero lhe atribu1do, passa a ser
caracter se uma string de te(to lhe "or atribu1da, etc$ Porm mesmo que uma vari0vel se%a de
determinado tipo de dado, pode/se mudar o tipo da vari0vel atribuindo outro tipo a ela:
C9 Focal (;ariavel EE +eclara a vari0vel inicialmente com valor nulo
C'
C& (;ariavel :N @Agora a vari0vel caracter$@
CJ Alert(@;alor do .e(to: @ Y (;ariavel
C3
CM (;ariavel :N '' EE Agora a vari0vel numrica
CD Alert(c;al.o-har((;ariavel
C`
CO (;ariavel :N $.$ EE Agor