segunda-feira, 28 de maio de 2007

Aumentando o seu vocabulário

Uma das maneiras de facilitar a vida do desenvolvedor que utiliza o Dialog System para criar as interfaces dos aplicativos é a utilização de vocabulários. Alguns comandos que são utilizados pelo Dialog System podem ser utilizados no próprio fonte cobol. Aqui na empresa utilizamos os vocabulários em larga escala, pois evitamos ao máximo colocar comandos dentro das GS´s que criamos. Para utilizar alguns comandos do Dialog System no fonte cobol, insira a seguinte linha logo no início do programa, antes da Identification Division:

copy dslang.cpy.

Depois de compilado o programa, você vai poder utilizar alguns comandos do Dialog System direto no seu fonte cobol. Veja a seguir, a lista de comandos:

MOVE-WINDOW window direction distance
CREATE-WINDOW window
SHOW-WINDOW window
SET-FOCUS object
UNSHOW-WINDOW window focus-target-object
DELETE-WINDOW window focus-target-object
REFRESH-OBJECT object
CLEAR-OBJECT object
VALIDATE object
GET-BUTTON-STATE button state
SET-BUTTON-STATE button state
TOGGLE-BUTTON-STATE button
DISABLE-OBJECT object
ENABLE-OBJECT object
DELETE-LIST-ITEM list-or-selection-box position count
SET-SLIDER-RANGE scroll-bar min max
SET-PAGE-VALUE scroll-bar page-size
SET-LINE-VALUE scroll-bar line-size
SET-SLIDER-POSITION scroll-bar position
SET-SLIDER-SIZE scroll-bar size
REPEAT-EVENT
SET-TOP-LIST-ITEM list-box position
SET-LIST-ITEM-STATE list-box state position
SET-AUTOSWIPE-STATE entry-field state
SET-FIELD-LIMIT entry-field len
SET-PRIVILEGE privilege-level
SET-OCCURRENCE object occurrence
COPY-PAGE page position occurence
DELETE-PAGE page
HIDE-OBJECT object
SHOW-OBJECT object
REFRESH-MENU window
SET-FIRST-WINDOW window
MAXIMIZE-WINDOW window
MINIMIZE-WINDOW window
RESTORE-WINDOW window
GET-LIST-ITEM-STATE listbox state position
GET-OCCURRENCE page occurence
GET-DESKTOP-WINDOW object-id
GET-SELECTED-LIST-ITEM listbox-id found-position start-position
GET-TOP-LIST-ITEM listbox position
INSERT-LIST-ITEM listbox text position
INVOKE-MESAGE-BOX message-box text return-value
MOVE-OBJECT-HANDLE object returned-handle
SET-COLOR object foreground-color background-color
SET-MOUSE-SHAPE object mouse-shape
SET-OBJECT-LABEL object label-text
UPDATE-LIST-ITEM listbox item-text position

Por exemplo, no seu fonte cobol você pode mudar o título de uma window ou setar o foco em um determinado objeto. Veja o exemplo:

SET-OBJECT-LABEL WIN-PRINCIPAL "Cadastro de Empresas"
SET-FOCUS PB-GRAVAR


Note que os comandos acima são realmente colocados no fonte cobol, e não no Dialog System.

Vale lembrar que para utilizar os vocabulários corretamente, a geração do "vocabulary copybook" deve sempre ser feita, quando um objeto novo é colocado na GS. Para fazer a geração do "vocabulary copybook", vá no menu File /Generate / Vocabulary copybook.

6 comentários:

Charlão disse...

Parabéns pelo blog! Muitíssimo útil!
No caso do vocabulário DS, se tenho um botão, por exemplo, e quero colocar uma rotina qualquer no evento BUTTON-SELECTED. Para usar o vocabulário uso o comando CALLOUT. Para cada evento precisarei criar um novo programa?

Alexandre Cortez. disse...

olá, Charleston... não entendi bem o que você realmente deseja fazer, mas pelo que li, no evento BUTTON-SELECTED lá no botão da GS, eu retornaria para o programa COBOL através do comando RETC e só faria chamadas a outros programas por dentro do fonte COBOL mesmo... eu sinceramente não gosto de usar o CALLOUT... criamos uma regra aqui na empresa: se o que temos que fazer dentro das GS pudermos fazer também no programa COBOL, então nós optamos por fazer dentro do programa COBOL mesmo... por isso utilizamos tanto os vocabulários... vou aguardar você me orientar melhorar quanto a sua dúvida, se eu ainda não esclareci muito pra você.. abraços...

Charlão disse...

Era isso mesmo que eu queria saber, valeu Alexandre!

Anônimo disse...

Eu uso esse procedimento, porém alguns comandos não funcionam como o "refresh-object", pq isso acontece?

Alexandre Cortez. disse...

Anderson...

"alguns comandos naõ funcionam" soa muito genérico para mim... vc precisava me dizer o que acontece com detalhes aí, pra eu entender a tua necessidade... mostra uma mensagem de erro ?.. dá erro na compilação ?.. o que acontece ?.. notou que preciso de mais informação ?.. rss... eu uso praticamente todos os vocabulários do Dialog System, sem problema algum.. o que as vezes acontece, é que vc tem uma GS com alguns campos, já utilizando vocabulários.. vc por algum motivo vc necessita criar novos campos na GS (entry´s, por exemplo) e precisa gerar um novo Copybook, vc pode ter problemas com variáveis... se esse foi o seu caso, aprenda sobre o processo de exportação de dados de uma GS em arquivo texto e um aposterior importação, para a criação de uma nova GS... infelizmente isso acontece com freqüencia por aqui também.. relaxa.. e tenha paciência com o Net.. rss... abraços...

Anônimo disse...

Bom, respondendo a sua pergunta, rsrsrs, não mostra mensagem de erro, não dá erro de compilação, e o principal e + importante, nada acontece rsrsrsrs, "simplesmente não funciona".Ah,
e quanto ao vocabulario tb pensei nisso, mas está estritamente atualizado e compativel com o que esta declarado na gs. Um dos procedimentos que tentei colocar o refresh-object: STRING NOM-ABR-GD48 " - " TL-QTD-PRO-GD48(INDICE-W)(04:02)
DELIMITED BY " " INTO TL-NOM-PRO-GD48(INDICE-W)
SET-OBJECT-LABEL BOT-TEL-T TL-NOM-PRO-GD48(INDICE-W)
REFRESH-OBJECT BOT-TEL-T
(Bom a formatação do blog deixará esse trecho de código um pouco complicado).
Esse comando pode parecer complexo, mas mesmo se tratando de um simples refresh com o vocabulario perfeito o refresh não funciona, ou seja, tenho que utilizar armengues pra poder colocar o código pra funcionar.
Quanto a paciencia, normal, nem tudo é Delphi, rsrsrsrs
Abraços