A Linguagem AdvPl - helpfacil.comhelpfacil.com/FORUM/anexo/Advpl - A Linguagem.pdf · A Linguagem...
Embed Size (px)
Transcript of A Linguagem AdvPl - helpfacil.comhelpfacil.com/FORUM/anexo/Advpl - A Linguagem.pdf · A Linguagem...

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 Descrição
nLeft Numérico. Coordenada horizontal em pixels.
nTop Numérico. Coordenada vertical em pixels.
nWidth Numérico. Largura em pixels.
nHeight Numérico. Altura em pixels.
cCaption Caractere. Título ou conteúdo do objeto.
cTooltip Caractere. Mensagem exibida quando objeto exibe seu tooltip.
lShowHint Lógico. Flag que ativa .T. ou desativa .F. a exibição do tooltip do
objeto.
cMsg Caractere. Mensagem exibida na barra de status da janela principal
quando o objeto ganha foco.
nClrText Numérico. Cor do texto do objeto.
nClrPane Numérico. Cor do fundo do objeto.
bWhen Bloco de
código.
Executado quando há movimentação de foco na janela.Se
retornar .T. o objeto continua habilitado, se retornar .F. o
objeto será desabilitado.
bValid Bloco de
código.
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.
blClicked Bloco de Executado quando acionado click do botão esquerdo do

código. mouse sobre o objeto.
brClicked Bloco de
código.
Executado quando acionado click do botão direito do mouse
sobre o objeto.
blDblClick Bloco de
código.
Executado quando acionado duplo click do botão esquerdo
do mouse sobre o objeto.
oWnd Objeto. Janela onde o objeto foi criado.
lVisible Booleano. Se .T. o objeto é visível, se .F. o objeto é invisível.
Cargo Objeto ou
variável. Conteúdo associado ao objeto.
bLostFocus Bloco de
código. Executado quando objeto perde foco.
bGotFocus Bloco de
código. 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( )
Descrição Força atualização (sincronia) de propriedades entre o programa e 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 Método construtor da classe.
Sintaxe New([acName], [nPar2], [anHeight], [lPar4], [alBold], [nPar6],
[lPar7], [nPar8], [alItalic], [alUnderline])
Parâmetros
Parâmetro Tipo / Descrição
acName Caractere, opcional. Nome da fonte, o padrão é
“Arial”.
nPar2 Reservado.
anHeight Numérico, opcional. Tamanho da fonte. O padrão é -
11.
lPar4 Reservado.
alBold Lógico, opcional. Se .T. o estilo da fonte será negrito.
nPar6 Reservado.
lPar7 Reservado.

nPar8 Reservado.
alItalic Lógico, opcional. Se .T. o estilo da fonte será itálico.
alUnderline Lógico, opcional. Se .T. o estilo da fonte será
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
Align
Numérico. Alinhamento do controle no espaço disponibilizado pelo seu
objeto parente. 0 = Nenhum (padrão), 1= no topo, 2 = no rodapé, 3= a
esquerda, 4 = a direita e 5 = em todo o parente.
lModified Lógico. Se .T. indica que o conteúdo da variável associada ao controle foi
modificado.
lReadOnly Lógico. Se .T. o conteúdo da variável associada ao controle permanecerá
apenas para leitura.
hParent Numérico. Handle (identificador) do objeto sobre o qual o controle foi
criado.
bChange Bloco de código. Executado quando o estado ou conteúdo do controle é
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 Método construtor da classe.
Sintaxe
New([anRow], [anCol], [acCaption], [aoWnd], [abAction],
[anWidth], [anHeight], [nPar8], [aoFont], [lPar10],
[alPixel],[lPar12],[cPar13], [lPar14], [abWhen], [bPar16], [lPar17])
Parâmetros
Parâmetro Tipo / Descrição
anRow Numérico, opcional. Coordenada vertical em pixels ou
carateres.
anCol Numérico, opcional. Coordenada horizontal em pixels
ou caracteres.
acCaption Caractere, opcional. Titulo do botão.
aoWnd Objeto, opcional. Janela ou controle onde o botão

deverá ser criado.
abAction Bloco de código, opcional. Bloco que deverá ser
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.
aoFont Objeto, opcional. Objeto tipo tFont com propriedades
da fonte utilizada para o título do botão.
lPar10 Reservado.
alPixel
Lógico, opcional. Se .T. considera as coordenadas
passadas em pixels, se .F. (padrão) considera em
caracteres.
lPar12 Reservado.
cPar13 Reservado.
lPar14 Reservado.
abWhen
Bloco de código, opcional. Executado quando mudança
de foco de entrada de dados está sendo efetuada na
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 Método construtor da classe.
Sintaxe
New([anRow], [anCol], [acCaption], [abSetGet], [aoWnd],
[anWidth], [anHeight], [nPar8], [abClick], [aoFont], [abValid],
[anClrFore], [anClrBack], [lPar14], [alPixel], [cPar16], [lPar17],
[abWhen])
Parâmetros
Parâmetro Tipo / Descrição
anRow Numérico, opcional. Coordenada vertical em pixels ou
carateres.
anCol Numérico, opcional. Coordenada horizontal em pixels
ou caracteres.
acCaption Caractere, opcional. Texto exibido pelo controle.
abSetGet
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 lógico, se <var> = .T. então o controle aparecerá
checado.
aoWnd Objeto, opcional. Janela ou controle onde o controle
deverá ser criado.

anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
nPar8 Reservado.
abClick
Bloco de código, opcional. Executado quando o
controle click do botão esquerdo do mouse é acionado
sobre o controle.
aoFont Objeto, opcional. Objeto tipo tFont com propriedades
da fonte utilizada para o texto do controle.
abValid
Bloco de código, opcional. Executado quando o
conteúdo do controle deve ser validado, deve 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.
lPar14 Reservado.
alPixel Lógico, opcional. Se .T. as coordenadas informadas
são em pixels, se .F. são em caracteres.
cPar16 Reservado.
lPar17 Reservado.
abWhen
Bloco de código, opcional. Executado quando mudança
de foco de entrada de dados está sendo efetuada na
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
aItems
Array. Lista de itens, caracteres, a serem exibidos. Pode ter os seguintes
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 Método construtor da classe.
Sintaxe
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

anRow Numérico, opcional. Coordenada vertical em pixels ou
caracteres.
anCol Numérico, opcional. Coordenada horizontal em pixels
ou caracteres.
abSetGet
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. 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.
anItems
Array, opcional. Lista de items, caracteres, a serem
exibidos. Pode ter os seguintes formatos: a)
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.
aoWnd Objeto, opcional. Janela ou controle onde o controle
será criado.
nPar8 Reservado.
abChange Bloco de código, opcional. Executado quando o
controle modifica o item selecionado.
abValid
Bloco de código, opcional. Executado quando o
conteúdo do controle deve ser validado, deve retornar
.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.
alPixel Lógico, opcional. Se .T. as coordenadas informadas
são em pixels, se .F. são em caracteres.
aoFont
Objeto, opcional. Objeto tipo tFont utilizado para
definir as características da fonte utilizada para exibir
o conteúdo do controle.
cPar15 Reservado.
lPar16 Reservado.
abWhen
Bloco de código, opcional. Executado quando
mudança de foco de entrada de dados está sendo
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.

acReadVar
Caractere, opcional. Nome da variável que o controle
deverá manipular, deverá ser a mesma variável
informada no parâmetro abSetGet, e será o retorno da
função ReadVar( ).
Retorno O objeto criado.
Select
Descrição Muda o item selecionado no combobox.
Sintaxe 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
lPassword Lógico. Se .T. o controle se comporta como entrada de dados de senha,
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 Método construtor do controle.
Sintaxe
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âmetros Parâmetro Tipo / Descrição
anRow Numérico, opcional. Coordenada vertical em pixels

ou caracteres.
anCol Numérico, opcional. Coordenada horizontal em pixels
ou caracteres.
abSetGet
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, numérico ou data.
aoWnd Objeto, opcional. Janela ou controle onde o controle
será criado.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
acPict Caractere, opcional. Máscara de formatação do
conteúdo a ser exibido.
abValid
Bloco de código, opcional. Executado quando o
conteúdo do controle deve ser validado, deve 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.
aoFont
Objeto, opcional. Objeto tipo tFont utilizado para
definir as características da fonte utilizada para exibir
o conteúdo do controle.
lPar12 Reservado.
oPar13 Reservado.
alPixel Lógico, opcional. Se .T. as coordenadas informadas
são em pixels, se .F. são em caracteres.
cPar15 Reservado.
lPar16 Reservado.
abWhen
Bloco de código, opcional. Executado quando
mudança de foco de entrada de dados está sendo
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.
abChange Bloco de código, opcional. Executado quando o
controle modifica o valor da variável associada.
alReadOnly Lógico, opcional. Se .T. o controle não poderá ser
editado.
alPassword
Lógico, opcional. Se .T. o controle exibirá asteriscos
“*” no lugar dos caracteres exibidos pelo controle
para simular entrada de senha.
cPar23 Reservado.
acReadVar Caractere, opcional. Nome da variável que o controle
deverá manipular, deverá ser a mesma variável

informada no parâmetro abSetGet, e será o retorno da
função ReadVar( ).
cPar25 Reservado.
lPar26 Reservado.
nPar27 Reservado.
lPar28 Reservado.
Retorno 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 Método construtor da classe.
Sintaxe New([anTop], [anLeft], [anBottom], [anRight], [acCaption],
[aoWnd], [anClrText], [anClrPane], [alPixel], [lPar10])
Parâmetros
Parâmetro Tipo / Descrição
anTop Numérico, opcional. Coordenada vertical superior em
pixels ou caracteres.
anLeft Numérico, opcional. Coordenada horizontal esquerda
em pixels ou caracteres.
anBottom Numérico, opcional. Coordenada vertical inferior em
pixels ou caracteres.
anRight Numérico, opcional. Coordenada horizontal direita em
pixels ou caracteres.
acCaption Caractere, opcional. Título do grupo.
aoWnd Objeto, opcional. Janela ou controle onde o controle
será criado.
anClrText Numérico, opcional. Cor do texto.

anClrPane Numérico, opcional. Cor do fundo.
alPixel Lógico, opcional. Se .T. as coordenadas informadas são
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 Método construtor da classe.
Sintaxe
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âmetros
Parâmetro Tipo / Descrição
anRow Numérico, opcional. Coordenada vertical em pixels
ou caracteres.

anCol Numérico, opcional. Coordenada horizontal em
pixels ou caracteres.
abSetGet
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 ou numérica.
aaItems Array de items caracteres, opcional. Lista de items
selecionáveis.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
abChange Bloco de código, opcional. Executado quando o
item selecionado é alterado.
aoWnd Objeto, opcional. Janela ou controle onde o
controle será criado.
abValid
Bloco de código, opcional. Executado quando o
conteúdo do controle deve ser validado, deve
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.
alPixel Lógico, opcional. Se .T. as coordenadas informadas
são em pixels, se .F. são em caracteres.
lPar13 Reservado.
abLDBLClick
Bloco de código, opcional. Executado quando
acionado duplo click do botão esquerdo do mouse
sobre o controle.
aoFont
Objeto, opcional. Objeto tipo tFont utilizado para
definir as características da fonte utilizada para
exibir o conteúdo do controle.
cPar16 Reservado.
lPar17 Reservado.
abWhen
Bloco de código, opcional. Executado quando
mudança de foco de entrada de dados está sendo
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.
abRightClick
Bloco de código, opcional. Executado quando
acionado click do botão direito do mouse sobre o
controle.
Retorno O objeto criado.

Select
Descrição Força a seleção de um item.
Sintaxe 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 Insere ou adiciona novo item.
Sintaxe Add( cText, nPos )
Parâmetros
Parâmetro Tipo / Descrição
cText Caractere, obrigatório. Texto do item.
nPos
Numérico, obrigatório. Se 0 ou maior que o número de
itens, insere o item no final da lista. Se valor entre 1 e
número de itens, insere o item na posição informada,
empurrando o item anterior para baixo.
Retorno NIL
Modify
Descrição Modifica o texto de um item.
Sintaxe Modify( cText, nPos )
Parâmetros
Parâmetro Tipo / Descrição
cText Caractere, obrigatório. Novo texto do item.
nPos
Numérico, obrigatório. Posição a ser modificada deve
ser maior que 0 e menor ou igual que o número de
itens.
Retorno NIL
Del
Descrição Apaga um item.
Sintaxe Del( nPos )

Parâmetros
Parâmetro Tipo / Descrição
nPos Numérico, obrigatório. Posição a ser excluida, deve ser
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 1”)
Aadd(aItems,”Item 2”)
Aadd(aItems,”Item 3”)
Aadd(aItems,”Item 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
nTotal Numérico. Número total de passos até o preenchimento da régua de
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 Método construtor da classe.
Sintaxe
New([anRow], [anCol], [abSetGet], [anTotal], [aoWnd],
[anWidth], [anHeight], [lPar8], [alPixel], [oPar10], [cPar11],
[alNoPerc], [anClrPane], [nPar14], [anClrBar], [nPar16], [lPar17])
Parâmetros
Parâmetro Tipo / Descrição
anRow Numérico, opcional. Coordenada vertical em pixels ou
caracteres.

anCol Numérico, opcional. Coordenada horizontal em pixels
ou caracteres.
abSetGet
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 numérico.
anTotal Numérico, opcional. Numero total de passos até o
preenchimento da régua de processo.
aoWnd Objeto, opcional. Janela ou controle onde o controle
sera criado.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
lPar8 Reservado.
alPixel Lógico, opcional. Se .T. as coordenadas informadas são
em pixels, se .F. são em caracteres.
oPar10 Reservado.
cPar11 Reservado.
alNoPerc Lógico, opcional. Se .T. (padrão) não considera os
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.
Retorno O objeto criado.
Set
Descrição Atualiza a posição da régua de processamento.
Sintaxe Set( [nVal] )
Parâmetros
Parâmetro Tipo / Descrição
nVal Numérico, opcional. Novo valor da posição da régua de
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 Método construtor da classe.
Sintaxe
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âmetros
Parâmetro Tipo / Descrição
anRow Numérico, opcional. Coordenada vertical em pixels
ou caracteres.
anCol Numérico, opcional. Coordenada horizontal em
pixels ou caracteres.
abSetGet 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.
aoWnd Objeto, opcional. Janela ou controle onde o controle
será criado.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
aoFont
Objeto, opcional. Objeto tipo tFont utilizado para
definir as características da fonte utilizada para exibir
o conteúdo do controle.
alHScroll Lógico, opcional. Se .T., habilita barra de rolagem
horizontal.
anClrFore Numérico, opcional. Cor de fundo do controle.
anClrBack Numérico, opcional. Cor do texto do controle.
oPar11 Reservado.
alPixel Lógico, opcional. Se .T. as coordenadas informadas
são em pixels, se .F. são em caracteres.
cPar13 Reservado.
lPar14 Reservado.
abWhen
Bloco de código, opcional. Executado quando
mudança de foco de entrada de dados está sendo
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.
alReadOnly Lógico, opcional. Se .T. o controle so permitira
leitura.
abValid
Bloco de código, opcional. Executado quando o
conteúdo do controle deve ser validado, deve retornar
.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.
alNoVScroll Lógico, opcional. Se .T., habilita barra de rolagem
vertical.
Retorno O objeto criado.
EnableVScroll
Descrição Habilita a barra de rolagem vertical.

Sintaxe EnableVScroll( lEnable )
Parâmetros
Parâmetro Tipo / Descrição
lEnable Lógico, obrigatório. Se .T. habilita se .F. desabilita a
barra de rolagem.
Retorno NIL
EnableHScroll
Descrição Habilita a barra de rolagem horizontal.
Sintaxe EnableHScroll( lEnable )
Parâmetros
Parâmetro Tipo / Descrição
lEnable Lógico, obrigatório. Se .T. habilita se .F. desabilita a
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 Método construtor da classe.
Sintaxe
New([anRow], [anCol], [acText], [aoWnd], [aoFont], [alCentered],
[lPar6], [anClrText], [anClrBack], [anWidth], [anHeight],
[alLowered], [alRaised])
Parâmetros
Parâmetro Tipo / Descrição
anRow Numérico, opcional. Coordenada vertical em pixels.
anCol Numérico, opcional. Coordenada horizontal em pixels.
acText Caractere, opcional. Texto a ser exibido ao fundo.
aoWnd Objeto, opcional. Janela ou controle onde será criado o
objeto.
alCentered Lógico, opcional. Se .T. exibe o texto de título ao
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.
alLowered Lógico, opcional. Se .T. exibe o painel rebaixado em
relação ao controle de fundo.
alRaised Lógico, opcional. Se .T. exibe a borda do controle
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 Método construtor da classe.
Sintaxe
New([anRow], [anCol], [aacItems], [abSetGet], [aoWnd], [aPar6],
[abChange], [anClrText], [anClrPan], [cPar10], [lPar11],
[abWhen], [anWidth], [anHeight], [abValid], [lPar16], [lPar17],
[alPixel])
Parâmetros
Parâmetro Tipo / Descrição
anRow Numérico, opcional. Coordenada vertical em pixels ou
caracteres.
anCol Numérico, opcional. Coordenada horizontal em pixels
ou caracteres.

aacItems Array de caracteres, opcional. Lista de opções.
abSetGet
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 numérico.
aoWnd Objeto, opcional. Janela ou controle onde o controle
será criado.
aPar6 Reservado.
abChange Bloco de código, opcional. Executado quando o item
selecionado é alterado.
anClrText Numérico, opcional. Cor do texto do controle
anClrPan Numérico, opcional. Cor de fundo do controle.
cPar10 Reservado.
lPar11 Reservado.
abWhen
Bloco de código, opcional. Executado quando mudança
de foco de entrada de dados está sendo efetuada na
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.
abValid
Bloco de código, opcional. Executado quando o
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.
alPixel Lógico, opcional. Se .T. as coordenadas informadas são
em pixels, se .F. são em caracteres.
Retorno O objeto criado.
EnableItem
Descrição Habilita ou desabilita item.
Sintaxe EnableItem( [nItem], [lEnable])
Parâmetros
Parâmetro Tipo / Descrição
nItem Numérico, opcional. Item selecionado.
lEnable Lógico, opcional. Se .T. habilita o item se .F. desabilita
o item.
Retorno NIL
Exemplo

#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
lWordWrap Lógico. Se .T. quebra o texto em várias linhas de maneira a enquadrar o
conteúdo na área determinada para o controle, sendo o padrão .F.
lTransparent Lógico. Se .T. a cor de fundo do controle é ignorada assumindo o conteúdo
ou cor do controle ou janela ao fundo, sendo o padrão .T.
Métodos
New
Descrição Método construtor da classe.
Sintaxe
New([anRow], [anCol], [abText], [aoWnd], [acPicture], [aoFont],
[lPar7], [lPar8], [lPar9], [alPixels], [anClrText], [anClrBack],
[anWidth], [anHeight], [lPar15], [lPar16], [lPar17], [lPar18],
[lPar19])
Parâmetros
Parâmetro Tipo / Descrição
anRow Numérico, opcional. Coordenada vertical em pixels ou
caracteres.
anCol Numérico, opcional. Coordenada horizontal em pixels

ou caracteres.
abText Codeblock, opcional. Quando executado deve retornar
uma cadeia de caracteres a ser exibida.
aoWnd Objeto, opcional. Janela ou diálogo onde o controle
será criado.
acPicture Caractere, opcional. Picture de formatação do conteúdo
a ser exibido.
aoFont
Objeto, opcional. Objeto tipo tFont para configuração
do tipo de fonte que será utilizado para exibir o
conteúdo.
lPar7 Reservado.
lPar8 Reservado.
lPar9 Reservado.
alPixels
Lógico, opcional. Se .T. considera coordenadas
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 Modifica o conteúdo a ser exibido pelo controle.
Sintaxe SetText( [xVal] )
Parâmetros
Parâmetro Tipo / Descrição
xVal Caracter / Numérico / Data, Opcional. Valor a ser
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 Método construtor da classe.
Sintaxe New([aoWnd], [anTop], [anLeft], [anHeight], [anWidth],
[alVertical], [alHorizontal], [alBorder])
Parâmetros
Parâmetro Tipo / Descrição
aoWnd Objeto, opcional. Janela ou controle onde o controle
será criado.
anTop Numérico, opcional. Coordenada vertical em pixels.
anLeft Numérico, opcional. Coordenada horizontal em
pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
anWidth Numérico, opcional. Largura do controle em pixels.
alVertical Lógico, opcional. Se .T. exibe a barra de scroll
vertical.
alHorizontal Lógico, opcional. Se .T. exibe a barra de scroll
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 Descrição
(NULO) 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 Tipo Descrição
ahRef Caracter Endereço da página a ser navegada
Retorno
Tipo Descrição
(NULO) 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 Tipo Descrição
anRow Numérico coordenada vertical
anCol Numérico Coordenada horizontal
anWidth Numérico Largura do objeto
anHeight Numérico Altura do objeto
ainitLink Caracter
Endereço da página inicial a ser carregada, se não
informada, carregará a página <HOME> cadastrada no
Internet Explorer.
anWindow Objeto Janela ou componente visual onde o objeto será criado
Retorno
Tipo Descrição
Objeto 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 Descrição
(NULO) 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 Tipo Descrição
nRow Numérico Coordenada vertical inicial do Objeto.
bScroll Lógico Caso .T., habilita barra de scroll horizontal e botões de
navegação vertical.
Param25 (NULO) ( parâmetro reservado )
Param27 (NULO) ( parâmetro reservado )
nCol Numérico Coordenada horizontal inicial do Objeto
nWidth Numérico Tamanho horizontal do objeto
nHeigth Numérico Tamanho vertical do objeto
bLine Code-Block
Code-Block, que deve retornar um array, com uma
dimensão, onde devem ser retornados as strings
referentes aos elementos referentes às colunas do
Browse.
aHeaders Array
Array, que deve retornar um array, com uma dimensão,
contendo as strings referentes aos Títulos das colunas do
Browse.
aColSizes Array
Array, com uma dimensão, onde devem ser retornados os
números referentes ào tamanho horizontal das colunas do
Browse. Caso especificado NIL, os tamanhos das
colunas são calculados automaticamente.
oWnd Objeto Objeto visual sobre o qual a tWBrowse será criada.
cField Caracter
Utilizado para especificar a expressão de índice para
definição de limite superior e inferior do Browse. Este
parâmetro é utilizado quando realizado um browse de
uma tabela, aberta sob um alias, com uma expressão de
índice.

cTopLimit Caracter
Utilizado para especificar uma string, de acordo com a
chave de índice passada em cField, a ser utilizada para
identificar o limite superior do Browse. Apenas devemos
informar conteúdo neste, caso o parâmetro cField seja
especificado.
cBottomLiit Caracter
Utilizado para especificar uma string, de acordo com a
chave de índice passada em cField, a ser utilizada para
identificar o limite inferior do Browse. Apenas devemos
informar conteúdo neste, caso o parâmetro cField seja
especificado.
bChange Code-Block
Ação a ser executada quando alterado o foco entre as
linhas do Browse. Recebe o objeto do Browse como
parâmetro.
bLDblClick Code-Block Ação a ser executada quando executado um dupli-clique
sobre uma célula do Browse.
Param14 (NULO) ( parâmetro reservado )
oFont Objeto Objeto referente à uma fonte alternativa para exibição
dos dados neste Browse.
Param16 (NULO) ( parâmetro reservado )
nClrFore Numérico Cor de escrita dos dados no TWBrowse. Verifique cores
disponíveis no include "colors.ch"
nClrBack Numérico Cor de fundo da área da TWBrowse não preenchida com
dados. Verifique cores disponíveis no include "colors.ch"
Param19 (NULO) ( parâmetro reservado )
Param20 (NULO) ( parâmetro reservado )
cAlias Caracter
Caso o Browse seja realizado sobre uma tabela aberta,
estecifique o alias da tabela a ser utilizada neste
parâmetro.
lPixel Lógico
Caso .T., indica que as coordenadas de tela são
especificadas em PIXELS. Caso contrário, são
coordenadas especificadas em CARACTERES.
Param23 (NULO) ( parâmetro reservado )
Param24 (NULO) ( parâmetro reservado )
Retorno
Tipo Descrição
Objeto 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 Método construtor da classe.
Sintaxe
New([anTop], [anLeft], [anBottom], [anRight], [acCaption],
[cPar6], [nPar7], [lPar8], [nPar9], [anClrText], [anClrBack],
[oPar12], [aoWnd], [alPixel], [oPar15], [oPar16], [lPar17])
Parâmetros
Parâmetro Tipo / Descrição
anTop Numérico, opcional. Coordenada vertical superior em
pixels ou caracteres.
anLeft Numérico, opcional. Coordenada horizontal esquerda
em pixels ou caracteres.

anBotom Numérico, opcional. Coordenada vertical inferior em
pixels ou caracteres.
anRight Numérico, opcional. Coordenada horizontal direita em
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.
aoWnd Objeto, opcional. Janela mãe da janela a ser criada,
padrão é a janela principal do programa.
alPixel Lógico, opcional. Se .T. considera as coordenadas
passadas em pixels, se .F. considera caracteres.
oPar15 Reservado.
oPar16 Reservado.
nPar17 Reservado.
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 Método construtor da classe.
Sintaxe
New([anTop], [anLeft], [anBottom], [anRight], [acCaption],
[cPar6], [nPar7], [lPar8], [nPar9], [anClrText], [anClrBack],
[oPar12], [aoWnd], [alPixel], [oPar15], [oPar16], [nPar17],
[anWidth], [anHeight])
Parâmetros
Parâmetro Tipo / Descrição
anTop Numérico, opcional. Coordenada vertical superior em
pixels ou caracteres.
anLeft Numérico, opcional. Coordenada horizontal esquerda
em pixels ou caracteres.
anBotom Numérico, opcional. Coordenada vertical inferior em

pixels ou caracteres.
anRight Numérico, opcional. Coordenada horizontal direita em
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.
aoWnd Objeto, opcional. Janela mãe da janela a ser criada,
padrão é a janela principal do programa.
alPixel Lógico, opcional. Se .T. considera as coordenadas
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 Ativa (exibe) o diálogo. Chamar somente uma vez este método.
Sintaxe Activate([bPar1], [bPar2], [bPar3], [alCentered], [abValid], [lPar6],
[abInit], [bPar8], [bPar9] )
Parâmetros
Parâmetro Tipo / Descrição
bPar1 Reservado.
bPar2 Reservado.
bPar3 Reservado.
alCentered Lógico, opcional. Se .T. exibe a janela centralizada, .F.
é padrão.
abValid
Bloco de código, opcional. Deve retornar .T. se
conteúdo do diálogo é válido, se retornar .F. o diálogo
não fechará quando solicitada de encerrar.
lPar6 Reservado.
abInit Bloco de código, opcional. Executado quando o
diálogo inicia exibição.

bPar8 Reservado.
bPar9 Reservado.
Retorno 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 Método construtor da janela.
Sintaxe
New( [anTop], [anLeft],[anBottom], [anRight], [acTitle], [nPar6],
[oPar7] ,[oPar8],[oPar9], [aoParent], [lPar11], [lPar12],
[anClrFore], [anClrBack], [oPar15], [cPar16], [lPar17], [lPar18],
[lPar19], [lPar20], [alPixel] );
Parâmetros
Parâmetro Tipo / Descrição
nTop Numérico, opcional. Coordenada vertical superior em
pixels ou caracteres.
nLeft Numérico, opcional. Coordenada horizontal esquerda
em pixels ou caracteres.

nBottom Numérico, opcional. Coordenada vertical inferior em
pixels ou caracteres.
nRight Numérico, opcional. Coordenada horizontal inferior em
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.
lPixel
Lógico, opcional. Se .T. (padrão) considera
coordenadas passadas em pixels, se .F. considera
caracteres.
Retorno Objeto. A janela construída.
Activate
Descrição Ativa (exibe) a janela. Chamar esse método apenas uma vez.
Sintaxe
Activate([acShow], [bPar2], [bPar3], [bPar4], [bPar5], [bPar6], [
abInit ], [bPar8], [bPar9], [bPar10], [bPar11], [bPar12] ,[bPar13],
[bPar14], [bPar15], [abValid], [bPar17], [bPar18] ).
Parâmetros
Parâmetro Tipo / Descrição
acShow Caracter, opcional. “ICONIZED” para janela iconizada
ou “MAXIMIZED” para janela maximizada.
bPar2 Reservado.
bPar3 Reservado.
bPar4 Reservado.
bPar5 Reservado.
bPar6 Reservado.
abInit Bloco de código. Executado quando janela está sendo
exibida.
bPar8 Reservado.

bPar9 Reservado.
bPar10 Reservado.
bPar11 Reservado.
bPar12 Reservado.
bPar13 Reservado.
bPar14 Reservado.
bPar15 Reservado.
abValid
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á.
bPar17 Reservado.
bPar18 Reservado.
Retorno 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
cPop Endereço do servidor POP, no caso de conexão SMTP passe esse como
""(branco).
cSmtp Endereço do servidor SMTP, no caso de conexão POP passe esse como
""(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
nNumMsg Parametro passado por referencia, retorna nele o numero de mensagens que
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 Tipo Descrição
nMsg Numérico Numero da mensagem a ser deletada.
Retorno
Tipo Descrição
(NULO) 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 Tipo Descrição
nNumMsg Numérico Parametro passado por referencia, retorna nele o numero
de mensagens que estão no servidor.
Retorno
Tipo Descrição
Numérico 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 Tipo Descrição
cPop Caracter Endereço do servidor POP, no caso de conexão SMTP
passe esse como ""(branco).
cSmtp Caracter Endereço do servidor SMTP, no caso de conexão POP
passe esse como ""(branco)
cUser Caracter Login no servidor.
cPass Caracter Senha no servidor.
nTimeOut Numérico Time out para a conexão.
nPort Numérico Porta para se conectar.
Retorno
Tipo Descrição
(NULO) 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 Versão 6.09 Versão 7.10
Sintaxe
TMAILMANAGER:NEW ( ) --> oServer
Retorno
Tipo Descrição
Objeto Construtor do objeto.
Descrição
Construtor do objeto.

TMAILMANAGER:POPCONNECT
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:POPCONNECT ( ) --> Nil
Retorno
Tipo Descrição
(NULO) Nil
Descrição
Conecta com o servidor, atraves dos parametros de Init

TMAILMANAGER:POPDISCONNECT
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:POPDISCONNECT ( ) --> nRet
Retorno
Tipo Descrição
Numérico 0 = Disconectado
Descrição
Disconecta com o servidor POP

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 Tipo Descrição
nTimeOut Numérico Tempo para que a conexão seja fechada por Time-Out.
Retorno
Tipo Descrição
Numérico 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 Tipo Descrição
nTimeOut (NULO) Tempo para que a conexão seja fechada por Time-Out.
Retorno
Tipo Descrição
(NULO) 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 Versão 7.10
Sintaxe
TMAILMANAGER:SMTPCONNECT ( ) --> nRet
Retorno
Tipo Descrição
Numérico 0 - Conectado
Descrição
Conecta com o servidor, atraves dos parametros de Init

TMAILMANAGER:SMTPDISCONNE
CT
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:SMTPDISCONNECT ( ) --> nRet
Retorno
Tipo Descrição
Numérico 0 = Disconectado
Descrição
Disconecta com o servidor SMTP

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 Tipo Descrição
oServer Caracter Instancia do servidor criado (SMTP).
Retorno
Tipo Descrição
Numérico 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 Descrição
CloseConnection Finaliza a conexão TCP genérica (socket ) do objeto corrente.
Connect Estabelece um conexão TCP genérica (socket ).
IsConnected Verifica se existe conexão valida no objeto corrente.
New Cria o objeto tSocketClient, sem conexão ativa.
Receive Recebe os dados pela conexão ativa do objeto, qualquer tipo de
dado pode ser recebido.
Reset 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 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 Descrição
(NULO) 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 Tipo Descrição
nPorta Numérico Numero da porta onde a conexão deve ser realizada
cIP Caracter Número IP ou nome do servidor onde a conexão deve ser
realizada
nTimeout Numérico Número em milisegundos que o método deve esperar para
conectar
Retorno
Tipo Descrição
Numérico 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 Descrição
Lógico 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 Versão 8.11
Sintaxe
tSocketClient():New ( ) --> oSocket
Retorno
Tipo Descrição
Objeto Retorna um Objeto do tipo tSocketClient
Descrição
Cria o objeto tSocketClient, sem conexão ativa.

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 Tipo Descrição
cBuffer Caracter Buffer que conterá os dados a serem recebidos.
nTimeout Numérico tempo em milisegundos que a função receive espera até
receber algum dado pela conexão.
Retorno
Tipo Descrição
Numérico 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 Descrição
(NULO) 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 Tipo Descrição
cBuffer Caracter Buffer com os dados a serem transmitidos pela conexão.
Retorno
Tipo Descrição
Numérico 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 += '<?xml version="1.0"?>'
cModelo += '<MeuDoc>'
cModelo += '<Livro>'
cModelo += '<Id></Id>'
cModelo += '<Titulo></Titulo>'
cModelo += '<Autor></Autor>'
cModelo += '<Data></Data>'
cModelo += '</Livro>'
cModelo += '</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 Versão 8.11
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+']')

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 Versão 7.10
// 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" )

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 // Define o bloco de Bytes a serem lidos
/ gravados por vez
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ão 5.08 Versão 6.09 Versão 7.10 Versão 8.11
Versões Anteriores
O exemplo abaixo determina se um arquivo de banco de dados em use na área de
trabalho corrente:
USE Customer NEW
conout(USED()) // Resulta: .T.
CLOSE
conout(USED()) // 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() ) // Resulta: 09/01/90
conout( DTOC(DATE()) ) // Resulta: 09/01/90
conout( "Hoje e " + DTOC(DATE()) ) // 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() ) // Resulta: 09/01/90
conout( DTOS(DATE()) ) // Resulta: 19900901
conout( LEN(DTOS(CTOD(""))) ) // 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( DATE() ) // Resulta: 09/01/90
conout( DAY(DATE()) ) // Resulta: 1
conout( DAY(DATE()) + 1) // Resulta: 2
conout( DAY(CTOD("")) ) // 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() ) // Resulta: 09/01/90
conout( MONTH(DATE()) ) // Resulta: 9
conout( MONTH(DATE()) + 1 ) // 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() ) // Resulta: 08/04/02
conout( CDOW(DATE()) ) // Resulta: Sunday
conout( CDOW(DATE() + 7) ) // Resulta: Sunday
conout( CDOW(CTOD("12/06/90")) ) // 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( DATE() ) // Resulta: 08/04/02
conout( DATE() + 30 ) // Resulta: 09/03/02
conout( DATE() - 30 ) // Resulta: 07/05/02
dDate = DATE()
conout( CMONTH(dDate) ) // 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( DATE() ) // Resulta: 09/01/89
conout( DOW(DATE()) ) // Resulta: 3
conout( CDOW(DATE()) ) // Resulta: Terca-feira
conout( DOW(DATE() - 2) ) // Resulta: 1
conout( CDOW(DATE() - 2) ) // Resulta: 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() ) // Resulta: 09/01/90
conout( YEAR(DATE()) ) // Resulta: 1990
conout( YEAR(DATE()) + 11 ) // 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()) ) // Resulta: September 20,
1990
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() ) // Resulta: 10:00:00
conout( SECONDS() ) // 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 := {} // Resulta: aArray e um vetor vazio
AADD(aArray, 5) // Resulta: aArray e { 5 }
AADD(aArray, 10) // Resulta: aArray e { 5, 10 }
AADD(aArray, { 12, 10 }) // Resulta: aArray e { 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 } // Resulta: aArray e agora { 1, 2, 3 }
ADEL(aArray, 2) // 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] // Resulta: aLogic e { NIL, NIL, NIL }
AFILL(aLogic, .F.) // Resulta: aLogic e { .F., .F., .F. }
AFILL(aLogic, .T., 2, 2) // 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 } // Resulta: aArray e agora { 1, 2, 3 }
AINS(aArray, 2) // 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 multi-
dimensional:
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") // Resulta: 2
? ASCAN(aArray, "mary") // Resulta: 0
? ASCAN(aArray, { |x| UPPER(x) == "MARY" }) // 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 } // Resulta: aArray e { 1 }
ASIZE(aArray, 3) // Resulta: aArray e { 1, NIL, NIL }
ASIZE(aArray, 1) // 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 multi-
dimensional , 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} }