Advpl - HelpFacil

Transcrição

Advpl - HelpFacil
A Linguagem AdvPl
Revisão: 09/06/2003
A Linguagem AdvPl teve seu início em 1994, sendo na verdade uma evolução na
utilização de linguagens no padrão xBase pela Microsiga Software S.A. (Clipper, Visual
Objects e depois FiveWin). Com a criação da tecnologia Protheus, era necessário criar
uma linguagem que suportasse o padrão xBase para a manutenção de todo o código
existente do sistema de ERP Siga Advanced. Foi então criada a linguagem chamada
Advanced Protheus Language.
O AdvPl é uma extensão do padrão xBase de comandos e funções, operadores,
estruturas de controle de fluxo e palavras reservadas, contando também com funções e
comandos disponibilizados pela Microsiga que a torna uma linguagem completa para a
criação de aplicações ERP prontas para a Internet. Também é uma linguagem orientada
a objetos e eventos, permitindo ao programador desenvolver aplicações visuais e criar
suas próprias classes de objetos.
Quando compilados, todos os arquivos de código tornam-se unidades de inteligência
básicas, chamados APO´s (de Advanced Protheus Objects). Tais APO´s são mantidos
em um repositório e carregados dinamicamente pelo Protheus Server para a execução.
Como não existe a linkedição, ou união física do código compilado a um determinado
módulo ou aplicação, funções criadas em AdvPl podem ser executadas em qualquer
ponto do ambiente Advanced Protheus.
O compilador e o interpretador da linguagem AdvPl é o próprio servidor Protheus
(Protheus Server), e existe um ambiente visual para desenvolvimento integrado
(Protheus IDE) onde o código pode ser criado, compilado e depurado.
Os programas em AdvPl podem conter comandos ou funções de interface com o
usuário. De acordo com tal característica, tais programas são subdivididos nas seguintes
categorias:
Programação Com Interface Própria com o Usuário
Nesta categoria entram os programas desenvolvidos para serem executados através do
terminal remoto do Protheus, o Protheus Remote. O Protheus Remote é a aplicação
encarregada da interface e da interação com o usuário, sendo que todo o processamento
do código em AdvPl, o acesso ao banco de dados e o gerenciamento de conexões é
efetuado no Protheus Server. O Protheus Remote é o principal meio de acesso a
execução de rotinas escritas em AdvPl no Protheus Server, e por isso permite executar
qualquer tipo de código, tenha ele interface com o usuário ou não. Porém nesta
categoria são considerados apenas os programas que realizem algum tipo de interface
remota utilizando o protocolo de comunicação do Protheus.
Pode-se criar rotinas para a customização do sistema ERP Advanced Protheus, desde
processos adicionais até mesmo relatórios. A grande vantagem é aproveitar todo o
ambiente montado pelos módulos do ERP Advanced Protheus. Porém, com o AdvPl é
possível até mesmo criar toda uma aplicação, ou módulo, do começo.
Todo o código do sistema ERP Advanced Protheus é escrito em AdvPl.
Programação Sem Interface Própria com o Usuário
As rotinas criadas sem interface são consideradas nesta categoria porque geralmente
têm uma utilização mais específica do que um processo adicional ou um relatório novo.
Tais rotinas não têm interface com o usuãrio através do Protheus Remote, e qualquer
tentativa nesse sentido (como a criação de uma janela padrão) ocasionará uma exceção
em tempo de execução. Estas rotinas são apenas processos, ou Jobs, executados no
Protheus Server. Algumas vezes, a interface destas rotinas fica a cargo de aplicações
externas, desenvolvidas em outras linguagens, que são responsáveis por iniciar os
processos no servidor Protheus através dos meios disponíveis de integração e
conectividade no Protheus.
De acordo com a utilização e com o meio de conectividade utilizado, estas rotinas são
subcategorizadas assim:




Programação por Processos
Programação de RPC
Programação Web
Programação TelNet
Programação por Processos
Rotinas escritas em AdvPl podem ser iniciadas como processos individuais (sem
interface) no Protheus Server através de duas maneiras: Iniciadas por outra rotina AdvPl
através da chamada de funções como StartJob ou CallProc ou iniciadas
automaticamente na inicialização do Protheus Server (quando propriamente
configurado).
Programação de RPC
Através de uma biblioteca de funções disponível no Protheus (uma API de
comunicação), pode-se executar rotinas escritas em AdvPl diretamente no Protheus
Server, através de aplicações externas escritas em outras linguagens. Isto é o que se
chama de RPC (de Remote Procedure Call, ou Chamada de Procedimentos Remota).
O servidor Protheus também pode executar rotinas em AdvPl em outros servidores
Protheus através de conexão TCP/IP direta utilizando o conceito de RPC. Do mesmo
modo, aplicações externas podem requisitar a execução de rotinas escritas em AdvPl
através de conexão TCP/IP direta.
Programação Web
O Protheus Server pode também ser executado como um servidor Web, respondendo a
requisições HTTP. No momento destas requisições, pode executar rotinas escritas em
AdvPl como processos individuais, enviando o resultado das funções como retorno das
requisições para o cliente HTTP (como por exemplo um Browser de Internet). Qualquer
rotina escrita em AdvPl que não contenha comandos de interface pode ser executada
através de requisições HTTP. O Protheus permite a compilação de arquivos HTML
contendo código AdvPl embutido. São os chamados arquivos AdvPl ASP, para a
criação de páginas dinâmicas.
Programação TelNet
TelNet é parte da gama de protocolos TCP/IP que permite a conexão a um computador
remoto através de uma aplicação cliente deste protocolo. O Protheus Server pode
emular um terminal TelNet, através da execução de rotinas escritas em AdvPl. Ou seja,
pode-se escrever rotinas AdvPl cuja interface final será um terminal TelNet ou um
coletor de dados móvel.
Classes da Interface Visual
tSrvObject
Revisão: 22/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe mãe de todas as classes de interface.
Características
Classe abstrata inicial de todas as classes de interface do Advpl. Não deve ser
instanciada diretamente.
Propriedades
Propriedade Tipo
nLeft
Numérico.
nTop
Numérico.
nWidth
Numérico.
nHeight
Numérico.
cCaption Caractere.
cTooltip
Caractere.
lShowHint Lógico.
cMsg
Caractere.
nClrText
nClrPane
Numérico.
Numérico.
bWhen
Bloco de
código.
bValid
Bloco de
código.
blClicked
Bloco de
Descrição
Coordenada horizontal em pixels.
Coordenada vertical em pixels.
Largura em pixels.
Altura em pixels.
Título ou conteúdo do objeto.
Mensagem exibida quando objeto exibe seu tooltip.
Flag que ativa .T. ou desativa .F. a exibição do tooltip do
objeto.
Mensagem exibida na barra de status da janela principal
quando o objeto ganha foco.
Cor do texto do objeto.
Cor do fundo do objeto.
Executado quando há movimentação de foco na janela.Se
retornar .T. o objeto continua habilitado, se retornar .F. o
objeto será desabilitado.
Executado quando o conteúdo do objeto é modificado e
deverá ser validado. Deve retornar .T. se o conteúdo é válido
e .F. se conteúdo inválido.
Executado quando acionado click do botão esquerdo do
código.
Bloco de
brClicked
código.
Bloco de
blDblClick
código.
oWnd
Objeto.
lVisible
Booleano.
Objeto ou
Cargo
variável.
Bloco de
bLostFocus
código.
Bloco de
bGotFocus
código.
mouse sobre o objeto.
Executado quando acionado click do botão direito do mouse
sobre o objeto.
Executado quando acionado duplo click do botão esquerdo
do mouse sobre o objeto.
Janela onde o objeto foi criado.
Se .T. o objeto é visível, se .F. o objeto é invisível.
Conteúdo associado ao objeto.
Executado quando objeto perde foco.
Executado quando objeto ganha foco.
Métodos

SetFocus
Sintaxe SetFocus( )
Descrição Força o foco de entrada de dados mudar para o objeto.
Retorno NIL

Hide
Sintaxe Hide( )
Descrição Torna objeto invisível.
Retorno NIL

Show
Sintaxe Show( )
Descrição Torna objeto visível.
Retorno NIL

Enable
Sintaxe Enable( )
Descrição Habilita o objeto.
Retorno NIL

Disable
Sintaxe Disable( )
Descrição Desabilita o objeto.
Retorno NIL

Refresh
Sintaxe
Refresh( )
Força atualização (sincronia) de propriedades entre o programa e o
Descrição
Protheus Remote.
tFont
Revisão: 23/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe que encapsula fonte de edição.
Hierarquia
tFontAbs -> tFont
Descrição
Utilize objeto tFont para modificar a fonte padrão de controles visuais.
Propriedades
Vide classes ancestrais.
Métodos

New
Descrição
Sintaxe
Método construtor da classe.
New([acName], [nPar2], [anHeight], [lPar4], [alBold], [nPar6],
[lPar7], [nPar8], [alItalic], [alUnderline])
Parâmetro Tipo / Descrição
Caractere, opcional. Nome da fonte, o padrão é
acName
“Arial”.
nPar2
Reservado.
Numérico, opcional. Tamanho da fonte. O padrão é Parâmetros anHeight 11.
lPar4
Reservado.
alBold
Lógico, opcional. Se .T. o estilo da fonte será negrito.
nPar6
Reservado.
lPar7
Reservado.
nPar8
alItalic
Reservado.
Lógico, opcional. Se .T. o estilo da fonte será itálico.
Lógico, opcional. Se .T. o estilo da fonte será
alUnderline
sublinhado.
Retorno
O objeto criado.
Exemplo
#INCLUDE "PROTHEUS.CH"
User Function Teste()
Local oDlg, oSay
Local oFont:= TFont():New("Courier New",,-14,.T.)
DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 TITLE "My dialog" PIXEL
// Apresenta o tSay com a fonte Courier New
oSay := TSay():New( 10, 10, {|| "Mensagem"},oDlg,, oFont,,,, .T.,
CLR_WHITE,CLR_RED )
/* o comando abaixo proporciona o mesmo resultado
@ 10,10 SAY oSay PROMPT "Mensagem" FONT oFont COLOR CLR_WHITE,CLR_RED
OF oDlg PIXEL
*/
oSay:lTransparent:= .F.
ACTIVATE MSDIALOG oDlg CENTERED
Return
tControl
Revisão: 23/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe abstrata mãe de todos os controles editáveis.
Hierarquia
tSrvObject -> tControl
Características
tControl é a classe comum entre todos os componentes visuais editáveis.
Propriedades
Nome
Tipo / Descrição
Numérico. Alinhamento do controle no espaço disponibilizado pelo seu
Align
objeto parente. 0 = Nenhum (padrão), 1= no topo, 2 = no rodapé, 3= a
esquerda, 4 = a direita e 5 = em todo o parente.
Lógico. Se .T. indica que o conteúdo da variável associada ao controle foi
lModified
modificado.
Lógico. Se .T. o conteúdo da variável associada ao controle permanecerá
lReadOnly
apenas para leitura.
Numérico. Handle (identificador) do objeto sobre o qual o controle foi
hParent
criado.
Bloco de código. Executado quando o estado ou conteúdo do controle é
bChange
modificado pela ação sobre o controle.
Métodos

SetFocus
Descrição Força mudança do foco de entrada de dados para o controle.
Sintaxe SetFocus( )
REtorno NIL
tButton
Revisão: 23/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe de botão.
Hierarquia
tSrvObject -> tControl -> tButton
Descrição
Utilize a classe tButton para criar um controle visual do tipo botão.
Propriedades
Nome
Tipo / Descrição
lProcessing Lógico. Se .T. indica o botão está efetuando uma ação.
bAction
Bloco de código. Executado quando o botão é pressionado.
Métodos

New
Descrição
Sintaxe
Método construtor da classe.
New([anRow], [anCol], [acCaption], [aoWnd], [abAction],
[anWidth], [anHeight], [nPar8], [aoFont], [lPar10],
[alPixel],[lPar12],[cPar13], [lPar14], [abWhen], [bPar16], [lPar17])
Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical em pixels ou
anRow
carateres.
Parâmetros
Numérico, opcional. Coordenada horizontal em pixels
anCol
ou caracteres.
acCaption Caractere, opcional. Titulo do botão.
aoWnd Objeto, opcional. Janela ou controle onde o botão
deverá ser criado.
Bloco de código, opcional. Bloco que deverá ser
abAction
acionado quando o botão for pressionado.
anWidth Numérico, opcional. Largura do botão em pixels.
anHeight Numérico, opcional. Altura do botão em pixels.
nPar8
Reservado.
Objeto, opcional. Objeto tipo tFont com propriedades
aoFont
da fonte utilizada para o título do botão.
lPar10
Reservado.
Lógico, opcional. Se .T. considera as coordenadas
alPixel
passadas em pixels, se .F. (padrão) considera em
caracteres.
lPar12
Reservado.
cPar13
Reservado.
lPar14
Reservado.
Bloco de código, opcional. Executado quando mudança
de foco de entrada de dados está sendo efetuada na
abWhen janela onde o controle foi criado. O bloco deve retornar
.T. se o controle deve permanecer habilitado ou .F. se
não.
bPar16
Reservado.
lPar17
Reservado.
Exemplo
#include “protheus.ch”
User Function TesteGet()
Local oDlg, oButton, oCombo, cCombo, aItems:=
{“item1”,”item2”,”item3”}
cCombo:= aItems[2]
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE “Meu Combo”
oCombo:= tComboBox():New(10,10,{|u|if(PCount()>0,cCombo:=u,cCombo)},;
aItems,100,20,oDlg,,{||MsgStop(“Mudou item”)},,,,.T.,,,,,,,,,”cCombo”)
// Botão para fechar a janela
oButton:=tButton():New(30,10,”fechar”,oDlg,{||oDlg:End()},100,20,,,,.T
.)
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( “O valor é ”+cCombo )
Return NIL
tCheckBox
Revisão: 23/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe de caixa checkbox.
Hierarquia
tSrvObject -> tControl -> tCheckBox
Descrição
Utilize a classe tCheckbox quando desejar criar um controle que possua dois estados .T.
ou .F..
Métodos

New
Descrição
Sintaxe
Método construtor da classe.
New([anRow], [anCol], [acCaption], [abSetGet], [aoWnd],
[anWidth], [anHeight], [nPar8], [abClick], [aoFont], [abValid],
[anClrFore], [anClrBack], [lPar14], [alPixel], [cPar16], [lPar17],
[abWhen])
Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical em pixels ou
anRow
carateres.
Numérico, opcional. Coordenada horizontal em pixels
anCol
ou caracteres.
acCaption Caractere, opcional. Texto exibido pelo controle.
Parâmetros
Bloco de código, opcional. Bloco de código no formato
{|u| if( Pcount( )>0, <var>:= u, <var> ) } que o controle
abSetGet utiliza para atualizar a variável <var>. <var> deve ser
tipo lógico, se <var> = .T. então o controle aparecerá
checado.
Objeto, opcional. Janela ou controle onde o controle
aoWnd
deverá ser criado.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
nPar8
Reservado.
Bloco de código, opcional. Executado quando o
abClick controle click do botão esquerdo do mouse é acionado
sobre o controle.
Objeto, opcional. Objeto tipo tFont com propriedades
aoFont
da fonte utilizada para o texto do controle.
Bloco de código, opcional. Executado quando o
conteúdo do controle deve ser validado, deve retornar
abValid
.T. se o conteúdo for válido e .F. quando o conteúdo
for inválido.
anClrFore Numérico, opcional. Cor de fundo do controle.
anClrBack Numérico, opcional. Cor do texto do controle.
lPar14
Reservado.
Lógico, opcional. Se .T. as coordenadas informadas
alPixel
são em pixels, se .F. são em caracteres.
cPar16
Reservado.
lPar17
Reservado.
Bloco de código, opcional. Executado quando mudança
de foco de entrada de dados está sendo efetuada na
abWhen janela onde o controle foi criado. O bloco deve retornar
.T. se o controle deve permanecer habilitado ou .F. se
não.
Retorno
O objeto construído.
Exemplo
#include “protheus.ch”
User Function Teste()
Local oDlg, oButton, oCheck, lCheck:=.F.
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE “Meu programa”
oCheck:= tCheckBox():New(10,10,”funcionou?”,;
{|u|if( pcount()>0,lCheck:=u,lCheck)};
,oDlg,100,20,,,,,,,,.T.)
oButton:=tButton():New(30,10,”fechar”,oDlg,{||oDlg:End()},;
100,20,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
If lCheck
MsgStop( “Funcionou!” )
Endif
Return NIL
tComboBox
Revisão: 23/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe de combobox.
Hierarquia
tSrvObject -> tControl -> tComboBox
Descrição
Utilize a classe tComboBox para cria uma entrada de dados com múltipla escolha com
item definido em uma lista vertical, acionada por F4 ou pelo botão esquerdo localizado
na parte direita do controle. A variável associada ao controle terá o valor de um dos
itens selecionados ou no caso de uma lista indexada, o valor de seu índice.
Propriedades
Nome Tipo / Descrição
Array. Lista de itens, caracteres, a serem exibidos. Pode ter os seguintes
aItems formatos: a) Seqüencial, exemplo: {“item1”,”item2”,...,”itemN”} ou b)
Indexada, exemplo: {“a=item1”,”b=item2”, ..., “n=itemN”}.
nAt Numérico. Posição do item selecionado.
Métodos

New
Descrição
Sintaxe
Método construtor da classe.
New([anRow], [anCol], [abSetGet], [anItems], [anWidth],
[anHeight], [aoWnd], [nPar8], [abChange], [abValid], [anClrText],
[anClrBack], [alPixel], [aoFont], [cPar15], [lPar16], [abWhen],
[lPar18], [aPar19], [bPar20], [cPar21], [acReadVar])
Parâmetros Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical em pixels ou
caracteres.
Numérico, opcional. Coordenada horizontal em pixels
anCol
ou caracteres.
Bloco de código, opcional. Bloco de código no
formato {|u| if( Pcount( )>0, <var>:= u, <var> ) } que
o controle utiliza para atualizar a variável <var>.
abSetGet <var> deve ser tipo caracter. Se a lista for seqüencial,
o controle atualizará <var> com o conteúdo do item
selecionado, se a lista for indexada, <var> será
atualizada com o valor do índice do item selecionado.
Array, opcional. Lista de items, caracteres, a serem
exibidos. Pode ter os seguintes formatos: a)
anItems
Seqüencial, exemplo: {“item1”,”item2”,...,”itemN”}
ou b) Indexada, exemplo: {“a=item1”,”b=item2”, ...,
“n=itemN”}.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
Objeto, opcional. Janela ou controle onde o controle
aoWnd
será criado.
nPar8
Reservado.
Bloco de código, opcional. Executado quando o
abChange
controle modifica o item selecionado.
Bloco de código, opcional. Executado quando o
conteúdo do controle deve ser validado, deve retornar
abValid
.T. se o conteúdo for válido e .F. quando o conteúdo
for inválido.
anClrBack Numérico, opcional. Cor de fundo do controle.
anClrText Numérico, opcional. Cor do texto do controle.
Lógico, opcional. Se .T. as coordenadas informadas
alPixel
são em pixels, se .F. são em caracteres.
Objeto, opcional. Objeto tipo tFont utilizado para
aoFont
definir as características da fonte utilizada para exibir
o conteúdo do controle.
cPar15
Reservado.
lPar16
Reservado.
Bloco de código, opcional. Executado quando
mudança de foco de entrada de dados está sendo
abWhen efetuada na janela onde o controle foi criado. O bloco
deve retornar .T. se o controle deve permanecer
habilitado ou .F. se não.
lPar18
Reservado.
aPar19
Reservado.
bPar20
Reservado.
cPar21
Reservado.
anRow
Caractere, opcional. Nome da variável que o controle
deverá manipular, deverá ser a mesma variável
acReadVar
informada no parâmetro abSetGet, e será o retorno da
função ReadVar( ).
Retorno

O objeto criado.
Select
Descrição
Sintaxe
Muda o item selecionado no combobox.
Select( [anItem] )
Parâmetros
Parâmetro Tipo / Descrição
anItem
Numérico, opcional. Posição do item a ser selecionado.
Retorno
NIL
Exemplo
#include “protheus.ch”
User Function TesteGet()
Local oDlg, oButton, oCombo, cCombo, aItems:=
{“item1”,”item2”,”item3”}
cCombo:= aItems[2]
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE “Meu Combo”
oCombo:= tComboBox():New(10,10,{|u|if(PCount()>0,cCombo:=u,cCombo)},;
aItems,100,20,oDlg,,{||MsgStop(“Mudou item”)},;
,,,.T.,,,,,,,,,”cCombo”)
// Botão para fechar a janela
@ 40,10 BUTTON oButton PROMPT “Fechar” OF oDlg PIXEL ACTION oDlg:End()
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( “O valor é ”+cCombo )
Return NIL
tGet
Revisão: 23/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe de controle para entrada de dados editáveis.
Hierarquia
tSrvObject -> tControl -> tGet
Descrição
Use tGet para criar um controle que armazene ou altere o conteúdo de uma variável
através de digitação. O conteúdo da variável só é modicado quando o controle perde o
foco de edição para outro controle.
Propriedades
Nome
Tipo / Descrição
Lógico. Se .T. o controle se comporta como entrada de dados de senha,
lPassword
exibindo asteriscos ‘*’ para esconder o conteúdo digitado.
Picture
Caractere. Máscara de formatação do conteúdo a ser exibido.
Métodos

New
Descrição
Sintaxe
Parâmetros
Método construtor do controle.
New([anRow], [anCol], [abSetGet], [aoWnd], [anWidth],
[anHeight], [acPict], [abValid], [anClrFore], [anClrBack], [aoFont],
[lPar12], [oPar13], [alPixel], [cPar15], [lPar16], [abWhen],
[lPar18], [lPar19], [abChange], [alReadOnly], [alPassword],
[cPar23], [acReadVar], [cPar25], [lPar26], [nPar27], [lPar28])
Parâmetro Tipo / Descrição
anRow
Numérico, opcional. Coordenada vertical em pixels
ou caracteres.
Numérico, opcional. Coordenada horizontal em pixels
anCol
ou caracteres.
Bloco de código, opcional. Bloco de código no
formato {|u| if( Pcount( )>0, <var>:= u, <var> ) } que
abSetGet
o controle utiliza para atualizar a variável <var>.
<var> deve ser tipo caracter, numérico ou data.
Objeto, opcional. Janela ou controle onde o controle
aoWnd
será criado.
anWidth
Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
Caractere, opcional. Máscara de formatação do
acPict
conteúdo a ser exibido.
Bloco de código, opcional. Executado quando o
conteúdo do controle deve ser validado, deve retornar
abValid
.T. se o conteúdo for válido e .F. quando o conteúdo
for inválido.
anClrFore Numérico, opcional. Cor de fundo do controle.
anClrBack Numérico, opcional. Cor do texto do controle.
Objeto, opcional. Objeto tipo tFont utilizado para
aoFont
definir as características da fonte utilizada para exibir
o conteúdo do controle.
lPar12
Reservado.
oPar13
Reservado.
Lógico, opcional. Se .T. as coordenadas informadas
alPixel
são em pixels, se .F. são em caracteres.
cPar15
Reservado.
lPar16
Reservado.
Bloco de código, opcional. Executado quando
mudança de foco de entrada de dados está sendo
abWhen
efetuada na janela onde o controle foi criado. O bloco
deve retornar .T. se o controle deve permanecer
habilitado ou .F. se não.
lPar18
Reservado.
lPar19
Reservado.
Bloco de código, opcional. Executado quando o
abChange
controle modifica o valor da variável associada.
Lógico, opcional. Se .T. o controle não poderá ser
alReadOnly
editado.
Lógico, opcional. Se .T. o controle exibirá asteriscos
alPassword “*” no lugar dos caracteres exibidos pelo controle
para simular entrada de senha.
cPar23
Reservado.
Caractere, opcional. Nome da variável que o controle
acReadVar
deverá manipular, deverá ser a mesma variável
cPar25
lPar26
nPar27
lPar28
Retorno
informada no parâmetro abSetGet, e será o retorno da
função ReadVar( ).
Reservado.
Reservado.
Reservado.
Reservado.
O controle construído.
Exemplo
#include “protheus.ch”
User Function TesteGet()
Local oDlg, oGet1, oButton, nGet1:=0
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE “Meu Get”
oGet1:= TGet():New(10,10,{|u| if(PCount()>0,nGet1:=u,nGet1}}, oDlg,;
100,20,”@E 999,999.99”,;
{|o|nGet1>1000.00},,,,,,.T.,,,,,,,,,,”nGet1”)
/* Tem o mesmo efeito
@ 10,10 MSGET oGet1 VAR nGet1 SIZE 100,20 OF oDlg PIXEL PICTURE “@E
999,999.99” VALID nGet1>1000.00
*/
// Botão para fechar a janela
@ 40,10 BUTTON oButton PROMPT “Fechar” OF oDlg PIXEL ACTION oDlg:End()
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( “O valor é ”+Transform(nGet1,”@E 999,999.00”) )
Return NIL
tGroup
Revisão: 23/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe de painel de grupo de controles.
Hierarquia
tSrvObject -> tControl -> tGroup
Descrição
Utilize a classe tGroup para criar um painel onde controles visuais podem ser agrupados
ou classificados. É criada uma borda com título em volta dos controles agrupados.
Métodos

New
Descrição
Sintaxe
Método construtor da classe.
New([anTop], [anLeft], [anBottom], [anRight], [acCaption],
[aoWnd], [anClrText], [anClrPane], [alPixel], [lPar10])
Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical superior em
anTop
pixels ou caracteres.
Numérico, opcional. Coordenada horizontal esquerda
anLeft
em pixels ou caracteres.
Numérico, opcional. Coordenada vertical inferior em
anBottom
pixels ou caracteres.
Parâmetros
Numérico, opcional. Coordenada horizontal direita em
anRight
pixels ou caracteres.
acCaption Caractere, opcional. Título do grupo.
Objeto, opcional. Janela ou controle onde o controle
aoWnd
será criado.
anClrText Numérico, opcional. Cor do texto.
anClrPane Numérico, opcional. Cor do fundo.
Lógico, opcional. Se .T. as coordenadas informadas são
alPixel
em pixels, se .F. são em caracteres.
lPar10
Reservado.
Retorno
O objeto criado.
Exemplo
#include “protheus.ch”
User function teste()
Local oDlg, oGroup, oGet1, oGet2, cGet1:=Space(10),;
cGet2:= Space(10)
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 TITLE “My test” PIXEL
oGroup:= tGroup():New(10,10,200,200,”grupo de gets”,oDlg,,,.T.)
@ 10,10 MSGET oGet1 VAR cGet1 SIZE 100,10 OF oGroup PIXEL
@ 30,10 MSGET oGet2 VAR cGet2 SIZE 100,10 OF oGroup PIXEL
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
tListBox
Revisão: 23/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe de lista de items.
Hierarquia
tSrvObject -> tControl -> tListbox
Descrição
Utilize a classe tListbox para criar uma janela com itens selecionáveis e barra de
rolagem. Ao selecionar um item, uma variável é atualizada com o conteúdo do item
selecionado.
Propriedades
Nome Tipo / Descrição
nAt Numérico. Posição do item selecionado.
aItems Array de items caracteres. Lista do itens selecionáveis.
Métodos

New
Descrição
Sintaxe
Método construtor da classe.
New([anRow], [anCol], [abSetGet], [aaItems], [anWidth],
[anHeigth], [abChange], [aoWnd], [abValid], [anClrFore],
[anClrBack], [alPixel], [lPar13], [abLDBLClick], [aoFont],
[cPar16], [lPar17], [abWhen], [aPar19], [bPar20], [lPar21],
[lPar22], [abRightClick] )
Parâmetro
Parâmetros
anRow
Tipo / Descrição
Numérico, opcional. Coordenada vertical em pixels
ou caracteres.
Numérico, opcional. Coordenada horizontal em
pixels ou caracteres.
Bloco de código, opcional. Bloco de código no
formato {|u| if( Pcount( )>0, <var>:= u, <var> )}
abSetGet
que o controle utiliza para atualizar a variável
<var>. <var> deve ser tipo caracter ou numérica.
Array de items caracteres, opcional. Lista de items
aaItems
selecionáveis.
anWidth
Numérico, opcional. Largura do controle em pixels.
anHeight
Numérico, opcional. Altura do controle em pixels.
Bloco de código, opcional. Executado quando o
abChange
item selecionado é alterado.
Objeto, opcional. Janela ou controle onde o
aoWnd
controle será criado.
Bloco de código, opcional. Executado quando o
conteúdo do controle deve ser validado, deve
abValid
retornar .T. se o conteúdo for válido e .F. quando o
conteúdo for inválido.
anClrFore
Numérico, opcional. Cor de fundo do controle.
anClrBack
Numérico, opcional. Cor do texto do controle.
Lógico, opcional. Se .T. as coordenadas informadas
alPixel
são em pixels, se .F. são em caracteres.
lPar13
Reservado.
Bloco de código, opcional. Executado quando
abLDBLClick acionado duplo click do botão esquerdo do mouse
sobre o controle.
Objeto, opcional. Objeto tipo tFont utilizado para
aoFont
definir as características da fonte utilizada para
exibir o conteúdo do controle.
cPar16
Reservado.
lPar17
Reservado.
Bloco de código, opcional. Executado quando
mudança de foco de entrada de dados está sendo
abWhen
efetuada na janela onde o controle foi criado. O
bloco deve retornar .T. se o controle deve
permanecer habilitado ou .F. se não.
aPar19
Reservado.
bPar20
Reservado.
lPar21
Reservado.
lPar22
Reservado.
Bloco de código, opcional. Executado quando
abRightClick acionado click do botão direito do mouse sobre o
controle.
anCol
Retorno
O objeto criado.


Select
Descrição
Sintaxe
Força a seleção de um item.
Select( [anItem] )
Parâmetros
Parâmetro Tipo / Descrição
nItem
Numérico, opcional. Posição do item a ser selecionado.
Retorno
NIL


Add
Descrição
Sintaxe
Insere ou adiciona novo item.
Add( cText, nPos )
Parâmetro Tipo / Descrição
cText
Caractere, obrigatório. Texto do item.
Numérico, obrigatório. Se 0 ou maior que o número de
Parâmetros
itens, insere o item no final da lista. Se valor entre 1 e
nPos
número de itens, insere o item na posição informada,
empurrando o item anterior para baixo.
Retorno
NIL


Modify
Descrição
Sintaxe
Modifica o texto de um item.
Modify( cText, nPos )
Parâmetro Tipo / Descrição
cText
Caractere, obrigatório. Novo texto do item.
Parâmetros
Numérico, obrigatório. Posição a ser modificada deve
nPos
ser maior que 0 e menor ou igual que o número de
itens.
Retorno
NIL


Del
Descrição
Sintaxe
Apaga um item.
Del( nPos )
Parâmetro Tipo / Descrição
Parâmetros
Numérico, obrigatório. Posição a ser excluida, deve ser
nPos
maior que 0 e menor ou igual que o número de itens.
Retorno
NIL


Len
Descrição Retorna o número de itens.
Sintaxe Len( )
Retorno Numérico. Número de itens.


Reset
Descrição Apaga todos os itens.
Sintaxe Reset( )
Retorno NIL
Exemplo
#include “protheus.ch”
User Funcion Teste()
Local oDlg, oList, nList:= 1, aItems:={}
Aadd(aItems,”Item
Aadd(aItems,”Item
Aadd(aItems,”Item
Aadd(aItems,”Item
1”)
2”)
3”)
4”)
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE “Teste”
oList:= tListBox():New(10,10,{|u|if(Pcount()>0,nList:=u,nList)};
,aItems,100,100,,oDlg,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
tMeter
Revisão: 23/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe de régua de processamento.
Hierarquia
tSrvObject -> tControl -> tMeter
Descrição
Utilize a classe tMeter para criar um controle que exibe uma régua (gauge) de
processamento, descrevendo o andamento de um processo atraves da exibição de uma
barra horizontal.
Propriedades
Nome
Tipo / Descrição
Numérico. Número total de passos até o preenchimento da régua de
nTotal
processo.
lPercentage Lógico. Se .T. considera o passo de movimentação em porcentagem.
nClrBar
Numérico. Cor da barra de andamento.
Métodos

New
Descrição
Sintaxe
Método construtor da classe.
New([anRow], [anCol], [abSetGet], [anTotal], [aoWnd],
[anWidth], [anHeight], [lPar8], [alPixel], [oPar10], [cPar11],
[alNoPerc], [anClrPane], [nPar14], [anClrBar], [nPar16], [lPar17])
Parâmetro Tipo / Descrição
Parâmetros
Numérico, opcional. Coordenada vertical em pixels ou
anRow
caracteres.
Numérico, opcional. Coordenada horizontal em pixels
ou caracteres.
Bloco de código, opcional. Bloco de código no formato
{|u| if( Pcount( )>0, <var>:= u, <var> ) } que o controle
abSetGet
utiliza para atualizar a variável <var>. <var> deve ser
tipo numérico.
Numérico, opcional. Numero total de passos até o
anTotal
preenchimento da régua de processo.
Objeto, opcional. Janela ou controle onde o controle
aoWnd
sera criado.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
lPar8
Reservado.
Lógico, opcional. Se .T. as coordenadas informadas são
alPixel
em pixels, se .F. são em caracteres.
oPar10
Reservado.
cPar11
Reservado.
Lógico, opcional. Se .T. (padrão) não considera os
alNoPerc
passos de atualização em porcentagem.
anClrPane Numérico, opcional. Cor de fundo do controle.
nPar14
Reservado.
anClrBar Numérico, opcional. Cor da barra de andamento.
nPar16
Reservado.
lPar17
Reservado.
anCol
Retorno
O objeto criado.


Set
Descrição
Sintaxe
Atualiza a posição da régua de processamento.
Set( [nVal] )
Parâmetro Tipo / Descrição
Parâmetros
Numérico, opcional. Novo valor da posição da régua de
nVal
processamento.
Retorno
NIL
Exemplo
#include “protheus.ch”
STATIC lRunning:=.F., lStop:=.F.
User Function Teste()
Local oDlg, oMeter, nMeter:=0, oBtn1, oBtn2
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 TITLE “Teste”
oMeter:= tMeter():New(10,10,{|u|if(Pcount()>0,nMeter:=u,nMeter)};
,100,oDlg,100,20,,.T.) // cria a régua
// botão para ativar andamento da régua
@ 30,10 BUTTON oBtn1 PROMPT “Run” OF oDlg PIXEL ACTION
RunMeter(oMeter)
@ 50,10 BUTTON oBtn2 PROMPT “Stop” OF oDlg PIXEL ACTION lStop:=.T.
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
STATIC Function RunMeter(oMeter)
If lRunning
Return
Endif
lRunning:= .T.
oMeter:Set(0) // inicia a régua
While .T. .and. !lStop
Sleep(1000) // pára 1 segundo
ProcessMessages() // atualiza a pintura da janela, processa
mensagens do windows
nCurrent:= Eval(oMeter:bSetGet) // pega valor corrente da régua
nCurrent+=10 // atualiza régua
oMeter:Set(nCurrent)
if nCurrent==oMeter:nTotal
Return
endif
Enddo
lRunning:= .F.
lStop:= .F.
Return
tMultiGet
Revisão: 23/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe de campo Memo de edição.
Hierarquia
tSrvObject -> tControl -> tMultiGet
Descrição
Utilize a classe tMultiget para criar controle de edição de texto de múltiplas linhas.
Propriedades
Nome
Tipo / Descrição
lWordWrap Lógico. Se .T., faz quebra automática de linhas.
Métodos

New
Descrição
Sintaxe
Método construtor da classe.
New([anRow], [anCol], [abSetGet], [aoWnd], [anWidth],
[anHeight], [aoFont], [alHScroll], [anClrFore], [anClrBack],
[oPar11], [alPixel], [cPar13], [lPar14], [abWhen], [lPar16],
[lPar17], [alReadOnly], [abValid], [bPar20], [lPar21],
[alNoBorder], [alNoVScroll])
Parâmetro
anRow
Parâmetros
anCol
abSetGet
Tipo / Descrição
Numérico, opcional. Coordenada vertical em pixels
ou caracteres.
Numérico, opcional. Coordenada horizontal em
pixels ou caracteres.
Bloco de código, opcional. Bloco de código no
formato {|u| if( Pcount( )>0, <var>:= u, <var> ) } que
o controle utiliza para atualizar a variável <var>.
<var> deve ser tipo caracter.
Objeto, opcional. Janela ou controle onde o controle
aoWnd
será criado.
anWidth
Numérico, opcional. Largura do controle em pixels.
anHeight
Numérico, opcional. Altura do controle em pixels.
Objeto, opcional. Objeto tipo tFont utilizado para
aoFont
definir as características da fonte utilizada para exibir
o conteúdo do controle.
Lógico, opcional. Se .T., habilita barra de rolagem
alHScroll
horizontal.
anClrFore Numérico, opcional. Cor de fundo do controle.
anClrBack Numérico, opcional. Cor do texto do controle.
oPar11
Reservado.
Lógico, opcional. Se .T. as coordenadas informadas
alPixel
são em pixels, se .F. são em caracteres.
cPar13
Reservado.
lPar14
Reservado.
Bloco de código, opcional. Executado quando
mudança de foco de entrada de dados está sendo
abWhen
efetuada na janela onde o controle foi criado. O bloco
deve retornar .T. se o controle deve permanecer
habilitado ou .F. se não.
lPar16
Reservado.
lPar17
Reservado.
Lógico, opcional. Se .T. o controle so permitira
alReadOnly
leitura.
Bloco de código, opcional. Executado quando o
conteúdo do controle deve ser validado, deve retornar
abValid
.T. se o conteúdo for válido e .F. quando o conteúdo
for inválido.
bPar20
Reservado.
lPar21
Reservado.
alNoBorder Lógico, opcional. Se .T. cria controle sem borda.
Lógico, opcional. Se .T., habilita barra de rolagem
alNoVScroll
vertical.
Retorno
O objeto criado.


EnableVScroll
Descrição
Habilita a barra de rolagem vertical.
Sintaxe
EnableVScroll( lEnable )
Parâmetro Tipo / Descrição
Parâmetros
Lógico, obrigatório. Se .T. habilita se .F. desabilita a
lEnable
barra de rolagem.
Retorno
NIL


EnableHScroll
Descrição
Sintaxe
Habilita a barra de rolagem horizontal.
EnableHScroll( lEnable )
Parâmetro Tipo / Descrição
Parâmetros
Lógico, obrigatório. Se .T. habilita se .F. desabilita a
lEnable
barra de rolagem.
Retorno
NIL
Exemplo
#include “protheus.ch”
User Function Teste()
Local oDlg, oMemo, cMemo:= space(50)
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE “My test”
oMemo:= tMultiget():New(10,10,{|u|if(Pcount()>0,cMemo:=u,cMemo)};
,oDlg,100,100,,,,,,.T.)
@ 200,10 BUTTON oBtn PROMPT “Fecha” OF oDlg PIXEL ACTION oDlg:End()
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop(cMemo)
Return NIL
tPanel
Revisão: 23/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe de painel estático.
Hierarquia
tSrvObject -> tControl -> tPanel
Descrição
Utilize a classe tPanel quando desejar criar um painel estático, onde podem ser criados
outros controles com o objetivo de organizar ou agrupar componentes visuais.
Métodos

New
Descrição
Sintaxe
Método construtor da classe.
New([anRow], [anCol], [acText], [aoWnd], [aoFont], [alCentered],
[lPar6], [anClrText], [anClrBack], [anWidth], [anHeight],
[alLowered], [alRaised])
Parâmetro
anRow
anCol
acText
Tipo / Descrição
Numérico, opcional. Coordenada vertical em pixels.
Numérico, opcional. Coordenada horizontal em pixels.
Caractere, opcional. Texto a ser exibido ao fundo.
Objeto, opcional. Janela ou controle onde será criado o
aoWnd
objeto.
Parâmetros
Lógico, opcional. Se .T. exibe o texto de título ao
alCentered
centro do controle.
lPar6
Reservado.
anClrText Numérico, opcional. Cor do texto do controle.
anClrBack Numérico, opcional. Cor do fundo do controle.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
Lógico, opcional. Se .T. exibe o painel rebaixado em
alLowered
relação ao controle de fundo.
Lógico, opcional. Se .T. exibe a borda do controle
alRaised
rebaixada em relação ao controle de fundo.
Retorno
O objeto criado.
Exemplo
#include “protheus.ch”
User Function Teste()
Local oDlg, oPanel, oBtn1, oBtn2
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE “My test”
oPanel:= tPanel():New(10,10,””,oDlg,,,,,CLR_BLUE,100,100) // cria o
painel
@ 10,10 BUTTON oBtn1 PROMPT “hide” OF oPanel ACTION oPanel:Hide() //
cria botão sobre o painel
@ 200,10 BUTTON oBtn2 PROMPT “show” OF oDlg ACTION oPanel:Show() //
cria botão fora o painel
ACTIVATE MSDIALOG oDlg CENTERED
Return
tRadMenu
Revisão: 23/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe de radio group.
Hierarquia
tSrvObject -> tControl -> tRadMenu
Descrição
Utilize a classe tRadMenu para criar um controle que possibilita escolha de item através
de uma lista.
Propriedades
Nome Tipo / Descrição
nOption Numérico. Item selecionado.
aItems Array de caracteres. Lista de items selecionáveis.
Métodos

New
Descrição
Sintaxe
Método construtor da classe.
New([anRow], [anCol], [aacItems], [abSetGet], [aoWnd], [aPar6],
[abChange], [anClrText], [anClrPan], [cPar10], [lPar11],
[abWhen], [anWidth], [anHeight], [abValid], [lPar16], [lPar17],
[alPixel])
Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical em pixels ou
anRow
Parâmetros
caracteres.
Numérico, opcional. Coordenada horizontal em pixels
anCol
ou caracteres.
aacItems Array de caracteres, opcional. Lista de opções.
Bloco de código, opcional. Bloco de código no formato
{|u| if( Pcount( )>0, <var>:= u, <var> ) } que o controle
abSetGet
utiliza para atualizar a variável <var>. <var> deve ser
tipo numérico.
Objeto, opcional. Janela ou controle onde o controle
aoWnd
será criado.
aPar6
Reservado.
Bloco de código, opcional. Executado quando o item
abChange
selecionado é alterado.
anClrText Numérico, opcional. Cor do texto do controle
anClrPan Numérico, opcional. Cor de fundo do controle.
cPar10
Reservado.
lPar11
Reservado.
Bloco de código, opcional. Executado quando mudança
de foco de entrada de dados está sendo efetuada na
abWhen janela onde o controle foi criado. O bloco deve retornar
.T. para que o controle permaneça habilitado, ou .F. se
não.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
Bloco de código, opcional. Executado quando o
abValid conteúdo do controle deva ser validado, retornando .T.
se o conteúdo for válido, e .F. quando inválido.
lPar16
Reservado.
Lpar17 Reservado.
Lógico, opcional. Se .T. as coordenadas informadas são
alPixel
em pixels, se .F. são em caracteres.
Retorno
O objeto criado.


EnableItem
Descrição
Sintaxe
Habilita ou desabilita item.
EnableItem( [nItem], [lEnable])
Parâmetro Tipo / Descrição
nItem
Numérico, opcional. Item selecionado.
Parâmetros
Lógico, opcional. Se .T. habilita o item se .F. desabilita
lEnable
o item.
Retorno
Exemplo
NIL
#include “protheus.ch”
User Function Teste()
Local oDlg, oButton, oRadio, nRadio:=1
Local aOptions:={“escolha1”,”escolha2”}
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE “Meu Get”
oRadio:= tRadMenu():New(10,10,aOptions,;
{|u|if(PCount()>0,nRadio:=u,nRadio)},;
oDlg,,,,,,,,100,20,,,,.T.)
@ 40,10 BUTTON oButton PROMPT “Fechar” OF oDlg PIXEL ACTION oDlg:End()
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop(“Escolheu “+aOptions[nRadio] )
Return NIL
tSay
Revisão: 23/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe de label.
Hierarquia
tSrvObject -> tControl -> tSay
Descrição
O objeto tipo tSay exibe o conteúdo de texto estático sobre uma janela ou controle.
Propriedades
Nome
Tipo / Descrição
Lógico. Se .T. quebra o texto em várias linhas de maneira a enquadrar o
lWordWrap
conteúdo na área determinada para o controle, sendo o padrão .F.
Lógico. Se .T. a cor de fundo do controle é ignorada assumindo o conteúdo
lTransparent
ou cor do controle ou janela ao fundo, sendo o padrão .T.
Métodos

New
Descrição
Sintaxe
Método construtor da classe.
New([anRow], [anCol], [abText], [aoWnd], [acPicture], [aoFont],
[lPar7], [lPar8], [lPar9], [alPixels], [anClrText], [anClrBack],
[anWidth], [anHeight], [lPar15], [lPar16], [lPar17], [lPar18],
[lPar19])
Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical em pixels ou
Parâmetros anRow
caracteres.
anCol
Numérico, opcional. Coordenada horizontal em pixels
ou caracteres.
Codeblock, opcional. Quando executado deve retornar
abText
uma cadeia de caracteres a ser exibida.
Objeto, opcional. Janela ou diálogo onde o controle
aoWnd
será criado.
Caractere, opcional. Picture de formatação do conteúdo
acPicture
a ser exibido.
Objeto, opcional. Objeto tipo tFont para configuração
aoFont
do tipo de fonte que será utilizado para exibir o
conteúdo.
lPar7
Reservado.
lPar8
Reservado.
lPar9
Reservado.
Lógico, opcional. Se .T. considera coordenadas
alPixels passadas em pixels se .F., padrão, considera as
coordenadas passadas em caracteres.
anClrText Numérico, opcional. Cor do conteúdo do controle.
anClrBack Numérico, opcional. Cor do fundo do controle.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
lPar15
Reservado.
lPar16
Reservado.
lPar17
Reservado.
lPar18
Reservado.
lPar19
Reservado.
Retorno

O objeto criado.
SetText
Descrição
Sintaxe
Modifica o conteúdo a ser exibido pelo controle.
SetText( [xVal] )
Parâmetro Tipo / Descrição
Parâmetros
Caracter / Numérico / Data, Opcional. Valor a ser
xVal
exibido.
Retorno
NIL
Exemplo
#include “protheus.ch”
User Function Teste()
Local oDlg, oSay
DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 TITLE “My dialog” PIXEL
oSay:= tSay():New(10,10,{||”para exibir”},oDlg,,,,;
,,.T.,CLR_WHITE,CLR_RED,100,20)
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
tScrollBox
Revisão: 23/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe de área de scroll.
Hierarquia
tSrvObject -> tControl -> tScrollbox
Descrição
Utilize a classe tScrollbox para criar um painel com scroll deslizantes nas laterais do
controle.
Métodos

New
Descrição
Sintaxe
Método construtor da classe.
New([aoWnd], [anTop], [anLeft], [anHeight], [anWidth],
[alVertical], [alHorizontal], [alBorder])
Parâmetro
Tipo / Descrição
Objeto, opcional. Janela ou controle onde o controle
aoWnd
será criado.
anTop
Numérico, opcional. Coordenada vertical em pixels.
Numérico, opcional. Coordenada horizontal em
anLeft
pixels.
Numérico, opcional. Altura do controle em pixels.
Parâmetros anHeight
anWidth
Numérico, opcional. Largura do controle em pixels.
Lógico, opcional. Se .T. exibe a barra de scroll
alVertical
vertical.
Lógico, opcional. Se .T. exibe a barra de scroll
alHorizontal
horizontal.
alBorder
Lógico, opcional. Se .T. exibe a borda do controle.
Retorno
O objeto criado.
Exemplo
#include “protheus.ch”
User Function Teste()
Local oDlg, oScr, oGet1, oGet2, oGet3
Local cGet1, cGet2, cGet3
cGet1:= Space(10)
cGet2:= Space(10)
cGet3:= Space(10)
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL “My test”
oScr:= TScrollBox():New(oDlg,10,10,200,200,.T.,.T.,.T.) // cria
controles dentro do scrollbox
@ 10,10 MSGET oGet1 VAR cGet1 SIZE 100,10 OF oScr PIXEL
@ 50,10 MSGET oGet2 VAR cGet2 SIZE 100,10 OF oScr PIXEL
@ 150,100 MSGET oGet3 VAR cGet3 SIZE 100,10 OF oScr PIXEL
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
Classe TIBrowser
Exemplo de uso da classe TIBrowser
Revisão: 09/06/2003
Abrangência
Versão 6.09
Versão 7.10
#include "protheus.ch"
function teste()
local oDlg, oTIBrowser, oBtnNav, oBtnPrint, oBtnHome
DEFINE MSDIALOG oDlg FROM 0,0 TO 320,460 PIXEL TITLE "Teste TIBrowser"
oTIBrowser:= TIBrowser():New( 10,10, 150, 150,
"http://www.google.com", oDlg )
@ 10, 160 BUTTON oBtnNav PROMPT "Ir para Microsiga" SIZE 50,10 ACTION
oTIBrowser:Navigate("http://www.microsiga.com.br") OF oDlg PIXEL
@ 20, 160 BUTTON oBtnPrint PROMPT "Imprimir" SIZE 50,10 ACTION
oTIBrowser:Print() OF oDlg PIXEL
@ 30, 160 BUTTON oBtnHome PROMPT "Home" SIZE 50,10 ACTION
oTIBrowser:GoHome() OF oDlg PIXEL
ACTIVATE MSDIALOG oDlg CENTERED
return
TIBROWSER:GOHOME
Revisão: 09/06/2003
Abrangência
Versão 6.09
Versão 7.10
Sintaxe
TIBROWSER:GOHOME ( ) --> nil
Retorno
Tipo
(NULO)
Descrição
Este método retorna nil
Descrição
Direciona navegação para página <HOME> cadastrada no Internet Explorer
TIBROWSER:NAVIGATE
Revisão: 09/06/2003
Abrangência
Versão 6.09
Versão 7.10
Sintaxe
TIBROWSER:NAVIGATE ( < ahRef > ) --> nil
Parâmetros
Argumento
ahRef
Tipo
Descrição
Caracter Endereço da página a ser navegada
Retorno
Tipo
(NULO)
Descrição
Este método sempre retorna nil
Descrição
Troca a página a ser visualizada
TIBROWSER:NEW
Revisão: 09/06/2003
Abrangência
Versão 6.09
Versão 7.10
Sintaxe
TIBROWSER:NEW ( < anRow > , < anCol > , < anWidth > , < anHeight > , [ ainitLink
] , [ anWindow ] ) --> Retorno
Parâmetros
Argumento
anRow
anCol
anWidth
anHeight
Tipo
Descrição
Numérico coordenada vertical
Numérico Coordenada horizontal
Numérico Largura do objeto
Numérico Altura do objeto
Endereço da página inicial a ser carregada, se não
Caracter informada, carregará a página <HOME> cadastrada no
Internet Explorer.
Objeto
Janela ou componente visual onde o objeto será criado
ainitLink
anWindow
Retorno
Tipo
Objeto
Descrição
Retorna o objeto criado
Descrição
Cria uma instância do Microsoft Internet Explorer(tm) dentro de um componente visual.
Para que o objeto esteja disponível para o usuário, é necesário configurar no arquivo de
configuração do AP Remote (Ex: ap6rmt.ini ) como abaixo:
[config]
BrowserEnabled=1
ATENÇAO: A classe somente funcionará se o MS Internet Explorer estiver instalado na
máquina que está executando o AP Remote.
TIBROWSER:PRINT
Revisão: 09/06/2003
Abrangência
Versão 6.09
Versão 7.10
Sintaxe
TIBROWSER:PRINT ( ) --> nil
Retorno
Tipo
(NULO)
Descrição
Este método retorna nil
Descrição
Imprime a página que esta sendo visualizada
Exemplo de uso da Classe TWBrowse
Revisão: 16/09/2004
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versão 8.11
A função abaixo cria uma janela de dialogo, com uma twBrowse ocupando toda a
extensão do diálogo, realizando uma consulta na Tabela SX5, filtrada através do índice
1, para mostrar apenas os elementos pertencentes à tabela 01 do SX5.
Vale lembrar que, para testar o fonte abaixo, deve-se compilá-lo no projeto, e inserir
uma chamada à esta função no Menu do ERP.
#INCLUDE 'PROTHEUS.CH'
User Function TstTWBrw()
dbselectarea('SX5')
DbSetORder(1)
DEFINE MSDIALOG oDlg TITLE 'Exemplo TWBrowse' FROM 000, 000 TO 500,
600 PIXEL
oBrw := TWBrowse():New( NIL,NIL,NIL,NIL,;
{|| { SX5->X5_TABELA, SX5->X5_CHAVE, SX5->X5_DESCRI ,
str(SX5->(recno()),8,0) } },;
{ 'Tabela','Chave','Descrição', 'RECNO'},;
NIL, oDlg, "X5_FILIAL+X5_TABELA" ," 01" , "
01" ,,,,,,,,,, "SX5", .T. )
// Ajusta alinhamento do TWBrowse para pegar o dialogo inteiro
oBrw:Align
:= CONTROL_ALIGN_ALLCLIENT
ACTIVATE MSDIALOG oDlg CENTERED
Return
New
Revisão: 16/09/2004
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versão 8.11
Sintaxe
TWBrowse():New ( [ nRow ] , [ bScroll ] , [ Param25 ] , [ Param27 ] , [ nCol ] , [
nWidth ] , [ nHeigth ] , < bLine > , < aHeaders > , [ aColSizes ] , [ oWnd ] , [ cField ] , [
cTopLimit ] , [ cBottomLiit ] , [ bChange ] , [ bLDblClick ] , [ Param14 ] , [ oFont ] , [
Param16 ] , [ nClrFore ] , [ nClrBack ] , [ Param19 ] , [ Param20 ] , [ cAlias ] , [ lPixel ]
, [ Param23 ] , [ Param24 ] ) --> oObjTWBrowse
Parâmetros
Argumento
nRow
bScroll
Param25
Param27
nCol
nWidth
nHeigth
bLine
aHeaders
aColSizes
oWnd
cField
Tipo
Numérico
Descrição
Coordenada vertical inicial do Objeto.
Caso .T., habilita barra de scroll horizontal e botões de
Lógico
navegação vertical.
(NULO)
( parâmetro reservado )
(NULO)
( parâmetro reservado )
Numérico Coordenada horizontal inicial do Objeto
Numérico Tamanho horizontal do objeto
Numérico Tamanho vertical do objeto
Code-Block, que deve retornar um array, com uma
dimensão, onde devem ser retornados as strings
Code-Block
referentes aos elementos referentes às colunas do
Browse.
Array, que deve retornar um array, com uma dimensão,
Array
contendo as strings referentes aos Títulos das colunas do
Browse.
Array, com uma dimensão, onde devem ser retornados os
números referentes ào tamanho horizontal das colunas do
Array
Browse. Caso especificado NIL, os tamanhos das
colunas são calculados automaticamente.
Objeto
Objeto visual sobre o qual a tWBrowse será criada.
Utilizado para especificar a expressão de índice para
definição de limite superior e inferior do Browse. Este
Caracter
parâmetro é utilizado quando realizado um browse de
uma tabela, aberta sob um alias, com uma expressão de
índice.
cTopLimit
cBottomLiit
bChange
bLDblClick
Param14
oFont
Param16
nClrFore
nClrBack
Param19
Param20
cAlias
lPixel
Param23
Param24
Utilizado para especificar uma string, de acordo com a
chave de índice passada em cField, a ser utilizada para
Caracter
identificar o limite superior do Browse. Apenas devemos
informar conteúdo neste, caso o parâmetro cField seja
especificado.
Utilizado para especificar uma string, de acordo com a
chave de índice passada em cField, a ser utilizada para
Caracter
identificar o limite inferior do Browse. Apenas devemos
informar conteúdo neste, caso o parâmetro cField seja
especificado.
Ação a ser executada quando alterado o foco entre as
Code-Block linhas do Browse. Recebe o objeto do Browse como
parâmetro.
Ação a ser executada quando executado um dupli-clique
Code-Block
sobre uma célula do Browse.
(NULO)
( parâmetro reservado )
Objeto referente à uma fonte alternativa para exibição
Objeto
dos dados neste Browse.
(NULO)
( parâmetro reservado )
Cor de escrita dos dados no TWBrowse. Verifique cores
Numérico
disponíveis no include "colors.ch"
Cor de fundo da área da TWBrowse não preenchida com
Numérico
dados. Verifique cores disponíveis no include "colors.ch"
(NULO)
( parâmetro reservado )
(NULO)
( parâmetro reservado )
Caso o Browse seja realizado sobre uma tabela aberta,
Caracter
estecifique o alias da tabela a ser utilizada neste
parâmetro.
Caso .T., indica que as coordenadas de tela são
Lógico
especificadas em PIXELS. Caso contrário, são
coordenadas especificadas em CARACTERES.
(NULO)
( parâmetro reservado )
(NULO)
( parâmetro reservado )
Retorno
Tipo
Objeto
Descrição
Retorna uma nova instância do Objeto da Classe TWBrowse.
Descrição
Contrutor da Classe TWBrowse.
Retorna uma nova instância do Objeto da Classe TWBrowse.
Classes de Janelas
MSDialog
Revisão: 23/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe de diálogo de entrada de dados.
Hierarquia
tSrvObject -> tWindow -> tDialog -> MSDialog
Características
MSDialog deve ser utilizada como padrão de janela para entrada de dados. MSDialog é
um tipo de janela diálogo modal, isto é, não permite que outra janela ativa receba dados
enquanto esta estiver ativa.
Propriedades
Vide classes ancestrais.
Métodos

New
Descrição
Sintaxe
Método construtor da classe.
New([anTop], [anLeft], [anBottom], [anRight], [acCaption],
[cPar6], [nPar7], [lPar8], [nPar9], [anClrText], [anClrBack],
[oPar12], [aoWnd], [alPixel], [oPar15], [oPar16], [lPar17])
Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical superior em
anTop
Parâmetros
pixels ou caracteres.
Numérico, opcional. Coordenada horizontal esquerda
anLeft
em pixels ou caracteres.
Numérico, opcional. Coordenada vertical inferior em
pixels ou caracteres.
Numérico, opcional. Coordenada horizontal direita em
anRight
pixels ou caracteres.
acCaption Caractere, opcional. Título da janela.
cPar6
Reservado.
nPar7
Reservado.
lPar8
Reservado.
nPar9
Reservado.
anClrText Numérico,opcional. Cor do texto.
anClrBack Numérico,opcional. Cor de fundo.
oPar12
Reservado.
Objeto, opcional. Janela mãe da janela a ser criada,
aoWnd
padrão é a janela principal do programa.
Lógico, opcional. Se .T. considera as coordenadas
alPixel
passadas em pixels, se .F. considera caracteres.
oPar15
Reservado.
oPar16
Reservado.
nPar17
Reservado.
anBotom
Retorno
O Diálogo criado.
Exemplo
#INCLUDE “protheus.ch”
User Function Teste()
// cria diálogo
Local oDlg:=MSDialog():New(10,10,300,300,”Meu
dialogo”,,,,,CLR_BLACK,CLR_WHITE,,,.T.)
// ativa diálogo centralizado
oDlg:Activate(,,,.T.,{||msgstop(“validou!”),.T.},,{||msgstop(“iniciand
o…”) )
Return
tDialog
Revisão: 24/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe de janela de diálogo.
Hierarquia
tSrvObject -> tWindow -> tDialog
Características
Classe de janela de diálogo de entrada de dados, uso reservado, recomenda-se utilizar a
classe MSDialog que é herdada desta classe.
Propriedades
Vide classes ancestrais.
Métodos

New
Descrição
Sintaxe
Método construtor da classe.
New([anTop], [anLeft], [anBottom], [anRight], [acCaption],
[cPar6], [nPar7], [lPar8], [nPar9], [anClrText], [anClrBack],
[oPar12], [aoWnd], [alPixel], [oPar15], [oPar16], [nPar17],
[anWidth], [anHeight])
Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical superior em
anTop
pixels ou caracteres.
Parâmetros
Numérico, opcional. Coordenada horizontal esquerda
anLeft
em pixels ou caracteres.
anBotom Numérico, opcional. Coordenada vertical inferior em
pixels ou caracteres.
Numérico, opcional. Coordenada horizontal direita em
anRight
pixels ou caracteres.
acCaption Caractere, opcional. Título da janela.
cPar6
Reservado.
nPar7
Reservado.
lPar8
Reservado.
nPar9
Reservado.
anClrText Numérico,opcional. Cor do texto.
anClrBack Numérico,opcional. Cor de fundo.
oPar12
Reservado.
Objeto, opcional. Janela mãe da janela a ser criada,
aoWnd
padrão é a janela principal do programa.
Lógico, opcional. Se .T. considera as coordenadas
alPixel
passadas em pixels, se .F. considera caracteres.
oPar15
Reservado.
oPar16
Reservado.
nPar17
Reservado.
anWidth Numérico, opcional. Largura da janela em pixels.
anHeight Numérico, opcional. Altura da janela em pixels.
Retorno
O Diálogo criado.


Activate
Descrição
Sintaxe
Ativa (exibe) o diálogo. Chamar somente uma vez este método.
Activate([bPar1], [bPar2], [bPar3], [alCentered], [abValid], [lPar6],
[abInit], [bPar8], [bPar9] )
Parâmetro
bPar1
bPar2
bPar3
Tipo / Descrição
Reservado.
Reservado.
Reservado.
Lógico, opcional. Se .T. exibe a janela centralizada, .F.
alCentered
é padrão.
Parâmetros
Bloco de código, opcional. Deve retornar .T. se
abValid conteúdo do diálogo é válido, se retornar .F. o diálogo
não fechará quando solicitada de encerrar.
lPar6
Reservado.
Bloco de código, opcional. Executado quando o
abInit
diálogo inicia exibição.
bPar8
bPar9
Retorno
Reservado.
Reservado.
NIL


End
Descrição Encerra (fecha) o diálogo.
Sintaxe End( )
Retorno Lógico .T. se o diálogo foi encerrado.
Exemplo
#INCLUDE "PROTHEUS.CH"
User Function Teste()
Local oDlg
// cria diálogo
oDlg := MSDialog():New(10,10,300,300,"Meu
dialogo",,,,,CLR_BLACK,CLR_WHITE,,,.T.)
// ativa diálogo centralizado
oDlg:Activate(,,,.T.,{||msgstop("validou!"),.T.},,{||msgstop("iniciand
o...")} )
/* os comandos abaixo proporcionam o mesmo resultado
// cria diálogo
DEFINE DIALOG oDlg TITLE "Meu dialogo" FROM 10,10 TO 300,300 COLOR
CLR_BLACK,CLR_WHITE PIXEL
// ativa diálogo centralizado
ACTIVATE DIALOG oDlg CENTER ON INIT (msgstop("iniciando...")) VALID
(msgstop("validou!"),.T.)
*/
Return NIL
tWindow
Revisão: 23/02/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Classe de janela principal de programa.
Hierarquia
tSrvObject -> tWindow
Características
Classe de janela principal de programa, deverá existir apenas uma instância deste objeto
na execução do programa.
Propriedades
bInit Bloco de código. Executado quando a janela está sendo exibida.
lEscClose Lógico. Se .T. habilita o <ESC> cancelar a execução da janela.
oCtlFocus Objeto. Objeto contido na janela que está com foco de entrada de dados.
Métodos

New
Descrição
Sintaxe
Método construtor da janela.
New( [anTop], [anLeft],[anBottom], [anRight], [acTitle], [nPar6],
[oPar7] ,[oPar8],[oPar9], [aoParent], [lPar11], [lPar12],
[anClrFore], [anClrBack], [oPar15], [cPar16], [lPar17], [lPar18],
[lPar19], [lPar20], [alPixel] );
Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical superior em
nTop
Parâmetros
pixels ou caracteres.
Numérico, opcional. Coordenada horizontal esquerda
nLeft
em pixels ou caracteres.
Numérico, opcional. Coordenada vertical inferior em
pixels ou caracteres.
Numérico, opcional. Coordenada horizontal inferior em
nRight
pixels ou caracteres.
cTitle
Caractere, opcional. Título da janela.
nPar6
Reservado.
oPar7
Reservado.
oPar8
Reservado.
oPar9
Reservado.
oParent Objeto, opcional. Janela mãe da janela corrente.
lPar11
Reservado.
lPar12
Reservado.
nClrFore Numérico, opcional. Cor de fundo da janela.
nClrText Numérico, opcional. Cor do texto da janela.
oPar15
Reservado.
cPar16
Reservado.
lPar17
Reservado.
lPar18
Reservado.
lPar19
Reservado.
lPar20
Reservado.
Lógico, opcional. Se .T. (padrão) considera
lPixel
coordenadas passadas em pixels, se .F. considera
caracteres.
nBottom
Retorno

Objeto. A janela construída.
Activate
Descrição
Sintaxe
Ativa (exibe) a janela. Chamar esse método apenas uma vez.
Activate([acShow], [bPar2], [bPar3], [bPar4], [bPar5], [bPar6], [
abInit ], [bPar8], [bPar9], [bPar10], [bPar11], [bPar12] ,[bPar13],
[bPar14], [bPar15], [abValid], [bPar17], [bPar18] ).
Parâmetro Tipo / Descrição
Caracter, opcional. “ICONIZED” para janela iconizada
acShow
ou “MAXIMIZED” para janela maximizada.
bPar2
Reservado.
bPar3
Reservado.
Parâmetros bPar4
Reservado.
bPar5
Reservado.
bPar6
Reservado.
Bloco de código. Executado quando janela está sendo
abInit
exibida.
bPar8
Reservado.
bPar9
bPar10
bPar11
bPar12
bPar13
bPar14
bPar15
abValid
bPar17
bPar18
Retorno

Reservado.
Reservado.
Reservado.
Reservado.
Reservado.
Reservado.
Reservado.
Bloco de código. Executado quando a janela for
solicitada de fechar. Deverá retornar .T. se o conteúdo
da janela for válido, ou .F. se não. Se o bloco retornar
.F. a janela não fechará.
Reservado.
Reservado.
NIL
End
Descrição Solicita encerramento da janela.
Sintaxe End( )
Retorno Lógico. .T. se encerrou a janela e .F. se não.

Center
Descrição Centraliza a janela.
Sintaxe Center( )
Retorno NIL
Exemplo
#INCLUDE "PROTHEUS.CH"
USER FUNCTION Teste()
Local oWindow
Local abInit:= {||conout("ativando!")}
Local abValid:= {||conout("encerrando!"),.T.}
oWindow:= tWindow():New( 10, 10, 200, 200, "Meu
programa",,,,,,,,CLR_WHITE,CLR_BLACK,,,,,,,.T. )
oWindow:Activate("MAXIMIZED",,,,,,abInit,,,,,,,,,abValid,,)
/* os comandos abaixo proporcionam o mesmo resultado
DEFINE WINDOW oWindow FROM 10, 10 TO 200,200 PIXEL TITLE "Meu
programa" COLOR CLR_WHITE,CLR_BLACK
ACTIVATE WINDOW oWindow MAXIMIZED ON INIT abInit VALID abValid
*/
Return NIL
Classes não visuais
Classe TMailManager
Revisão: 09/06/2003
Descrição
A TMailManager é uma classe que tem por finalidade criar conexões em servidores
SMTP ou POP
Metodos
New()
Construtor do objeto.
Init( cPop, cSmtp, cUser, cPass,
nTimeOut, nPor )
Inicia uma nova conexão no servidor
Parametro
Descrição
Endereço do servidor POP, no caso de conexão SMTP passe esse como
cPop
""(branco).
Endereço do servidor SMTP, no caso de conexão POP passe esse como
cSmtp
""(branco).
cUser
Login no servidor.
cPass
Senha no servidor.
nTimeOut Time out para a conexão.
nPort
Porta para se conectar.
SmtpConnect()
Conecta com o servidor, atraves dos parametros de Init
SetSmtpTimeOut( nTimeOut )
Configura o tempo para que uma conexão estabelecida ao servidor seja finalizada por
time-out
Parametro
Descrição
nTimeOut Tempo para que a conexão seja fechada por Time-Out.
SmtpDisconnect()
Disconecta com o servidor SMTP
POPConnect()
Conecta com o servidor, atraves dos parametros de Init
SetPopTimeOut( nTimeOut )
Configura o tempo para que uma conexão estabelecida ao servidor seja finalizada por
time-out
Parametro
Descrição
nTimeOut Tempo para que a conexão seja fechada por Time-Out.
GetNumMsgs( @nNumMsg )
Retorna o numero de mensagens que existem no servidor
Parametro
Descrição
Parametro passado por referencia, retorna nele o numero de mensagens que
nNumMsg
estão no servidor.
DeleteMsg( nMsg )
Deleta uma mensagem do servidor
Parametro
Descrição
nMsg
Numero da mensagem a ser deletada.
POPDisconnect()
Disconecta com o servidor POP
TMAILMANAGER:DELETEMSG
Revisão: 09/04/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Sintaxe
TMAILMANAGER:DELETEMSG ( < nMsg > ) --> Nil
Parâmetros
Argumento
nMsg
Tipo
Descrição
Numérico Numero da mensagem a ser deletada.
Retorno
Tipo
(NULO)
Descrição
Nil
Descrição
Deleta uma mensagem do servidor
TMAILMANAGER:GETNUMMSGS
Revisão: 09/04/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Sintaxe
TMAILMANAGER:GETNUMMSGS ( < @nNumMsg > ) --> nRet
Parâmetros
Argumento
nNumMsg
Tipo
Descrição
Parametro passado por referencia, retorna nele o numero
Numérico
de mensagens que estão no servidor.
Retorno
Tipo
Numérico
Descrição
0 = Lista recebida com sucesso
Descrição
Retorna o numero de mensagens que existem no servidor
TMAILMANAGER:INIT
Revisão: 09/04/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Sintaxe
TMAILMANAGER:INIT ( < cPop > , < cSmtp > , < cUser > , < cPass > , [ nTimeOut ]
, [ nPort ] ) --> Nil
Parâmetros
Argumento
cPop
cSmtp
cUser
cPass
nTimeOut
nPort
Tipo
Descrição
Endereço do servidor POP, no caso de conexão SMTP
Caracter
passe esse como ""(branco).
Endereço do servidor SMTP, no caso de conexão POP
Caracter
passe esse como ""(branco)
Caracter Login no servidor.
Caracter Senha no servidor.
Numérico Time out para a conexão.
Numérico Porta para se conectar.
Retorno
Tipo
(NULO)
Descrição
Nil
Descrição
Inicia uma nova conexão no servidor
TMAILMANAGER:NEW
Revisão: 09/04/2003
Abrangência
Versão 5.07
Versão 5.08
Sintaxe
TMAILMANAGER:NEW ( ) --> oServer
Retorno
Tipo
Objeto
Descrição
Construtor do objeto.
Descrição
Construtor do objeto.
Versão 6.09
Versão 7.10
TMAILMANAGER:POPCONNECT
Revisão: 09/04/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Sintaxe
TMAILMANAGER:POPCONNECT ( ) --> Nil
Retorno
Tipo
(NULO)
Descrição
Nil
Descrição
Conecta com o servidor, atraves dos parametros de Init
Versão 7.10
TMAILMANAGER:POPDISCONNECT
Revisão: 09/04/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Sintaxe
TMAILMANAGER:POPDISCONNECT ( ) --> nRet
Retorno
Tipo
Numérico
Descrição
0 = Disconectado
Descrição
Disconecta com o servidor POP
Versão 7.10
TMAILMANAGER:SETPOPTIMEOUT
Revisão: 09/04/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Sintaxe
TMAILMANAGER:SETPOPTIMEOUT ( < nTimeOut > ) --> nRet
Parâmetros
Argumento
nTimeOut
Tipo
Descrição
Numérico Tempo para que a conexão seja fechada por Time-Out.
Retorno
Tipo
Numérico
Descrição
0 = Time out setado
Descrição
Configura o tempo para que uma conexão estabelecida ao servidor seja finalizada por
time-out
TMAILMANAGER:SETSMTPTIMEO
UT
Revisão: 09/04/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Sintaxe
TMAILMANAGER:SETSMTPTIMEOUT ( < nTimeOut > ) --> nRet
Parâmetros
Argumento
nTimeOut
Tipo
Descrição
(NULO) Tempo para que a conexão seja fechada por Time-Out.
Retorno
Tipo
(NULO)
Descrição
0 - Time out configurado
Descrição
Configura o tempo para que uma conexão estabelecida ao servidor seja finalizada por
time-out
TMAILMANAGER:SMTPCONNECT
Revisão: 09/04/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Sintaxe
TMAILMANAGER:SMTPCONNECT ( ) --> nRet
Retorno
Tipo
Numérico
Descrição
0 - Conectado
Descrição
Conecta com o servidor, atraves dos parametros de Init
Versão 7.10
TMAILMANAGER:SMTPDISCONNE
CT
Revisão: 09/04/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Sintaxe
TMAILMANAGER:SMTPDISCONNECT ( ) --> nRet
Retorno
Tipo
Numérico
Descrição
0 = Disconectado
Descrição
Disconecta com o servidor SMTP
Versão 7.10
TMAILMESSAGE:SEND
Revisão: 14/04/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Sintaxe
TMAILMESSAGE:SEND ( < oServer > ) --> nRet
Parâmetros
Argumento
oServer
Tipo
Descrição
Caracter Instancia do servidor criado (SMTP).
Retorno
Tipo
Numérico
Descrição
0 = E-mail enviado com sucesso
Descrição
Envia o e-mail recebendo como parametro a instancia do servidor criado (SMTP).
tSocketClient
Revisão: 30/06/2003
Abrangência
Versão 6.09
Versão 7.10
Versão 8.11
Descrição
Esta classe permite estabelecer uma conexão cliente de socket do tipo TCP genérica.
Enviar e receber dados através de uma socket genérico e também pode ser usada como
base para implementação de protocolos não suportados pelo protheus.
Métodos
Método
CloseConnection
Connect
IsConnected
New
Receive
Reset
Send
Descrição
Finaliza a conexão TCP genérica (socket ) do objeto corrente.
Estabelece um conexão TCP genérica (socket ).
Verifica se existe conexão valida no objeto corrente.
Cria o objeto tSocketClient, sem conexão ativa.
Recebe os dados pela conexão ativa do objeto, qualquer tipo de
dado pode ser recebido.
Finaliza anormalmente a conexão, não avisa o outro lado que a
conexão será finalizada.
Deve ser utilizado apenas em casos extremos.
Transmite o buffer pela conexão TCP Genérica ativa.
CloseConnection
Revisão: 30/06/2003
Abrangência
Versão 6.09
Versão 7.10
Versão 8.11
Sintaxe
oObj:CloseConnection ( ) --> Nil
Retorno
Tipo
(NULO)
Descrição
Nil
Descrição
Finaliza a conexão TCP genérica (socket ) do objeto corrente.
Connect
Revisão: 30/06/2003
Sintaxe
oObj:Connect ( < nPorta > , < cIP > , < nTimeout > ) --> nSucesso
Parâmetros
Argumento
nPorta
cIP
nTimeout
Tipo
Descrição
Numérico Numero da porta onde a conexão deve ser realizada
Número IP ou nome do servidor onde a conexão deve ser
Caracter
realizada
Número em milisegundos que o método deve esperar para
Numérico
conectar
Retorno
Tipo
Numérico
Descrição
Retorna 0 (Zero) se conectou com sucesso, diferente de zero se a conexão
falhou.
Descrição
Estabelece um conexão TCP genérica (socket ).
IsConnected
Revisão: 30/06/2003
Abrangência
Versão 6.09
Versão 7.10
Versão 8.11
Sintaxe
oObj:IsConnected ( ) --> lLogico
Retorno
Tipo
Lógico
Descrição
Retorna True se a conexão esta ativa e false caso esteja
inválida/desconectado.
Descrição
Verifica se existe conexão valida no objeto corrente.
New
Revisão: 30/06/2003
Abrangência
Versão 6.09
Versão 7.10
Sintaxe
tSocketClient():New ( ) --> oSocket
Retorno
Tipo
Objeto
Descrição
Retorna um Objeto do tipo tSocketClient
Descrição
Cria o objeto tSocketClient, sem conexão ativa.
Versão 8.11
Receive
Revisão: 30/06/2003
Abrangência
Versão 6.09
Versão 7.10
Versão 8.11
Sintaxe
oObj:Receive ( < @cBuffer > , < nTimeout > ) --> nQtdRecebida
Parâmetros
Argumento
cBuffer
nTimeout
Tipo
Descrição
Caracter Buffer que conterá os dados a serem recebidos.
tempo em milisegundos que a função receive espera até
Numérico
receber algum dado pela conexão.
Retorno
Tipo
Numérico
Descrição
Qtde de bytes recebidos, se houver algum erro nQtdRecebida será menor
que zero.
Descrição
Recebe os dados pela conexão ativa do objeto, qualquer tipo de dado pode ser recebido.
Reset
Revisão: 30/06/2003
Abrangência
Versão 6.09
Versão 7.10
Versão 8.11
Sintaxe
oObj:Reset ( ) --> NIL
Retorno
Tipo
(NULO)
Descrição
Retorno nulo.
Descrição
Finaliza anormalmente a conexão, não avisa o outro lado que a conexão será finalizada.
Deve ser utilizado apenas em casos extremos.
Send
Revisão: 30/06/2003
Abrangência
Versão 6.09
Versão 7.10
Versão 8.11
Sintaxe
oObj:Send ( [ cBuffer ] ) --> nQtdTrasmitido
Parâmetros
Argumento
cBuffer
Tipo
Descrição
Caracter Buffer com os dados a serem transmitidos pela conexão.
Retorno
Tipo
Numérico
Descrição
Numero de bytes transmitidos, caso o numero seja diferente do tamanho
de cBuffer, algum erro aconteceu.
Descrição
Transmite o buffer pela conexão TCP Genérica ativa.
Exemplo da Classe tSocketClient
Revisão: 30/06/2003
Abrangência
Versão 6.09
Versão 7.10
Versão 8.11
O Exemplo abaixo exemplifica a utilização de um cliente socket, note que para o
programa funcionar corretamente, deve-se alterar os parametros da conexão.
user function MySocket
Local oObj := tSocketClient():New()
nResp := oObj:Connect( 999, "172.255.255.255", 1000 )
if(nResp == 0 )
Conout( "Conexão OK!" )
else
Conout( "Erro na Conexão OK! ", nResp )
return
endif
cSend = "Ola!!!! Estou transmitindo um dado!"
nResp := oObj:Send( cSend )
if( nResp != len( cSend ) )
conout( "Erro! Dado nao transmitido" )
else
conout( "Dado Enviado" )
endif
cBuffer := ""
nQtd = oObj:Receive( cBuffer, 10000 )
if( nQtd >= 0 )
conout( "Dados Recebidos " + Str( nQtd, 4, 0 ), cBuffer )
else
conout( "Nao recebi nada" )
endif
cSend = "Dados que será transmitido!!!"
nResp := oObj:Send( cSend )
if( nResp != len( cSend ) )
conout( "Erro! Dado nao transmitido" )
else
conout( "Dado Enviado" )
endif
if( oObj:IsConnected() )
conout( "OK! Estou conectado" )
else
conout( "Ops! Nao estou conectado" )
endif
oObj:CloseConnection()
if( !oObj:IsConnected() )
conout( "Desconectei" )
else
conout( "Ainda estou conectado, erro na desconexao" )
endif
return
Exemplo de Conexão SMTP
Revisão: 17/09/2003
Abrangência
Versão 6.09
Versão 7.10
No exemplo abaixo , estabelecemos a conexão com um servidor SMTP , utilizando o
comando CONNECT SMTP , obtendo o resultado da conexão , e em caso de falha ,
obtemos maiores detalhes utilizando o comando GET MAIL ERROR.
#INCLUDE "Ap5Mail.ch"
CONNECT SMTP SERVER "200.246.142.66" ;
ACCOUNT "test"
PASSWORD "test1234" ;
RESULT lOk
If lOk
MsgStop("Conexão OK")
Else
GET MAIL ERROR cSmtpError
MsgStop("Erro de conexão : " + cSmtpError)
Endif
Exemplo de Envio de e-mail SMTP
Completo
Revisão: 17/09/2003
Abrangência
Versão 6.09
Versão 7.10
No exemplo abaixo , estabelecemos a conexão com um servidor SMTP , utilizando o
comando CONNECT SMTP , obtendo o resultado da conexão , e em caso de falha ,
obtemos maiores detalhes utilizando o comando GET MAIL ERROR . Caso a conexão
seja realizada com sucesso , um e-mail de teste é enviado , tendo também seu starus de
execução recuperado e tratado convenientemente.
#INCLUDE "Ap5Mail.ch"
// Conecta com o Servidor SMTP
CONNECT SMTP SERVER "200.246.142.66" ;
ACCOUNT "test" PASSWORD "test1234" ;
RESULT lOk
If lOk
MsgStop( "Conexão OK" )
SEND MAIL FROM "[email protected]" ;
TO "[email protected];[email protected]" ;
SUBJECT "Teste de e-Mail" ;
BODY "E-MAIL HTML de TESTE" ;
RESUILT lOk
If lOk
MsgStop( "Envio OK" )
Else
GET MAIL ERROR cSmtpError
MsgSTop( "Erro de envio : " + cSmtpError)
Endif
// Desconecta do Servidor
DISCONNECT SMTP SERVER
Else
GET MAIL ERROR cSmtpError
MsgStop( "Erro de conexão : " + cSmtpError)
Endif
Exemplo da função XMLERROR
Revisão: 17/07/2002
Abrangência
Versão 6.09
Versão 7.10
No exemplo abaixo , tratamos a ocorrência de erro de abertuta do Objeto XML
#INCLUDE "XmlXFun.xh"
Local oXml , nXmlStatus
CREATE oXML XMLFILE "\exemplo.xml"
nXmlStatus := XMLError()
If ( nXmlStatus != XERROR_SUCCESS )
Alert("Falha ("+str(nXmlStatus,3)+") na criação do XMLl")
Else
//processamento dop XML ....
Endif
Manutencäo de XML em Advpl
Revisão: 23/05/2003
Abrangência
Versão 6.09
Versão 7.10
No exemplo abaixo , é ilustrada de maneira simples a utilização dos comandos e
funções Advpl para realizarmos manutenções em um arquivo no formato XML. Neste
exemplo , utilizamos a criação do objeto , a criação de novos nodes a partir do modelo
proposto , atribuição de suas propriedades , e geração da String XML final a partir do
Objeto XML .
#INCLUDE "PROTHEUS.CH"
#INCLUDE "XMLXFUN.CH"
Function u_TesteXml()
Local cModelo := ''
Local aLivros := {}
Local cXml := '' , oXml
Local nL , nTotL
// Defino dados dos livros a catalogar
aadd(aLivros , { "000001",;
"Livro Teste" ,;
"John Doe",;
"10/05/2001"})
aadd(aLivros , { "000002",;
"Livro Ficticeo" ,;
"Mary Brahms",;
"15/05/2001"})
// Crio modelo ( apenas estrutura ) em String
cModelo
cModelo
cModelo
cModelo
cModelo
cModelo
cModelo
cModelo
cModelo
+=
+=
+=
+=
+=
+=
+=
+=
+=
'<?xml version="1.0"?>'
'<MeuDoc>'
'<Livro>'
'<Id></Id>'
'<Titulo></Titulo>'
'<Autor></Autor>'
'<Data></Data>'
'</Livro>'
'</MeuDoc>'
// Crio o Objeto XML , definindo o Livro como Array
CREATE oXML XMLSTRING cModelo ;
SETASARRAY _MeuDoc:_Livro
nXmlStatus := XMLError()
If ( nXmlStatus == XERROR_SUCCESS )
// Caso nao houve nenhum tipo de erro de criação do Objeto
// Calcula o total de Livros e percorre os elementos do array
// para criar os nodes dos livros no XML.
nTotL := len(aLivros)
For nL := 1 to nTotL
If nL > 1
// Apenas acrescento nodes novos caso já tenha realizado a
// primeira volta do looping , que irá atribuir os valores
// do primeiro livro ao node já existente no objeto Xml
ADDNODE oXml:_MeuDoc:_Livro NODE '_Livro' ON oXML
Endif
// Atriblui os dados do livro no objeto Xml
oXml:_MeuDoc:_Livro[nL]:_Id:TEXT := aLivros[nL][1]
oXml:_MeuDoc:_Livro[nL]:_Titulo:TEXT := aLivros[nL][2]
oXml:_MeuDoc:_Livro[nL]:_Autor:TEXT := aLivros[nL][3]
oXml:_MeuDoc:_Livro[nL]:_Data:TEXT := aLivros[nL][4]
Next
// Ao fim do processo , gera a string XML correspondente ao Objeto
SAVE oXml XMLSTRING cXml
// Mostra o XML criado na Tela , usando a função MsgStop
MsgStop(cXml)
Else
MsgStop("Erro ("+str(nXmlStatus,3)+") na criação do XML.")
Endif
Return
Exemplo da função AEVAL
Revisão: 03/10/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Local aArray := { "Teste" , 123 }
Local bBlock := { |x,y| conout(valtype(x)) , conout(y) }
aEval(aArray,bBlock)
No exemplo acima , criamos um array com 2 elementos : O primeiro é um Caracter , e o
segundo é um número ; e criamos um code-block que receberá em x ( primeiro
parametro fornecido pela função aEval) cada elemento do array , e y ( segundo
parametro fornecido pela aEval ) o número do elemento do array que está sendo
processado nesta execução.
O resultado de tela no console do Protheus Server deverá ser :
Teste // Conteudo do primeiro elemento
C // Tipo do conteudo
1 // Numero do elemento processado
123 // Conteudo do segundo elemento
N // Tipo do Segundo Elemento
2 // Numero do elemento processado
Caso o array passado como parâmetro seja um array multi-Dimensional , serão passados
como parâmetros os arrays de primeiro nivel para o code-BLock.
Vejamos uma aplicação mais complexa : Um array multi-dimensional temos 2colunas ,
uma de código (string) e uma de valor ( numérica ) , e seja necessário realizar um
cálculo de totalização da coluna numérica :
aItens := {}
aadd(aItens,{"Branco",10})
aadd(aItens,{"Preto",15})
aadd(aItens,{"Cinza",12})
// Podemos realizar a totalização pelo metodo tradicional :
nTotal := 0
For nI := 1 to len(aItens)
nTotal := nTotal + aItens[nI][2]
Next
conout(nTotal) // 37
// Ou utilizando a Funcão aEval :
nTotal := 0
aeval(aItens , {|x| nTotal += x[2] } )
conout(nTotal)
Exemplo da função EVAL
Revisão: 17/07/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
*** Este exemplo cria um bloco de código que incrementa um número e depois o
avalia:
bBloco := { |nArg| nArg + 1 }
? EVAL(bBloco, 1)
// Resulta: 2
*** Este exemplo demonstra como um bloco de código pode ser compilado em tempo
de execuçao utilizando-se o operador macro (&):
bBloco := &("{ |nArg| nArg + 1 }")
? EVAL(bBlock, 1)
// Avalia o bloco
Exemplo da função MSCRC32
Revisão: 02/07/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Através do exemplo abaixo , calculamos o CRC das strings informadas.
// Le o arquivo lista.txt no ambiente do servidor
// e calcula o CRC do mesmo.
cString := memoread('\lista.txt')
nCRC1 := MSCRC32(cString)
MsgStop('CRC = '+str(nCRC1,10))
Exemplo da função MSCRC32STR
Revisão: 02/07/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Através do exemplo abaixo , calculamos o CRC das string informada.
// Le o arquivo lista.txt no ambiente do servidor
// e calcula o CRC32 do mesmo.
cString := memoread('\lista.txt')
cCRC32 := MSCRC32STR(cString)
MsgStop('CRC = ['+cCRC32+']')
Versão 8.11
Exemplo da função SPLITPATH
Revisão: 05/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
No exemplo abaixo , exemplificamos o funcionamento da função SplitPath , usando
combinações de nomes de arquivos com ou sem drive , caminho , nome de arquivo e/ou
extensão.
User Function TSTSplit()
Local aArq := {} , cDrive, cDir, cNome, cExt
aadd(aArq,'c:\path\arquivo.ext')
aadd(aArq,'c:\path\arquivo')
aadd(aArq,'c:\path\')
aadd(aArq,'c:\arquivo')
aadd(aArq,'\path\arquivo.ext')
aadd(aArq,'path\arquivo')
aadd(aArq,'\\servidor\pasta\')
aadd(aArq,'\\servidor\pasta\arquivo.ext')
aadd(aArq,'')
For nI := 1 to len(aArq)
SplitPath( aArq[nI], @cDrive, @cDir, @cNome, @cExt )
conout( aArq[nI] + ' ['+cDrive+'] ['+ cDir +'] ['+ cNome +'] ['+
cExt + ']')
Next
Após executado o programa acima, deve ser exibido no console do Protheus Server o
texto abaixo :
c:\path\arquivo.ext [c:] [\path\] [arquivo] [.ext]
c:\path\arquivo [c:] [\path\] [arquivo] []
c:\path\ [c:] [\path\] [] []
c:\arquivo [c:] [\] [arquivo] []
\path\arquivo.ext [] [\path\] [arquivo] [.ext]
path\arquivo [] [path\] [arquivo] []
\\servidor\pasta\ [] [\\servidor\pasta\] [] []
\\servidor\pasta\arquivo.ext [] [\\servidor\pasta\] [arquivo] [.ext]
[] [] [] []
Exemplo da função HTTPGET
Revisão: 27/01/2004
Abrangência
Versão 6.09
Versão 7.10
Versão 8.11
No exemplo abaixo, solicitamos a um servidor http o conteúdo de uma página, e a
chamada de uma página .asp passando parâmetros via GET
// Buscar página
cHtmlPage := Httpget('http://www.servidor.com.br/pageteste.htm')
// Chamar página passando parâmetros
cHtmlPage :=
Httpget('http://www.servidor.com.br/funteste.asp?Id=123&Nome=Teste')
// ou
cHtmlPage :=
Httpget('http://www.servidor.com.br/funteste.asp','Id=123&Nome=Teste')
Exemplo da função
HTTPLOGONUSER()
Revisão: 27/01/2004
Abrangência
Versão 6.09
Versão 7.10
Versão 8.11
Através da função httplogonuser() , quando utilizamos o Protheus Server como DLL
ISAPI, juntamente com o IIS, se e somente se desabilitado o acesso anônimo ào site , a
função retornará uma string contendo o login do usuário.
A função funciona tanto com links .apl como links .apw.
Observação : Caso esta função seja chamada via Job , Remote , ou com o Protheus
Server HTTP sendo executado como Console ou Serviço , sem usar a .dll ISAPI , a
função sempre retornará uma string em branco.
User function TstUsrLogin()
Local cLogin := HttpLogonUser()
IF empty(cLogin)
conout("USuario nao identificado")
Else
conout("USuario : "+cLogin)
Endif
Return "
"+cLogin+"
"
Exemplo da Função Directory
Revisão: 09/07/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versão 8.11
Através do exemplo abaixo , obtemos no array aDirectory todos os diretórios no
ambiente do servidor a partir do path atual.
#INCLUDE "Directry.ch"
aDirectory := DIRECTORY("*.*","D")
AEVAL( aDirectory, {|aFile| CONOUT(aFile[F_NAME])} )
Exemplo da Função MSCOMPRES
Revisão: 07/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
// Exemplo 1 à Compacta apenas um arquivo
lRes := MSCOMPRESS( "AP6SRV.EXE", "AP6SRV.MZP" )
// Exemplo 2 à Compacta um diretório com senha
aNome := {}
ADIR( "*.DBF", aNome )
lRes := MSCOMPRESS( aNome, "ArqComp.MZP", "SENHA" )
Versão 7.10
Exemplo da função ADIR
Revisão: 04/08/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Este exemplo cria um vetor que conterá os nomes de todos os arquivos (.txt) no
diretório DEFAULT corrente, e os relaciona no console utilizando a funçao AEVAL() :
LOCAL aFiles[ADIR("*.TXT")]
ADIR("*.TXT", aFiles)
AEVAL(aFiles, { |element| conout(element) })
*** Vale lembrar que ADIR() é uma funçao de compatibilidade e portanto
desaconselhada. Ele está superado pela funçao DIRECTORY(), que retorna todas
as informaçoes de arquivo em um vetor multi-dimensional. ***
Exemplo da função CURDIR
Revisão: 28/04/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
No exemplo abaixo , conferimos o path atual e tentamos setar um novo path atual ,
verificando se a operação foi realizada com sucesso.
cOldDir := curdir()
cNewDir := '\webadv\xis'
curdir(cNewDir) // Troca o path
If cNewDir <> '\'+curdir() // E verifica se trocou mesmo
conout('Falha ao Trocar de Path de '+cOldDir + ' para '+cNewDir)
Else
conout('Path de '+cOldDir + ' trocado para '+cNewDir+' com
sucesso.')
Endif
Exemplo da função DIRREMOVE
Revisão: 01/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
No exemplo abaixo , executado a partir do Protheus Remoite , tentamos excluir a pasta
c:\TmpFiles , verificando se houve sucesso nesta operação.
cDelPath := 'c:\TmpFiles'
lRemoveOk := DIRREMOVE(cDelPath)
IF !lRemoveOk
MsgStop('Falha ao remover a pasta '+cDelPath+' ( File Error
'+str(Fewrror(),4)+' ) ')
Else
MsgStop('Pasta '+cDelPath+' removida com sucesso.')
Endif
Exemplo da função DISKSPACE
Revisão: 01/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
No exemplo abaixo , obtemos os espaços em disco da unidade de disco da estação local
e do drive A: da estação local, verificando se houve sucesso na operação.
nBytesLocal := DISKSPACE( ) // Retorna o espaço disponivel na unidade
de disco local ( remote ).
IF nBytesLocal < 1048576
MsgStop('Unidade de Disco local possui menos de 1 Mb livre.')
Else
MsgStop('Unidade de disco local possui '+str(nBytes_A,12)+' bytes
livres.')
Endif
nBytes_A := DISKSPACE( 1 ) // Retorna o espaço disponivel no drive A:
local ( remote ).
If nBytes_A == -1
MsgStop('Unidade A: não está disponível ou não há disco no Drive')
ElseIf nBytes_A < 8192
MsgStop('Não há espaço disponível no disco. Substitua o disco na
Unidade A:')
Else
MsgStop('Unidade A: Verificada . '+str(nBytes_A,12)+' bytes
livres.')
Endif
Exemplo da função FERASE
Revisão: 01/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
// Este exemplo apaga todos os arquivos .BAK do diretório corrente no Servidor
#include 'DIRECTRY.CH'
aEval(Directory("*.BAK"), { |aFile| FERASE(aFile[F_NAME]) })
// Este exemplo apaga um arquivo no cliente ( Remote ) , informando o status da
operação
IF FERASE("C:\ListaTXT.tmp") == -1
MsgStop('Falha na deleção do Arquivo ( FError'+str(ferror(),4)+
')')
Else
MsgStop('Arquivo deletado com sucesso.')
ENDIF
Exemplo da função FILE
Revisão: 04/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Nos exemplos abaixo , testamos a existência de um determinado arquivo na estação
local e no diretório definido como RootPath do ambiente (Environment) no Servidor.
FILE("teste.dbf") // Verifica no diretório corrente do servidor se
existe o arquivo teste.dbf
FILE("\SIGAADV\TESTE.dbf") // Verifica no diretório Sigaadv do
servidor se existe o arquivo teste.dbf
FILE("C:\TEMP\TESTE.dbf") // // Verifica no diretório Temp do cliente
(Remote) se existe o arquivo teste.dbf
Observação : Caso a função File() seja executada em Job ( programa sem interface
remota ) , sendo passado um caminho absoluto de arquivo ( exemplo c:\teste.txt) , a
função retornará .F. e FERROR() retornará -1 )
Exemplo da função FOPEN
Revisão: 05/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
No exemplo abaixo , tentamos abrir o arquivo error.log para escrita e gravação
compartilhada.
#include 'fileio.ch'
...
nH := fopen('\sigaadv\error.log' , FO_READWRITE + FO_SHARED )
If nH == -1
MsgStop('Erro de abertura : FERROR '+str(ferror(),4))
Else
MsgStop('Arquivo aberto com sucesso.')
...
fclose(nH)
Endif
...
Exemplo da função FRENAME
Revisão: 05/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Nos exemplos abaixo , citamos 3 usos da função frename : Renomear arquivos na
estação Cliente , no Server , e mover arquivos de uma pasta no Client para outra pasta.
// Renomeando um arquivo no Client de origem.txt para destino.txt , na
pasta c:\Temp
nStatus1 := frename('c:\Temp\Origem.txt' , 'c:\Temp\Destino.txt' )
IF nStatus1 == -1
MsgStop('Falha na operação 1 : FError '+str(ferror(),4))
Endif
// Renomeando um arquivo no Server, na pasta sigaadv , de error.log
para error.old
nStatus2 := frename('\sigaadv\error.log' , '\sigaadv\error.old' )
IF nStatus2 == -1
MsgStop('Falha na operação 2 : FError '+str(ferror(),4))
Endif
// Movendo um arquivo no client , da pasta Raiz para a pasta c:\Temp ,
alterando também o nome do arquivo.
nStatus3 := frename('c:\Lista.txt','c:\Temp\OldLista.txt')
IF nStatus3 == -1
MsgStop('Falha na operação 3 : FError '+str(ferror(),4))
Endif
Exemplo da função FWRITE
Revisão: 27/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Este exemplo realiza uma cópia de um arquivo Texto chamado ORIGEM.TXT , para
um arquivo chamado DESTINO.TXT , no ambiente do Protheus Server.
#INCLUDE "FILEIO.CH"
#DEFINE F_BLOCK 1024
/ gravados por vez
// Define o bloco de Bytes a serem lidos
User Function TestCopy()
Local cBuffer := SPACE(F_BLOCK)
Local nHOrigem , nHDestino
Local nBytesLidos , nBytesFalta , nTamArquivo
Local nBytesLer , nBytesSalvo
Local lCopiaOk := .T.
// Abre o arquivo de Origem
nHOrigem := FOPEN("ORIGEM.TXT", FO_READ)
// Testa a abertura do Arquivo
If nHOrigem == -1
MsgStop('Erro ao abrir origem. Ferror =
'+str(ferror(),4),'Erro')
Return .F.
Endif
// Determina o tamanho do arquivo de origem
nTamArquivo := Fseek(nHOrigem,0,2)
// Move o ponteiro do arquivo de origem para o inicio do arquivo
Fseek(nHOrigem,0)
// Cria o arquivo de destino
nHDestino := FCREATE("DESTINO.TXT", FC_NORMAL)
// Testa a criação do arquivo de destino
If nHDestino == -1
MsgStop('Erro ao criar destino. Ferror =
'+str(ferror(),4),'Erro')
FCLOSE(nHOrigem)
// Fecha o arquivo de Origem
Return .F.
Endif
// Define que a quantidade que falta copiar é o próprio tamanho do
Arquivo
nBytesFalta := nTamArquivo
// Enquanto houver dados a serem copiados
While nBytesFalta > 0
// Determina quantidade de dados a serem lidos
nBytesLer
:= Min(nBytesFalta , F_BLOCK )
// lê os dados do Arquivo
nBytesLidos := FREAD(nHOrigem, @cBuffer, nBytesLer )
// Determina se não houve falha na leitura
If nBytesLidos < nBytesLer
MsgStop(
"Erro de Leitura da Origem. "+;
Str(nBytesLer,8,2)+" bytes a
LER."+;
Str(nBytesLidos,8,2)+" bytes
Lidos."+;
"Ferror =
"+str(ferror(),4),'Erro')
lCopiaOk := .F.
Exit
Endif
// Salva os dados lidos no arquivo de destino
nBytesSalvo := FWRITE(nHDestino, cBuffer,nBytesLer)
// Determina se não houve falha na gravação
If nBytesSalvo < nBytesLer
MsgStop("Erro de gravação do Destino. "+;
Str(nBytesLer,8,2)+" bytes a
SALVAR."+;
Str(nBytesSalvo,8,2)+" bytes
gravados."+;
"Ferror =
"+str(ferror(),4),'Erro')
lCopiaOk := .F.
EXIT
Endif
// Elimina do Total do Arquivo a quantidade de bytes copiados
nBytesFalta -= nBytesLer
Enddo
// Fecha os arquivos de origem e destino
FCLOSE(nHOrigem)
FCLOSE(nHDestino)
If lCopiaOk
MsgStop('Cópia de Arquivos finalizada com sucesso. '+;
str(nTamArquivo,12,0)+' bytes
copiados.','Final')
Else
MsgStop( 'Falha na Cópia. Arquivo de Destino incompleto. '+;
'Do total de '+str(nTamArquivo,12,0)+'
bytes, faltaram '+str(nBytesFalta,12,0)+' bytes.','Final')
Endif
Return
Exemplo da função GetClientDir()
Revisão: 04/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
No exemplo abaixo , obtemos o drive e diretório onde estão instalados o Remote .
MsgStop('Protheus Remote instalado em '+ GetClientDir())
Exemplo das funções IsSrvUnix e
GetRemoteIniName
Revisão: 12/06/2003
Abrangência
Versão 6.09
Versão 7.10
Através do exemplo abaixo, podemos obter o path de execução do AP Remote.
#include "protheus.ch"
Function TstRmtPath()
Local cIniName:= GetRemoteIniName()
Local lUnix:= IsSrvUnix()
Local nPos:= Rat( IIf(lUnix,"/","\"),cIniName )
Local cPathRmt
if nPos!=0
cPathRmt:= Substr( cIniName,1,nPos-1 )
else
cPathRmt:=""
endif
QOut( cPathRmt )
Return
Exemplo da função ALIAS
Revisão: 25/07/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
No exemplo abaixo , determinamos qual a area de trabalho está atualmente em uso.
cAlias := alias()
IF empty(cAlias)
alert('Não há Area em uso')
Else
alert(Area em uso atual : '+cAlias)
Endif
Exemplo da função DBAppend
Revisão: 07/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Este exemplo demonstra como se pode utilizar o dbappend liberando e mantendo
bloqueios anteriores.
USE Clientes NEW
FOR i:=1 to 5
DBAPPEND(.F.)
NOME := "XXX"
END : ="YYY"
NEXT
// Os 5 registros incluídos permanecem bloqueados
DBAPPEND()
// Todos os bloqueios anteriores são liberados
Exemplo da função DBClearAllFilter
Revisão: 07/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Este exemplo demonstra como se pode utilizar DBCLEARALLFILTER para limpar a
expressão de filtro.
USE Clientes NEW
DBSETFILTER( {|| Idade < 40}, "Idade < 40") // Seta a expressão de
filtro
...
DBCLEARALLFILTER()
// Limpa a expressão de filtro de todas as ordens
Exemplo da função DBClearFilter
Revisão: 07/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Este exemplo demonstra como se pode utilizar DBCLEARFILTER para limpar a
expressão de filtro.
USE Clientes NEW
DBSETFILTER( {|| Idade < 40}, "Idade < 40" ) // Seta a expressão de
filtro
...
DBCLEARFILTER()
// Limpa a expressão de filtro
Exemplo da função DBClearIndex
Revisão: 07/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Este exemplo demonstra como se pode utilizar a função DBCLEARINDEX para fechar
os índices.
USE Clientes NEW
DBSETINDEX("Nome") // Abre o arquivo de índice "Nome"
...
DBCLEARINDEX()
// Fecha todos os arquivos de índices
Exemplo da função DBCloseAll
Revisão: 07/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Este exemplo demonstra como se pode utilizar o DBCLOSEALL para fechar todas as
áreas de trabalho abertas.
USE Clientes NEW
DBSETINDEX("Nome") // Abre o arquivo de índice "Nome"
USE Fornecedores NEW
DBSETINDEX("Idade") // Abre o arquivo de índice "Idade"
...
DBCLOSEALL() //Fecha todas as áreas de trabalho e todos os índices
associados a elas.
Exemplo da função DBCloseArea
Revisão: 07/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Este exemplo demonstra como se pode utilizar o DBCLOSEAREA para fechar a área
de trabalho atual.
USE Clientes NEW
DBSETINDEX("Nome") // Abre o arquivo de índice "Nome"
...
DBCLOSEAREA()
// Fecha a área de trabalho atual
Exemplo da função DBSTRUCT
Revisão: 08/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Este exemplo demonstra como se pode utilizar o DBSTRUCT para recuperar a estrutura
da tabela corrente.
USE Cliente NEW
DBSTRUCT()
//Retorna:{{Cod,N,3,0},{Nome,C,10,0},{Idade,N,3,0},{Nasc,D,8,0},{Pagto
,N,7,2}}
Exemplo da função DBSkip
Revisão: 07/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Este exemplo mostra como o DBSKIP pode passar do final da tabela e do início da
tabela
DBUSEAREA( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS",.T., .F. )
DBGOBOTTOM()
EOF() // retorna .F.
DBSKIP()
EOF() // retorna .T.
DBGOTOP()
BOF() // retorna .F.
DBSKIP(-1)
BOF() // retorna .T.
Exemplo da função DBUnlock
Revisão: 08/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Este exemplo mostra como liberar todos os registros bloqueados da tabela corrente.
// Driver "DBFCDXADS" utiliza ACE para abertura do arquivo
DBUSEAREA( .T.,"DBFCDXADS", "\dadosadv609\sa1990.dbf","SSS",.T., .F. )
DBRLock()
....
DBUNLOCK()
Exemplo da função HEADER
Revisão: 03/10/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Este exemplo define uma pseudo-funçao, DbfSize(), que utiliza HEADER() juntamente
com RECSIZE() e LASTREC() para calcular o tamanho do arquivo de banco de dados
corrente em bytes:
#define DbfSize() ((RECSIZE() * LASTREC()) + HEADER() + 1)
Depois, você pode utilizar DbfSize() como se fosse qualquer outra funçao:
USE Sales NEW
USE Customer NEW
? DbfSize()
? Sales->(DbfSize())
Exemplo da função USED
Revisão: 09/07/2003
Abrangência
Versão 5.07
Versões Anteriores
Versão 5.08
Versão 6.09
Versão 7.10
Versão 8.11
O exemplo abaixo determina se um arquivo de banco de dados em use na área de
trabalho corrente:
USE Customer NEW
conout(USED())
CLOSE
conout(USED())
// Resulta: .T.
// Resulta: .F.
Exemplo de função DBUnlockAll
Revisão: 08/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Este exemplo mostra como liberar todos os registros bloqueados da tabela corrente.
DBUSEAREA( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS",.T., .F. )
DBRLock()
...
DBUNLOCKALL()
Exemplo da função DTOC
Revisão: 13/10/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Os exemplos a seguir demonstram utilizaçoes gerais de DTOC():
conout( DATE() )
conout( DTOC(DATE()) )
conout( "Hoje e " + DTOC(DATE()) )
// Resulta: 09/01/90
// Resulta: 09/01/90
// Resulta: Hoje e 09/01/90
Exemplo da função DTOS
Revisão: 13/10/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Os exemplos a seguir ilustram DTOS() em conjunto com várias outras funçoes:
conout( DATE() )
conout( DTOS(DATE()) )
conout( LEN(DTOS(CTOD(""))) )
// Resulta: 09/01/90
// Resulta: 19900901
// Resulta: 8
Este exemplo demonstra como criar um índice com uma data
composta e chave de caractere utilizando DTOS():
Exemplo da função GETIMPWINDOWS
Revisão: 05/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
No exemplo abaixo , determinamos as impressoras disponíveis na estação Remote e no
Server , respectivamente. E , mostramos no Console do Server a(s) impressora(s)
encontrada(s).
aImpRemote := GetImpWindows(.F.)
conout('Impressoras na estação remota')
aeval(aImpRemote , { |x| conout(x) })
aImpServer := GetImpWindows(.T.)
conout('Impressoras no Servidor')
aeval(aImpServer , { |x| conout(x) })
Exemplo da função GETPORTACTIVE
Revisão: 07/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
No exemplo abaixo, determinamos as portas de impressão disponíveis na estação
Remote e no Server, respectivamente. E mostramos no Console do Server a(s) porta(s)
encontrada(s).
aPortRemote := GetPortActive(.F.)
conout('Impressoras na estação remota')
aeval(aPortRemote , { |x| conout(x) })
aPortServer := GetPortActive(.T.)
conout('Impressoras no Servidor')
aeval(aPortServer , { |x| conout(x) })
Veja abaixo um exemplo do que foi mostrado no console do Protheus Server, apos a
execução da rotina.
Impressoras na estação remota
COM1:COM2:COM3:COM4:FILE:LPT1:LPT2:LPT3:\\prnserver\prx-lp1
Impressoras no Servidor
COM1:COM2:COM3:COM4:FILE:LPT1:LPT2:LPT3:
Exemplo da função DESCEND
Revisão: 08/09/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Este exemplo utiliza DESCEND() em uma expressao INDEX para criar um índice de
datas de ordem descendente:
USE Sales NEW
INDEX ON DESCEND(DTOS(OrdDate)) TO SalesDate
Depois, DESCEND() pode ser utilizado para fazer uma pesquisa (SEEK) no índice
descendente:
DbSEEK(DESCEND(DTOS(dFindDate)))
Observação : Faz-se necessária a conversão da Data para String m através da
função DTOS(), pois a função DESCEND apenas trabalha com Strings.
Exemplo da Função DAY
Revisão: 04/08/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Os exemplos seguintes mostram a funçao DAY() sendo utilizada
de diversas maneiras:
conout(
conout(
conout(
conout(
DATE() )
DAY(DATE()) )
DAY(DATE()) + 1)
DAY(CTOD("")) )
// Resulta: 09/01/90
// Resulta: 1
// Resulta: 2
// Resulta: 0
Este exemplo utiliza DAY() em conjunto com CMONTH() e YEAR()
para formatar um valor do tipo data:
conout( CMONTH(DATE()) + STR(DAY(DATE())) +;
"," + STR(YEAR(DATE())) )
// Resulta: June 15, 1990
Exemplo da Função MONTH
Revisão: 22/09/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Estes exemplos ilustram o retorno do mês da data do sistema:
conout( DATE() )
conout( MONTH(DATE()) )
conout( MONTH(DATE()) + 1 )
// Resulta: 09/01/90
// Resulta: 9
// Resulta: 10
Este exemplo demonstra a funçao MONTH() atuando em uma data nula:
conout( MONTH(CTOD("")) )
// Resulta: 0
Exemplo da funcão CDOW
Revisão: 04/08/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Os exemplos a seguir ilustram o funcionamento da funçao CDOW():
conout( DATE() )
conout( CDOW(DATE()) )
conout( CDOW(DATE() + 7) )
conout( CDOW(CTOD("12/06/90")) )
// Resulta: 08/04/02
// Resulta: Sunday
// Resulta: Sunday
// Resulta: Thursday
Exemplo da função CMONTH
Revisão: 04/08/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Os exemplos seguintes ilustram a utilizaçao da funçao CMONTH():
conout( CMONTH(DATE()) )
Resulta: August
conout( CMONTH(DATE() + 45) )
Resulta: September
conout( SUBSTR(CMONTH(DATE()), 1, 3) + STR(DAY(DATE()),3))
Resulta: Aug 4
//
//
//
Exemplo da função DATE
Revisão: 04/08/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Os exemplos seguintes mostram a função DATE() utilizada de várias maneiras:
conout(
conout(
conout(
dDate =
conout(
DATE() )
DATE() + 30 )
DATE() - 30 )
DATE()
CMONTH(dDate) )
// Resulta: 08/04/02
// Resulta: 09/03/02
// Resulta: 07/05/02
// Resulta: August
Exemplo da função DOW
Revisão: 07/05/2003
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Os exemplos a seguir ilustram CDOW() e seu relacionamento com DOW():
conout(
conout(
conout(
conout(
conout(
DATE() )
DOW(DATE()) )
CDOW(DATE()) )
DOW(DATE() - 2) )
CDOW(DATE() - 2) )
//
//
//
//
//
Resulta:
Resulta:
Resulta:
Resulta:
Resulta:
09/01/89
3
Terca-feira
1
Domingo
Exemplo da função ElapTime()
Revisão: 08/09/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Este exemplo utiliza a função ElapTime() para calcular o tempo necessário para um
determinado processamento.
cHoraInicio := TIME() // Armazena hora de inicio do processamento
.
. <instrucoes>
.
cElapsed := ELAPTIME(TIME(),cHoraInicio) // Calcula a diferença de
tempo
Considerando o exemplo acima, caso cHoraInicio seja 23:45:00 , e a hora final do
processamento seja 00:20:00 , a diferença entre eles , computada na variável cElapsed,
será 00:15:00 .
Exemplo da função TIME
Revisão: 19/10/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Estes exemplos mostram a função TIME() utilizada em conjunto com SUBSTR()
para extrair a hora, os minutos e os segundos:
cTime := TIME() // Resultado: 10:37:17
cHora := SUBSTR(cTime, 1, 2) // Resultado: 10
cMinutos := SUBSTR(cTime, 4, 2) // Resultado: 37
cSegundos := SUBSTR(cTime, 7, 2) // Resultado: 17
Exemplo da função YEAR
Revisão: 13/10/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Os exemplos a seguir ilustram YEAR() usando a data do
sistema:
conout( DATE() )
conout( YEAR(DATE()) )
conout( YEAR(DATE()) + 11 )
// Resulta: 09/01/90
// Resulta: 1990
// Resulta: 2001
Este exemplo cria uma funçao definida pelo usuário usando
YEAR() para formatar um valor data na forma : mês dia, ano:
conout( U_Mdy(DATE()) )
1990
// Resulta: September 20,
USER FUNCTION Mdy( dDate )
Return CMONTH(dDate) + " " + LTRIM(STR(DAY(dDate)));
+ "," + STR(YEAR(dDate))
Exempo da função Seconds()
Revisão: 09/10/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Este exemplo compara o valor de TIME() com o de SECONDS():
conout( TIME() )
conout( SECONDS() )
// Resulta: 10:00:00
// Resulta: 36000.00
Este exemplo demonstra como utilizar SECONDS() para informar o tempo decorrido
em segundos:
LOCAL nStart, nElapsed
nStart = SECONDS()
.
. <processamentos...etc....>
.
nElapsed = SECONDS() - nStart
conout( "Decorridos: " + LTRIM(STR(nElapsed)) + " segundos" )
Exemplo da função AADD
Revisão: 06/08/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Os exemplos a seguir demonstram os efeitos de chamadas múltiplas da função AADD()
para um vetor:
aArray := {}
AADD(aArray, 5)
AADD(aArray, 10)
AADD(aArray, { 12, 10 })
}
//
//
//
//
Resulta:
Resulta:
Resulta:
Resulta:
aArray
aArray
aArray
aArray
e
e
e
e
um vetor vazio
{ 5 }
{ 5, 10 }
{ 5, 10, { 12, 10 }
Exemplo da função ACOPY
Revisão: 04/08/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Este exemplo cria dois vetores, cada um deles preenchido com um valor. Os dois
primeiros elementos do vetor fonte sao entao copiados para o vetor destino:
LOCAL nCount := 2, nStart := 1, aOne, aTwo
aOne := { 1, 1, 1 }
aTwo := { 2, 2, 2 }
ACOPY(aOne, aTwo, nStart, aCont)
// Resulta: aTwo e agora { 1, 1, 2
}
Exemplo da função ADEL
Revisão: 17/07/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Este exemplo cria um vetor constante de três elementos, e depois
elimina o segundo elemento. O terceiro elemento sobe uma posiçao, e ao
novo terceiro elemento é atribuido NIL:
LOCAL aArray
aArray := { 1, 2, 3 }
ADEL(aArray, 2)
}
// Resulta: aArray e agora { 1, 2, 3 }
// Resulta: aArray e agora { 1, 3, NIL
Exemplo da função AEVAL
Revisão: 17/07/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Este exemplo utiliza AEVAL() para fazer uma lista que consiste em itens selecionados
de um vetor multi-dimensional.
LOCAL aFiles := DIRECTORY("*.dbf"), aNames := {}
AEVAL(aFiles, { | file | AADD(aNames, file[1]) } )
Exemplo da função AFILL
Revisão: 17/07/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Neste exemplo, é criado um vetor com três elementos. O vetor é depois preenchido com
falso (.F.). Ao final, aos elementos nas posiçoes dois e três é atribuido o novo valos de
verdadeiro (.T.):
LOCAL aLogic[3]
AFILL(aLogic, .F.)
AFILL(aLogic, .T., 2, 2)
// Resulta: aLogic e { NIL, NIL, NIL }
// Resulta: aLogic e { .F., .F., .F. }
// Resulta: aLogic e { .F., .T., .T. }
Exemplo da função AINS
Revisão: 17/07/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Este exemplo demonstra o efeito da utilização de AINS() em um vetor:
LOCAL aArray
aArray := { 1, 2, 3 }
AINS(aArray, 2)
}
// Resulta: aArray e agora { 1, 2, 3 }
// Resulta: aArray e agora { 1, NIL, 2
Exemplo da função ARRAY
Revisão: 26/07/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
Este exemplo cria um vetor unidimensional de cinco elementos utilizando a funçao
ARRAY(), e depois exibe a açao equivalente atribuindo um vetor literal de valores NIL:
aArray := ARRAY(5)
aArray := { NIL, NIL, NIL, NIL, NIL }
Este exemplo ilustra três declaraçoes diferentes que criam o mesmo vetor multidimensional:
aArray := ARRAY(3, 2)
aArray := { {NIL, NIL}, {NIL, NIL}, {NIL, NIL} }
aArray := { ARRAY(2), ARRAY(2), ARRAY(2) }
Exemplo da função ASCAN
Revisão: 26/07/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Versões Anteriores
O exemplo a seguir demonstra a pesquisa em um vetor de três elementos utilizando
valores simples e um bloco de código como critérios de pesquisa. Os critérios do bloco
de código ilustram como executar uma pesquisa que nao faz diferenciaçao entre
maiúsculas e minúsculas:
aArray := { "Tom", "Mary", "Sue" }
? ASCAN(aArray, "Mary")
? ASCAN(aArray, "mary")
? ASCAN(aArray, { |x| UPPER(x) == "MARY" })
// Resulta: 2
// Resulta: 0
// Resulta: 2
O Exemplo abaixo demonstra como continuar a pesquisa dos múltiplos tipos de um
argumento de pesquisa após ter sido encontrada uma correspondência:
LOCAL aArray := { "Tom", "Mary", "Sue", "Mary" }, nStart := 1
// Pegar ultima posicao de elemento de vetor
nAtEnd := LEN(myVetor)
While (nPos := ASCAN(aArray, "Mary", nStart)) > 0
? nPos, aArray[nPos]
// Pegar nova posicao inicial e testar condicao de limite
If (nStart := ++nPos) > nAtEnd
EXIT
EndIf
EndDo
Exemplo da função ASIZE
Revisão: 17/07/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
Estes exemplos demonstram a adição de novos elementos e a eliminação de elementos
existentes:
aArray := { 1 }
ASIZE(aArray, 3)
ASIZE(aArray, 1)
// Resulta: aArray e { 1 }
// Resulta: aArray e { 1, NIL, NIL }
// Resulta: aArray e { 1 }
Exemplo da função ASORT
Revisão: 04/08/2002
Abrangência
Versão 5.07
Versão 5.08
Versão 6.09
Versão 7.10
No Exemplo abaixo , ordenamos um array em ordem crescenter , depois em ordem
decrescente através de um code-block .
Local aArray := { 3, 5, 1, 2, 4 }
ASORT(aArray) // Resultado: { 1, 2, 3, 4, 5 }
ASORT(aArray,,,{ |x, y| x > y }) // Resultado: { 5, 4, 3, 2, 1 }
No Exemplo abaixo , utilizamos na expressão de ordenação a função upper() , para
ordenar o array em ordem alfabérica independentemente da informação estar em letras
maiúsculas e/ou minusculas.
aArray := { "Fred", Kate", "ALVIN", "friend" }
ASORT(aArray,,, { |x, y| UPPER(x) < UPPER(y) })
No exemplo abaixo , montamos um code-block para ordenação de um array multidimensional , para ordenar o array em ordem crescente do segundo elemento da
dimensão.
aKids := { {"Mary", 14}, {"Joe", 23},{"Art", 16} }
aSortKids := ASORT(aKids,,, { |x, y| x[2] < y[2] })
// Resultado : { {"Mary", 14}, {"Art", 16}, {"Joe",23} }

Documentos relacionados