Beruflich Dokumente
Kultur Dokumente
Reviso Tcnica
Fernanda Magalhes Favilla Paulo Afonso Israel Freire Patrcia Alves de Freitas Daniela Martino dos Santos
Agradeo a todos os meus amigos da CASSI pelo insentivo e companheirismo que sempre recebi para realizao desta obra. Obrigado em especial aos meus Amigos da juventude, Giuler Alberto, Jlio Pacheco e Roberto Catanhede e a minha famlia pela ajuda nos meus primeiros passos na descoberta do Mundo da Informtica. Um grande abrao para todos amigos de Braslia!.
Dominando o Progress
Dominando o Progress
Copyright 2000 Mrcio Brener
Todos os direitos reservados para o autor desta obra. Toda ou qualquer parte desta publicao poder ser reproduzida ou transmitida por qualquer meio, seja este eletrnico, mecnico, de fotocpia, de gravao ou outros sem prvia autorizao, desde que citado o Autor (Mrcio Brener Costa brener@zipmail.com.br). Progress, Report Builder, AppServer e WebSpeed so Marcas Registradas da Progress Software Corporation EUA. IBM/DB2 Marca Registra da International Bussines Machine IBM. Oracle Marca Registrada da Oracle Inc. Windows 3.11, Windows 95, Windows 98, Windows NT, Windows 2000 so Marcas Registradas da Microsoft. NetTerm Marca Registrada da InterSoft International Inc. KeaX! Marca Registrada da Attachmate Vipper e PCase so Marcas Registradas da 4Tool Software OpenLink Marca Registrada da OpenLink
Dominando o Progress
ndice
Captulo 1 ............................................................ 20 Apresentando o Progress........................................ 20
O que o Progress? ....................................................... 20 Como funciona?.............................................................. 21 Instalando o software..................................................... 22 Apresentando os aplicativos............................................ 26
Protocolos disponveis..................................................... 49
Dominando o Progress
Como funciona o Banco de Dados...................................52 Criando tabelas, campos, ndices, etc..............................53 Criando uma tabela.........................................................55 Criando os campos .........................................................59 Validando os Campos......................................................61
A propriedade Validation ................................................62
Triggers..........................................................................63
O que um Trigger? ........................................................63
Metaschema ...................................................................71
O que o Metaschema?.................................................71
Dominando o Progress
Dominando o Progress
BOTES........................................................................ 155 PARMETROS ............................................................... 159 Importao e Exportao de Dados .............................. 162 Limites do Progress....................................................... 163
Banco de Dados.......................................................... 163 VARIVEIS ................................................................. 164 NOMENCLATURAS....................................................... 165
Funes........................................................................ 166
ABSOLUTE ................................................................. 166 ACCUM ...................................................................... 166 ALIAS ........................................................................ 167 AMBIGUOUS............................................................... 167 ASC ........................................................................... 168 AVAILABLE................................................................. 168 CAN-DO..................................................................... 169 CAN-FIND .................................................................. 169 CAN-QUERY ............................................................... 170 CAN-SET.................................................................... 171 ENCODE..................................................................... 171 CHR........................................................................... 172 CODEPAGE-CONVERT.................................................. 172 CONNECTED............................................................... 173 COUNT-OF ................................................................. 173 CURRENT-CHANGED ................................................... 174 CURRENT-LANGUAGE.................................................. 175 Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress CURRENT-RESULT-ROW .............................................. 175 CURRENT-ROW-MODIFIED .......................................... 176 CURRENT-VALUE ........................................................ 176 DATASERVERS ........................................................... 176 DATE......................................................................... 176 DAY .......................................................................... 177 DBCODEPAGE............................................................. 177 DBCOLLATION............................................................ 178 DBNAME .................................................................... 178 DBPARAM .................................................................. 178 DBRESTRICTIONS....................................................... 179 DBTASKID.................................................................. 179 DBTYPE ..................................................................... 180 DBVERSION ............................................................... 180 DECIMAL ................................................................... 181 DEFINED ................................................................... 181 DYNAMIC-FUNCTION .................................................. 182 ENTERED................................................................... 183 ENTRY....................................................................... 183 ETIME ....................................................................... 184 EXP ........................................................................... 184 EXTENT ..................................................................... 184 FILL .......................................................................... 185 FIRST........................................................................ 185 FIRST-OF................................................................... 186 FRAME-COL................................................................ 187 Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress FRAME-DB.................................................................. 187 FRAME-DOWN ............................................................ 187 FRAME-FIELD ............................................................. 188 FRAME-FILE ............................................................... 188 FRAME-INDEX ............................................................ 188 FRAME-LINE............................................................... 189 FRAME-NAME ............................................................. 189 FRAME-ROW .............................................................. 189 FRAME-VALUE ............................................................ 190 GATEWAYS ................................................................ 190 GET-BYTE .................................................................. 190 GET-CODEPAGES ........................................................ 190 GET-COLLATIONS ....................................................... 191 GET-DOUBLE.............................................................. 191 GET-FLOAT ................................................................ 192 GET-LONG.................................................................. 192 GET-POINTER-VALUE .................................................. 192 GET-SHORT................................................................ 192 GET-SIZE ................................................................... 192 GET-STRING............................................................... 193 GET-UNSIGNED-SHORT ............................................... 193 INDEX ....................................................................... 193 INTEGER.................................................................... 193 IS-ATTR-SPACE .......................................................... 194 KBLABEL .................................................................... 194 KEYCODE ................................................................... 195 Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress KEYFUNCTION............................................................ 195 KEYLABEL .................................................................. 196 KEYWORD.................................................................. 197 KEYWORD-ALL ........................................................... 197 LAST ......................................................................... 197 LASTKEY.................................................................... 198 LAST-OF .................................................................... 198 LC............................................................................. 198 LDBNAME .................................................................. 198 LEFT-TRIM................................................................. 199 LENGTH..................................................................... 199 LINE-COUNTER .......................................................... 199 LIST-EVENTS.............................................................. 199 LIST-QUERY-ATTRS .................................................... 200 LIST-SET-ATTRS......................................................... 200 LIST-WIDGETS ........................................................... 200 LOCKED..................................................................... 201 LOG .......................................................................... 201 LOOKUP..................................................................... 201 MAXIMUM .................................................................. 202 MESSAGE-LINES ......................................................... 202 MINIMUM .................................................................. 202 MONTH ..................................................................... 203 NEW.......................................................................... 203 NEXT-VALUE .............................................................. 203 NOT ENTERED............................................................ 203 Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress NUM-ALIASES............................................................. 204 NUM-DBS................................................................... 204 NUM-ENTRIES ............................................................ 204 NUM-RESULTS............................................................ 205 OPSYS ....................................................................... 205 OS-DRIVES................................................................. 206 OS-ERROR ................................................................. 206 OS-GETENV................................................................ 206 PAGE-NUMBER ........................................................... 207 PAGE-SIZE ................................................................. 207 PDBNAME .................................................................. 207 PROGRAM-NAME......................................................... 208 PROGRESS ................................................................. 208 PROMSGS .................................................................. 208 PROPATH................................................................... 209 PROVERSION.............................................................. 209 QUERY-OFF-END......................................................... 209 RANDOM.................................................................... 210 RECID........................................................................ 211 RECORD-LENGTH........................................................ 212 REPLACE.................................................................... 212 RETRY ....................................................................... 213 RETURN-VALUE .......................................................... 214 RIGHT-TRIM............................................................... 214 R-INDEX .................................................................... 214 ROUND ...................................................................... 215 Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress ROWID...................................................................... 215 SCREEN-LINES ........................................................... 215 SDBNAME .................................................................. 215 SEARCH..................................................................... 216 SEEK ......................................................................... 216 SETUSERID ................................................................ 216 SQRT ........................................................................ 216 STRING ..................................................................... 217 SUBSTITUTE .............................................................. 217 SUBSTRING................................................................ 218 TERMINAL ................................................................. 219 TIME ......................................................................... 219 TODAY ...................................................................... 220 TO-ROWID................................................................. 220 TRANSACTION ........................................................... 220 TRIM......................................................................... 221 TRUNCATE................................................................. 221 USERID ..................................................................... 221 VALID-EVENT ............................................................. 222 VALID-HANDLE........................................................... 222 WEEKDAY .................................................................. 222 WIDGET-HANDLE ....................................................... 223 YEAR......................................................................... 223
Dominando o Progress
Dominando o Progress -cpprint Cdigo Pgina ................................................ 236 -cprcodein Cdigo Pgina............................................. 236 -cprcodeout Cdigo Pgina ........................................... 237 -cpstream .................................................................. 237 -cpterm ..................................................................... 237 -cs n, i ....................................................................... 237 -ct n .......................................................................... 238 -d mdy....................................................................... 238 -D n .......................................................................... 238 -db banco de dados .................................................... 239 -debug ...................................................................... 239 -decdtm..................................................................... 239 -dictexps.................................................................... 239 -directio..................................................................... 240 -dt ............................................................................ 240 -E ............................................................................. 240 -esqllog ..................................................................... 241 -esqlnopad................................................................. 241 -evtlevel parmetro ..................................................... 241 -F.............................................................................. 241 -fc n .......................................................................... 241 -fldisable.................................................................... 242 -g arquivo .................................................................. 242 -G n .......................................................................... 242 -h n........................................................................... 242 -H servidor................................................................. 243 Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress -H servidor ................................................................. 243 -hardlimit ................................................................... 243 -hs s.......................................................................... 243 -i............................................................................... 244 -ininame arquivo ......................................................... 244 -inp n ........................................................................ 245 -is ............................................................................. 245 -k.............................................................................. 245 -L n ........................................................................... 246 -ld nome .................................................................... 246 -lng linguagem............................................................ 247 -logfile arquivo ............................................................ 247 -logname arquivo ........................................................ 247 -m1 ........................................................................... 247 -m2 ........................................................................... 247 -m3 ........................................................................... 248 -Ma n......................................................................... 248 -maxport n................................................................. 248 -Mf n ......................................................................... 248 -Mi n.......................................................................... 249 -minport n.................................................................. 249 -Mm n........................................................................ 249 -mmax n.................................................................... 249 -Mn ........................................................................... 249 -Mp n ........................................................................ 250 -Mpb n....................................................................... 250 Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress -Mr n......................................................................... 250 -Mv n ........................................................................ 250 -Mxs n ....................................................................... 250 -n n........................................................................... 251 -N protocolo ............................................................... 251 -nb n......................................................................... 251 -Nd device ................................................................. 251 -NL............................................................................ 252 -Nn Cliente................................................................. 252 -Nv n......................................................................... 252 -o impressora ............................................................. 252 -p procedure .............................................................. 253 -P senha .................................................................... 253 -param texto .............................................................. 253 -pf arquivo ................................................................. 253 -plm .......................................................................... 253 -pls ........................................................................... 254 -populate ................................................................... 254 -pp diretrio............................................................... 254 -pwqdelay.................................................................. 254 -pwqmin n ................................................................. 254 -pwscan n .................................................................. 255 -pwsdelay n ............................................................... 255 -pwwmax n................................................................ 255 -q ............................................................................. 255 -Q ............................................................................. 256 Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress -Q2 ........................................................................... 256 -r .............................................................................. 256 -rand n ...................................................................... 256 -rg............................................................................. 257 -RO ........................................................................... 257 -rptint n ..................................................................... 257 -rq............................................................................. 257 -rr ............................................................................. 257 -s n ........................................................................... 258 -S servio................................................................... 258 -Sn servio ................................................................. 259 -spin n....................................................................... 259 -stream Cdigo Pgina................................................. 259 -stsh n ....................................................................... 259 -SYBc n...................................................................... 259 -SYBt n ...................................................................... 260 -t .............................................................................. 260 -T diretrio................................................................. 260 -TB n......................................................................... 260 -TM n ........................................................................ 260 -tok n ........................................................................ 261 -trig diretrio .............................................................. 261 -tstamp...................................................................... 261 -usrcount n ................................................................ 261 -U usurio .................................................................. 261 -vw ........................................................................... 262 Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress -VO verso................................................................. 262 -v6colon .................................................................... 262 -v6q .......................................................................... 262 -xc coleo................................................................. 262 -y.............................................................................. 263 -yc ............................................................................ 263 -yd............................................................................ 263 -yx ............................................................................ 264 -yy ano ...................................................................... 265
MAGNUS.............................................................272
Apresentao................................................................ 272 Como o MAGNUS funciona? .......................................... 272
Lista de Diretrios do MAGNUS (principais) .................... 273
Funcionamento do MENU.............................................. 274 Validando o acesso ao Programa .................................. 276 Bancos Histricos ......................................................... 277 Desenvolver em Windows para usar no UNIX... ............ 279 Criar Bancos para Testes/Desenvolvimento................... 284
Criando os bancos....................................................... 284 Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Kea!X............................................................................ 295 PCase ........................................................................... 296 Viper............................................................................. 297 ERWin .......................................................................... 297 Sites sobre Progress ..................................................... 299
Captulo 1
Apresentando o Progress
O que o Progress?
A linguagem Progress foi desenvolvida pela empresa Progress Software Corporation em 1984, inicialmente para sistema operacional UNIX com uso em mainframes para processamento de grande volume de dados, como alternativa para outras linguagens da poca como Cobol, Adabas, Natural, Clipper, etc, que exigiam do programador escrever um cdigo muito extenso para qualquer aplicao. Tambm uma alternativa como Banco de Dados Relacional de alta performance e segurana, embutido em um nico produto. A Progress Corporation tem sua sede em Bedford, Massachusetts USA, com filiais em diversos pases. No Brasil sua representante a Progress do Brasil/SP. Uma das maiores atrativos do Progress sua portabilidade e independncia de plataforma. Ele funciona em praticamente todos os sistemas operacionais existentes como DOS, Windows 3x,95,NT, UNIX, OS/2, Novell, VMS, Motif, Xenix, CTOS entre diversos outros, isso utilizando o mesmo cdigo fonte. Seu Banco de Dados Relacional de altssima performance e extrema segurana, igual ou at mesmo Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Apresentando o Progress 21 superior ao bancos mais populares do mercado como Oracle, DB/2 IBM, Sybase, MS-SQL Server, entre outros. A perfeita integrao entre linguagem e banco de dados fazem do Progress uma excelente ferramenta para construo de qualquer aplicao comercial. Isso porque as camadas de desenvolvimento - regras de negcios, dados e interface esto totalmente interligadas, o que evita qualquer redundncia ou retrabalho em qualquer camada da aplicao. A atualizao e distribuio dos aplicativos em Progress tambm bastante simplificada. Um sistema pode ser totalmente centralizado para acesso de vrios clientes simultneos e atualizado a qualquer tempo, parcialmente ou completamente sem gerar qualquer erro ou necessitar de uma parada momentnea do sistema.
22
Dominando o Progress
Arquitetura de aplicao Servidor de rede com instalao do Progress server e client; Sesso multi-usurio dos bancos de dados; Aplicativos em Progress
Instalando o software
Ser apresentada a instalao do Provision para Windows Os pr-requisitos para instalao so apenas mdia(s) e licena(s) para comear a usar.
Tela inicial de instalao Este a primeira tela para instalao do Progress verso 8.x para sistema operacional Microsoft Windows 95/98/NT
Apresentando o Progress 23 Ser preciso especificar na tela de instalao o Nome da Empresa, o Nmero de Srie e Cdigos de Controle para validar o produto e prosseguir a instalao.
Voc pode tambm acrescentar outros produtos mesma instalao, especificando os nmeros de sries e validadores. Informe os dados e clique no boto Additional Products para acrescentar lista de programas, conforme mostrado na figura acima destacado em azul A prxima tela solicita a localizao para instalao do Progress, voc pode especificar o drive o diretrio aonde sero copiados os arquivos. Por padro o diretrio sugerido "DLC", mas voc pode alter-lo para outro de sua escolha. Todos os dados informados na instalao sero includos na configurao do Progress contida no arquivo DLC/progress.cfg, o qual validar a execuo de todos os aplicativos Progress.
Como padro do Progress o diretrio DLC toda sua literatura o cita por padro tambm. Ento saiba que a
24
A prxima tela solicita o grupo de programas a ser criado no servidor e o diretrio padro aonde o Progress salvar arquivos de programas, temporrios entre outros.
Apresentando o Progress
25
Aps o trmino da instalao sero criados esses cones no grupo de programas informado na instalao, como a figura abaixo:
A figura acima demonstra os utilitrios do Progress Provision, um tipo de licena full da Progress similar por exemplo ao Microsoft Visual Basic Professional ou Delphi Client/Server.
26
Dominando o Progress
Apresentando os aplicativos
Desktop
um aplicativo desenvolvido em Progress 4GL modo grfico que apresenta os botes dos aplicativos Progress disponveis. Arquivo: _desk.p
Procedure Editor
Aplicativo em Progress 4GL para escrita do cdigo fonte, execuo de procedures, debuger, compilao e qualquer procedimento por meio de cdigo. Arquivo _edit.p
Apresentando o Progress
Data Administration
27
Aplicativo desenvolvido em Progress 4GL para administrao e manuteno dos bancos de dados.
Com ele voc pode:
Criar, conectar e alterar definies de bancos de dados; Visualizar relatrios de estruturas de tabelas, campos, ndices; Definir segurana dos dados, salvar definies e contedo dos dados, editar parmetros, etc. Arquivo: _admin.p Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
28
Data Dictionary
Dominando o Progress
Com Dicionrio de Dados voc pode modelar a estrutura de tabelas, campos, ndices, seqncias e triggers. Tambm um aplicativo totalmente em Progress 4GL Arquivo: _dict.p
Apresentando o Progress
Application Compiler
29
Como o prprio nome diz um aplicativo para compilao de procedures (programas). Ele possibilita compilar um diretrio ou uma rvore de diretrios, especificar arquivos iniciados por uma subpalavra ou apenas extenso, confirmar sobreposio de procedures j existentes, etc. Tambm desenvolvido em Progress 4GL Arquivo: _comp.p
30
Dominando o Progress
User Configuration
Utilitrio desenvolvido em Progress 4GL para criao e edio de scripts de conexo e/ou de inicializao do Progress. Arquivo: _script.p
Apresentando o Progress
Report Builder
31
Utilitrio do Progress para criao de relatrio totalmente grficos em MS-Windows. Com ele voc pode usar tabelas, inserir grficos, usar e criar funes definidas pelo usurio.
Este
32
Dominando o Progress
O User Inteface Builder um utilitrio desenvolvido em Progress 4GL para edio rpida e grfica de programas baseados no Windows. Ele foi introduzido a partir da verso 7 para Windows trazendo consigo diversas inovaes e conceitos quanto orientao a objetos, encapsulamento, polimorfismo e hereditriedade, como um incio para entrada da linguagem Progress na Quarta Gerao, da Progress 4GL. Arquivo: _uib.p
Captulo 2
Configurao do Software
Configurao do Progress no Windows
O Progress por abranger diversos sistemas operacionais tem algumas diferenas quanto configurao do ambiente para funcionar adequadamente. Por exemplo, em UNIX, MS-DOS e Novell as parametrizaes so estabelecidas por meio de linha de comando e definies de variveis de ambiente, no Windows 95 ou NT os parmetros so registrados por meio de arquivos INIs, ou ainda na Registry como o novo padro introduzido pela verso 8.2 e superiores. A instalao do Progress 8.x para Windows grava as informaes relativas s propriedades do aplicativo na Registry do Windows, e tambm em arquivo INI chamado progress.ini como na verso 7.x, localizado no diretrio DLC/bin. As entradas na Registry estaro nos diretrios HKEY_CURRENT_USER ou HKEY_LOCAL_MACHINE nesta seqncia, na pasta Software, em uma sub-pasta chamada PSC (Progress Software Corporation), conforme mostra a figura abaixo:
34
Dominando o Progress
Configurao na Registry
As configuraes contidas na Registry tambm esto no arquivo INI e podem ser usada para definir as propriedades para o funcionamento e aparncia das aplicaes. Voc tambm pode registrar as configuraes contidas em um arquivo INI para a Registry do Windows de uma mquina cliente, atravs do um aplicativo em DLC\bin\ini2reg.exe, veja a figura a seguir:
Configurao do
Inclui um arquivo INI na Registry do Windows
35
O arquivo progress.ini
Os parmetros V6Display, V6Colon, V6Frame, V6FKeys, V6Keys, DefaultFont FixedSys, DefaultFixedFont FixedSys definem uma aparncia para a aplicao igual a utilizada na verso Progress 6, com tela na dimenso de 80 linhas por 21 colunas, rea de mensagens e rea de status e fonte proporcional, de
Gesto Empresarial, o mais popular no Brasil. Desenvolvido totalmente em Progress pela Datasul, uma empresa brasileira sediada em Joinvile Santa Catarina.
Configurao do
color6=128,128,0 color7=128,128,128 color8=192,192,192 color9=0,0,255 color10=0,255,0 color11=0,255,255 color12=255,0,0 color13=255,0,255 color14=255,255,0 color15=255,255,255 color16=255,255,0 NORMAL=0,15 INPUT=15,0 MESSAGES=15,1 [Default Window] ;x= ;y= ;rows= ;columns= [fonts]
37
;*********************************************************************** ; THE DEFINITION OF FONT 0 THROUGH 7 IS PRIVATE TO THE PROGRESS ADE. ; MODIFYING FONTS 0 THROUGH 7 MAY PREVENT THE PROGRESS ADE FROM RUNNING. ; The following fonts definitions correspond to the ADE standards. ; ? - DefaultFont from Startup Section ; 0 - DefaultFixedFont from Startup Section (1 char per PPU) ; 1 - Proportional System Font ; 2 - Editor Font for 4GL program entry ; 3 - TTY Simulator (should be fixed) ; 4 - Dynamically-sized widgets, eg status-line, selection-list ; 5 - Static widgets, eg. combo-boxes ; 6 - Dynamic, bold (TranMan2) ; 7 - Reserved
font0=Courier New, size=8 font1=MS Sans Serif, size=8 font2=Courier New, size=8 font3=Courier New, size=8 font4=MS Sans Serif, size=8 font5=MS Sans Serif, size=10 font6=MS Sans Serif, size=8, bold font7=MS Sans Serif, size=8 font8=Courier New, size=12 font9=MS Sans Serif, size=8 font10=Garamond, size=20 font11=MS Sans Serif, size=8
38
Dominando o Progress
;DLC= ;PROCFG= ;PROMSGS= ;PROPATH= [WinChar Colors] color0=WHITE/BLUE color1=BLACK/GRAY color2=BLACK/GRAY color3=BLUE/WHITE color4=BLINK-RED/WHITE ;NORMAL=WHITE/BLUE ;INPUT=BLACK/GRAY ;MESSAGES=BLACK/GRAY [WinChar Default Window] ;rows=25 ;rows=50 [WinChar Keys] ;GO=F1,CTRL-X [Debug-Init]
;****************************************************************************** ; THE FOLLOWING INFORMATION IS PRIVATE TO THE DEBUGGER. IT SHOULD NEVER BE ; MODIFIED EXCEPT BY THE DEBUGGER PROGRAM.
Location=1,146,15,460,464 Pane0=1,46," " Pane1=1,14,"" Pane2=1,16,"Commands in Queue: 0" Pane3=1,25,"" DebuggerName=PRODEBUG.EXE [Debug-Macros] Macro0=r, run &file Macro1=c, continue Macro2=s, step Macro3=n, next Macro4=b, break &file &line Macro5=cb, cancel break &file &line Macro6=sb, show breaks Macro7=ss, show stack
Configurao do
Macro8=u, up Macro9=d, down Macro10=di, display &text Macro11=sm, show macros [Debug-Buttons] Button0=Run,run &file Button1=Cont,continue Button2=Step,step Button3=Next,next Button4=Break,break &file &line Button5=Stack,show stack Button6=Up,up Button7=Down,down Button8=Disp,display &text Button9=Exit,exit [ProADE] ;DividerFgColor=15 ;DividerBgColor=1 ;OKBoxFgColor=1 ;OKBoxBgColor=8 ;FillinFgColor=0 ;FillinBgColor=8 ;Editor4GLFgColor=DEFAULT ;Editor4GLBgColor=DEFAULT ;Editor4GLFgSmallColor=0 ;Editor4GLBgSmallColor=8 ;FixedFont=0 ;StandardFont=1 ;Editor4GLFont=2 ;EditorTabStop=4 [Proedit] SaveSettings=yes BufList= ExitWarning=yes SaveBufList=no MinimizeBeforeRun=no RestoreAfterRun=yes PauseAfterRun=yes AutoCleanup=yes EditorFont=8 New=SHIFT-F3 Open=F3 Close=F8
39
40
Dominando o Progress
NewProcedureWindow=CTRL-F3 Save=F6 SaveAs=SHIFT-F6 Undo=CTRL-Z Cut=CTRL-X Copy=CTRL-C Paste=CTRL-V Find=CTRL-F FindNext=F9 FindPrevious=SHIFT-F9 Replace=CTRL-R GotoLine=CTRL-G List=CTRL-L NextBuffer=F7 PreviousBuffer=SHIFT-F7 Run=F1 CheckSyntax=SHIFT-F2 Debug=SHIFT-F4 CompilerMessages=CTRL-E [RBStartup] ;RBSTARTUP= [ReportBuilderSaveList] ActionBar=1 FormatBar=1 FieldNames=0 SortFieldNames=0 ShowHiddenTables=0 PasteArgs=1 ShHzRul=1 ShVtRul=1 ShGrd=1 Maximize=1 NotFirstTime=1 Library= Report=Teste [ReportBuilderPreferences] InstantRep=2 PromptFields=1 ScrBarHz=1 ScrBarVt=1 PromptConnection=0 [ReportBuilderDefaults]
Configurao do
DefMeas=1 PgLM=1 BotM=50 LeftM=50 RightM=50 TopM=50 RulPit=10 VRulPit=10 Pts=120 SnapTo=1 Color=0 WidthRep=1 WidthColor=8 FaceName=Arial LogF=No LogT=Yes LibDir= DatabaseDir= ImgDir= UDFDirectory= MemExt=TXT ImgExt=BMP ImageQuality=0 [uib] [Procomp] SaveSettings=yes FileSpec01=.,*.p *.w DefFileSpec=*.p *.w LogFile=compile.log ShowStatus=yes RemoveOldRs=yes IfNoR=no SubDirs=yes SaveNewRs=yes XrefAppend=no ListAppend=no PageLength=60 PageWidth=80 V6Frame=yes StreamIO=no
41
42
Dominando o Progress
Variveis de ambiente
Varivel ACCESS Definio
ACCESS=Administrator
DLC
do
aplicativo
Configurao do
Exemplo
43
BRIEF - apenas erros e alertas; NORMAL - erros, alertas e os mesmos gravados no arquivo .lg; FULL - todas mensagens
Exemplo
EVTLEVEL=BRIEF
PATH
PROAPSV
44
PROCFG
PROCFG=C:\DLC\PROGRESS.CFG
PROCONV
PROCONV=C:\DLC\CONVMAP.CP
PROEXE
Exemplo
SET PROEXE=c:\dlc\prowin32.exe
PROLOAD
SET PROLOAD=%DLC%\probuild
PROMSGS
Configurao do
PROPATH
45
PROSRV
PROSVR=%DLC%\bin\_mprosrv.exe (DOS/Windows)
PROSTARTUP Define o arquivo de parmetros (.pf) a
ser usado como padro pela sesso Progress, caso omitido o padro assumido ser o arquivo startup.pf dentro do diretrio do Progress.
Exemplo
terminal para sesso em ambiente caracter. Caso omitido ser assumido como padro o arquivo proterm dentro do diretrio do Progress
46
Dominando o Progress
Exemplo
TERM
PROMON
de
I Lembre-se
que em UNIX as variveis so casesensitive, isto , h distino entre maisculas e minscula, como tambm para o valores das variveis!
Configurao do
47
Arquivos
Arquivos comuns
progress.cfg PROMSGS .pf .cp .df .d .fd .csh .rpt .v .pl Configurao do Progress Mensagens do Progress Parmetros sesso servidor/cliente Definio de Cdigos de Pgina Definio de estrutura de bancos/tabelas Dados de tabelas Descries do Bulk loader Contedo ou cache do Metaschema Licena de uso de relatrios Validao Biblioteca de procedures
Arquivos temporrios
.lbi .dbi .ped Before-Image local de transaes Definies de tabelas temporrias Procedures temporrias
48
Dominando o Progress seja no Procedure Editor ou UIB as alteraes so salvas em um arquivo temporrio com extenso .PED no diretrio temporrio definido na sesso a cada execuo da mesma. Ento se houver algum problema e a sesso seja incerrada sem que antes voc salve suas alteraes, procure no diretrio temporrio os arquivos .PED, um deles contm a procedure at o momento da ltima execuo. Organizao de registros. Geralmente criado quando ordenado campos que no sejam indexados.
.srt
.trp
Banco de Dados
.db .dn .bi .bn .ai .na Banco de Dados Arquivo extendido de banco multivolumes Before-Image Arquivo extendido do Before-Image multivolumes AfterImage Arquivo extendido do After-Image
Configurao do multivolumes .lg .lk .tl .ds Log de eventos do Banco Lock de conexo do Banco Log de transaes Descrio de estruturas
49
Sesso cliente
.p .w .i Procedure Procedure UIB (Windows) Arquivo include
Protocolos disponveis
NETBIOS SNA SPX WIPC (Servidor/Cliente Windows) CTOS TCP/IP DECnet TLI DDE
Captulo 3
Criando & Definindo os Dados 51 Voc tem a opo criar um banco de dados vazio, uma cpia do sports (um banco de exemplo do Progress) ou a partir de um outra j existente.
2 Atravs de utilitrio de banco de dados ProDB, em
linha de comando.
Exemplo:
C:\DLC\bin\prodb.exe cadastro
Ento ser solicitado a partir de qual banco de dados ser criado, com as mesma opes do Data Administration, conforme abaixo:
C:\ARQUIVOS>C:\DLC\BIN\PRODB cadastro demo to get the system demonstration database, or sports to get the sports demonstration database, or isports to get the international sports database, or empty to get the system empty database, or anyname to get a copy of that database. :
Lembre-se que a varivel de ambiente DLC deve estar configurada adequadamente para pode criar o novo banco de dados.
3 Por cdigo fonte no Procedure Editor, conforme o
cdigo abaixo:
create database "c:\arquivos\cadastro" replace no-error.
52
Dominando o Progress
Os
mtodos para criao de um banco de dados mostrados se aplicam apenas para Bancos de Volume nico ou Simples, existem tcnicas em Progress mais sofisticadas para criao de bancos de dados em Mltiplos Volumes, conforme ser mostrado no captulo Performance.
53
Sempre que informado uma localizao de aplicativo ProWin32 refere-se apenas ao Progress em ambiente
grfico(MS-Windows, OSF/Motif e outros).
para o Progress esta ser apresentada com barra invertida, como padro do UNIX e tambm padro Progress, ainda que em Windows.
No Procedure Editor escolha o menu Tools opo Data Dictionary.A figura abaixo descreve cada detalhe do utilitrio.
54
Dominando o Progress
Habilita a manipulaes dos bancos de dados conectados, conforme a listagem Databases; Habilita a manipulao de tabelas, conforme o banco de dados selecionado na listagem Databases; Habilita a manipulao de SEQUENCES para o banco de dados selecionado. Ser explicado o Sequence neste captulo; Habilita a edio de tabelas conforme o banco de dados selecionado; Habilita a edio de ndices conforme a tabela selecionada na listagem Tables; Disponibiliza as opes conforme os itens acima escolhidos.
55
56
Dominando o Progress
Define o nome da tabela a ser criada. Este nome deve ser iniciado por uma letra de A a Z, com no mximo 32 caracteres e no conter nenhum caracter invlido, tipo asterisco, vrgula, parnteses, entre outros
I No
Dump File
Progress voc pode inserir "-" (hfen) para nomear tabelas, campos, variveis e outros.
Informa o nome do arquivo de DUMP para exportao das definies e dos dados da tabela. Este nome poder ter at 8 caracteres alfanumricos e tambm no deve apresentar sinais invlidos no reconhecidos para o nome de arquivo, de acordo com os princpios dos Sistemas Operacionais em geral, exemplo (*,?,%,&,etc).
Independente
da plataforma o arquivo para DUMP ser sempre tamanho 8 e por padro o Progress ao exportar o arquivo definir a extenso D(arquivo de dados = dump.d) e DF(arquivo de definies = dump.df). Isso para manter
Criando & Definindo os Dados 57 compatibilidade do banco de dados caso seja mudado para outro sistema operacional.
Hidden
Oculta a tabela da listagem. Esta opo no disponvel no momento de criao, mas pode ser selecionada aps a confirmao de gravao da tabela no banco. Voc pode congelar as definies da tabela aps a concluso e gravao no banco de dados. Define um nome de at 30 caracteres quaisquer para exibio de informaes de avisos ou erros para a tabela em tempo de execuo do aplicativo, como por exemplo a informao de travamento de uma tabela por outro usurio, exemplo: Tabela customer tem o label Customer, o qual ser mostrado no aviso, conforme a figura abaixo:
Frozen
Label
Description
ou
58
Replication
Dominando o Progress Informa uma outra tabela destino que ser espelho desta tabela.
59
Criando os campos
A figura abaixo mostra as propriedades para a criao de um campo.
Descrio
Nome do campo com at 32 caracteres alfanumricos, sem acentos ou sinais invlidos. Define o tipo de dado do campo em: INTEGER, DECIMAL, CHARACTER, LOGICAL, DATE, RAW ou RECID.
Data Type
60
Dominando o Progress
Dado no poder ser alterado, como tambm no poder ser removido caso exista algum ndice da tabela a que partena.
Format
Define um formato ou mscara de acordo com o tipo de dado para entrada e visualizao do campo.
Exemplos:
Label
Define um texto informativo a ser exibido com o campo, tanto para apresentao em coluna, lateral e tambm em informaes como regras de ndices e outros. Define um texto informativo apresentao quando em coluna. para
Column Label
Initial Value
Atribui um valor inicial para o campo aps o registro ser criado. Define ama ordem do campo dentro da tabela. Por padro esta ordem incrementada de 10 em 10 e no pode repetir, mas pode ser alterada e conter qualquer intervalo de nmero inteiro.
Order
Decimals
Criando & Definindo os Dados 61 limite de 10 e mnimo de 0 para dados do tipo DECIMAL
Description
Texto descritivo ou informativo para o campo. Informa um texto de Ajuda ou Informao sobre o campo para ser exibido na rea de status da aplicao quando este estiver sendo editado. Define o preenchimento de um campo como obrigatrio. Informa que um campo tipo CHARACTER far distino entre letras maisculas e minsculas se utilizado em um ndice ou para uma comparao. Define o campo como um array de n elementos, nomendo-os como: CAMPO[n elemento]
Help Text
Mandatory
Case-Sensitive
Extent
I Esta
Validando os Campos
Voc pode validar os dados e eventos para um campo atravs da propriedade Validation ou por meio de Triggers.
62
Dominando o Progress
A propriedade Validation
O meio mais fcil e rpido para validao a propriedade Validation do campo. Voc especifica as clusulas de validao para valores permitidos e uma mensagem de retorno a ser informada para o usurio caso as clusulas no sejam satisfeitas, conforme a prxima figura demonstra. As verificaes so executadas durante a atualizao do campo com o "feedback" de mensagens e help deste para o usurio, mostrados na barra de status na janela da aplicao.
Voc pode, tambm, incluir uma Include na validao do campo. Exemplo: {inc/empresa.inc}, esta Include deve retornar um erro para a validao do campo, RETURN ERROR, caso as condies no forem satisfeitas!
63
Validao do Campo A validao permite apenas a gravao se o usurio for Adm ou Super, caso contrrio informa ao usurio "Usuario invalido! Apenas permitido para Adm ou Super".
Triggers
O que um Trigger?
Um Trigger, como na prpria traduo da palavra, um "gatilho" que disparado para eventos da tabela ou campo como CREATE, UPDATE e DELETE, e a partir da verso 8 do Progress estes mesmos eventos para Replicao de dados. O Trigger um mecanismo mais sofisticado e completo para validao de CAMPOS ou TABELAS. Ele uma procedure em Progress, um arquivo a parte do banco de dados que disparado para os eventos de CRIAO, DELECO de uma tabela ou ATUALIZAO de um campo.
A prxima tela exemplifica a sintaxe de um Trigger. Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
64
Dominando o Progress
Propriedades do Trigger
Evento/Propriedade Event
Descrio
Define qual o evento executara o trigger: ASSIGN, DELETE ou UPDATE Informa o arquivo do Trigger
Procedure
Use sempre a localizao definida pelo PROPATH com barra do tipo UNIX,
65
Verifica se o Trigger foi alterado depois de definido no banco de dados. Informe se o Trigger pode ser editado ou modificado mesmo durante utilizao.
Overridable
dados Progress : Validao do Campo (Validation), Trigger do Campo e Trigger da Tabela do banco de dados, respectivamente nesta ordem.
66
Dominando o Progress
A criao, bem como a manuteno de ndices em Progress totalmente simplificada. Ao contrrio de outros bancos de dados como MS-SQL Server, por exemplo, voc no precisa especificar diversos parmetros e atributos como taxa de crescimento, organizao fsica, e outros apenas atributos bsicos.
Descrio
Nome do ndice para identificao com at 32 caracteres alfanumricos. Deve iniciar por uma letra, no deve conter letras invlidas como , , , como tambm caracteres reservados.
67
Texto descritivo ou informativo para o ndice Define que o ndice ser o padro utilizado para procuras ou ordenao da tabela. Pode haver apenas um ndice primrio para a tabela, e esse ndice tambm no pode ser excludo. Para excluir um ndice primrio voc deve definir qual outro ndice ser primrio antes de efetuar a excluso.
Active
Define o ndice como Ativo ou Inativo. Caso o ndice esteja inativo ele no ser atualizado automaticamente, como tambm no poder ser utilizado para pesquisa ou ordenao.
Unique
M Caso
voc defina um campo tipo CHARACTER como case-sensitive e crie um ndice nico para este campo, ele aceitar valores duplicados, ainda que no idnticos, exemplo: Maria/maria, Joao/joao,etc que o ndice nico sempre a Chave Primria (Primary Key) para o relacionamento entre
Lembre-se
68
Word Index
Define um ndice para campo do tipo CHARACTER organizado por palavras contidas em cada registro.
Este
ndice consome bastante espaos em disco, como tambm onera bastante a performance do banco, sendo aconselhado apenas se realmente no houver uma outra soluo.
Abbreviated
Cria um ndice abreviado para campo tipo CHARACTER utilizando apenas algumas palavras ou caracteres iniciais do contedo do campo. Define a ordem para um campo dentro do ndice. Como padro inicial todos os campos so definidos como ascendentes.
Ascending ou Desceding
69
Voc pode definir por exemplo que o campo lgico sexo seja uma TOGGLE-BOX para exibio e atualizao, sem necessidade de nenhuma linha de cdigo para tal. Depois de definido o tipo de visualizao para o campo faa o teste com o cdigo abaixo:
Exemplo: create cliente. update cliente.sexo.
Dominando o Progress Tipos disponveis: COMBO-BOX, EDITOR, SELECTIONLIST, FILL-IN, TEXT e RADIO-SET 70
Sequences
O que so Sequences?
Um Sequence nada mais que um contador que pode ser atribudo a um campo de uma tabela, igual a campo tipo IDENTY SQL ANSI.
TRIGGER PROCEDURE FOR Create OF Customer. /* Automaticamente define um novo cdigo para o cliente*/ ASSIGN Customer.Cust-Num = NEXT-VALUE(Next-Cust-Num).
A modelagem dos dados uma das principais etapas para o sucesso de qualquer aplicativo. Ento faa seu modelo da melhor maneira possvel afim de evitar problemas ou retrabalho posterior!
71
Metaschema
O que o Metaschema?
Metaschema ou Metadados so tabelas de tabelas, isto , so tabelas intrnsecas do prprio banco de dados que contm as definies de tabelas, ndices, campos, views, etc, como tambm para manipulao de dados do prprio funcionamento do banco de dados.
Estas tabelas esto ocultas, mas podem ser consultadas facilmente atravs do Data Administration, opo Reports, Detailed Tables e marcando a opo Show Hidden. O funcionamento e relacionamento destas tabelas so facilmente manipulados para qualquer tipo de consulta ou alterao de algumas informaes.
72
Dominando o Progress
Tabelas do Metaschema
Informaes do Banco de Dados Informaes sobre campos das tabelas Informaes sobre triggers dos campos Informaes sobre as tabelas do banco Informaes sobre os triggers das tabelas Informaes sobre os ndices das tabelas
_Index-Field Informaes sobre os campos dos ndices _Sequence _User _View _View-Col _View-Ref Fluxograma
Informaes sobre os sequences Informaes sobre os usurios do banco Informaes sobre Views Informaes sobre os campos das Views Informaes sobre as tabelas das Views
73
Captulo 4
Aprendendo a linguagem
Desenvolvendo o cdigo
O primeiro programa
Como tradio entre os programadores o nosso primeiro programa ser o "HELLO WORLD!", escreva o texto de cdigo mostrado abaixo, escolha o menu Compile e opo Run.
display "Hello World!".
Para salvar o programa em linguagem Progress chamado procedure escolha o menu File opo Save As, coloque em um diretrio de trabalho e defina um nome com a extenso P(procedure) como padro do Progress, isso salvar seu cdigo.
Dominando o Progress Voc pode fazer um programa de insero apenas com uma linha de cdigo, exemplo: insert customer (pronto esta criado um programa de insero). 74
Especifique o banco de dados e clique em OK. Caso no seja especificado o nome lgico do banco (Logical Name) ser assumido o mesmo nome do banco fsico. Pode-se tambm conectar um banco por cdigo no Procedure Editor, exemplo: Sintaxe: CONNECT db [Localizao do banco] 1 .... Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
75
criando um programa para incluso O cdigo abaixo exemplifica um programa bastante simples para incluso de dados em uma tabela.
Exemplo
O cdigo acima cria um loop habilitando a insero, INSERT, de dados na tabela, o complemento do comando WITH SIDE-LABELS define que o texto dos campos esto alinhados ao lado esquerdo da rea de atualizao dos mesmo, utilizando tambm o formato, informao ou ajuda no rodap da janela e validao j definidos.
Dominando o Progress Note que a aparncia da tela a devida configurao com aspecto do Progress verso 6, parmetros V6Frame, V6Colon, ... 76
77
Aprendendo a sintaxe
Definindo variveis
SINTAXE DEFINE [[NEW [GLOBAL]] SHARED] VARIABLE varivel {{AS Tipo}|{LIKE Campo}} {[NO-UNDO] [BGCOLOR n] [COLUMN-LABEL Texto] [DCOLOR n] [DECIMALS n] [EXTENT n] [FONT n] [FGCOLOR n] [FORMAT Texto] [INITIAL constante | [constante[,constante]...]}}] [LABEL Texto[, Texto]...] [MOUSE-POINTER expresso] [[NOT] CASE-SENSITIVE] [PFCOLOR n] [VIEW-AS Tipo]} [TRIGGERS] A definio de uma varivel no Progress vai alm da especificao do tipo de dado. Uma varivel para o Progress uma entidade como atributos e eventos, ou seja, um Objeto(Widget). Na varivel possvel configurar todos os atributos de um Objeto como por exemplo LABEL, COR, FORMATO, VISUALIZAO, EVENTOS, etc.
78 PARMETROS
Dominando o Progress
NEW SHARED VARIABLE Varivel Define uma varivel a ser compartilhada entre procedures, diretamente ou indiretamente a partir da declarao atual. A procedure chamada tem que nomear a mesma varivel em informando que est j est previamente instanciada. NEW GLOBAL VARIABLE Varivel Define uma varivel a ser compartilhada entre todas as procedures previamente executadas SHARED VARIABLE Varivel Define um varivel que foi previamente criada por um procedure anterior com as clusulas DEFINE NEW SHARED VARIABLE ou DEFINE NEW GLOBAL SHARED VARIABLE [Declaraes]. VARIABLE Varivel Define uma varivel cujo valor s est disponvel dentro da procedure atual. AS Tipo Indica o Tipo de Varivel a ser definida. Os tipos so CHARACTER, DATE, DECIMAL, HANDLE, INTEGER, LOGICAL, MEMPTR, RAW, RECID, ROWID e WIDGETHANDLE.
79
Indica que a varivel a ser definida herdar todas as caractersticas do campo original escolhido. Os atributos/valores herdados so FORMAT, LABEL, COLUMNLABEL, INITIAL, DECIMALS, EXTENT e VIEW-AS Opo. NO-UNDO Quando um valor de uma varivel mudada durante uma transao e est desfeita, o Progress restaura o seu valor anterior. Caso voc a varivel no seja definida com esta atribuio o valor no ser reiniciado caso seja desfeita a transao. Para melhor performance use esta opo apenas quando necessrio, porque no NO-UNDO adiciona um novo elemento a ser manipulado na transao o que onera mais a aplicao. BGCOLOR n Especifica a cor de fundo da varivel para um ambiente grfico. Esta opo ignorada em ambiente caracter. [NOT] CASE-SENSITIVE Indica que a varivel faz distino entre Maisculas e Minsculas em uma comparao que a utilize. Por padro a varivel no distingue a caixa da letra. Para trocar o atributo de sensibilidade caixa do texto use NOT CASE-SENSITIVE.
80
Dominando o Progress
COLUMN-LABEL Texto Texto do identificao a ser exibido com a varivel. Caso voc queira usar mais de uma linha na exibio deste use uma exclamao (!) antes do texto a ser exibido na linha inferior.
define variable nome as character column-label "Nome do!Cliente". update nome.
DCOLOR n Especifica a cor dos caracteres da varivel para um ambiente grfico. Esta opo ignorada em ambiente caracter. DECIMALS n Especifica o nmero de casas decimais de 0 a 10 para uma varivel do tipo decimal. Como padro o Progress atribui automaticamente 10 casas decimais se esta declarao for omitida. EXTENT n Declara uma varivel com um Array e define o seu tamanho no limite de 28000 elementos. Para remover o atributo de Array de uma varivel defina seu tamanho como 0. FGCOLOR n Especifica a cor de fundo da varivel para um ambiente grfico. Esta opo ignorada em ambiente caracter.
Criando & Definindo os Dados FONT n Especifica a fonte de apresentao da varivel. FORMAT Expresso
81
Especifica o formato para a aprensentao e uso da varivel. INITIAL Expresso Especifica o valor inicial de uma varivel. No pode ser atribudo o valor de uma funo ou constante Progress. LABEL Texto Define o texto de exibio da varivel. Use & para sublinhar a letra usada na tecla de acelerao utilizada pelo MS-Windows(ALT Letra). Se necessrio utilizar um & literalmente no texto de exibio use && para inclui-lo. MOUSE-POINTER Expresso Especifica o ponteiro do mouse padro usado na atualizao ou exibio da varivel. PFCOLOR n Especifica a cor da varivel na atualizao por declarao PROMPT-FOR. Esta opo ignorada em interfaces grficas. VIEW-AS Expresso Define o tipo de visualizao ou objeto da varivel.
82 TRIGGER
Dominando o Progress
/* ex0031.p */ define variable dia as integer format "9" initial 1 triggers: on entry message 'Escolha as datas'. end. define variable ano as integer format "9999" initial 2000. define variable ndias as character format "x(12)" extent 7 initial ['Domingo','Segunda','Terca', 'Quarta','Quinta','Sexta', 'Sabado']. define variable mes as character format "x(12)" view-as combo-box list-items 'Janeiro', 'Fevereiro', 'Marco', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro' mouse-pointer 'glove' no-undo initial 'Novembro'. update dia ano mes.
83
View-As
Define o tipo do objeto da varivel mostrada na tela. SINTAXE VIEW-AS {Combo-Box|Editor| {FILL-IN [NATIVE] [Tamanho]}|Radio-Set| Selection-List|Slider| {TEXT [Tamanho]}| {TOGGLE-BOX [Tamanho]}} [Tooltip Texto] PARMETROS COMBO-BOX Especifica que um campo ou varivel ser apresentada como um Combo-Box. Pode conter valores tipo Caracter, Inteiro, Decimal, Lgico e Data. EDITOR Visualizao tipo Editor de Texto para um campo ou varivel. Suporta funes de Copia, Colar, Deletar, Quebra de Palavras, Auto-Identao, Barras de Rolagem, Sub-Menu, etc. FILL Caixa de Texto para valores de qualquer tipo. o tipo de visualizao/objeto padro para atualizao de um campo ou varivel no Progress.
84 RADIO-SET
Dominando o Progress
Mostrado com uma srie de opes para escolha de apenas uma. Pode receber valor tipo Caracter, Inteiro, Decimal, Lgico e Data. SELECTION-LIST Visualizao como uma lista para seleo. Apenas aceita valores caracter e apta a mltiplas selees. TEXT Indica que um campo ou varivel ser apenas um texto exibido na tela, sem nenhuma manipulao ou atualizao do contedo. TOGGLE-BOX Exibe com uma Caixa de Opo com valor lgico YES/NO. Aceita apenas valor lgico.
Exemplo
/* ex0032.p */ define variable texto as character view-as editor inner-lines 20 inner-chars 60 scrollbar-vertical scrollbar-horizontal column-label 'Editor de Texto' no-undo mouse-pointer "glove". define variable meses as character format "x(12)" view-as combo-box list-items 'Janeiro','Fevereiro','Marco', 'Abril','Maio','Junho','Julho', 'Agosto','Setembro','Outubro', 'Novembro','Dezembro'
85
define variable salvar as logical label 'Salva Informacao' view-as toggle-box initial yes format "Sim/Nao". define variable dia as character view-as selection-list inner-lines 7 inner-chars 12 list-items 'Domingo','Segunda','Terca','Quarta', 'Quinta','Sexta','Sabado' initial 'Terca'. define variable ano as integer view-as radio-set radio-buttons "1998", 1998, "1999", 1999. form texto meses dia ano salvar with frame f-editor title "Edicao de Texto" row 2 centered overlay view-as dialog-box side-labels.
assign input input input input input frame frame frame frame frame f-editor f-editor f-editor f-editor f-editor texto:tooltip meses:tooltip dia:tooltip ano:tooltip salvar:tooltip = = = = = 'Edite seu texto' 'Escolha um mes' 'Escolha um dia' 'Escolha um ano' 'Salva informacao'.
update texto meses dia ano salvar with frame f-editor. message "Voce escolheu..." skip(1) "Dia:" dia:screen-value skip "Mes:" meses:screen-value skip "Ano:" ano skip "Salvar:" salvar skip "Observacao:" texto view-as alert-box.
86
Dominando o Progress
Definindo Frames
SINTAXE DEFINE [[NEW] SHARED] FRAME Nome do Frame [Item1, Item2, Item n, ...] [{HEADER|BACKGROUND} Item1, Item2, Item n, ...] WITH [ACCUM [Tamanho Mximo] [AT Posio] [ATTR-SPACE|NO-ATTR-SPACE] [CANCEL-BUTTON Boto] [CENTERED] [COLOR] [COLUMN n] [n COLUMNS] [DEFAULT-BUTTON Boto] [[n] DOWN] [EXPORT] [FONT n] [FRAME Nome do Frame] [KEEP-TAB-ORDER] [NOBOX] [NO-HIDE] [NO-LABELS] [USE-DICT-EXPS] [NO-VALIDATE] [NO-HELP] [NO-UNDERLINE] [OVERLAY] [PAGE-BOTTOM|PAGE-TOP] [RETAIN n] [ROW n] [SCREEN-IO|STREAM-IO] [SCROLL n] [SCROLLABLE] [SIDE-LABELS] [SIZE n BY n] [STREAM Stream] [THREE-D] [TITLE Texto] [TOPONLY] [USE-TEXT] [V6FRAME [USE-REVVIDEO|USEUNDERLINE]] [VIEW-AS DIALOG-BOX] [WIDTH n] [IN WINDOW Janela] Um Frame na linguagem Progress um formulrio ou simplismente Form. Ele um objeto tipo container, onde outros objetos esto acoplados ou sobrepostos, igual por exemplo uma janela do MS-Windows com diversas caixas de textos, botes, labels, e outros. A janela acima equivale a um frame que possui diversos objetos em seu interior, inclusive outros frames. Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
87
PARMETROS NEW SHARED FRAME Nome do Frame Declara que o frame sera compartilhados diretamente ou indiretamente pela procedure atual e outras executadas posteriormente. Para as novas procedures usarem a definio deve-se ento declarar da mesma forma com DEFINE SHARED FRAME Nome do Frame. SHARED FRAME Nome do Frame Obtem a definio de um frame previamente criado por uma procedure anterior. Quando utililizado DEFINE SHARED FRAME voc no deve acrescentar ou alterar qualquer caracterstica previamente estipulada, caso voc queira que o frame tenha as mesmas condies prdefinidas, porque s declaraes atribudas se tornaro parte do frame ao retornar procedure anterior ou ao executar novas procedures. ITEM
Dominando o Progress o objeto a ser adicionado ao frame. Este Objeto(Widget) pode ser um desses tipos: FILL-IN, COMBO-BOX, SELECTION-LIST, SLIDER, FRAME, RECTANGLE, TOGGLE-BOX, RADIO-SET, EDITOR, OBJETO-COM ou TEXT, com as seguintes atribuies: 88 ATRIBUTOS DOS ITENS AT ROW n COLUMN n [LEFT|COLON|RIGHT-ALIGED] Define a linha e coluna aonde estar posicionado o objeto dentro doframe com as opes de alinhamento Esquerda, pelo Texto informativo ou Direita. TO n Especifica que o posicionamento do objeto ser de uma posio n para trs. BGCOLOR n Cor de background do objeto em interface grfica. DCOLOR n Cor do objeto em interface grfica. FGCOLOR n Cor do primeiro plano do objeto em ambiente grfico.
Criando & Definindo os Dados FONT n Fonte do objeto em ambiente grfico. PFCOLOR
89
Cor de prompt-for para o objeto em ambiente grfico. VIEW-AS Tipo Tipo de objeto para exibio/atualizao na tela. SPACE(n) n espaos em branco. SKIP(n) n saltos de linha. LABEL Texto Texto informativo a ser exibido com o objeto. COLUMN-LABEL Texto Texto informativo a ser exibico com objeto mostrado em colunas. TABELA/REGISTRO Representa uma tabela ou um registro individual a ser acrescentado ao frame.
90
Dominando o Progress EXCEPT Campo n, Campo n No acrescenta n campos de uma tabela em um frame - os coloca como exceo. HEADER [PAGE-TOP| PAGE-BOTTOM| BACKGROUND] Define o frame como um cabealho,rodap ou objeto de fundo. PAGE-TOP/PAGE-BOTTOM Apresenta o frame na parte superior/inferior da sada de impresso Tela, Arquivo ou Impressora. BACKGROUND Especifica que o frame sera mostrado como objeto de fundo. Tipicamente usado para apresentao de imagens ou retangulos. ACCUM Acumula valores do frame usando as funes MAX, MIN, TOTAL e SUBTOTAL ATTR-SPACE/NO-ATTR-SPACE Reserva/No Reserva espao(s) para o elemento/texto dentro do frame CANCEL-BUTTON Nome do boto padro de cancelamento dentro do frame
Criando & Definindo os Dados CENTERED Centraliza o frame na tela COLOR Especificao da cor. WHITE, BLUE, GRAY, YELLOW, RED, GREEN, etc ESPECIFICAO FONTE E FUNDO AMBIENTE GRFICO(GUI INTERFACE) BGCOLOR background FGCOLOR foreground AMBIENTE CARACTER(TTY INTERFACE) DCOLOR background PFCOLOR foreground ROW n Linha inicial do frame COLUMN n Coluna inicial do frame n COLUMNS Nmero de colunas do frame DEFAULT-BUTTON
91
Boto padro do frame ao pressionar Return/Enter Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
92 [n] DOWN
Dominando o Progress Nmero de vezes que os mostrados/rolados no frame EXPORT Esta expresso s vlida para instruo SQL FONT n Nmero da fonte a ser utilizada no frame, apenas para interfaces grficas(Windows, Motif, OS/2, Linux, etc) KEEP-TAB-ORDER Mantm a ordem(zorder) dos elementos do frame ao uso do Enter ou TAB NO-BOX Desabilita a borda do frame. Esta opo no pode ser declarada com a especificao TITLE Texto Ttulo do frame NO-HIDE No apaga o frame para a prxima apresentao do mesmo NO-LABELS Desabilita os labels dos elementos contidos no frame elementos sero
93
Inibe o sublinhado sob os labels quando mostrados em coluna. NO-VALIDATE Dasabilita as validaes contidas nos elementos do frame. OVERLAY Mantm todos os frames de fundo, este parmetro deve ser usado sempre na declarao do frame RETAIN n Nmero de vezes para visualizao/rolagem dos elementos dentro do frame. SCREEN IO/STREAM IO Define a sada do frame TELA ou STREAM SCROLL n Nmero de vezes que os elementos do frame sero exibidos dentro do mesmo. SCROLLABLE Define auto scroll para o frame, ou seja, cria utomaticamente as barras de rolagem no frame SIDE-LABELS Mostra os labels dos elementos ao lado dos mesmos
94 THREE-D
Dominando o Progress
form c-nome at row 2 column 12 colon-aligned with frame f-janela3d title "Exemplo de Janela 3D" three-d side-labels view-as dialog-box size 50 by 5. update c-nome with frame f-janela3d.
TITLE Texto Ttulo do frame a ser exibido V6FRAME/USE-REVVIDEO/USE-UNDERLINE Tipo do frame. Aparncia utilizada na verso Progress 6, Cor reversa ou Habilita sublinhado VIEW-AS DIALOG-BOX Mostra o frame como uma janela tipo pop-up WIDTH n Largura do frame no mximo de 640 caracteres
95
Definindo Queries
O qu uma Query?
Query uma pesquisa e/ou seleo de dados nicos, relacionados ou agrupados a serem utilizados em um Browse de registros. DEFINE QUERY Define uma query que pode ser aberta com (OPEN QUERY) ou (GET) e associado a um BROWSE. SINTAXE DEFINE [[NEW] SHARED] QUERY Nome da Query FOR Buffer [Campos][, Buffer [Campos]]... [CACHE n] [SCROLLING] PARMETROS NEW SHARED QUERY Nome da Query Define a query como compartilhada entre procedures SHARED QUERY Nome da Query Redefine uma query j definida em uma procedure anterior QUERY Nome da Query Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
96
FOR Buffer [Campos] [, Buffer [Campos] ] ... Define o Buffer e/ou campo(s) da(s) tabela(s) a serem utilizadas pela query Voc pode, tambm, atribuir uma tabela e citar os campos com FIELDS(Campos ...) ou excees com EXCEPT(Campos ...)
Exemplo
Usando FIELDS()
define query q-customer for customer fields(cust-num name).
Usando EXCEPT()
define query q-customer for customer except(balance).
CACHE n Define o nmero de registros a serem colocados em buffer de memria quando os campos estiverem locados (NO-LOCK). Os registros em buffer propicionam melhor performance para a manipulao da query e diminui o acesso ao banco de dados, com menor trfego de I/O para a rede . Por padro o Progress coloca 50 registros em buffer para queries como apenas uma tabela, e queries com duas ou mais tabelas contidas definido 30 registros em buffer. Caso voc no queira colacar registros em buffer define CACHE 0. SCROLLING Especifica que a query ser apta a delocar entre registros em conjunto com a clusula REPOSITION. Caso Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Criando & Definindo os Dados 97 voc no especifique a query como SCROLLING apenas poder ser utilizado os camando FIRST, NETXT, PREV, LAST com GET para movimentar entre os registros da query.
BROWSES
Browse um quadro, como um planilha, onde voc navega por dados, geralmente registros de uma tabela de uma banco de dados. SINTAXE DEFINE [[NEW] SHARED] BROWSE Nome do Browse QUERY Nome da Query [SHARE-LOCK|EXCLUSIVE-LOCK|NO-LOCK] [NO-WAIT] DISPLAY {Colunas | {Registros [EXCEPT Campo ...]}} [OPES do CAMPO] WITH n [TOOLTIP Texto] WITH [OPES] PARMETROS NEW SHARED BROWSE Nome do Browse Define um browse compartilhado entre procedures SHARED BROWSE Nome do Browse Obtem uma definio j declarada em uma procedure anterior BROWSE Nome do Browse Define o nome do browse QUERY Nome da Query
Dominando o Progress 98 Define o nome da query a ser associado com o browse SHARE-LOCK|EXCLUSIVE-LOCK|NO-LOCK Especifica o estatus dos registros da query manipulados pelo browse NO-WAIT Informa que um registro locado no informar, e no aguardar liberao para atualizao DISPLAY {Colunas|{Registros [EXCEPT Campo...]}} Informa os registros da query a serem exibidos pelo browse. OPES DE DISPLAY SINTAXE Nome do Campo, Varivel ou Expresso [FORMAT Formato] [{LABEL Texto}|NO-LABELS] [COLUMN-LABEL Texto] [COLUMN-BGCOLOR Cor] [COLUMN-DCOLOR Cor] [COLUMN-FGCOLOR Cor] [COLUMN-FONT Fonte] [COLUMN-PFCOLOR Cor] PARMETROS FORMAT Nome do Campo Determina o formato de visualizao do campo, varivel ou expresso no browse LABEL Texto | COLUMN-LABEL Texto Determina o label da coluna no browse NO-LABELS Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Criando & Definindo os Dados Informa que o campo no ter label no browse COLUMN-BGCOLOR Cor
99
Determina a cor de background da coluna no browse COLUMN-DCOLOR Cor Determina a cor de background da coluna no browse em ambiente caracter (tty) COLUMN-FGCOLOR Cor Determina a cor de foreground da coluna no browse COLUMN-FONT Fonte Determina a fonte de exibio da coluna no browse COLUMN-PFCOLOR Cor Determina a cor de foreground da coluna no browse em ambiente caracter (tty)
Algumas
convenes do Progress so baseados no UNIX, devido esta ser a primeira plataforma da linguagem. TTY significa ambiente caracter e/ou ANSI, e GUI grfico.
Exemplo: if session:display-type = gui ou tty then... Como tambm outras definies como a barra de
diretrios utilizada pelo UNIX e no Progress tambm do mesmo modo / (barra simples).
100
Dominando o Progress
J
SINTAXE
HABILITANDO A COLUNA PARA ATUALIZAO ENABLE Campo [HELP Texto] [VALIDATE(Condio, Texto)] PARMETROS PARMETROS ENABLE Campo Habilita a coluna para atualizao HELP Texto Atribui a mensagem de ajuda a ser exibida na barra de status quando da atualizao do campo. VALIDATE(Condio, Texto) Determina a validao do informativo desta validao WIDTH n Especifica a largura da coluna do browse TOOLTIP Texto (MS-Windows) Cria um texto de ajuda e/ou informativo quando o mouse apontado para o browse OPES DO BROWSE SINTAXE Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener campo e o texto
Criando & Definindo os Dados 101 WITH {[n] DOWN [WIDTH n] | [SIZE x BY y]} [FGCOLOR Cor] [BGCOLOR Cor] [DCOLOR Cor] [PFCOLOR Cor] [LABEL-FONT Fonte] [LABEL-DCOLOR Cor] [LABEL-FGCOLOR Cor] [LABEL-BGCOLOR Cor] [MULTIPLE|SINGLE] [SEPARATORS|NO-SEPARATORS] [NO-ASSIGN] [NO-ROW-MARKERS] [NO-LABELS] [NO-BOX] [FONT Fonte] [TITLE Texto] PARMETROS n DOWN Determina o nmero de linhas a exibir no browse WIDTH n Deternina a largura do browse SIZE x by y Determina as dimenses do browse MULTIPLE|SINGLE
MULTIPLE Habilita seleo de mltiplos registros
no browse. Caso exista alguma coluna habilitada para atualizao (ENABLE Coluna) no ser possvel fazer seleo mltipla, mesmo se declarado MULTIPLE no browse.
SINGLE Desabilita seleo de mltiplos registros
no browse
102
Dominando o Progress Inclui/Exclui separadores entre os registros exibidos no browse NO-ROW-MARKERS No mostra marcadores laterais do browse quando algum campo estiver habilitado para atualizao NO-LABELS No mostra os labels das colunas do browse NO-BOX Remove o contorno do browse FONT Fonte Define a fonte do browse TITLE [BGCOLOR Cor] [DCOLOR Cor] [FGCOLOR Cor] [FONT Fonte] Texto Define o titulo de exibio browse
Exemplo
/* ex0036 */ define query q-customer for customer scrolling. define browse b-customer query q-customer display customer.cust-num customer.name column-bgcolumn 15 column-fgcolor 2 customer.address enable name address with 15 down separators title 'Customers'. open query q-customer for each customer share-lock. update b-customer.
103
Dominando o Progress 104 Otimiza outros processos de manuseio da query como REPOSITION TO ROWID MAX-ROWS n Colunas Limita a quantidade de registros retornados por uma query. Esta opo vlida somente quando a query tiver a declarao SCROLLING explcita.
Exemplo:
/* ex0038 */ define variable cidade like customer.city no-undo. define query q-customer for customer scrolling. define browse b-customer query q-customer display customer.cust-num customer.name customer.address customer.city with 10 down scrollable title "Pressione F5 para filtro". open query q-customer for each customer where customer.city begins 'Boston' no-lock. form b-customer with frame f-customer row 3 centered. on "get":u, "F5":u of b-customer in frame f-customer do: message "Informe a cidade" update cidade. open query q-customer for each customer where customer.city matches '*' + cidade + '*' no-lock. end. update b-customer with frame f-customer.
105
ASSIGN
Atualiza os dados para frames, variveis ou registros. SINTAXE ASSIGN {[FRAME Nome do Frame] | [BROWSE] Registro [= Expresso][WHEN Condio]}.[NO-ERROR] ASSIGN {Registro [EXCEPT Registro...]} [NO-ERROR] PARMETROS ASSIGN [FRAME Nome do Frame] [BROWSE] Registro Atualiza os valores em buffer para campos e variveis num frame ou browse WHEN Expresso Determina uma condio para a atualizao pelo comando ASSIGN NO-ERROR No causa e/ou mostra nenhum erro quando ocorrido no ASSIGN Registro EXCEPT Informa os registro que no sero afetado pelo comando ASSIGN
106
Dominando o Progress
Criando & Definindo os Dados 107 Quando em MS-Windows a impressora de sada ser a impressora padro pr-definida. Em MS-DOS o padro ser o mesmo que a sada PRN No UNIX ser utilizado o spooler do comando (lp ou lpr). Arquivo Informa ao comando OUTPUT para sada em um arquivo. Exemplo: OUTPUT TO /tmp/cadastro.lst UNBUFFERED. Dispositivo Especifica o dispositivo de sada para a impresso. Exemplo: OUTPUT TO COM2 UNBUFFERED, OUTPUT TO \\SERVIDOR1\HP Terminal Define a sada de impresso para a tela Value Informa um valor de sada para a impresso. Exemplo: OUTPUT TO VALUE(SEARCH(Arquivo)) UNBUFFERED APPEND. "Clipboard" Ecoa os dados de sada para a rea de Transferncia dos Windows APPEND Continua a sada de impresso ao fim de um arquivo ECHO/NO-ECHO Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress 108 Suprime o eco dos dados KEEP-MESSAGES Desabilita mensagens durante a sada de impresso, por exemplo erros ocorridos durante o processo PAGED Informa que a sada ser paginada PAGE-SIZE Informa o nmero de linhas para cada pgina na sada de impresso UNBUFFERED No coloca os dados de sada em buffer, cada caracter enviado para a sada destino imediatamente, como em um arquivo. NO-CONVERT No faz nenhum tipo de converso quanto aos Cdigos de Pgina definidos CONVERT TARGET Cdigo de Pgina SOURCE Cdigo de Pgina Converte os caracteres de sada de acordo com os Cdigos de Pgina Origem e Cdigos de Pgina Destino.
Exemplo:
109
fill("-", 130) format "x(130)" skip today format "99/99/9999" "Relatorio de Clientes" at 30 "Pagina:" at 120 page-number format "999" to 130 skip fill("-", 130) format "x(130)" with frame f-cabecalho no-box width 130 page-top. for each customer no-lock transaction: view frame f-cabecalho. display customer.cust-num customer.name customer.address customer.city customer.phone customer.sales-rep with column 15 width 130. end. output close.
110
Dominando o Progress
INPUT
Habilita a entrada de dados a partir de um arquivo PUT [STREAM stream] [UNFORMATTED] [{expression [FORMAT string] [{AT|TO} expression]}| {SKIP[(expression)]}|{SPACE[(expression)}]... ----------------------------------------------------------PUT [STREAM stream] CONTROL expression ... ----------------------------------------------------------SEEK Retorna um ponteiro indicando o fim do arquivo ou a posio de um arquivo aberto.
SEEK (INPUT|OUTPUT)
define variable posicao as integer no-undo. input from value(search('clientes.txt')) unbuffered. assign posicao = seek(input).
111
112 SEEK
Dominando o Progress
SEEK STREAM Nome da Stream Informa ao comando SEEK a Stream a utilizar TO n|END Indica uma posio ou o fim do arquivo Exemplo: define variable posicao as integer. define variable texto as character.
Criando & Definindo os Dados output to teste.out append no-echo. assign posicao = seek(output). put unformatted 'teste de programa'. output close.
113
input from teste.out unbuffered no-echo. seek input to posicao. set texto. display texto format 'x(30)'. input close.
114
Dominando o Progress
Eventos
O Progress 4GL uma linguagem orientada a objetos e eventos. Apesar de uma orientao a objetos no completa como em Delphi, C++ e/ou Java, mas a princpio baseada, como exemplo, tambm, Visual Basic.
define variable nome as character. on "any-key":u anywhere do: hide message. message string(time, "hh:mm:ss"). end. update nome.
A NY -P R INT A BLE
Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Criando & Definindo os Dados 115 Ocorre quando solicitada uma impresso de um objeto e no h nenhum trigger definido para o evento especfico do objeto
Aplica-se para:
BA C K S P A C E
Quando pressionada um tecla de backspace no objeto
Aplica-se para:
FILL-IN
BA C K -T A B
Ocorre quando solicitado um retrocesso e/ou passagem para o objeto anterior, em Windows como padro Shift + Tab.
Aplica-se para:
BE LL
Dominando o Progress 116 Ocorre quando pressionada uma tecla mapeada para a funo BELL no objeto
Aplica-se para:
CHOOS E
Aplica-se a botes e menus quando escolhido
Aplica-se para:
BUTTON
Exemplo:
define button b-ok label '&OK' auto-go. form b-ok with frame f-escolha. on "choose":u of b-ok in frame f-escolha message 'Botao Ok pressionado' view-as alert-box. update b-ok with frame f-escolha.
CLEAR
Aplica-se a uma caixa de texo, FILL-IN, quando pressionada uma tecla, ou combinao de teclas para apagar o contedo, em Windows o padro Control Z.
117
FILL-IN
BROWSE
SELECTION-LIST
DELETE-CHARACTER
Ocorre quando pressionado Delete no objeto
Aplica-se para:
FILL-IN
D ES ELEC TION
Quando valores so desmarcados em um browse ou lista de seleo mltipla
Aplica-se para:
FRAME
DIALOG-BOX
E ND -BOX -S E LE C T ION
Ocorre quando o boto do mouse liberado aps a seleo de uma rea.
Aplica-se para:
FRAME
DIALOG-BOX
END-ERROR
Aplica-se a objetos ou bloco de interao quando ocorrido algum tipo de erro ou solicitada a finalizao, geralmente ESC ou F4. Quando isto acontece a um bloco de interao, os valores das variveis sem a declarao NO-UNDO e/ou valores atribudos em banco de dados so desfeitos, caso estes valores ainda no estejam confirmados na tabela.
END-ERROR EV ENT
Ocorre quando o usurio pressiona uma tecla que equivalhe funo END-ERROR.
Applies To:
Criando & Definindo os Dados DIALOG-BOX SELECTION-LIST EDITOR SLIDER FIELD-GROUP TEXT FILL-IN TOGGLE-BOX FRAME WINDOW
119
END-MOV E
Ocorre ao finalizar uma ao de arrastar e soltar um objeto.
Aplica-se para:
END -R ES IZE
Ocorre ao finalizar um redimensionamento da janela.
Aplica-se para:
ENDKEY
Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress 120 Quando pressionada uma tecla de finalizao de tarefa, por padro F4 e/ou ESC.
Aplica-se para:
ENTRY
Quando o objeto recebe foco.
Aplica-se para:
ERROR
Evocado quando qualquer erro no especificado causado, tanto para objeto, como para blocos em transao.
Aplica-se para:
BROWSE BUTTON
IMAGE RADIO-SET
Criando & Definindo os Dados COMBO-BOX RECTANGLE DIALOG-BOX SELECTION-LIST EDITOR SLIDER FIELD-GROUP TEXT FILL-IN TOGGLE-BOX FRAME WINDOW
Exemplo:
121
for each _user on error undo, retry transaction: update _user. end.
GO
Este evento uma confirmao simultnea de um ou vrios objetos em estado de insero, funcionando como ENTER contnuo. O exemplo abaixo demonstra uma combinao de vrios eventos reunidos para um mesmo prposito.
Aplica-se para:
form customer.cust-num customer.name with frame f-customer side-labels row 3 centered title "Alteracao". on "return":u, "go":u, "tab":u, "entry":u, "leave":u of
122
Dominando o Progress
customer.cust-num do: find customer where customer.cust-num = input frame f-customer customer.cust-num no-lock no-error. if available customer then display customer.name with frame f-customer. else clear frame f-customer no-pause. end. repeat on error undo, retry transaction: prompt-for customer.cust-num with frame f-customer. update customer.name with frame f-customer. end.
HELP
Quando solicitada a tecla configurada para Help, como padro a tecla em Windows F1, mas caso o Progress esteja configurado para V6 a tecla padro ser F2, tanto em Windows como em UNIX, DOS, Novell, etc.
Aplica-se para:
123
LEAV E
Ocorre quando o objeto perde o foco.
Aplica-se para:
BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
Dominando o Progress 124 Quando o boto esquerdo do mouse pressionado duplamente sobre o objeto.
Aplica-se para:
BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
do
mouse
mantido
BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
LEFT-MOUS E-UP
Criando & Definindo os Dados 125 Quando o boto esquerdo do mouse liberado do objeto outrora escolhido.
Aplica-se para:
BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
MENU-D R OP
iniciado quando com o mouse e feita uma ao de drag and drop, arrastar e soltar.
Aplica-se para:
MENU
SUB-MENU
BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
Criando & Definindo os Dados FIELD-GROUP SUB-MENU FILL-IN TEXT FRAME TOGGLE-BOX IMAGE WINDOW MENU
127
BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
Criando & Definindo os Dados FIELD-GROUP SUB-MENU FILL-IN TEXT FRAME TOGGLE-BOX IMAGE WINDOW MENU
129
BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
131
MOUS E-MENU-UP
Quando liberado o boto do mouse sobre um item de menu.
Aplica-se para:
BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
IMAGE MENU
133
BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
134 MENU
Dominando o Progress
BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
135
BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
NEX T-FRA ME
Quando pressionado uma tecla ocorrendo a passagem para outro frame.
Aplica-se para:
OFF-END
Dominando o Progress 136 Quando solicitado o ltimo elemento de uma lista em um combo-box, exemplo: utilizando as teclas Control PageDown.
Aplica-se para:
BROWSE
OFF-HOME
Quando solicitado o primeiro elemento de uma lista em um combo-box, exemplo: utilizando as teclas Control PageUp.
Aplica-se para:
BROWSE
PREV -FRA ME
Quando solicitado uma tecla para voltar ao frame anterior.
Aplica-se para:
RECALL
Restaura o valor inicial contido em uma caixa de edio.
Aplica-se para:
Criando & Definindo os Dados BROWSE FILL-IN BROWSE CELL RADIO-SET BUTTON SELECTION-LIST COMBO-BOX SLIDER EDITOR TOGGLE-BOX
137
R ETUR N
Quando pressionado ENTER em um objeto.
Aplica-se para:
FILL-IN
BROWSE CELL
BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
138 BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
Dominando o Progress MENU-ITEM RADIO-SET RECTANGLE SELECTION-LIST SLIDER SUB-MENU TEXT TOGGLE-BOX WINDOW
BROWSE BUTTON COMBO-BOX DIALOG-BOX EDITOR FIELD-GROUP FILL-IN FRAME IMAGE MENU
Criando & Definindo os Dados BROWSE MENU-ITEM BUTTON RADIO-SET COMBO-BOX RECTANGLE DIALOG-BOX SELECTION-LIST EDITOR SLIDER FIELD-GROUP SUB-MENU FILL-IN TEXT FRAME TOGGLE-BOX IMAGE WINDOW MENU
139
S ELEC TION
Quando selecionado algum texto ou item em um objeto.
Aplica-se para:
S T A R T -BOX -S E LE C T ION
Quando iniciado evento de marcao de rea na janela.
Aplica-se para:
com
propriedade
BOX-
S TART-MOV E
S TA R T-R ES IZE
Quando iniciado o evento de redimensionamento da janela.
Aplica-se para:
TAB
Quando pressionado a tecla de TAB no objeto.
Aplica-se para:
141
V A LUE-C H A NGED
Quando modificado o valor para browses, combo-box, fill-in, radio-set, selection-list, slider, toggle-box e menuitem.
Aplica-se para:
DIALOG-BOX
WINDOW
WINDOW
WIND OW-MINIMIZED
Quando a janela minimizada.
142
Aplica-se para:
Dominando o Progress
WINDOW
WINDOW
WIND OW-R ES T OR ED
Quando restaurado o tamanho inicial da janela.
Aplica-se para:
WINDOW
143
Preprocessadores
O que so preprocessadores?
Os preprocessadores no Progress funcionam como comandos e/ou instrues literais a serem pre-utilizados para o funcionamento de um programa. Simplesmente como uma palavra-chave que equivale a prpria linguagem ou lista de instrues e/ou valores para utilizao.
Exemplo
No exemplo acima foi definido um preprocessador local, disponvel apenas para a procedure atual, definido como p-exemplo que equivale a instruo display today.
Utilizao
Aps definido o preprocessador COMERCIAL, PREPROCESSADOR. use CHAVES, E-
&SCOPED-DEFINE
Define um preprocessador visvel procedure onde est declarado. SINTAXE &SCOPED-DEFINE Preprocessador Expresso Preprocessador Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener apenas para a
Dominando o Progress 144 O Nome do processador a ser instanciado na procedure. Expresso Uma lista de comandos ou instrues.
Exemplo
&scoped-define p-campos customer.cust-num~ customer.name~ customer.address for each customer no-lock: display {&p-campos}. end.
&GLOBAL-DEFINE
Define um preprocessador global para compartilhamento entre procedures. SINTAXE &GLOBAL-DEFINE Preprocessador Expresso Preprocessador O Nome do processador a ser instanciado na procedure. Expresso Uma lista de comandos ou instruo
Exemplo
145
&UNDEFINE
Exclui a definio de um preprocessador. SINTAXE &UNDEFINE Nome do Preprocessador Exemplo
&scoped-define p-exemplo Exemplo de Preprocessador &undefine p-exemplo /* nada ser apresentado porque o preprocessador no mais existe */ &undefine p-exemplo display {&p-exemplo}.
DIRETIVAS PREPROCESSADAS
Diretivas preprocessadas so avaliadas apenas em tempo de execuo, isso , sua sintaxe e contedo so validados apenas quando solicitados sob uma condio vlida. Foi implementada a partir da verso 7 do Progress.
Exemplo
&scoped-define campos cust-num name &if substring(proversion, 1, 1) = '8' &then for each customer fields({&campos}) no-lock: display {&campos} with title 'Progress versao >= 8'. end. &else
146
Dominando o Progress
for each customer no-lock: display cust-num name with title 'Progress versao <= 7'. end. &endif
No exemplo acima verificada a verso do Run-Time Progress para execuo de uma sintaxe condiciona. Caso a verso seja 8 so informadas clusulas vlidas para esta verso, caso contrrio somente instrues vlidas para as verses inferiores 8.
Operadores
&IF, &THEN, &ELSEIF, &ELSE, &ENDIF
OBSERVAO: apenas algumas funes e comandos so
ABSOLUTE ASC DATE DAY DECIMAL ENCODE MAXIMUM MEMBER MINIMUM TIME TODAY TRIM TRUNCATE WEEKDAY YEAR
LEFT-TRIM LENGTH LIBRARY LOG LOOKUP SQRT STRING SUBSTITUTE SUBSTRING INDEX INTEGER KEYWORD KEYWORDALL LC
R-INDEX RANDOM REPLACE RIGHT-TRIM ROUND ENTRY ETIME EXP FILL MONTH NUM-ENTRIES OPSYS PROPATH PROVERSION
147
MESSAGE
Mostra uma mensagem informativa para o usurio. SINTAXE MESSAGE [COLOR Cor] {Texto |{SKIP [(n)]}}... [VIEW-AS ALERT-BOX [Tipo] [BUTTONS Botes] [TITLE Texto]] [{SET|UPDATE} field {{AS Tipo}|{LIKE Campo}} [FORMAT Texto] [AUTO-RETURN]] [IN WINDOW Janela] PARMETROS COLOR Cor Nome ou nmero da cor do texto da mensagem. Texto Texto da mensagem. SKIP (n) Quantidade de linhas a serem saltadas entre textos da mensagem. VIEW-AS Tipo (Windows/X-Windows) Define o tipo da mensagem (MESSAGE, QUESTION, INFORMATION, ERROR, WARNING). BUTTONS Botes
Dominando o Progress 148 Os botes de opo da mensagem, caso esta mensagem retorne um valor lgico (YES-NO, YES-NO-CANCEL, OK, OK-CANCEL, RETRY-CANCEL). TITLE Texto Titulo da janela do contexto da mensagem. SET/UPDATE Campo Campo a ser atualizado na mensagem. AS/LIKE Tipo FORMAT Definem o tipo e o formato da varivel ou campo a ser a atualizado na mensagem. AUTO-RETURN Aceita <ENTER> mensagem. IN WINDOW Janela Define a janela de contexto onde ser exibida a mensagem.
Exemplos
para
finalizar
atualizao
da
for each customer share-lock: display customer.cust-num customer.name with frame f-customer. message 'Confirma exclusao?' update l-confirma as logical format 'Sim/Nao'. if l-confirma then do: delete customer. end. end.
149
message 'Confirma exclusao?' view-as alert-box question buttons yes-no update l-confirma as logical format 'Sim/Nao'. if l-confirma then do: delete customer. end. end.
150
Dominando o Progress
Criando MENUS
MENU
Cria um menu de opes. SINTAXE DEFINE [[NEW] SHARED] MENU Nome do Menu [FGCOLOR Cor] [BGCOLOR Cor] [DCOLOR Cor] [PFCOLOR Cor] [FONT Fonte] [{TITLE Texto}|MENUBAR] [{LIKE Menu}] Item do Menu PARMETROS NEW SHARED Define um procedures. SHARED Define um menu j compartilhado por uma procedure anterior. MENU Nome do Menu Informa o nome do menu a ser criado. BGCOLOR Cor Cor de fundo do menu. DCOLOR Cor Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener novo menu a ser compartilhado entre
Criando & Definindo os Dados Cor de fundo do menu para interface no grfica. FGCOLOR Cor de segundo plano. PFCOLOR Cor de segundo plano para interface no grfica. FONT Fonte Fonte a ser exibida no menu. MENUBAR
151
Informa que o menu ser mostrado como uma barra de menu. TITLE Texto Define o Ttulo do menu a ser exibido. LIKE Menu Obtm/Herda as propriedades e valores de um menu j definido. Item do Menu Especifica qual o tipo de menu ser criado: SUB-MENU Sub-Menu [DISABLE] [LABEL Texto] Define um sub-menu a ser adicionado em um menu j existente. RULE Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress 152 Insere uma separao em um sub-menu. SKIP Insere um intervalo entre opes de um menu. Definies do Item do Menu MENU-ITEM Item do Menu [ACCELERATOR Tecla(s)] [BGCOLOR Cor] [DCOLOR Cor] [DISABLED] [FGCOLOR Cor] [FONT Fonte] [LABEL Texto] [PFCOLOR Cor] [READ-ONLY] [TOGGLE-BOX] [Trigger] Item do Menu Define o nome do item a ser adicionado ao menu. ACCELERATOR Tecla(s) Define teclas de acelerao para o acesso a opo do menu, combinaes do teclado como SHIF+Tecla, CTRL+Tecla, ALT, etc. BGCOLOR Cor Cor de fundo do menu. DCOLOR Cor Cor de fundo do menu para interface no grfica. DISABLED Desabilita a opo do menu. FGCOLOR Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
153
Cor de segundo plano para interface no grfica. LABEL Define o texto de apresentao da opo do menu. FONT Fonte Fonte a ser exibida no menu. READ-ONLY Desabilita a opo do menu para escolha do usurio. TOGGLE-BOX Define que a opo do menu ser uma opo de marcao. Trigger Define triggers para associao de eventos a opo do menu.
Exemplos
define menu principal menubar sub-menu tabela label 'Tabela'. form customer with frame f-customer 1 columns
154
Dominando o Progress
title 'Customer' centered overlay. view frame f-customer. on choose of menu-item tabela-customer do: for each customer with frame f-customer: process events. display customer. end. end. assign current-window:menubar = menu principal:handle. wait-for choose of menu-item tabela-sair.
155
BOTES
SINTAXE DEFINE BUTTON Boto [AUTO-GO|AUTO-ENDKEY] [DEFAULT] [BGCOLOR Cor] [DCOLOR Cor] [FGCOLOR Cor] [FONT Fonte] [IMAGE-DOWN Imagem] [{IMAGE|IMAGE-UP} Imagem] [IMAGE-INSENSITIVE Imagem] [MOUSE-POINTER Ponteiro] [LABEL Texto] [LIKE Boto] [PFCOLOR Cor] [SIZE Largura BY ALTURA] [NO-FOCUS] [NO-CONVERT-3D-COLORS] [TOOLTIP Texto] [TRIGGER] PARMETROS DEFINE BUTTON Boto Declara um novo boto. Caso o ambiente seja estilo caracter (UNIX/DOS/Novell,etc) a aparncia deste boto ser igual a uma opo de menu. AUTO-GO Declara que os eventos deste boto sero executados assim que escolhidos. AUTO-ENDKEY Define automaticamente que o boto um boto de finalizao, declarando o evento de escolha com o evento de sada (ENDKEY). DEFAULT Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress 156 Define o boto como padro, ou seja, foco inicial do frame. BGCOLOR Cor Cor de background do boto. FGCOLOR Cor Cor de foreground do boto. DCOLOR Cor Cor de background para ambiente caracter. PFCOLOR Cor Cor de foreground para ambiente caracter. FONT Fonte Define a fonte para exibio do texto do boto. IMAGE|IMAGE-UP File arquivo.bmp Windows|arquivo.xpm Motif Define a imagem do boto quando em estado normal. IMAGE-DOWN File arquivo.bmp Windows|arquivo.xpm Motif Define a imagem do boto quando pressionado. IMAGE-INSENSITIVE File arquivo.bmp Windows|arquivo.xpm Motif Define a imagem do boto quando desabilitado. MOUSE-POINTER Ponteiro Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Criando & Definindo os Dados 157 Define o estilo do ponteiro do mouse quando apontado para o boto. Para obter os estilos de ponteiros consulte o tpico LOADMOUSE-POINTER() LABEL Texto Informa o texto a ser exibido no boto. LIKE Boto Herda as propriedades e valores de um boto j existente. SIZE Largura BY Altura Define as dimenses do boto. NO-FOCUS Desabilita o foco para o boto. NO-CONVERT-3D-COLORS (MS-Windows) Desabilita a converso de cores da imagem do boto. Por padro o Progress converte as cores para uma faixa RGB pr-definida, s vezes distorcendo a aparncia da imagem, ento usa-se esta opo para evitar este tipo de problema. TOOLTIP Texto (MS-Windows) Define um texto de exibio quando o ponteiro do mouse estiver sobre o boto TRIGGER Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress 158 Declara as triggers a serem executadas para os eventos do boto.
Exemplo
define button b-ok auto-go default label '&Ok' tooltip 'Teste' image-up file 'igp/sum.bmp' image-down file 'igp/delete.bmp' image-insensitive file 'igp/cut.bmp' mouse-pointer 'glove' auto-go. form b-ok with frame f-botoes row 5 centered. on choose of b-ok in frame f-botoes message 'Botao OK pressionado' view-as alert-box. update b-ok with frame f-botoes.
159
UPDATE Habilita a digitao de valores para um campo ou varivel SINTAXE UPDATE [UNLESS-HIDDEN] [{Tabela|Campo|Varivel [Formato] [WHEN Expresso]}| {VIEW-AS Tipo)}| {Campo|Varivel = Expresso n }|{[AT Coluna|TO Coluna COLON-ALIGNED|LEFT-ALIGNED|RIGHT-ALIGNED]}| {^}|{SPACE [(n)]}|{SKIP [(n)]}]... [GO-ON(Key-Label...)] [Frame] [EDITING:] [NO-ERROR]
PARMETROS
[UNLESS-HIDDEN] No habilita a digitao para campos de uma tabela cujo atributo HIDDEN seja verdadeiro. UPDATE Tabela|Campo|Varivel Informa a tabela, campo e/ou varivel a ser habilitada para digitao ou atualizao. FORMAT Formato Define o formato de entrada dos dados para atualizao. WHEN Expresso Condiciona a digitao de um campo e/ou varivel apenas se satisfeita alguma condio estabelecida. VIEW-AS Tipo Define o tipo de visualizao, objeto do campo ou varivel. Tipos disponveis (TEXT, FILL-IN, EDITOR, TOGGLE-BOX, RADIO-SET, SELECTION-LIST, COMBOBOX). Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress 160 Campo|Varivel = Expresso n Atribui valores a um campo ou varivel. Exemplo: update customer.name = Marcio Brener. AT Coluna | TO Coluna AT - Define a coluna de aprensentao do campo para atualizao esquerda. TO Define a coluna de apresentao do campo para atualizao direita. COLON-ALIGNED|LEFT-ALIGNED|RIGHT-ALIGNED Informa o alinhamento do campo em relao a coluna definida em AT Coluna ou TO Coluna. SPACE(n) Demonstra n espaos em um frame para atualizao. SKIP n Salta n linhas entre campos. GO-ON(Key-Label) Informa qual ser a tecla de atualizao dos campos e/ou variveis. Frame Informa o frame associado atualizao dos campos e/ou variveis. EDITING Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Criando & Definindo os Dados 161 Habilita a edio de eventos a serem relacionados.
indicada. Este tipo de manipulao de exemplos era utilizado at a verso 6 do Progress. mantida por questes de compatibilidade. Use ON Evento OF Objeto IN FRAME Frame.
J
Exemplo
No uma boa forma fazer as configuraes em uma clusula de UPDATE. A forma mais adequada definir todos os parmetros em um FRAME e associa-lo a uma clusula de UPDATE.
162
Dominando o Progress
163
Limites do Progress
Estes valores se referem ao Progress verso 8.x.
Banco de Dados
TABELAS NDICES
O mximo do tamanho do banco de dados. Sem limites por tabela, com nmero mximo de ndices por tabela de acordo com o tamanho dos blocos do Sistema Operacional.
Blocos Mximo
De 1 a 32.000 bytes. At o tamanho mximo da tabela. Tamanho mnimo de 64 bytes, com o mximo limitado pela quantidade de memria da mquina cliente. At 256 arquivos estendidos, com o tamanho mximo de acordo com o tamanho dos blocos do Sistema Operacional.
MULTI-VOLUMES
164
Dominando o Progress
BLOCOS
MXIMO
512 bytes 32GB 1024 bytes (1K) 64GB 2048 bytes (2K) 128GB 4096 bytes (4K) 256GB
NMERO DE USURIOS
At 2048 sesses simultneas multi-usurios em UNIX ou Windows NT. 1 transao por usurio com o mximo de 2048 transaes. De 1 a 16 campos ou expresses. De 1 a 197 caracteres iniciais do texto.
VARIVEIS
CHARACTER DATE DECIMAL INTEGER LOGICAL ENTRADA E SADA DE DADOS
3.000 caracteres. 01/01/32768 A/C at 12/31/32767 D/C. 50 dgitos para inteiros mais decimais. -2,147,483,648 at +2,147,483,647. Yes/No, True/False. 1 a 3.000 caracteres por campo.
165
80 a 132 colunas para apresentao. 1 a 255 colunas para sada de impresso. 1 a 5 streams por procedure.
NOMENCLATURAS
PATH
De 1 a 11 caracteres. De 1 a 12 caracteres.
166
Dominando o Progress
Funes
ABSOLUTE
SINTAXE - ABSOLUTE(Decimal/Inteiro) Decimal/Inteiro
ACCUM
SINTAXE - ACCUM Valor de Agregao
Acumula valores pelo total da soma de um agrupamento. Este valor de retorno no pode ser recebido por uma varivel, apenas mostrado.
Exemplo
/* ex0001.p */ for each order no-lock: display order-num cust-num order-date promise-date ship-date with centered. for each order-line of order no-lock:
display line-num item-num qty price (qty * price) label "Valor Total". accumulate qty * price (total). display (accum total qty * price) label "Valor Acumulado"
167
end. display (accum total qty * order-line.price) label "Total" with centered title "Ordem". end. display (accum total qty * order-line.price) format ">>>,>>>,>>9.99" with view-as dialog-box title "Total Geral". pause.
ALIAS
SINTAXE - ALIAS(Inteiro) Caracter
Lgico
do(s)
banco(s)
de
dados
AMBIGUOUS
SINTAXE - AMBIGUOUS Nome da Tabela (retorno Lgico)
Retorna um valor lgico para o resultado de uma procura. Caso uma procura nica de um valor seja encontrado em duplicidade, isso retornar como verdadeiro em uma condio.
Exemplo:
/* ex0002.p */ /* O resultado do find retorn mais de uma ocorrncia */ find customer where customer.name begins "a" no-error. if available customer then message "Apenas um valor encontrado" view-as alert-box. else if ambiguous customer then
message "Mais de um valor encontrado" view-as alert-box.
else
168
Dominando o Progress
ASC
SINTAXE ASC(Caracter, [Cdigo de Pgina Destino], (Cdigo de Pgina Origem) Inteiro
Retorna o valor ASC de um caracter. Os Cdigos de Pgina de Origem e Destino por padro so obtidos do arquivo de configurao inicial do Progress "startup.pf", ou do arquivo de parametros do aplicativo, caso esse tenha uma configurao do Cdigo de Pgina.
Exemplo
/* ex0003.p */ /* Retorna 231 */ message asc("") view-as alert-box. /* Retorna 254 */ message asc("", "iso8859-1", "ibm850") view-as alert-box. /* Retorna 135 */ message asc("", "ibm850", "iso8859-1") view-as alert-box.
AVAILABLE
SINTAXE - AVAILABLE Nome da Tabela (retorno Lgico)
find first customer where customer.name begins "Al" noerror. if available customer then message "Procura com Sucesso" view-as alert-box. else message "Nenhum nome encontrado" view-as alert-box. for each customer:
169
CAN-DO
SINTAXE CAN-DO(Cadeia Caracter, Valor Caracter) Lgico
CAN-FIND
SINTAXE [NOT] CAN-FIND([FIRST | LAST] Registro [OF Nome da Tabela] ou [WHERE Expresso] [USEINDEX ndice] ou [USING [FRAME Nome do Frame] Campo [AND [FRAME Nome do Frame] Campo]] [SHARE-LOCK|NO-LOCK] [NO-WAIT] [NO-PREFETCH])
/* ex0004.p */
170
Dominando o Progress
form customer.cust-num at row 1 column 10 colon-aligned validate(can-find(customer where customer.cust-num = input frame f-customer customer.cust-num), "Cliente nao cadastrado")
customer.name at row 2 column 10 colon-aligned with frame f-customer row 5 centered title "Alteracao" side-labels. repeat: prompt-for customer.cust-num with frame f-customer. find customer using input frame f-customer customer.cust-num. update customer.name with frame f-customer. end.
CAN-QUERY
SINTAXE CAN-QUERY(Handle do Objeto, Propriedade [Caracter]) Lgico
/* ex0005.p */
define variable attribute as character format "x(24)" label "Propriedade".
as logical view-as toggle-box label "Query". as logical view-as toggle-box label "Set". as widget-handle. as character format "x(24)" label "Objeto".
form widget-type attribute setable queryable with frame f-frame title "Exemplo da Funcao CAN-QUERY" centered row 2.
171
create value(widget-type) temp-handle. assign queryable = can-query(temp-handle, attribute) setable = can-set(temp-handle, attribute). display queryable setable. delete widget temp-handle. end.
CAN-SET
SINTAXE - CAN-SET(Handle Propriedade [Character]) do Objeto, Nome d
/* Retorna Falso */
message can-set(session:handle, "list-items") view-as alert-box.
/* Retorna Verdadeiro */
message can-set(session:handle, "data-entry-return") view-as alert-box.
ENCODE
SINTAXE - ENCODE(Texto) Caracter
172
Dominando o Progress
CHR
SINTAXE CHR(Inteiro, [Cdigo de Pgina Origem], [Cdigo de Pgina Destino]) Caracter
Converte um inteiro para o seu caracter correspondente. O Integer entre 1 e 255 corresponde a um caracter simples, passvel a visualizao e impresso em diversos terminais. Para valores superiores a 255 e inferiores a 65535 a funo tentar verificar o byte equivalente, caso no encontrado um byte nulo ser retornado. mapa de caracteres utilizado para a entrada/sada do caracter, que podem ser omitidos, ento sero utilizados os Cdigos de Pginas previamente utilizados na configurao do Progress, conforme o arquivo em DLC/convmap.cp e o parametros -cpstream e -cpinternal.
Exemplo
display chr(232) skip chr(232, "ibm850", "iso8859-1") skip chr(232, "iso8859-1", "ibm850").
CODEPAGE-CONVERT
SINTAXE CODEPAGE-CONVERT(Caracter , [Cdigo de Pgina Destino], [Codigo de Pgina Origem])
Converte um texto de acordo com os Cdigos Pginas especificados. Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
173
CONNECTED
SINTAXE CONNECTED(Nome Lgico do Banco de Dados) Lgico
COUNT-OF
SINTAXE - COUNT-OF(Campo do BREAK-BY) Inteiro
/* ex0010.p */
for each customer no-lock break by state: display cust-num name sales-rep state. accumulate state (sub-count by state). if last-of(state) then display 100 * (accum sub-count by state state) / count-of(state) format ">>9.9999%" (total) column-label "% Total de!Consumidores" with title "Vendas por Estados" centered. end. pause.
174
Dominando o Progress
CURRENT-CHANGED
SINTAXE CURRENT-CHANGED Nome da Tabela [retorno Lgico]
/* ex0011.p */ assign session:data-entry-return = yes. /* Para observar este exemplo adequadamente abra duas janelas do Procedure Editor, entao execute este codigo nas duas janelas. Visualize o valor na primeira, e na segunda altere o valor e tente altera-lo novamente na primeira. Sera retornada uma advertencia informando que o valor visualizado na primeira janela nao mais condiz com o valor do registro atual. */
form customer.name customer.balance with frame f-update row 5 centered title "Mudanca de Valores".
on "go":u of frame f-update do: do transaction: find current customer exclusive-lock. if current-changed customer then do: message "Este valor foi alterado por outro usuario" skip "Por favor insira novamente a modificacao." view-as alert-box.
display customer.name customer.balance with frame f-update.
return no-apply. end. assign customer.name customer.balance. end. find current customer no-lock. end. find first customer no-lock.
175
CURRENT-LANGUAGE
SINTAXE - CURRENT-LANGUAGE [retorno Caracter]
CURRENT-RESULT-ROW
SINTAXE CURRENT-RESULT-ROW(Nome da Query [Caracter]) Inteiro
country cust-num name with title "Lista de Clientes por Pais" centered 10 down separators. open query q-customer for each customer no-lock by country. update b-customer with centered row 5.
176
Dominando o Progress
CURRENT-ROW-MODIFIED
SINTAXE CURRENT-ROW-MODIFIED Nome da Tabela [Lgico]
CURRENT-VALUE
SINTAXE CURRENT-VALUE(Sequence, [Nome Lgico do Banco]) Inteiro
DATASERVERS
SINTAXE - DATASERVERS [retorno Lista Caracter]
Informa uma lista de Tipos de Bancos de Dados suportados na configurao/verso Progress - Oracle, ODBC, Sybase, MS-SQL, etc.
DATE
SINTAXE - DATE(Texto ou Ms,Dia,Ano) retorno Data
Converte um texto em data ou a seqncia Ms, Dia, Ano como inteiros para data. Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Criando & Definindo os Dados 177 Se informado o parmetro como texto este deve est no formato pr-definido pela configurao do Progress, parmetro -d.
Exemplo
/* 31 de Janeiro de 2019 */ display date("31/01/2019") format "99/99/9999". display date(01, 31, 2019) format "99/99/9999". pause.
DAY
SINTAXE - DAY(Data) Inteiro
DBCODEPAGE
SINTAXE DBCODEPAGE(Inteiro ou Nome Lgico do Banco de Dados) Caracter
define variable i as integer no-undo. do i = 1 to num-dbs: display ldbname(i) dbcodepage(i) format "x(20)". pause. end.
178
Dominando o Progress
DBCOLLATION
SINTAXE DBCOLLATION(Inteiro ou Nome Lgico do Banco de Dados) Caracter
Retorna o Cdigo de Pgina, obtido do arquivo convmap.cp, de um Banco de Dados conectado. Equivalente ao parmetro -cpcoll especificado no "start" do Banco.
Exemplo
define variable i as integer no-undo. do i = 1 to num-dbs: display ldbname(i) dbcollation(i) format "x(20)". pause. end.
DBNAME
SINTAXE - DBNAME retorno Caracter
DBPARAM
SINTAXE DBPARAM(Inteiro ou Nome Lgico do Banco de Dados) Lista Caracter
Criando & Definindo os Dados 179 Retorna uma Lista Delimitada informado os parametros utilizados na conexo do Banco.
Exemplo
DBRESTRICTIONS
SINTAXE DBRESTRICTIONS(Inteiro ou Nome Lgico do Banco de Dados) Lista Caracter
DBTASKID
SINTAXE DBTASKID(Inteiro ou Nome Lgico do Banco de Dados) Inteiro
display "Nenhuma Transacao atual" format "x(50)" dbtaskid(1). /* Inicio de uma Transacao */ create customer. display "Uma Transacao ativa (CREATE), ID" format "x(50)" dbtaskid(1). pause.
DBTYPE
SINTAXE DBTYPE(Inteiro ou Nome Lgico do Banco de Dados) Caracter
DBVERSION
SINTAXE DBVERSION(Inteiro ou Nome Lgico do Banco de Dados) Caracter
181
DECIMAL
SINTAXE - DECIMAL(Inteiro/Caracter/Data) Decimal
define variable i as integer initial 192. define variable d as decimal initial 569789215745369445.9283832. display decimal(today) format ">>>,>>>,>>9" skip decimal("9283.12") format ">>>,>>>,>>9" skip decimal(i) format ">>>,>>>,>>9" skip. message d view-as alert-box. pause.
DEFINED
SINTAXE - DEFINED(Preprocessador) Lgico
Retorna se um Preprocessador foi instanciado. Somente utilizado para condies preprocessadas (&if).
Exemplo
182
Dominando o Progress
&scoped-define frase 'Powered by Progress' &if defined(frase) &then message 'Preprocessador teste igual a' {&frase} view-as alert-box. &else message 'Processador nao definido' view-as alert-box. &endif
DYNAMIC-FUNCTION
SINTAXE DYNAMIC-FUNCTION(Funo [In Handle] [Parmetro 1, Parmetro 2, ...])
do
Usurio
em
tempo
de
define variable i as integer no-undo. define variable nfuncao as character no-undo extent 2 initial ["Data", "Hora"]. do i = 1 to extent(nfuncao): message dynamic-function(nfuncao[i]) view-as alert-box. end. function Data returns character: return "A data " + string(today, "99/99/9999"). end function. function Hora returns character: return "Agora so" + string(time, "hh:mm:ss"). end function.
183
ENTERED
SINTAXE - [FRAME Nome do Frame] Campo ENTERED
define variable nome as character format "x(15)". repeat: form nome with frame f-update. update nome with frame f-update. if frame f-update nome entered then message "Novo nome" input frame f-update nome. else message "Nenhuma modificacao". end.
ENTRY
SINTAXE ENTRY(n Elemento, Lista, [Delimitador]) Caracter
Retorno o Texto de um elemento contido em uma Lista. O Delimitador da lista pode ser omitido, ento ser assumido como delimitao padro o caracter "," (vrgula).
Exemplo define variable dia as character no-undo. assign dia = "Domingo;Segunda;Terca;Quarta;Quinta;Sexta;Sabado". message "Hoje " entry(weekday(today), dia, ";") view-as alert-box.
184
Dominando o Progress
ETIME
SINTAXE - ETIME(Lgico) Inteiro
Retorna o tempo em milissegundos a partir do incio da sesso Progress. Se passado um valor Lgio Positivo (YES ou TRUE) funo o seu timer zerado.
Exemplo
pause 0 before-hide. /* Zera o Timer */ etime(yes). for each customer no-lock: display customer with 1 columns. end. message "Este codigo foi executado em" etime "milisegundos" view-as alert-box.
EXP
SINTAXE - EXP(Base, Expoente) Decimal
EXTENT
SINTAXE - EXTENT(Varivel) Inteiro
185
FILL
SINTAXE - FILL(Texto, Repetio) Caracter
define variable nome as character format "x(30)". repeat: update nome. display nome skip fill('*', length(nome)) format "x(30)". end.
FIRST
SINTAXE - FIRST(Campo de Agrupao) Lgico
Retorna um valor lgico verdadeiro da primeira interao de agrupamento, entao se a primeira ocorrncia em uma clasula DO, FOR EACH, REPEAT com BREAK BY anterior retornado como verdadeiro.
Exemplo
186
Dominando o Progress
/* ex0015.p */ define variable order-value as decimal. for each order: display order-num. for each order-line of order break by qty * price: /* Quando for o primeiro Item da Ordem o valor da Ordem sera zerado para agrupa-lo ate o fim dos Itens */ if first(qty * price) then order-value = 0. order-value = order-value + qty * price. display line-num item-num qty * price column-label "Preco!Global". end. display order-value. end.
FIRST-OF
SINTAXE - FIRST-OF(Campo de Agrupao) Lgico
Retorna um valor lgico verdadeiro se o primeira ocorrncia do agrupamento em uma clasula DO, FOR EACH, REPEAT com BREAK BY.
Exemplo
/* ex0016.p */ for each order no-lock break by order.order-num: if first-of(order.order-num) then do: find customer of order no-lock. display customer.cust-num customer.name order.order-num with centered title "Ordem". for each order-line of order no-lock: display order-line except order-line.order-num with centered title "Itens".
187
FRAME-COL
SINTAXE - FRAME-COL(Nome do Frame) Inteiro
form "Teste" with frame f-teste row 5 centered. view frame f-teste. message "O frame teste esta na coluna" frame-col(f-teste) view-as alert-box.
FRAME-DB
SINTAXE - FRAME-DB [retorno Caracter]
FRAME-DOWN
SINTAXE - FRAME-DOWN [retorno Inteiro]
/* ex0018.p */ define variable resposta as logical format "Sim/Nao". assign resposta = yes. repeat: find next customer no-error. display customer.cust-num customer.name with 15 down centered row 3.
188
Dominando o Progress
if frame-line = frame-down then message "Continua?" update resposta. if not resposta or not available customer then leave. end.
FRAME-FIELD
SINTAXE - FRAME-FIELD [retorno Caracter]
FRAME-FILE
SINTAXE - FRAME-FILE [retorno Caracter]
FRAME-INDEX
SINTAXE - FRAME-INDEX [retorno Inteiro]
define variable opcao as character extent 4 initial ['Primeiro', 'Segundo', 'Terceiro', 'Sair']. repeat while frame-index NE 4: display opcao with frame f-opcao no-labels 1 columns centered row 5. choose field opcao with frame f-opcao. message "Opcao" frame-index. end.
189
FRAME-LINE
SINTAXE - FRAME-LINE [retorno Inteiro]
FRAME-NAME
SINTAXE - FRAME-NAME [retorno Caracter]
FRAME-ROW
SINTAXE - FRAME-ROW(Nome do Frame) Inteiro
/* ex0020.p */ display "^" with frame f-teste. repeat while keyfunction(lastkey) <> "end-error": view frame f-teste. if keyfunction(lastkey) = "cursor-down" and frame-row(f-teste) < screen-lines - 1 then assign frame f-teste:row = frame-row(f-teste) + 1. if keyfunction(lastkey) = "cursor-up" and frame-row(f-teste) > 1 then assign frame f-teste:row = frame-row(f-teste) - 1. if keyfunction(lastkey) = "cursor-right" and frame-col(f-teste) < 78 then assign frame f-teste:col = frame-col(f-teste) + 1. if keyfunction(lastkey) = "cursor-left" and frame-col(f-teste) > 1 then assign frame f-teste:col = frame-col(f-teste) - 1.
190
Dominando o Progress
hide message no-pause. message 'Linha' frame-row(f-teste) 'Coluna' frame-col(f-teste). pause. end.
FRAME-VALUE
SINTAXE - FRAME-VALUE (retorno Caracter)
GATEWAYS
SINTAXE - GATEWAYS [retorno Caracter]
Mostra a lista de Bancos de Dados passveis conexo, exatamente igual funo DATASERVERS.
GET-BYTE
SINTAXE - GET-BYTE(Campo, Posio) Caracter
GET-CODEPAGES
SINTAXE - GET-CODEPAGES [Lista Caracter]
191
GET-COLLATIONS
SINTAXE GET-COLLATIONS(Cdigo de Pgina) [Lista Caracter]
Retorna uma lista dos Idiomas disponveis de acordo com o seu Cdigo de Pgina.
Exemplo
/* ex0022.p */ define variable i as integer. define variable j as integer. do i = 1 to num-entries(get-codepages): display entry(i, get-codepages) format "x(20)". do j = 1 to num-entries(get-collations(entry(i, getcodepages))): display entry(j, get-collations(entry(i, getcodepages))) with 20 down centered. down. end. end.
GET-DOUBLE
SINTAXE - GET-DOUBLE(Campo, Posio) Float
192
Dominando o Progress
GET-FLOAT
SINTAXE - GET-DOUBLE(Campo, Posio) Float
GET-LONG
SINTAXE - GET-DOUBLE(Campo, Posio) Longo
GET-POINTER-VALUE
SINTAXE GET-POINTER-VALUE(Varivel MEMPTR) Integer
GET-SHORT
SINTAXE - GET-SORT(Campo, Posio) Longo
GET-SIZE
SINTAXE - GET-SIZE(Varivel MEMPTR)
193
GET-STRING
SINTAXE - GET-STRING(Campo, Posio)
GET-UNSIGNED-SHORT
SINTAXE - GET-BYTE(Campo, Posio) Caracter
INDEX
SINTAXE - INDEX(Texto, Sub-Texto, [Incio]) Inteiro
define variable alfabeto as character. define variable letra as character. assign alfabeto = "abcdefghijklmnopqrstuvwxyz". update letra. message "A Letra" letra " a" index(alfabeto, letra) "do Alfabeto" view-as alert-box.
INTEGER
SINTAXE INTEGER(Expresso Caracter/Data/Lgico) Inteiro
Dominando o Progress 194 Converte uma expresso para um valor inteiro. Se um texto este dever ter um formato vlido contendo de 0 a 9 como digitos, "," milhar e "." decimal; Se um valor lgico ser atribudo 1 para Yes/True, 0 para No/False; Se uma data este retorn o nmero de dias a partir da data 01/Jan/4713 A/C.
Exemplo
IS-ATTR-SPACE
SINTAXE - IS-ATTR-SPACE [retorno Caracter]
corrente
faz
espaamento
KBLABEL
SINTAXE - KBLABEL(Funo do Teclado) Caracter
repeat: display keyfunction(lastkey) format "x(20)" label "Funcao" at 01 kblabel(keyfunction(lastkey)) format "x(20)" label "Tecla(s)" at 25.
195
KEYCODE
SINTAXE - KEYCODE(Funo do Teclado) Inteiro
KEYFUNCTION
SINTAXE - KEYFUNCTION(Cdiga da Tecla)
/* ex0021.p */ find first customer. message "Frente e Traz muda o registro". repeat: find current customer. display cust-num name address city state postal-code with centered row 3 overlay frame f-customer 1 columns. set address city
196
Dominando o Progress
state postal-code with frame f-customer editing: readkey. apply lastkey. display
"atualizando:" frame-field format "x(20)" skip
"
"
with centered row 15 overlay. if keyfunction(lastkey) = "cursor-right" or keyfunction(lastkey) = "cursor-left" then do: case keyfunction(lastkey):
when "cursor-right" then find next customer. when "cursor-left" then find prev customer.
end. display cust-num name address city state postal-code with frame f-customer. end. end. end.
KEYLABEL
SINTAXE - KEYLABEL(Cdigo da(s) Tecla(s)) Caracter
at 01
197
kblabel(keyfunction(lastkey)) format "x(20)" label "Tecla(s)" at 21 keylabel(lastkey) format "x(20)" label "Teclas" at 51. pause. end.
KEYWORD
SINTAXE - KEYWORD(Texto) Caracter
define variable nome as character format "x(20)". repeat on error undo, retry: update nome. message keyword(nome) view-as alert-box. if keyword(nome) <> ? then do: message nome + " uma palavra reservada Progress". undo, retry. end. end.
KEYWORD-ALL
SINTAXE - KEYWORD-ALL(Texto) Caracter
Similar a funo KEYWORD. Verifica se um Texto equivale alguma expresso reservada Progress considerando todas as abreviaes possveis dos comandos e funes.
LAST
SINTAXE - LAST(Campo de Agrupao) Lgico
Similar a funo FIRST. Retorna um valor lgico verdadeiro da primeira interao de agrupamento, entao Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress 198 se a ltima ocorrncia em uma clasula DO, FOR EACH, REPEAT com BREAK BY anterior retornado como verdadeiro.
LASTKEY
SINTAXE - LASTKEY [retorno Inteiro]
LAST-OF
SINTAXE - LAST-OF(Campo de Agrupao) Lgico
Retorna um valor lgico verdadeiro se o ltima ocorrncia do agrupamento em uma clasula DO, FOR EACH, REPEAT com BREAK BY.
LC
SINTAXE - LC(Texto) Caracter
LDBNAME
SINTAXE LDBNAME(Inteiro ou Nome Lgico do Banco de Dados) Caracter
199
LEFT-TRIM
SINTAXE - LEFT-TRIM(Texto) Caracter
LENGTH
SINTAXE - LENGTH(Texto) Inteiro
LINE-COUNTER
SINTAXE - LINE-COUNTER [retorna Inteiro]
output to value(session:temp-directory + 'teste.txt') paged. for each customer: display line-counter label "Nro" cust-num name address city state with width 620. end.
LIST-EVENTS
SINTAXE LIST-EVENTS(Handle do Objeto, [Plataforma]) Lista
Dominando o Progress 200 Retorna uma Lista dos Eventos disponveis de um Objeto. O parmetro Plataforma pode ser setado com "GUI" para ambiente grfico ou "TTY" para ambiente caracter.
Exemplo
LIST-QUERY-ATTRS
SINTAXE - LIST-QUERY-ATTRS(Handle do Objeto) Lista
LIST-SET-ATTRS
SINTAXE - LIST-SET-ATTRS(Handle do Objeto) Lista
LIST-WIDGETS
SINTAXE LIST-WIDGETS(Handle do Objeto, [Plataforma]) Lista
Retorna uma Lista dos Objetos que contm um determinado Evento. O parmetro Plataforma pode ser
Criando & Definindo os Dados 201 setado com "GUI" para ambiente grfico ou "TTY" para ambiente caracter.
Exemplo
LOCKED
SINTAXE - LOCKED Registro [retorno Lgico]
LOG
SINTAXE - LOG(Valor, [Base]) Decimal
LOOKUP
SINTAXE LOOKUP(Sub-texto, Lista, [Delimitador]) Integer
Retorna a posio de um Sub-texto dentro de uma Lista. Caso o Delimitador no seja informado este ser por padro "," (vrgula).
Exemplo
202
Dominando o Progress
MAXIMUM
SINTAXE MAXIMUM(Valor 1, Valor 2, Valor n, ...) Decimal
MESSAGE-LINES
SINTAXE - MESSAGE-LINES [retorna Inteiro]
MINIMUM
SINTAXE MINIMUM(Valor 1, Valor 2, Valor n, ...) Decimal
203
MONTH
SINTAXE - MONTH(Data) Inteiro
NEW
SINTAXE - NEW(Registro) Lgico
create customer. if new customer then message "Novo registro" view-as alert-box. find first customer. if new customer then message "Novo registro" view-as alert-box.
NEXT-VALUE
SINTAXE - NEXT-VALUE(Sequence) Decimal/Inteiro
display next-value(next-cust-num).
NOT ENTERED
SINTAXE
204
Dominando o Progress
Informa se um campo de um frame foi modificado desde a ltima atualizao. Igual a funo ENTERED
NUM-ALIASES
SINTAXE - NUM-ALIASES [retorno Inteiro]
Retorna o nmero de Aliases dos Bancos de Dados esto definidos na sesso atual.
NUM-DBS
SINTAXE - NUM-DBS [retorno Inteiro]
define variable i as integer. repeat i = 1 to num-dbs: display ldbname(i) format "x(20)" pdbname(i) format "x(20)" dbrestrictions(i) format "x(20)". end.
NUM-ENTRIES
SINTAXE - NUM-ENTRIES(Lista, [Delimitador]) Inteiro
Retorna o nmero de elementos contidos em uma lista. Caso o delimitador noseja especificado o padro assumido ser ","(vrgula).
Exemplo
205
assign mes = 'Janeiro,Fevereiro,Marco,Abril,Maio,Junho,' + 'Julho,Agosto,Setembro,Outubro,Novembro,Dezembro'. do i = 1 to num-entries(mes): display entry(i, mes) format "x(20)". pause. end.
NUM-RESULTS
SINTAXE NUM-RESULTS(Nome da Query [Caracter]) Inteiro
define query q-customer for customer. open query q-customer preselect each customer no-lock. message 'Total da Selecao' num-results('q-customer') view-as alert-box.
OPSYS
SINTAXE - OPSYS [retorno Caracter]
display opsys.
206
Dominando o Progress
OS-DRIVES
SINTAXE - OS-DRIVES [retorno Caracter]
define variable drives as character view-as combo-box. form drives with frame f-drives. assign drives:list-items = os-drives. update drives with frame f-drives.
OS-ERROR
SINTAXE - OS-ERROR [retorno Caracter]
Retorna o ltimo erro de uma operao no Sistema Operacional. Retorna o status das funes os-append, oscopy, os-create-dir, os-delete, os-rename ou save cache.
Exemplo
os-create-dir value("c:\temp\teste.txt"). if os-error NE 0 then message 'Erro n' os-error view-as alert-box.
OS-GETENV
SINTAXE - GETENV(Varivel de Ambiente) Caracter
207
PAGE-NUMBER
SINTAXE - PAGE-NUMBER [retorno Inteiro]
/* ex0024.p */ output to 'teste.txt' paged page-size 40. form header 'Pagina n' page-number format '>>9' with frame f-cabecalho page-top. for each customer no-lock: view frame f-cabecalho. display customer.cust-num customer.name customer.address. end.
PAGE-SIZE
SINTAXE - PAGE-SIZE [retorno Inteiro]
PDBNAME
SINTAXE PDBNAME(Inteiro ou Nome Lgico do Banco de Dados) Caracter
Retorna o Nme Fsico do Banco de Dados na sesso corrente. Similar s funes LDBNAME, DBTYPE, DBRESTRICTIONS, etc
208
Dominando o Progress
PROGRAM-NAME
SINTAXE - PROGRAM-NAME(Inteiro) Caracter
Retorna o Nome do Programa em execuo segundo o nmero informado. O programa atual equivale a 1.
Exemplo
/* ex0025.p */ define variable i as integer initial 1. repeat while program-name(i) <> ?. display i label 'Nro' program-name(i) label 'Programa' format "x(30)" with title "Ultimos Programas executados" centered row 2. assign i = i + 1. end.
PROGRESS
SINTAXE - PROGRESS [retorno Caracter]
PROMSGS
SINTAXE - PROMSGS
209
PROPATH
SINTAXE - PROPATH [retorno Lista]
/* ex0026.p */ define variable diretorios as character view-as selection-list inner-chars 50 inner-lines 10 sort. define frame f-diretorios diretorios with title 'Diretorios do Propath' centered row 5. diretorios:list-items = propath. prompt diretorios with frame f-diretorios.
PROVERSION
SINTAXE - PROVERSION [retorno Caracter]
QUERY-OFF-END
SINTAXE - QUERY-OFF-END(Nome da Query) Lgico
/* ex0027.p */ open query q-customer preselect each customer no-lock. repeat: get next q-customer.
210
Dominando o Progress
RANDOM
SINTAXE RANDOM(Valor Mnimo, Valor Mximo) Inteiro
Retorna um valor aleatrio entre um intervalo. Voc pode configurar a vriao com o parmetro -rand n na sesso clientes.
Exemplo
/* ex0028.p */ /* Este exemplo simula o preenchimento de 100 jogos da Sena, baseados na geracao de numeros aleatorios */ define variable i define variable j as integer. as integer.
define variable njogos as integer. define variable combinacao as integer extent 6. define temp-table jogos field n as integer label 'Jogo n' field n1 as integer format '99' field n2 as integer format '99' field n3 as integer format '99' field n4 as integer format '99' field n5 as integer format '99' field n6 as integer format '99' index jogo is primary unique n1 n2 n3 n4 n5 n6. combinacao: do while njogos < 100:
211
i i i i i i
1) 2) 3) 4) 5) 6)
or or or or or then
if available jogos then next combinacao. assign njogos = njogos + 1. create jogos. assign jogos.n jogos.n1 jogos.n2 jogos.n3 jogos.n4 jogos.n5 jogos.n6 end. for each jogos by jogos.n: display jogos. end.
= = = = = = =
RECID
SINTAXE - RECID(Registro) Recid
/* ex0029.p */ define buffer b-customer for customer. for each customer no-lock by customer.cust-num descending: find b-customer where recid(b-customer) = recid(customer) exclusivelock. update b-customer.cust-num. display customer.cust-num b-customer.cust-num. end.
RECORD-LENGTH
SINTAXE - RECORD-LENGTH(Registro) Inteiro
REPLACE
SINTAXE REPLACE(Texto, Sub-Texto Origem, Sub-Texto Destino) Caracter
Substitue um especificado.
sub-texto
de
um
Texto
por
outro
213
/* ex0030.p */ /* Remover caracteres invalidos de um texto */ define variable i as integer. define variable procura as character. define variable substituto as character. assign procura = ",,,,,,,,,,,,,,," substituto = "a,A,e,E,i,I,o,O,u,U,c,C,e,E,u,U". for each customer: update customer.name label 'Coloque um caracter invalido'. display customer.name. do i = 1 to num-entries(procura): if index(customer.name, entry(i, procura)) > 0 then customer.name = replace(customer.name, entry(i, procura), entry(i, substituto)). display customer.name. end. end.
RETRY
SINTAXE - RETRY [retorno Lgico]
Retorna um Lgico para um bloco de transao se este foi concludo com xito.
Exemplo
repeat: prompt-for customer.cust-num. find customer using cust-num. if not retry then display name address city state
214
else
Dominando o Progress
country.
clear all no-pause. set name address city state country. if country = "" then undo, retry. end.
RETURN-VALUE
SINTAXE - RETURN-VALUE [retorno Caracter]
run teste. display return-value. pause. procedure teste: return 'Exemplo de Retorno'. end.
RIGHT-TRIM
SINTAXE - RIGHT-TRIM(Texto) Caracter
R-INDEX
SINTAXE - R-INDEX(Texto, Sub-Texto) Inteiro
215
ROUND
SINTAXE - ROUND(Valor, Preciso) Decimal
ROWID
SINTAXE - ROWID(Registro) Rowid
Retorna o valor do Rowid do Registro, implementada a partir da verso 8.1 do Progress. Semelhante a funo RECID porm mais sofisticada por usar formao hexadecimal ao contrrio de RECID que decimal, ampliando o valor de abrangncia e preciso.
SCREEN-LINES
SINTAXE - SCREEN-LINES [retorno Inteiro]
SDBNAME
SDBNAME(Inteiro ou Nome Lgico do Banco de Dados) Caracter
Retorna o Schema do Dataserver do Banco de Dados conectado na sesso corrente. Similar s funes LDBNAME, PDBNAME, DBRESTRICTIONS, etc. Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
216
Dominando o Progress
SEARCH
SINTAXE - SEARCH(Texto) Caracter
Retorna o caminho completo de um arquivo utilizando como base os diretrios contidos no PROPATH.
Exemplo
SEEK
SINTAXE - SEEK(INPUT/OUTPUT) Inteiro
SETUSERID
SINTAXE SETUSERID(Usurio, Senha, Nome Lgico do Banco) Lgico
Atribui/Conecta um usurio no Banco de Dados. A senha deve ser passada literalmente igual ao seu valor original, considerando tambm maisculas e minsculas.
Exemplo
SQRT
SINTAXE - SQRT(Valor) Decimal
217
define variable valor as decimal. update valor. message 'A raiz de' valor 'e' sqrt(valor) view-as alert-box.
STRING
SINTAXE - STRING(Valor, Formato) Caracter
Transforma um valor em caracter com formato indicado. O valor atribudo deve ser de tipo Inteiro, Decimal, Data ou Lgico
Exemplo
display string(today, "99/99/9999") format "x(20)" skip string(1293.21, "999,999.99") format "x(20)" skip string(yes, "Sim/Nao") format "x(20)".
SUBSTITUTE
SINTAXE SUBSTITUTE(Texto, n Argumentos [Caracter]) Caracter
Substitue/Insere em um caracter um subtexto em uma posio de argumento definida na forma "&n", onde n inteiro de 1 a 9, e os argumentos restantes so caracteres.
Exemplo
/* ex0009.p */
message substitute("&1 Amor, &2 Beijos, &3 Coracao, &4 Desejos",
218
Dominando o Progress
"A", "B", "C", "D") view-as alert-box.
define buffer b-customer for customer. for each customer no-lock: find first b-customer where rowid(b-customer) > rowid(customer) no-lock noerror. clear all. display SUBSTITUTE("&1 Cliente Atual. &2 Cliente Posterior", customer.name, b-customer.name) format "x(70)" when available b-customer. end.
SUBSTRING
SINTAXE SUBSTRING(Texto, Incio, Tamanho [Character], Tipo [Caracter]) Caracter
Extrai uma subcadeia de um texto. O comando SUBSTRING tambm pode indicar uma substituio, conforme o exemplo mostrado abaixo. O parmetro Tipo aceita trs indicaes "character", "fixed" ou "raw", onde: Character o valor padro se omitido este quarto parmetro; Fixed indica que a posio incio ser um inteiro e o tamanho ser em bytes; Raw indica que a posio incio e o tamanho so bytes.
Exemplo
219
assign substring(texto, 12) = "Aprendendo Progress 4GL". display substring(texto, 1, 50) format "x(50)". pause.
TERMINAL
SINTAXE - TERMINAL retorno Caracter
Retorna um caracter que representa o Terminal/Ambiente corrente. Ambiente X-Windows interface caracter o TERMINAL returno ser BW80, CO80, ou MONO, dependendo do monitor. MS-Windows o TERMINAL returno WIN3. UNIX o TERMINAL returno ser a varivel de ambiente $TERM, em modo batch o TERMINAL retorna um valor nulo (?).
Exemplo
TIME
SINTAXE - TIME retorno Inteiro
/* nmero de segundos a partir de 00:00h */ message time view-as alert-box. /* horas a partir de 00:00h */ message string(time, "hh:mm:ss") view-as alert-box.
220
Dominando o Progress
TODAY
SINTAXE - TODAY retorno Data
TO-ROWID
SINTAXE - ROWID(Valor tipo Caracter) Rowid
Coverte um nmero equivalente posio de uma tabela em formato caracter hexadecimal e o converte em tipo Rowid. O texto de representao do Rowid deve estar em forma hexadecimal "0xhex-digitos", exemplo 0x000000, onde os caracteres hexadecimais esto de 0 at 9 ou A at F.
Exemplo
/* ex0007.p */
define buffer b-customer for customer. for each customer no-lock: find b-customer where rowid(b-customer) = to-rowid(string(rowid(customer))). display string(rowid(b-customer)) label "Hexadecimal" b-customer.cust-num. end.
TRANSACTION
SINTAXE - TRANSACTION retorno Lgico
221
TRIM
SINTAXE - TRIM(Texto) Caracter
TRUNCATE
SINTAXE TRUNCATE(Valor Decimal, n Casas Decimais) Inteiro
/* Retorno igual a 128,2 */ message truncate(128.23, 1) view-as alert-box. /* Retorno igual a 1539,29834 */ message truncate(1539.29834699891, 5) view-as alert-box.
USERID
SINTAXE
222
Dominando o Progress
VALID-EVENT
SINTAXE VALID-EVENT(Handle [Plataforma]) Lgico do Objeto, Nome do Evento,
VALID-HANDLE
SINTAXE - VALID-HANDLE(Handle do Objeto) Lgico
WEEKDAY
SINTAXE - WEEKDAY(Data) Inteiro
/* ex0006.p */ define variable dia as character extent 7 initial["Domingo", "Segunda", "Terca", "Quarta", "Quinta", "Sexta", "Sabado"].
223
WIDGET-HANDLE
SINTAXE - WIDGET-HANDLE(Caracter) Handle
YEAR
SINTAXE - YEAR(Data) Inteiro
224
Dominando o Progress
Captulo n
PRO
Inicia uma sesso Progress mono-usurio SINTAXE PRO [Database] [Parmetros] Muitos programas/utilitrios Progress so apenas arquivos batchs que pr-configuram o ambiente e/ou passam parmetros para o Progress de acordo com o utilitrio. Como por exemplo o comando PRO mencionado acima.
Exemplo:
225
if exist %DLC%\promsgs goto BIN echo DLC environment variable not set correctly - Please set DLC variable goto END :BIN if not "%PROEXE%"=="" goto START set PROEXE=_progres :START if "%DISPBANNER%"=="no" goto NOBANNER type %DLC%\hello :NOBANNER type %DLC%\version %PROEXE% -1 -p _prostar.p %1 %2 %3 %4 %5 %6 %7 %8 %9 set DISPBANNER= :END
PR OA IW
Inicia o After-Image-Write (AIW) SINTAXE PROAIW [Database] Inicia o processo do After-Image Writer (AIW) em background. O AIW melhora a performance para a memria compartilhada do banco de dados multi-usurio no arquivo After Image. Nota: apenas para bancos de dados com After Image.
P R OBIW
Inicia o Before-Image-Write (BIW) SINTAXE PROBIW [Database] Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress 226 Inicia o processo do Before-Image Writer (AIW) em background. O BIW melhora a performance para a memria compartilhada do banco de dados multi-usurio no arquivo Before Image.
P R OBC K UP
Cria um arquivo de backup do banco de dados Progress SINTAXE probkup [online] Database [incremental] Dispositivo/Diretrio [-vs n] [-bf n] [-verbose] [-scan] [-io n] [-com] [-red n] [-estimate] [-g Before-Image] PARMETROS online Indica que o backup um backup on-line. Database Informa o Banco de Dados a ser salvo. incremental Informa que o backup ser incremental, ou seja, apenas os dados ainda no gravados no arquivo de backup. Dispositivo Informa o dispositivo destino de backup, como um disquete, diretrio no disco rgido, fita DAT ou DLT. -estimate
Criando & Definindo os Dados 227 Indica que o backup obter uma mdia estimada apenas. Use o parmetro scan quando usar o parmetro incremental e/ou compression. Aplicvel apenas para backup off-line. -vs n Indica o tamanho em blocos do dispositivo destino do backup. Quando alcanado o nmero de blocos especificado ser solicitado o dispositivo ou arquivo seguinte do prximo volume. Caso este parmetro no seja especificado o PROBACKUP assumir que a mdia comporta todo o contedo do backup. -bf n Indica a blocagem para o arquivo destino do backup. O valor padro 34. -verbose Habilita a visualizao do progresso do backup durante o backup. -scan Informa ao PROBKUP para obter o nmero de blocos, avaliar o espao necessrio e visualizar estas informaes. Apenas para backup off-line. -io i Especifica um incremento de overlap. O padro 0. -com Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress 228 Informa que o backup ser compactado. -red i Informa a redundncia do backup. Isso evita problemas quando restaurado o backup e o dispositivo apresentava mau setores na mdia. -g Before-Image Especifica a localizao do(s) arquivo(s) de Before-Image.
PROCOPY
Copia um banco de dados para outro banco de dados. SINTAXE procopy Database origem Database destino -g Localizao do Before-Image s
Exemplo:
PRODB
Cria um novo banco de dados vazio ou a partir de um j existente. SINTAXE prodb [Database] {empty|sports|Database Origem|demo} Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
229
PRODEL
Apaga um banco de dados Progress SINTAXE prodel Database
230
Dominando o Progress
Parmetros do Progress
A configurao do Progress, sesso cliente e carga dos bancos de dados so ajustadas atravs de combinaes de diversos parmetros.
Parmetro -1
Descrio Single-user Mode (Cliente) Conecta um banco de dados em modo mono-monousurio Exemplo (No arquivo de parametros .pf) db sports 1 (Codigo) connect -db sports -1.
-a arquivo
-aibufs n
After-Image Buffers (Servidor) Especifica o nmero de blocos em buffer de memria para o arquivo After-Image quando executado o utilitrio AIW que
Criando & Definindo os Dados coordena as transao de posterior Mnimo: 1 Padro multi-usurio: 1 -aistall After-image Stall (Servidor)
231 imagem
Suspende a atividade de um banco de dados multi-volumes usando AfterImage para o evento de shutdown e grava as informaes no arquivo de log -b Batch (Cliente) Indica que uma sesso ser executada em batch sem interao. Para executar uma aplicao em batch esta no deve apresentar nenhuma informao em tela, pois ocasionara um erro -basekey texto Registry Basekey (Cliente MSWindows) Indica ao Progress para usar a configurao contida em uma arquivo INI, com o parmetro "INI". Isso porque o Progress verso 8.x utilizao configurao contida na registry Os parmetros disponveis so: HKEY_CURRENT_USER HKEY_CLASSES_ROOT HKEY_LOCAL_MACHINE HKEY_USERS HKEY_CURRENT_CONFIG Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
232
Dominando o Progress HKEY_DYN_DATA INI Exemplo C:\DLC\BIN\PROWIN32.EXE basekey "INI" ininame ARQUIVO.INI
-B n
Blocks in Database Buffers (Servidor/Mono-usurio) Define o nmero de blocos a serem colocados em buffer de memria para cada usurio Mnimo: 10 Mximo: 500.000 Padro mono-usurio: 20 Padro multi-usurio: (8 x n Usurios)
M Caso
-bibufs n
o nmero de buffers ultrapasse a quantidade de memria fsica da mquina esta pode travar ou reiniciar!
Before-image Buffers (Servidor) Especifica o nmero de blocos em buffer de memria para o arquivo After-Image Quando executado o utilitrio BIW que coordena as transao de imagem anterior Mnimo: 3 Padro multi-usurio: 5
233
Deixa a critrio do Progress o tratamento de registros em lock compartilhado (share lock), utilizando mais de um buffer para registros em lock, mesmo que estes j no esteja mais em uso compartilhado -Bt n Buffer Size for Temporary Tables (Cliente) Especifica o nmero de blocos em buffer para tabelas temporrias durante a sesso cliente Mnimo: 10 Mximo: 50.000 -C qualificador Option on PROUTIL and RFUTIL Commands (ProUtil/RFUtil) Usado com os utilitrios Progress ProUtil e RFUtil. Consulte o captulo Utilitrios de banco de dados -c n Index Cursors (Cliente) Especifica no nmero de cursores de ndices a serem utilizados na sesso para uso de declaraes FIND, FOR EACH, QUERY e SELECT. Em sintaxe Progress FIND e FOR EACH cada loop consome apenas um cursor de Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
234
Dominando o Progress 64 bytes. Geralmente para uso de programas utilizando linguagem SQL necessrio fazer ajuste desse parmetro devido ao result set criado pela especificao SQL. Schema Cache File (Cliente) Fora o Progress a usar um arquivo binrio que contm a estrutura do metaschema do banco de dados conectado. Exemplo (Arquivo de parmetros .pf) db sports 1 - cache sports.csh
-cache arquivo
Character Set (Servidor/Cliente) Define o Cdigo de Pgina a ser utilizado na sesso para manipulao de dados. Padro: iso8859-1
-checkdbe
Check Double-byte Enabled (Servidor/Cliente) Habilita o suporte a caracteres doublebyte para a verso Progress 7, utilizado nas funes LENGTH, SUBSTRING, SUBSTRING.
-convmap
235
Define o arquivo de Cdigo de Pginas a ser utilizado. Caso seja omitido este parmetro o Progress usar por padro o arquivo convmap.cp localizado no diretrio do Progress. Communications File (Servidor/Cliente) Define um arquivo de Auto-Conexo que altera as conexes atuais. As configuraes especificadas pelo parmetro cp pode ser substituda pela configurao do metaschema na tabela _Db campo _Db-comm.
-cpcase tabela
Case Code Page (Servidor/Cliente) Especifica uma tabela utilizada para converso entre caracteres mausculos e minsculos e vice-versa, usado nas funes CAPS, LC ou caracter "!" da clasula FORMAT. A tabela est especificada dentro do arquivo de Cdigos de Pginas convmap.cp.
-cpcoll coleo
Collation Code Page (Servidor/Cliente) Especifica uma coleo de tabelas de Cdigos de Pginas a ser utilizado para procedimento em memria.
236
Dominando o Progress Este parmetro funciona em conjuto com o parmetro xc que define a utilizao de alfabetos. Para maiores detalhes consulte o manual PROGRESS Internationalization Guide.
Database Code Page (Servidor/Cliente) Especifica ao banco de dados o Cdigo de Pgina a ser utilizado para gravar as informaes Padro: ibm850
Internal Code Page (Servidor/Cliente) Especifica o Cdigo de Pgina a ser utilizado na manipulao dos dados em memria pelo Progress Padro: iso8859-1
Print Code Page (Servidor/Cliente) Especifica o Cdigo de Pagina a ser usada em um escopo de impresso (OUTPUT) Padro: o mesmo valor definido em cpstream
-cprcodein Cdigo
Criando & Definindo os Dados Pgina Especfica o Cdigo de Pgina a ser usado na nos arquivos compilados .r R-code Out Code Page (Servidor/Cliente) Especfica o Cdigo de Pgina a ser usado no scopo de impresso pelas procedures compiladas. Stream Code Page (Cliente/Servidor)
237
-cpstream
Especifica o Cdigo de Pgina a ser usado para o escopo de entrada/sada de dados (stream i/o), comandos INPUT FROM e OUPUT TO. -cpterm Terminal Code Page (Cliente/Servidor) Especifica o Cdigo de Pgina do terminal modo caracter (UNIX,DOS,Novell). -cs n, i Cursor Size (Cliente) Define o tamanho de um cursor para um ndice especfico, onde: n bytes e i nmero do ndice Em ndices demasiadamente grandes s vezes pode ocorrer um erro de cursor no ndice, principalmente para ndices tipo WORD-INEX, como abaixo: Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
238
Dominando o Progress
Index index-number has at least n levels. Increase -cs parameter
-ct n
AS/400 Connection Time (Cliente) Define um timeout, em segundos, para resposta de uma query em um acesso ao AS/400 IBM.
-d mdy
Date Format (Cliente) Define o formato para entrada e apresentao de datas, onde: d dia, m ms, y ano Caso no seja especificado o padro ser o formato americano Ms/Dia/Ano.
-D n
Directory Size (Cliente) Define o nmero de procedures por diretrio aonde sero compiladas e sobrepostas as procedures executveis. Quando o Progress compila uma procedure e a grava no disco ele mantm a verso anterior, caso no seja possvel grav-la no disco, por questes de espao ou acesso. Ento ele mantm a procedure compilada anterior e gera um erro de acesso. Voc pode monitorar a utilizao de entradas de diretrio atravs das estatsticas geradas pelo parmetro ( y).
Criando & Definindo os Dados Mnimo: 5 Mximo: 500 Padro mono-usurio: 100 Padro multi-usurio: 100 -db banco de dados Physical Database Name (Cliente)
239
Define o nome fsico do banco de dados a ser conectado. Debugger (Cliente) Executa o Progress em mode Debug.
-debug
-decdtm
Distributed Transaction Manager (Cliente) Usa servio de transaes distribudas DETdtm em ambiente VMS para performance de transaes em filas de processos. necessrio est instalado o DETdtm para funcionar este servio.
-dictexps
Dictionary Expressions (Cliente) Fora uma procedure compilada a usar a validao do dicionrio de dados, mesmo quando h alguma declarao n cdigo fonte ignorando s validaes ou as desabilitando. No cdigo fonte pode-se desabilitar esta especificao por frame utilizando o termo NO-VALIDATE na declarao do
240 -directio
Dominando o Progress FRAME/FORM. Direct I/O (Servidor) Fora um conexo ao banco de dados com acesso de leitura e gravao direto do disco (i/o), ignorando o controle do sistema operacional. Este parmetro aumenta significativamente a performance, devido ao acesso direto e eliminao de competio de outros aplicativos, porm pe em risco a integridade dos dados.
241
Habilita log de transaes para bancos de dados no Progress conectados. -esqlnopad ESQL No Padding (Cliente) Define SQL dinmico em conjunto com preprocessamento C. -evtlevel parmetro Event Level (Cliente) Windows NT Define os eventos a serem gravados pelo Event Log do Windows NT. None no grva nenhum evento. Brief apenas alertas e erros. Normal alertas, erros e qualquer outro evento normal. Full todas mensagens. -F Force Access (Servidor) Fora o acesso ao banco de dados em estado de recovery (recuperao) para um shutdown de emergncia. -fc n Schema Field Cache Size (Cliente) O esquema de campo em cache reduz a compilao de instrues SQL por uma pr-alocao dos campos em memria. Use sempre o mximo de campos em cache para otimizar instrues. Por padro o Progress consome 150 bytes adicionais da mmoria por esquema de Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
242
Dominando o Progress campo usado em cache, e novas solicitaes/uso de campos sero obtidas deste cache. Valor 0 (zero) desabilita campos em cache. Mnimo: 0 Padro: 128
-fldisable
Field List Disable (Cliente) Ignora a lista de campos contidos em uma procedure compilada e obtem uma nova lista de campos da tabela a partir do metaschema.
-g arquivo
Before-image Filename (Servidor) Especifica o arquivo de Before-Image a ser utilizado na conexo do banco de dados.
-G n
Before-Image Cluster Age (Servidor) Define os segundo para reutilizao de cluster do Before-Image.
Mnimo: 60
-h n
Number of Databases Limita o nmero de banco de dados que podem ser conectados a sesso. Mnimo: 1 Mximo: 240 Padro: 5
243
Define o nome/alias do servidor aonde est o banco de dados compartilhado para acesso multi-usurios. O arquivo hosts define a lista de IPs e aliases disponveis para conexo. Em Windows 95/98 a localizao do arquivo hosts C:\WINDOWS\HOSTS, em Windows NT
diretrios padres de instalao de cada SO mencionado). -H servidor AS/400 Host Name (Servidor) Define o nome do servidor para uma sesso multi-usurio em AS/400. -hardlimit Hardlimit (Servidor) Habilita o excesso dos limites para parmetros que tm, por padro, reduzido consumo de recursos, incrementando os valores de parmetros de Directory Entries (-D), Local Buffer Size (-l), Maximum Memory (-mmax) e Nested Blocks (-nb). -hs s Heap Size (Servidor) Incrementa o espao da memria compartilhada pelo banco de dados. Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
244
Dominando o Progress Este parmetro relevante apenas em Sistema Operacional V UNIX. Mnimo: 1 Mximo: 2000 Padro de acordo com o Sistema Operacional
-i
No Crash Protection Grava e deleta informaes diretamente do banco de dados sem controle de transaes aumentado consideravelmente a peformance, ou seja, habilita apenas a gravao de alguns dados no Before-Image para controle, porm altamente desaconselhvel. possvel desfazer algumas transaes desde que estas estejam em bloco definido por TRANSACTION e seus dados estejam ainda em cache do cliente. Ao iniciar uma sesso sem proteo contra crash tornada uma mensagem de alerta sobre a integridade do banco de dados.
245
Informa ao Progress o arquivo INI a ser utilizado na configurao da sesso. Use com o parmetro basekey "ini" para ignorar os dados gravados na registry do Windows.
-inp n
Input Characters (Cliente) O nmero de caracteres permitidos em uma nica declarao. Padro: 4096 caracteres
-is
AS/400 Ignore Stamp (Cliente) Ignora uma conexo a um AS/400 se o arquivo cache contm informaes diferentes da estrutura do metaschema atual.
-k
Keyword Forget List Fora o Progress a aceitar declaraes cujo nome seja uma palavra reservada da linguagem. Ele retornar uma mensagem de alerta, mas continuar a execuo. Exemplo Um programa desenvolvido em verso 6 com uma varivel cujo nome uma palavra reservada na verso 8 ocasionar um erro de sintaxe. Porm voc pode remediar este problema com o parmetro k que ignorar esta
246 -L n
Dominando o Progress redundncia. Lock Table Entries (Servidor) Define o nmero de registros que podem ser travados. Cada registro acessado com a clasula SHARE-LOCK ou EXCLUSIVE-LOCK requisita um travamento individual, caso seja necessrio o lock alm do valor especificado retornada uma mensagem de erro sesso cliente, porm a sesso multi-usurio desfaz todas as transaes e mantm o processamento. Mensagem de erro SYSTEM ERROR: Record lock table too small. Increase L parameter Cada registro em lock na tabela consome 14 bytes da memria no compartilhada e cada requisio requer 18 bytes da memria compartilhada da sesso multi-usurio. Caso voc especifique um valor que no seja mltiplo de 32 este valor informado ser arredondado para o valor mltiplo mais prximo do indicado.
-ld nome
Logical Database Name (Cliente) Informa sesso o nome lgico a ser atribudo para o banco de dados
247
Define a linguagem a ser utilizada pela sesso. As linguagens disponveis depende da configurao do Progress instalado. Tipicamente as linguagens instaladas so ingls internacional, ingls americado, espanhol, alemo e francs.
-logfile arquivo
LogFile (Cliente) Especifica o arquivo de log a ser criado/usado pelo AppServer. Logname (Cliente) Especifica o arquivo de log a ser criado/usado pelo AppServer Auto Server (Servidor) Inicia a sesso multi-usurio definindo um auto-servidor. O servio multiusurio usa o servidor para inici-lo automaticamente. Porm, este servio j utilizado por padro, dispensando a passagem deste parmetro para a sesso.
-logname arquivo
-m1
-m2
Manual Server (Servidor) Inicia a sesso multi-usurio definindo manualmente um servio remoto aps o
248 -m3
Dominando o Progress incio da sesso multi-usurio. Secondary Login Broker (Servidor) Especifica um terceiro servio a ser usado para a sesso multi-usurio.
-Ma n
Maximum Clients Per Server (Servidor) Define o nmero mximo de usurios remotos por sesso multi-usurio. O padro utilizado ser o parmetro n se especificado, dividido pelo nmero mximo de servidores, parmetro Mn.
-maxport n
Maximum Dynamic Server (Servidor/Cliente) Define o intervalo mximo de portas disponveis para uma sesso cliente. Os parmetros maxport e minport definem uma faixa especfica de portas disponveis para proteo de um firewall. Geralmente o intervalo disponvel 32768 65535. Mais informaes no captulo Segurana de dados e aplicao.
-Mf n
Delayed BI File Write (Servidor) Define um intervalo em segundo para a gravao das informaes em buffer (Before-Image) para o banco de dados.
249
Este intervalo no pe em risco a integridade dos dados, porm em caso de erro os dados no armazenados no intervalo definido podero ser perdidos. Mnimo: 0 Mximo: 32768 Padro mono-usurio: 0 Padro multi-usurio: 0 -Mi n Minimum Clients Per Server (Servidor) Define o nmero mnimo de usurios remotos por sesso multi-usurio. -minport n Minimum Dynamic Server (Servidor) Define o intervalo mnimo de portas disponveis para uma sesso cliente. Veja tambm o parmetro maxport. -Mm n Message Buffer Size (Servidor/Cliente) Define a quantidade em bytes para o buffer de mensagens padro. -mmax n Maximum Memory (Cliente) Define um valor inicial em kilobytes para alocar procedures compiladas. -Mn Maximum Servers (Servidor) Mnimo: 1 Mximo: 512 Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
250 -Mp n
Dominando o Progress Padro multi-usurio: 4 Servers Per Protocol (Servidor) Define o nmero de servidores que podem ser iniciados por usurios remotos com qualquer protocolo.
-Mpb n
Maximum Servers Per Protocol (Servidor) Define o nmero mximo de servidores por protocolo.
-Mr n
Record Buffer Size (Cliente) Define o tamanho em bytes para o buffer de registros. Mnimo: 96 Mximo: 32.000 Padro multi-usurio: 1012
-Mv n
Maximum Open Files (Servidor/Cliente) Define o nmero mximo de arquivos abertos para o Sistema PTX.
-Mxs n
Shared Memory Overflow Size (Servidor) Configura o tamanho da memria compartilhada em overflow em kilobytes Este parmetro substitue os valores padres atuais e realoca a memria compartilhada.
Criando & Definindo os Dados Mnimo: 1 Mximo: memria fsica disponvel Padro multi-usurio: 15 kilobytes + (n * 300) -n n Number of Users (Servidor) Define o nmero mximo de usurio para conexo ao banco de dados. -N protocolo Network Type (Cliente) Define o tipo de protocolo/rede para conexo ao banco de dados.
251
Os protocolos disponveis pelo Progress so: TCP, DECnet, NETBIOS, TLI, DDE (Windows e Releases 7.3A ou superiores), WIPC (Windows e Release 7.3B ou superiores), SNA, LFP, e CTOSCLUSTER. EmVMS apenas protocolos TCP e DECnet. -nb n Nested Blocks (Cliente) Define o nmero de blocos solicitados para a execuo de procedures. -Nd device Network Device (Servidor/Cliente) Especifica o caminho/localizao de um device a ser utilizado para comunicao entre processos. Aplicvel apenas para UNIX System V.3.
252 -NL
Dominando o Progress No Lock (Cliente) Difine NO-LOCK para ao comando FIND e FOR EACH como padro, caso estes estes no tenham nenhuma declarao de LOCK j especificada. aplicvel apenas por procedures compiladas por uma sesso iniciada com o parmetro NL, para procedure no compiladas ou pr-compiladas assumido o padro NO-LOCK.
-Nn Cliente
PC Client Name (Cliente) Identifica o nome do computador cliente para a conexo do banco de dados.
-Nv n
Network Version (Cliente) Especifica o nmero da verso do protocolo de conexo. Este parmetro passado do cliente para o servidor para assegurar compatibilidade.
-o impressora
Printer (Cliente) Define o nome/device da impressora a ser utilizado em um scopo de impresso. Exemplo: o "COM2" (Windows) o "ls s" (UNIX) (cdigo)
Criando & Definindo os Dados output to printer. -p procedure Startup Procedure (Cliente)
253
Especifica a procedure a ser executada. -P senha Password (Cliente) Define a senha do usurio no banco de dados. -param texto Parameter (Cliente) Declara um parmetro informativo para identificar a sesso. Por exemplo, em sua empresa voc mantm bancos de dados produo e bancos de desenvolvimento, e em tempo de execuo voc quer saber qual o banco que est sendo utilizado, ento voc especfica uma palavra para o incio da sesso, -p "desenv", e o obtm por cdigo pelo comando SESSION:PARAMETER. -pf arquivo Parameter File (Servidor/Cliente) Especifica um arquivo de parmetros a ser utilizado para iniciar uma sesso servidor ou cliente. -plm PROLIB Memory (Cliente) Aloca 512 bytes para o cache de bibliotecas.
254 -pls
Dominando o Progress PROLIB Swap (Cliente) Define o uso de arquivos temporrios .SRT para procedures compiladas.
-populate
Fast Schema Change (Cliente) Define para o Progress um mecaniscom dinmico para obteno e manipulao dos dados do metaschema.
-pp diretrio
-pwqdelay
Page Writer Queue Delay (Servidor) Especifica um nmero em milisegundos entre scan de pginas e escrita no banco de dados. Mnimo: 0 Padro multi-usurio: 100
-pwqmin n
Page Writer Queue Minimum (Servidor) Define um nmero mnimo de buffers a serem requeridos para gravao no banco de dados antes que o APW os grave no disco. Mnimo: 0 Padro multi-usurios: 1
255
-pwsdelay n
Page Writer Scan Delay (Servidor) O nmero de segundos de intervalo entre cada procura de buffers para gravao no banco de dados pelo APW. Mnimo: 0 Padro multi-usurio: 1
-pwwmax n
Page Writer Maximum Buffers (Servidor) Define um nmero mximo de buffers a serem requeridos para gravao no banco de dados antes que o APW os grave no disco. Mnimo: 0 Padro multi-usurios: 25
-q
Quick Request (Cliente) Mantm uma procedure residente em memria para uso/acesso dinmico para outras execues. Mais informaes no captulo Performance.
256 -Q
Dominando o Progress ANSI SQL (Cliente) Fora o uso do padro ANSI SQL para declaraes SQL afim de manter compatibilidade absoluta.
-Q2
ANSI SQL Client (Cliente) Mantm compatibilidade com o padro ANSI SQL89 para transaes.
-r
Buffered I/O (Servidor) Habilita a gravao em buffer de I/O para o Before-Image. Muita ateno para este parmetro porque ele coloca a integridade do banco de dados em risco. Geralmente quando conectado a um banco localizado em um drive remoto ou removvel o Progress automaticamente informa sobre o perigo de crash quanto ao dispositivo, que no caso de falha o banco de dados s poder ser restaurado por meio de backup.
M Este
modo de conexo extremamente perigoso para a integridade dos dados. Em caso de falha apenas por meio de backup pode-se recuperar os dados.
-rand n
257
Define um nmero base a ser utilizado para gerao de valores randmicos. Mnimo: 1 Mximo: 2 Padro: 1 -rg Run 4GL Client (Cliente) Define que o Progress utilizado 4GL Full, caso voc tenha mais de um tipo de configurao instalada no seu Progress atual. -RO Read-Only (Cliente) Define que o banco de dados conectado ser apenas para leitura. -rptint n License Usage Reporting Interval (Servidor) Define um intervalo, em minutos, para a sesso multi-usurios informar o uso das licenas. -rq Run Query Client (Cliente) Define que o Progress utilizado ser apenas Client para limitar o acesso dos clientes. -rr Run Run-time Client (Cliente) Define que o Progress utilizado ser apenas Client para limitar o acesso dos clientes. Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
258 -s n
Dominando o Progress Stack Size (Cliente) Define o nmero para o tamanho de stack da rea da memria compartilhada pela sesso multi-usurios em 1K(1024 bytes). Apenas utilize este parmetro caso ocorra algum erro solicitando o incremente deste parmetro por uma tabela que ultrapasse os valores padres, como os erros abaixo:
SYSTEM ERROR: stkpush: stack overflow. Increase -s parameter. SYSTEM ERROR: stkditem: stack overflow. Increase -s parameter.
Mnimo: 3 Mximo: 63 Padro: 40 -S servio Service Name (Servidor/Cliente) Especifica o nome/alias do servio multiusurio definido na sesso multiusurio. Este servio deve estar definido no arquivo services com o nome/alias, porta e protocolo. A localizao em Windows 95/98 o diretrio do Windows, se em Windows NT diretrio do NT\system32\drivers\etc e UNIX /etc.
Criando & Definindo os Dados -Sn servio AS/400 Server Program Name (Servidor/Cliente) Igual ao parmetro S -spin n Spin Lock Retries (Servidor)
259
Define o nmero de vezes que um processo tentar ser concludo antes de um intervalo. -stream Cdigo Pgina Stream (Cliente) Especifica um Cdigo de Pgina a ser utilizado para scopo de streams (sada para impressora e tela, arquivos de definies, etc). Voc pode especificar duas configuraes iso8859-1 para cdigos latinos ou ibm850 para cdigos indo-arbicos. Padro: ibm850 -stsh n Stash Area (Cliente) Define o nmero de blocos a serem alocados na rea de Stash.
Mnimo: 1 Mximo: 31 Padro: 2
-SYBc n
SYBASE Connections (Cliente) Nmero mximo de conexes para um banco de dados Sybase.
260
Dominando o Progress
Padro: 25
-SYBt n
SYBASE Time (Cliente) Define um timeout em segundos para uma conexo ao banco de dados Sybase.
Padro: 3
-t
Save Temp Files (Cliente) Mantem arquivos temporrios aps o encerramento de uma sesso.
-T diretrio
Temporary Directory (Cliente) Define um diretrio como repositrio de arquivos temporrios. Caso no seja especificado o parmetro o Progress assumir como padro o diretrio inicial da aplicao.
-TB n
Speed Sort (Cliente) Define um tamanho em kilobytes a ser alocado para processos de organizao.
Mnimo: 3 Mximo: 31 Padrao: 12
-TM n
Merge Number (Cliente) Define o nmero de blocos ou streams a serem mesclados simultaneamente para
261
-tok n
Token (Cliente) Define o nmero mximo de "tokens" permitidos em uma declarao Progress 4GL. Mximo: 1.600 Padro: 1024
-trig diretrio
Trigger Location (Cliente) Especifica o diretrio aonde esto localizados os arquivos dos triggers do bancos de dados.
-tstamp
Time Stamp (Cliente) Define um timer que verifica o contedo do cdigo executvel .R se equivale ao mesmo contedo do Metaschema atual.
-usrcount n
User Count (Servidor) Define o nmero de usurios permitidos para conexo ao banco de dados aps o excesso das licenas.
-U usurio
262 -vw
Dominando o Progress Video Write (Cliente) Habilita o scopo direto para o vdeo por compatibilidade com um console PC. Use em Sistema Operacional SCO para controle do stream de I/O.
-VO verso
ORACLE Version (Cliente) Define a verso do Oracle a ser conectada (Verso 6 ou 7).
-v6colon
Version 6 Colon (Cliente) Especifica compatibilidade com a verso Progress 6 para alinhamento de campos. Caso voc no especifique este parmetro o Progress desloca o campo dois caracteres a direita.
-v6q
Version 6 Query (Cliente) Define o uso de apenas um ndice para uma clasula FOR EACH. Caso no seja especificado o Progress utiliza o melhor nmero de ndice para qualquer condio.
-xc coleo
Extended Alphabet Support Especfica a tabela de coleo de Cdigos de Pgina a ser utilizada pela sesso. Este parmetro similar ao parmetro cpcoll.
263
Maiores informaes veja o manual PROGRESS Internationalization Guide. -y Statistics (Cliente) Ativa o log de estatsticas de uso e consumo dos programas. Quando uma sesso termina o Progress grava as informaes de utilizao da sesso em um arquivo log. Voc pode especificar o arquivo de sada das estatsticas definindo a varivel de ambiente CLIENTMON, como abaixo: CLIENTMON=/tmp/estat.log ; export CLIENTMON Caso voc no defina a sada o arquivo padro client.mon localizado no diretrio da aplicao. -yc Statistics with CTRL-C (Cliente) Define a criao de estatstica e desabilita o uso das teclas CTRL-C para abortar uma aplicao. Tambm substitue o comando SHOWSTATS para criao de estatsticas. Mais informaes consulte o captulo Performance -yd Segment Statistics (Cliente)
264
Dominando o Progress Define a criao de estatsticas geradas pela execuo das procedures. Armazena informaes sobre execuo de programas compilados e seus respectivos tamanhos em bytes, e criao/acessos a arquivos SRT e o consumo em bytes. Por padro estas estatsticas so armazenas no arquivo client.mon localizado no diretrio da aplicao. Mais informaes consulte o captulo Performance.
-yx
Statistics with Cross-reference (Cliente) Define a criao de estatsticas geradas pela execuo das procedures, e armazena todas as informaes de uso em um arquivo. Este arquivo por padro criado no diretrio da aplicao chamado proc.mon, caso voc queira especificar outra localizao para o arquivo deve-se configurar a varivel de ambiente. PROCMON=Localizao do Arquivo Exemplo SET PROCMON=M:\TEMP\MONITOR.LG (Windows)
PROCMON=/tmp/monitor.lg ; export PROCMON (UNIX)
265
Mais informaes consulte o captulo Performance. -yy ano Century (Cliente) Especifica um ano base para o sculo. Por exemplo, 1950 declara que anos iguais e inferiores a 50 sero do sculo 20, e anos superiores a 50 sero sculo 21. Mnimo: 1100 Mximo: 9900 Padro: 1950
266
Dominando o Progress
Os arquivos padro como Database (.DB), BeforeImage (.DB) e After-Image (.AI) quando em multivolumes eles apenas armazem dados informativos sobre a Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Criando & Definindo os Dados 267 prpria constituio e estrutura do banco de dados. Por exemplo o arquivo .DB no mais contm dados das tabelas, apenas as estruturas das mesmas, ndices, validaes, etc. Os arquivos extendidos (Dn, Bn, An) tm um tamanho fixo e inalterado como defido na estrutura de criao dos mesmos, inicialmente vazios, porm os tamanhos definidos j alocados. Os arquivos Volteis (Dn, Bn, Na) no tm um tamanho definido, porque eles sero utilizados e incrementados depois de esgotado os tamanhos definidos dos arquivos anteriores. Por exemplo, um banco multivolumes com dois arquivos de dados em 50 megas e um terceiro voltil ser esgotado o tamanho pr-definido quando este ultrapassar 100 megas em quantidade de informaes para tabelas e ndices, ento utilizando o arquivo estendido.
268
Dominando o Progress
[Diretrio/] Arquivo.Xn f n * 32
Estas definies devem estar descritas em um arquivo tipo texto com o cujo nome deve ser o mesmo do banco a ser criado e extenso st.
para o banco e informar o arquivo de estrutura, mas em muitos casos no funciona. (prostrct create banco [arquivo de descrio] ... Ento crie um arquivo de estrutura com o mesmo nome do banco desejado!
269
O exemplo acima cria uma definio com particionamento em 3 arquivos para dados com 2 megas e o quarto extendido, e dois para Before-Image e AfterImage com 1 mega.
I Lembre-se
J
sempre que o ltimo arquivo no pode informar o tamanho porque este ser um arquivo voltil. sempre aconselhvel a localizao dos arquivos AfterImage em outro disco, para possibilitar a recuperao caso acontea algum problema nos bancos de dados por motivo de falha no(s) disco(s) de produo.
Criando o Banco
Aps concludas as definies do arquivo apenas defina a varivel de ambiente DLC e o PATH, caso no definidos execute o utilitrio PROSTRCT, exemplo:
prostrct create info
Dominando o Progress Depois de criado o banco ainda no o suficiente para comear a utilizar. O Progress no permite conexo a um banco de dados, Progress pelo mesmos, caso este no contenha nenhuma definio de estrutura lgica. O banco de dados recm criado est vazio, as definies feitas foram somente quanto estrutura fsica de multivolumes ou multi-arquivos, no h no banco tabelas, usurios para obter permisses, etc. 270 Caso voc tente conectar um banco multi-volumes sem nenhuma definio de estrutura, Metaschema, ser apresentado este erro.
Quando voc cria um banco de dados simples e vazio (Empty), por exemplo, o Progress o faz a partir de um banco j existente chamado Empty.db, localizado em DLC. Liste todos os arquivos .DB e voc ver os bancos origem para o PRODB, Data Administration, CREATE TABLE e qualquer outro modo de criao de banco de dados Progress. Para colocar o banco em funcionamento voc deve copiar a estrutura de um banco j pronto para o banco multi-volumes criado utilizando o utilitrio PROCOPY, exemplo:
Sintaxe: PROCOPY Banco de Origem Banco Destino
Digite este comando, lembrando-se que a varivel de ambiente DLC deve est referenciada adequadamente. Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
271
Pronto! O banco multi-volumes esta criado. A conexo da mesma forma que um banco de dados simples. O gerenciamento dos arquivos todo por conta do Progress.
272
Dominando o Progress
MAGNUS
Apresentao
Ser discutido neste captulo diversos assuntos relativos ao sistema de gesto empresarial MAGNUS Datasul, baseado em maior parte no MAGNUS verso I modo Grfico para ambiente Windows, ser discutido e mostrado telas e detalhes para ambiente UNIX, porm em menor quantidade.
273
J
AJP CTP CEP CCP REP ESP PTP Ajuda
Contabilidade Estoque Compras Recebimento Programas especficos desenvolvidos pelo cliente Patrimnio OUTROS...
274
Dominando o Progress
Funcionamento do MENU
Hierarquia/Relacionamento
SISTEMA ROTINA PROGRAMA O grfico abaixo demonstra a lgica dos relacionamentos e permisses de acesso a cada SISTEMA, ROTINA e/ou PROGRAMA.
Exemplo
/* ex0036.p */ define variable c-programas as character. for each sistema: display sistema.sigla sistema.nome sistema.permissao format "x(40)".
275
= = = = = = = = = = = = =
rotina.programa[01] or rotina.programa[02] or rotina.programa[03] or rotina.programa[04] or rotina.programa[05] or rotina.programa[06] or rotina.programa[07] or rotina.programa[08] or rotina.programa[09] or rotina.programa[10] or rotina.programa[11] or rotina.programa[12] or rotina.programa[12]:
assign c-programas = rotina.programa[01] +','+ rotina.programa[02] +','+ rotina.programa[03] +','+ rotina.programa[04] +','+ rotina.programa[05] +','+ rotina.programa[06] +','+ rotina.programa[07] +','+ rotina.programa[08] +','+ rotina.programa[09] +','+ rotina.programa[10] +','+ rotina.programa[11] +','+ rotina.programa[12] +','+ rotina.programa[12]. display entry(lookup(programa.programa, c-programas), 'a,b,c,d,e,f,g,h,i,j,k,l,m') programa.programa programa.permissao format "x(40)" with no-box no-labels. end. end. end.
276
Dominando o Progress
/********************************************************** * Programa...: ACESSOMG.P * Programador: Marcio Brener * Finalidade.: Consistencia das permissoes para execucao * de programas * Data.......: **********************************************************/ define input parameter c-programa like programa.programa. /* Ignora verificacao se usuario ADM ou SUPER */ if userid("mgadm") = "adm" or userid("mgadm") = "super" then return. /* Verifica se o usuario atual tem USERID do MAGNUS */ find _user where _user._userid = userid("mgadm") no-lock no-error. if not available _user then do: bell. message "Usuario nao autorizado no MAGNUS" view-as alert-box warning title "Acesso negado". return error. end. /* Verifica se o programa esta cadastrado no MAGNUS para acessos */ find programa where programa.programa = c-programa no-lock no-error. if not available programa then do: bell. message "Programa nao cadastrado no MAGNUS" view-as alert-box warning title "Acesso negado". return error. end. /* Verifica se e permitido para todos */ if lookup("*", programa.permissao) > 0 then return. /* Verifica se tem permissao para o USERID do MAGNUS */ if lookup(userid("mgadm"), programa.permissao) > 0 then return.
277
Bancos Histricos
Quando encerrado um perodo fiscal, 1 ano, necessrio fazer os fechamentos contbeis do perodo e inciar um novo exerccio fiscal. Um problema comum s empresas o histrico deste exerccio encerrado, at mesmo por no ter o mdulo de Bancos Histricos do MAGNUS, ento a soluo manter os bancos de dados deste perodo encerrado parte para futuras consultas, conforme exigncias legais. Os bancos de dados histricos devem ser consultados, porm nunca alterado. Ento como garantir acesso somente para consulta? Para isso a melhor forma garantir o contedo dos dados inalterados a partir do prprio banco de dados com permisso somente para leitura pelos clientes, o programa abaixo mostra como fazer isso.
278
Exemplo
Dominando o Progress
/* ex0034.p */ /* Este programa concede permisso somente aos usurios ADM e SUPER para modificao de dados */ /* Banco Administrativo */ for each mgadm._file where mgadm._file._file-name <> "maxusadm" and mgadm._file._file-name <> "prog-log" and mgadm._file._file-name <> "log-mensagem" exclusive-lock: assign mgadm._file._can-create mgadm._file._can-delete mgadm._file._can-write mgadm._file._can-read mgadm._file._can-dump mgadm._file._can-load = = = = = = "adm,super" "adm,super" "adm,super" "*" "adm,super" "adm,super".
for each mgadm._field of mgadm._file exclusive-lock: assign mgadm._file._can-write = "adm,super" mgadm._file._can-read = "*". end. end. /* Banco Comercial */ for each mgcom._file exclusive-lock: assign mgcom._file._can-create = mgcom._file._can-delete = mgcom._file._can-write = mgcom._file._can-read = mgcom._file._can-dump = mgcom._file._can-load =
for each mgcom._field of mgcom._file exclusive-lock: assign mgcom._file._can-write = "adm,super" mgcom._file._can-read = "*". end. end. /* Banco Industrial */
279
for each mgind._field of mgind._file exclusive-lock: assign mgind._file._can-write = "adm,super" mgind._file._can-read = "*". end. end. /* fim do programa */
Voc poderia tambm iniciar a sesso cliente com o parmetro somente leitura -RO, mas no banco de dados administrativo do MAGNUS, mgadm, necessrio a leitura, gravao e deleo de registros para se utilizar o sistema.
Dominando o Progress 280 Dicionrio de Dados), caso voc tenha faa os seguintes passos:
Configure a sesso servidor UNIX adequadamente para conexo do Windows:
1. Edite o arquivo /etc/services e inclua ao final deste os servios dos bancos de dados que sero utilizados para identificaes por parte das conexes clientes Windows, exemplo:
mgadm mgcom mgind 8030/tcp 8031/tcp 8032/tcp
2. A carga do banco de dados inclua a informao do servio a ser utilizado pelo banco, exemplo:
Carga do banco Administrativo proserve -db i00adm -S mgadm -N tcp ... Configure a sesso cliente Windows adequadamente para o MAGNUS:
1.
Crie um diretrio local na mquina de desenvolvimento ou ento no servidor para serem instalados os arquivos de programas do MAGNUS, isso ocupar em mdia 300 megabytes; Transfira os programas por FTP para o diretrio j criado. Ser mais fcil se voc transferir o diretrio inteiro do MAGNUS de uma s vez para o Windows;
2.
3.
Criando & Definindo os Dados 281 Voc pode apagar todos os arquivos .R, eles no sero necessrios para desenvolvimento porque apenas ocuparo mais espao, e voc j tem os programas .P que funcionam; Edite um arquivo .INI para o MAGNUS (MAGNUS.INI) igual ao descrito no captulo Configurao do Produto, Listagem do arquivo Progress.ini, ao qual ser utilizado para iniciar o MAGNUS. Lembre-se de configurar corretamente os valores para o PROPATH, DLC PROCFG, PROMSG, etc; Edite o arquivo host localizado no diretrio do Windows, caso no exista o crie e informe o nmero do IP do Servidor dos Bancos de Dados e o Nome/Alias do Servidor, exemplo:
172.35.1.10 servidor_magnus
4.
5.
6.
Edite o arquivo services localizado no diretrio do Windows, caso no exista o crie e informe os Nomes/Aliases dos servios e os Nmeros dos Servios iniciados, igual editado no arquivo /etc/services do Servidor UNIX.
mgadm mgcom mgind 8030/tcp 8031/tcp 8032/tcp
Em Windows NT a localizao Diretrio do NT\SYSTEM32\DRIVERS\ETC\hosts e services. Saiba tambm que o padro utilizado pelo Progress o arquivo HOSTS e no LMHOSTS!
282 7.
Dominando o Progress No arquivo de parmetros (.pf) de conexo do MAGNUS o faa da seguinte maneira:
Arquivo MAGNUS.PF -db i00adm -ld mgadm -H servidor_magnus #igual ao nome definido no arquivo hosts -S mgadm
#igual ao nome definido no arquivo services
Refaa estes procedimentos para os bancos Comercial e Industrial. 8. Faa um atalho com a seguinte sintaxe:
ALVO
Diretrio do MAGNUS
o uso do arquivo INI, ao invs de valores padres na Registry do Windows. Caso voc esteja utilzando Progress 7 no o especifique.
283
programa inicial do menu chamado MENU7.P, e caso voc no tenha os arquivo das imagens de bitmap, localizadas no diretrio IGP, voc precisa obt-las pela BBS Datasul e colocas neste dirtorio! Saiba que mesmo em Windows ao indicar um arquivo deve-se usar sempre barra estilo UNIX (run esp/es0001.p) e os diretrios do PROPATH. Sempre!
Pronto! Voc j pode desenvolver em Windows e depois de editadas e testadas as procedures apenas as transfira por FTP para o UNIX e compile-as.
284
Dominando o Progress
Criando os bancos
Obviamente ideal cri-los a partir dos bancos de atuais em uso, para maior fidelidade produo, ento sigas os passos a seguir: 1. Tire do ar todas as sesses que esto utilizando os bancos de testes atuais, como exitam; 2. Tire os bancos de testes do ar; 3. Copie os bancos produo para o bancos teste. Lembre-se sempre de tirar do ar os bancos de produo antes de fazer as cpias para a rea de testes e se possvel trunque o Before-Image do banco. Use o PROCOPY preferencialmente, ou ento por meio do prprio sistema operacional (COPY, CP, EXPLORER, etc);
Caso voc precise fazer uma cpia para testes, mas no possa finalizar o banco em produo faa um BACKUP ON-LINE e o restaure na rea de testes! Sintaxe:
Criando & Definindo os Dados 285 probkup online Banco Destino, exemplo: probkup online i00adm d:\desenv\i00adm, em UNIX AIX probkup online i00adm /dev/rmt0. Restaurando: prorest i00adm d:\desenv\i00adm, UNIX AIX prorest i00adm /dev/rmt0.
Exitem duas opes para backup, pelo utilitrio do Progress PROBACKUP ou por aplicativos prprios do Sistema Operacional ou ainda terceiros. O backup do Progress, PROBACKUP, tem diversas funes especficas para esta tarefa, nele possvel especificar o nmero de redundncia de gravao do banco, afim de evitar algum problema fsico em um pedao da fita; ele pode ser restaurado em qualquer local especfico, como tambm apenas incremental. Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress Em UNIX no aconselhvel utilizar o PROBACKUP, caso voc precise armazenar mais que 1(um) banco por fita. Isso porque ele apagar todo o contedo da mesma para o backup de um banco. 286 Antes de iniciar o backup voc deve, sempre, baixar o banco, se possvel tambm truncar o Before-Image. O script abaixo demonstra como proceder em UNIX e/ou Windows NT:
dos bancos de dados tm a nomenclatura de I00[sigla], como Administrativo I00adm, Comercial I00com, etc.
wall "Senhores usurios, o backup iniciara em 1 minuto! Por favor finalizem seus trabalhos" sleep 60 cd /bases/magnus DLC=/sistemas/dlc ; export DLC PATH=/usr/bin:$DLC:$DLC/bin ; export PATH #Baixa os bancos de dados proshut i00adm -by proshut i00com -by proshut i00ind -by #Trunca proutil proutil proutil o Before-Image i00adm -C truncate bi i00com -C truncate bi i00ind -C truncate bi
#Use CPIO ou TAR para backup find ./ -name i00* | cpio -ovcB > /dev/rmt0 > backup.log tar -cvf i00* /dev/rmt0 > backup.log #Marque o banco de dados como "backupado" rfutil i00adm -C mark backedup
287
#Carregue os bancos de dados proserve i00adm ... parmetros proserve i00com ... parmetros proserve i00ind ... parmetros wall "Senhores usuarios! O sistema MAGNUS ja esta no ar novamente! #fim do script
Windows NT
REM Script para Backup dos Bancos de Dados MAGNUS @echo off net send DOMNIO "Senhores usurios o backup esta send iniciado. Finalize seu trabalho!" d: cd \bases\magnus set DLC=c:\sistemas\dlc set PATH=%PATH%;%DLC%;%DLC%/bin REM Baixa os bancos de dados proshut i00adm -by proshut i00com -by proshut i00ind -by REM Trunca o Before-Image proutil i00adm -C truncate bi proutil i00com -C truncate bi proutil i00ind -C truncate bi backup i00* [DESTINO] /F:backup.log REM Marque o banco de rfutil i00adm -C mark rfutil i00com -C mark rfutil i00ind -C mark REM Carregue os proserve i00adm proserve i00com proserve i00ind dados como "backupado" backedup backedup backedup
288
Dominando o Progress
net send DOMNIO "Senhores usuarios! O sistema MAGNUS ja esta no ar! REM fim do script
289
/* ex0035.p */ define new shared variable l-implanta as logical init yes. define new shared variable i-cod030 like empresa.ep-codigo. define variable v-ep-codigo like empresa.ep-codigo. form v-ep-codigo at row 1 column 8 colon-aligned validate(can-find(empresa where empresa.ep-codigo = input frame f-empresa v-ep-codigo), "Empresa nao cadastrada") empresa.nome at row 1 column 14 left-aligned nolabels view-as text with frame f-empresa row 10 centered overlay sidelabels title "Empresa". update v-ep-codigo with frame f-empresa editing: readkey. if frame-field = "v-ep-codigo" and lookup(keyfunction(lastkey), "tab,return,get") > 0 then do: if keyfunction(lastkey) = "get" then do: run cdp/cdz0104.p. assign v-ep-codigo = i-cod030. display i-cod030 @ v-ep-codigo
290
Dominando o Progress
with frame f-empresa.
end. else apply lastkey. find empresa where empresa.ep-codigo = input frame f-empresa v-epcodigo no-lock no-error. if available empresa then display empresa.nome with frame f-empresa. else display "" @ empresa.nome with frame f-empresa. end. else apply lastkey. end.
Para se saber quais so as variveis solicitadas pelo zoom simplesmente execute o programa (run) e observe os nomes das variveis no criadas no retorno do erro.
Shared variable [nome da varivel] has not been created. (392)
291
292
Dominando o Progress
293
Captulo n
O NetTerm o aplicativo de telnet apresentado neste livro certamente um dos melhores telnets existes, e melhor ainda, ele shareware. Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
Dominando o Progress Mude o logotipo padro do NetTerm para a marca da sua empresa ou pessoal, para tal apenas substitua o arquivo logo.bmp localizado no diretrio de instalao do aplicativo para um bitmap do seu logotipo. 294
GO HELP INSERT-MODE EXIT GET PUT RECALL CLEAR NEW-LINE DELETE-LINE BREAK-LINE APPEND-LINE
Obtenha uma cpia em: InterSoftware@compuserve.com Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
295
Kea!X
O Kea!X tambm foi utilizado na edio deste livro, as telas do Progress em ambiente X-Windows (OSF-Motif) foram capturadas atravs dele. O Kea!X um tipo de telnet grfico, ele simula um console X-Windows exatamente como se voc estive em frente a estao servidora em uma janela Windows 95/98/NT. Obtenha uma cpia de avaliao em: http://www.attachmate.com/
296
Dominando o Progress
PCase
O PCase uma ferramenta CASE desenvolvida em Progress v8 utilizando, tambm, OCX e DLLs. Ela possui engenharia inversa e reversa para bancos de dados Progress.
297
http://tools4progress.com/
Viper
Editor de relatrios grficos para Progress Obtenha um cpia em http://tools4progress.com
ERWin
Outra ferramente CASE bastante popular que tem tambm disposio para Progress, atravs de arquivos de definies (.df).
298
Dominando o Progress
Visual PCL
Ferramenta para pr-visualizao de arquivos tipo PCL, muito til para quem usa impresso neste formato. Obtenha uma cpia em http://www.visual.co.uk
299
P R OGR E S S S OFT WA R E BR A S IL
Site oficial da Progress no Brasil totalmente em portugus. Este um timo referencial para informaes sobre cursos certificados pela Progress, consultoria, compra e atualizao de softwares Progress e qualquer outro servio sobre Progress no Brasil. http://www.progress-software.com.br
D A TA S UL
O site do fabribrante dos Sistema MAGNUS e MAGNUS EMS, com suporte ao usurio, dados sobre os sistemas, informaes de marketing e diversos outros temas sobre Gesto Empresarial. http://www.datasul.com.br
Dominando o Progress 300 Sem dvida o melhor endereo na Internet para obteno de ajuda e informaes sobre qualquer tema Progress. O Progress User Mail dividido em vrias partes: linguagem, banco de dados, smart-objects, WebSpeed, AppServers entre outros. Cadastre-se no PEG e receba diariamente diversos e-mail sobre perguntas e respostas Progress. http://www.peg.com
INS C R EV A -S E NO US ER GR OUP
Faa sua inscrio no Progress User Mail neste link: http://www.peg.com/lists/subscribe.html
US A ND O P R OGR ES S NO LINUX
Informaes sobre Progress no Linux http://marathon-man.com/pl/Progress-Linux-FAQ.html Escrito por Mrcio Brener - http://www.geocities.com/marcio-brener
301
PERFORMA NC E
Artigos, monografias e estudos sobre performance do Progress em vrios sistemas operacionais, ajuste de parmetros e tcnicas de programao. http://www.westnet.com/~gsmith/pperform.htm http://www.peg.com/techpapers/monographs/
S LID ES E A PR ES ENTA ES
Diversos slides, grficos, anncios e propagandas sobre Progress. http://www.peg.com/techpapers/1999Conf/
http://home.wxs.nl/~jurjen.dijkstra/prodevring/index.ht ml