Você está na página 1de 133

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.
Flag que ativa .T. ou desativa .F. a exibição do tooltip do
lShowHint Lógico.
objeto.
Mensagem exibida na barra de status da janela principal
cMsg Caractere.
quando o objeto ganha foco.
nClrText Numérico. Cor do texto do objeto.
nClrPane Numérico. Cor do fundo do objeto.
Executado quando há movimentação de foco na janela.Se
Bloco de
bWhen retornar .T. o objeto continua habilitado, se retornar .F. o
código.
objeto será desabilitado.
Executado quando o conteúdo do objeto é modificado e
Bloco de
bValid deverá ser validado. Deve retornar .T. se o conteúdo é válido
código.
e .F. se conteúdo inválido.
Bloco de Executado quando acionado click do botão esquerdo do
blClicked
código. mouse sobre o objeto.
Bloco de Executado quando acionado click do botão direito do mouse
brClicked
código. sobre o objeto.
Bloco de Executado quando acionado duplo click do botão esquerdo
blDblClick
código. 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.
Objeto ou
Cargo Conteúdo associado ao objeto.
variável.
Bloco de
bLostFocus Executado quando objeto perde foco.
código.
Bloco de
bGotFocus Executado quando objeto ganha foco.
código.

Métodos
SetFocus
Sintaxe SetFocus( )
Descrição Força o foco de entrada de dados mudar para o objeto.
Retorno NIL

Hide
Sintaxe Hide( )
Descrição Torna objeto invisível.
Retorno NIL

Show
Sintaxe Show( )
Descrição Torna objeto visível.
Retorno NIL

Enable
Sintaxe Enable( )
Descrição Habilita o objeto.
Retorno NIL

Disable
Sintaxe Disable( )
Descrição Desabilita o objeto.
Retorno NIL

Refresh
Sintaxe Refresh( )
Força atualização (sincronia) de propriedades entre o programa e o
Descrição
Protheus Remote.
tFont
Revisão: 23/02/2003

Abrangência

Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10

Classe que encapsula fonte de edição.

Hierarquia
tFontAbs -> tFont

Descrição
Utilize objeto tFont para modificar a fonte padrão de controles visuais.

Propriedades
Vide classes ancestrais.

Métodos
New
Descrição Método construtor da classe.
New([acName], [nPar2], [anHeight], [lPar4], [alBold], [nPar6],
Sintaxe
[lPar7], [nPar8], [alItalic], [alUnderline])
Parâmetro Tipo / Descrição
Caractere, opcional. Nome da fonte, o padrão é
acName
“Arial”.
nPar2 Reservado.
Parâmetros Numérico, opcional. Tamanho da fonte. O padrão é -
anHeight
11.
lPar4 Reservado.
Lógico, opcional. Se .T. o estilo da fonte será
alBold
negrito.
nPar6 Reservado.
lPar7 Reservado.
nPar8 Reservado.
alItalic Lógico, opcional. Se .T. o estilo da fonte será itálico.
Lógico, opcional. Se .T. o estilo da fonte será
alUnderline
sublinhado.

Retorno O objeto criado.

Exemplo
#INCLUDE "PROTHEUS.CH"

User Function Teste()


Local oDlg, oSay
Local oFont:= TFont():New("Courier New",,-14,.T.)

DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 TITLE "My dialog" PIXEL

// Apresenta o tSay com a fonte Courier New

oSay := TSay():New( 10, 10, {|| "Mensagem"},oDlg,, oFont,,,, .T.,


CLR_WHITE,CLR_RED )

/* o comando abaixo proporciona o mesmo resultado


@ 10,10 SAY oSay PROMPT "Mensagem" FONT oFont COLOR CLR_WHITE,CLR_RED
OF oDlg PIXEL
*/

oSay:lTransparent:= .F.

ACTIVATE MSDIALOG oDlg CENTERED

Return
tControl
Revisão: 23/02/2003

Abrangência

Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10

Classe abstrata mãe de todos os controles editáveis.

Hierarquia
tSrvObject -> tControl

Características
tControl é a classe comum entre todos os componentes visuais editáveis.

Propriedades
Nome Tipo / Descrição
Numérico. Alinhamento do controle no espaço disponibilizado pelo seu
Align objeto parente. 0 = Nenhum (padrão), 1= no topo, 2 = no rodapé, 3= a
esquerda, 4 = a direita e 5 = em todo o parente.
Lógico. Se .T. indica que o conteúdo da variável associada ao controle foi
lModified
modificado.
Lógico. Se .T. o conteúdo da variável associada ao controle permanecerá
lReadOnly
apenas para leitura.
Numérico. Handle (identificador) do objeto sobre o qual o controle foi
hParent
criado.
Bloco de código. Executado quando o estado ou conteúdo do controle é
bChange
modificado pela ação sobre o controle.

Métodos
SetFocus
Descrição Força mudança do foco de entrada de dados para o controle.
Sintaxe SetFocus( )
REtorno NIL

tButton
Revisão: 23/02/2003

Abrangência

Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10

Classe de botão.

Hierarquia
tSrvObject -> tControl -> tButton

Descrição
Utilize a classe tButton para criar um controle visual do tipo botão.

Propriedades
Nome Tipo / Descrição
lProcessing Lógico. Se .T. indica o botão está efetuando uma ação.
bAction Bloco de código. Executado quando o botão é pressionado.

Métodos
New
Descrição Método construtor da classe.
New([anRow], [anCol], [acCaption], [aoWnd], [abAction],
Sintaxe [anWidth], [anHeight], [nPar8], [aoFont], [lPar10],
[alPixel],[lPar12],[cPar13], [lPar14], [abWhen], [bPar16], [lPar17])
Parâmetro Tipo / Descrição
Parâmetros Numérico, opcional. Coordenada vertical em pixels ou
anRow
carateres.
Numérico, opcional. Coordenada horizontal em pixels
anCol
ou caracteres.
acCaption Caractere, opcional. Titulo do botão.
Objeto, opcional. Janela ou controle onde o botão
aoWnd
deverá ser criado.
Bloco de código, opcional. Bloco que deverá ser
abAction
acionado quando o botão for pressionado.
anWidth Numérico, opcional. Largura do botão em pixels.
anHeight Numérico, opcional. Altura do botão em pixels.
nPar8 Reservado.
Objeto, opcional. Objeto tipo tFont com propriedades
aoFont
da fonte utilizada para o título do botão.
lPar10 Reservado.
Lógico, opcional. Se .T. considera as coordenadas
alPixel passadas em pixels, se .F. (padrão) considera em
caracteres.
lPar12 Reservado.
cPar13 Reservado.
lPar14 Reservado.
Bloco de código, opcional. Executado quando
mudança de foco de entrada de dados está sendo
abWhen efetuada na janela onde o controle foi criado. O bloco
deve retornar .T. se o controle deve permanecer
habilitado ou .F. se não.
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.
New([anRow], [anCol], [acCaption], [abSetGet], [aoWnd],
[anWidth], [anHeight], [nPar8], [abClick], [aoFont], [abValid],
Sintaxe
[anClrFore], [anClrBack], [lPar14], [alPixel], [cPar16], [lPar17],
[abWhen])
Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical em pixels
anRow
ou carateres.
Parâmetros
Numérico, opcional. Coordenada horizontal em pixels
anCol
ou caracteres.
acCaption Caractere, opcional. Texto exibido pelo controle.
Bloco de código, opcional. Bloco de código no
formato {|u| if( Pcount( )>0, <var>:= u, <var> ) } que
abSetGet o controle utiliza para atualizar a variável <var>.
<var> deve ser tipo lógico, se <var> = .T. então o
controle aparecerá checado.
Objeto, opcional. Janela ou controle onde o controle
aoWnd
deverá ser criado.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
nPar8 Reservado.
Bloco de código, opcional. Executado quando o
abClick controle click do botão esquerdo do mouse é acionado
sobre o controle.
Objeto, opcional. Objeto tipo tFont com propriedades
aoFont
da fonte utilizada para o texto do controle.
Bloco de código, opcional. Executado quando o
conteúdo do controle deve ser validado, deve retornar
abValid
.T. se o conteúdo for válido e .F. quando o conteúdo
for inválido.
anClrFore Numérico, opcional. Cor de fundo do controle.
anClrBack Numérico, opcional. Cor do texto do controle.
lPar14 Reservado.
Lógico, opcional. Se .T. as coordenadas informadas
alPixel
são em pixels, se .F. são em caracteres.
cPar16 Reservado.
lPar17 Reservado.
Bloco de código, opcional. Executado quando
mudança de foco de entrada de dados está sendo
abWhen efetuada na janela onde o controle foi criado. O bloco
deve retornar .T. se o controle deve permanecer
habilitado ou .F. se não.
Retorno O objeto construído.

Exemplo
#include “protheus.ch”

User Function Teste()

Local oDlg, oButton, oCheck, lCheck:=.F.

DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE “Meu programa”

oCheck:= tCheckBox():New(10,10,”funcionou?”,;
{|u|if( pcount()>0,lCheck:=u,lCheck)};
,oDlg,100,20,,,,,,,,.T.)
oButton:=tButton():New(30,10,”fechar”,oDlg,{||oDlg:End()},;
100,20,,,,.T.)

ACTIVATE MSDIALOG oDlg CENTERED


If lCheck
MsgStop( “Funcionou!” )
Endif

Return NIL
tComboBox
Revisão: 23/02/2003

Abrangência

Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10

Classe de combobox.

Hierarquia
tSrvObject -> tControl -> tComboBox

Descrição
Utilize a classe tComboBox para cria uma entrada de dados com múltipla escolha com
item definido em uma lista vertical, acionada por F4 ou pelo botão esquerdo localizado
na parte direita do controle. A variável associada ao controle terá o valor de um dos
itens selecionados ou no caso de uma lista indexada, o valor de seu índice.

Propriedades
Nome Tipo / Descrição
Array. Lista de itens, caracteres, a serem exibidos. Pode ter os seguintes
aItems formatos: a) Seqüencial, exemplo: {“item1”,”item2”,...,”itemN”} ou b)
Indexada, exemplo: {“a=item1”,”b=item2”, ..., “n=itemN”}.
nAt Numérico. Posição do item selecionado.

Métodos
New
Descrição Método construtor da classe.
New([anRow], [anCol], [abSetGet], [anItems], [anWidth],
[anHeight], [aoWnd], [nPar8], [abChange], [abValid], [anClrText],
Sintaxe
[anClrBack], [alPixel], [aoFont], [cPar15], [lPar16], [abWhen],
[lPar18], [aPar19], [bPar20], [cPar21], [acReadVar])
Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical em pixels
anRow
ou caracteres.
Numérico, opcional. Coordenada horizontal em
anCol
pixels ou caracteres.
Bloco de código, opcional. Bloco de código no
formato {|u| if( Pcount( )>0, <var>:= u, <var> ) } que
o controle utiliza para atualizar a variável <var>.
abSetGet <var> deve ser tipo caracter. Se a lista for seqüencial,
o controle atualizará <var> com o conteúdo do item
selecionado, se a lista for indexada, <var> será
atualizada com o valor do índice do item selecionado.
Array, opcional. Lista de items, caracteres, a serem
exibidos. Pode ter os seguintes formatos: a)
anItems Seqüencial, exemplo: {“item1”,”item2”,...,”itemN”}
ou b) Indexada, exemplo: {“a=item1”,”b=item2”, ...,
“n=itemN”}.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
Objeto, opcional. Janela ou controle onde o controle
aoWnd
será criado.
Parâmetros nPar8 Reservado.
Bloco de código, opcional. Executado quando o
abChange
controle modifica o item selecionado.
Bloco de código, opcional. Executado quando o
conteúdo do controle deve ser validado, deve retornar
abValid
.T. se o conteúdo for válido e .F. quando o conteúdo
for inválido.
anClrBack Numérico, opcional. Cor de fundo do controle.
anClrText Numérico, opcional. Cor do texto do controle.
Lógico, opcional. Se .T. as coordenadas informadas
alPixel
são em pixels, se .F. são em caracteres.
Objeto, opcional. Objeto tipo tFont utilizado para
aoFont definir as características da fonte utilizada para exibir
o conteúdo do controle.
cPar15 Reservado.
lPar16 Reservado.
Bloco de código, opcional. Executado quando
mudança de foco de entrada de dados está sendo
abWhen efetuada na janela onde o controle foi criado. O bloco
deve retornar .T. se o controle deve permanecer
habilitado ou .F. se não.
lPar18 Reservado.
aPar19 Reservado.
bPar20 Reservado.
cPar21 Reservado.
Caractere, opcional. Nome da variável que o controle
deverá manipular, deverá ser a mesma variável
acReadVar
informada no parâmetro abSetGet, e será o retorno da
função ReadVar( ).
Retorno O objeto criado.

Select
Descrição Muda o item selecionado no combobox.
Sintaxe Select( [anItem] )
Parâmetro Tipo / Descrição
Parâmetros Numérico, opcional. Posição do item a ser
anItem
selecionado.
Retorno NIL

Exemplo
#include “protheus.ch”

User Function TesteGet()

Local oDlg, oButton, oCombo, cCombo, aItems:=


{“item1”,”item2”,”item3”}

cCombo:= aItems[2]

DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE “Meu Combo”

oCombo:= tComboBox():New(10,10,{|u|if(PCount()>0,cCombo:=u,cCombo)},;
aItems,100,20,oDlg,,{||MsgStop(“Mudou item”)},;
,,,.T.,,,,,,,,,”cCombo”)

// Botão para fechar a janela

@ 40,10 BUTTON oButton PROMPT “Fechar” OF oDlg PIXEL ACTION oDlg:End()

ACTIVATE MSDIALOG oDlg CENTERED

MsgStop( “O valor é ”+cCombo )

Return NIL
tGet
Revisão: 23/02/2003

Abrangência

Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10

Classe de controle para entrada de dados editáveis.

Hierarquia
tSrvObject -> tControl -> tGet

Descrição
Use tGet para criar um controle que armazene ou altere o conteúdo de uma variável
através de digitação. O conteúdo da variável só é modicado quando o controle perde o
foco de edição para outro controle.

Propriedades
Nome Tipo / Descrição
Lógico. Se .T. o controle se comporta como entrada de dados de senha,
lPassword
exibindo asteriscos ‘*’ para esconder o conteúdo digitado.
Picture Caractere. Máscara de formatação do conteúdo a ser exibido.

Métodos
New
Descrição Método construtor do controle.
New([anRow], [anCol], [abSetGet], [aoWnd], [anWidth],
[anHeight], [acPict], [abValid], [anClrFore], [anClrBack],
[aoFont], [lPar12], [oPar13], [alPixel], [cPar15], [lPar16],
Sintaxe
[abWhen], [lPar18], [lPar19], [abChange], [alReadOnly],
[alPassword], [cPar23], [acReadVar], [cPar25], [lPar26], [nPar27],
[lPar28])
Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical em pixels
anRow
ou caracteres.
Numérico, opcional. Coordenada horizontal em
anCol
pixels ou caracteres.
Bloco de código, opcional. Bloco de código no
formato {|u| if( Pcount( )>0, <var>:= u, <var> ) }
abSetGet
que o controle utiliza para atualizar a variável <var>.
<var> deve ser tipo caracter, numérico ou data.
Objeto, opcional. Janela ou controle onde o controle
aoWnd
será criado.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
Caractere, opcional. Máscara de formatação do
acPict
conteúdo a ser exibido.
Bloco de código, opcional. Executado quando o
conteúdo do controle deve ser validado, deve
abValid
retornar .T. se o conteúdo for válido e .F. quando o
conteúdo for inválido.
anClrFore Numérico, opcional. Cor de fundo do controle.
anClrBack Numérico, opcional. Cor do texto do controle.
Parâmetros
Objeto, opcional. Objeto tipo tFont utilizado para
aoFont definir as características da fonte utilizada para
exibir o conteúdo do controle.
lPar12 Reservado.
oPar13 Reservado.
Lógico, opcional. Se .T. as coordenadas informadas
alPixel
são em pixels, se .F. são em caracteres.
cPar15 Reservado.
lPar16 Reservado.
Bloco de código, opcional. Executado quando
mudança de foco de entrada de dados está sendo
abWhen efetuada na janela onde o controle foi criado. O
bloco deve retornar .T. se o controle deve
permanecer habilitado ou .F. se não.
lPar18 Reservado.
lPar19 Reservado.
Bloco de código, opcional. Executado quando o
abChange
controle modifica o valor da variável associada.
Lógico, opcional. Se .T. o controle não poderá ser
alReadOnly
editado.
Lógico, opcional. Se .T. o controle exibirá asteriscos
“*” no lugar dos caracteres exibidos pelo controle
para simular entrada de senha.
cPar23 Reservado.
Caractere, opcional. Nome da variável que o
controle deverá manipular, deverá ser a mesma
acReadVar
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.
New([anTop], [anLeft], [anBottom], [anRight], [acCaption],
Sintaxe
[aoWnd], [anClrText], [anClrPane], [alPixel], [lPar10])
Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical superior em
anTop
pixels ou caracteres.
Numérico, opcional. Coordenada horizontal esquerda
anLeft
em pixels ou caracteres.
Numérico, opcional. Coordenada vertical inferior em
Parâmetros anBottom
pixels ou caracteres.
Numérico, opcional. Coordenada horizontal direita em
anRight
pixels ou caracteres.
acCaption Caractere, opcional. Título do grupo.
Objeto, opcional. Janela ou controle onde o controle
aoWnd
será criado.
anClrText Numérico, opcional. Cor do texto.
anClrPane Numérico, opcional. Cor do fundo.
Lógico, opcional. Se .T. as coordenadas informadas
alPixel
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.
New([anRow], [anCol], [abSetGet], [aaItems], [anWidth],
[anHeigth], [abChange], [aoWnd], [abValid], [anClrFore],
Sintaxe [anClrBack], [alPixel], [lPar13], [abLDBLClick], [aoFont],
[cPar16], [lPar17], [abWhen], [aPar19], [bPar20], [lPar21],
[lPar22], [abRightClick] )
Parâmetro Tipo / Descrição
Parâmetros
Numérico, opcional. Coordenada vertical em
anRow
pixels ou caracteres.
Numérico, opcional. Coordenada horizontal em
anCol
pixels ou caracteres.
Bloco de código, opcional. Bloco de código no
formato {|u| if( Pcount( )>0, <var>:= u, <var> )}
abSetGet
que o controle utiliza para atualizar a variável
<var>. <var> deve ser tipo caracter ou numérica.
Array de items caracteres, opcional. Lista de items
aaItems
selecionáveis.
Numérico, opcional. Largura do controle em
anWidth
pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
Bloco de código, opcional. Executado quando o
abChange
item selecionado é alterado.
Objeto, opcional. Janela ou controle onde o
aoWnd
controle será criado.
Bloco de código, opcional. Executado quando o
conteúdo do controle deve ser validado, deve
abValid
retornar .T. se o conteúdo for válido e .F. quando o
conteúdo for inválido.
anClrFore Numérico, opcional. Cor de fundo do controle.
anClrBack Numérico, opcional. Cor do texto do controle.
Lógico, opcional. Se .T. as coordenadas
alPixel
informadas são em pixels, se .F. são em caracteres.
lPar13 Reservado.
Bloco de código, opcional. Executado quando
abLDBLClick acionado duplo click do botão esquerdo do mouse
sobre o controle.
Objeto, opcional. Objeto tipo tFont utilizado para
aoFont definir as características da fonte utilizada para
exibir o conteúdo do controle.
cPar16 Reservado.
lPar17 Reservado.
Bloco de código, opcional. Executado quando
mudança de foco de entrada de dados está sendo
abWhen efetuada na janela onde o controle foi criado. O
bloco deve retornar .T. se o controle deve
permanecer habilitado ou .F. se não.
aPar19 Reservado.
bPar20 Reservado.
lPar21 Reservado.
lPar22 Reservado.
Bloco de código, opcional. Executado quando
abRightClick acionado click do botão direito do mouse sobre o
controle.
Retorno O objeto criado.

Select
Descrição Força a seleção de um item.
Sintaxe Select( [anItem] )
Parâmetro Tipo / Descrição
Parâmetros Numérico, opcional. Posição do item a ser
nItem
selecionado.
Retorno NIL

Add
Descrição Insere ou adiciona novo item.
Sintaxe Add( cText, nPos )
Parâmetro Tipo / Descrição
cText Caractere, obrigatório. Texto do item.
Parâmetros 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
nPos
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âmetro Tipo / Descrição
cText Caractere, obrigatório. Novo texto do item.
Parâmetros Numérico, obrigatório. Posição a ser modificada deve
nPos ser maior que 0 e menor ou igual que o número de
itens.
Retorno NIL

Del
Descrição Apaga um item.
Sintaxe Del( nPos )
Parâmetro Tipo / Descrição
Parâmetros Numérico, obrigatório. Posição a ser excluida, deve
nPos 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
Numérico. Número total de passos até o preenchimento da régua de
nTotal
processo.
lPercentage Lógico. Se .T. considera o passo de movimentação em porcentagem.
nClrBar Numérico. Cor da barra de andamento.

Métodos
New
Descrição Método construtor da classe.
New([anRow], [anCol], [abSetGet], [anTotal], [aoWnd],
Sintaxe [anWidth], [anHeight], [lPar8], [alPixel], [oPar10], [cPar11],
[alNoPerc], [anClrPane], [nPar14], [anClrBar], [nPar16], [lPar17])
Parâmetro Tipo / Descrição
Parâmetros
Numérico, opcional. Coordenada vertical em pixels ou
anRow
caracteres.
Numérico, opcional. Coordenada horizontal em pixels
anCol
ou caracteres.
Bloco de código, opcional. Bloco de código no
formato {|u| if( Pcount( )>0, <var>:= u, <var> ) } que
abSetGet
o controle utiliza para atualizar a variável <var>.
<var> deve ser tipo numérico.
Numérico, opcional. Numero total de passos até o
anTotal
preenchimento da régua de processo.
Objeto, opcional. Janela ou controle onde o controle
aoWnd
sera criado.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
lPar8 Reservado.
Lógico, opcional. Se .T. as coordenadas informadas
alPixel
são em pixels, se .F. são em caracteres.
oPar10 Reservado.
cPar11 Reservado.
Lógico, opcional. Se .T. (padrão) não considera os
alNoPerc
passos de atualização em porcentagem.
anClrPane Numérico, opcional. Cor de fundo do controle.
nPar14 Reservado.
anClrBar Numérico, opcional. Cor da barra de andamento.
nPar16 Reservado.
lPar17 Reservado.
Retorno O objeto criado.

Set
Descrição Atualiza a posição da régua de processamento.
Sintaxe Set( [nVal] )
Parâmetro Tipo / Descrição
Parâmetros Numérico, opcional. Novo valor da posição da régua
nVal
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.
New([anRow], [anCol], [abSetGet], [aoWnd], [anWidth],
[anHeight], [aoFont], [alHScroll], [anClrFore], [anClrBack],
Sintaxe [oPar11], [alPixel], [cPar13], [lPar14], [abWhen], [lPar16],
[lPar17], [alReadOnly], [abValid], [bPar20], [lPar21],
[alNoBorder], [alNoVScroll])
Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical em pixels
anRow
Parâmetros ou caracteres.
Numérico, opcional. Coordenada horizontal em
anCol
pixels ou caracteres.
Bloco de código, opcional. Bloco de código no
formato {|u| if( Pcount( )>0, <var>:= u, <var> ) }
abSetGet
que o controle utiliza para atualizar a variável
<var>. <var> deve ser tipo caracter.
Objeto, opcional. Janela ou controle onde o controle
aoWnd
será criado.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
Objeto, opcional. Objeto tipo tFont utilizado para
aoFont definir as características da fonte utilizada para
exibir o conteúdo do controle.
Lógico, opcional. Se .T., habilita barra de rolagem
alHScroll
horizontal.
anClrFore Numérico, opcional. Cor de fundo do controle.
anClrBack Numérico, opcional. Cor do texto do controle.
oPar11 Reservado.
Lógico, opcional. Se .T. as coordenadas informadas
alPixel
são em pixels, se .F. são em caracteres.
cPar13 Reservado.
lPar14 Reservado.
Bloco de código, opcional. Executado quando
mudança de foco de entrada de dados está sendo
abWhen efetuada na janela onde o controle foi criado. O
bloco deve retornar .T. se o controle deve
permanecer habilitado ou .F. se não.
lPar16 Reservado.
lPar17 Reservado.
Lógico, opcional. Se .T. o controle so permitira
alReadOnly
leitura.
Bloco de código, opcional. Executado quando o
conteúdo do controle deve ser validado, deve
abValid
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.
Lógico, opcional. Se .T., habilita barra de rolagem
alNoVScroll
vertical.
Retorno O objeto criado.
EnableVScroll
Descrição Habilita a barra de rolagem vertical.
Sintaxe EnableVScroll( lEnable )
Parâmetro Tipo / Descrição
Parâmetros Lógico, obrigatório. Se .T. habilita se .F. desabilita a
lEnable
barra de rolagem.
Retorno NIL

EnableHScroll
Descrição Habilita a barra de rolagem horizontal.
Sintaxe EnableHScroll( lEnable )
Parâmetro Tipo / Descrição
Parâmetros Lógico, obrigatório. Se .T. habilita se .F. desabilita a
lEnable
barra de rolagem.
Retorno NIL

Exemplo
#include “protheus.ch”
User Function Teste()

Local oDlg, oMemo, cMemo:= space(50)

DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE “My test”

oMemo:= tMultiget():New(10,10,{|u|if(Pcount()>0,cMemo:=u,cMemo)};
,oDlg,100,100,,,,,,.T.)

@ 200,10 BUTTON oBtn PROMPT “Fecha” OF oDlg PIXEL ACTION oDlg:End()

ACTIVATE MSDIALOG oDlg CENTERED

MsgStop(cMemo)

Return NIL
tPanel
Revisão: 23/02/2003

Abrangência

Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10

Classe de painel estático.

Hierarquia
tSrvObject -> tControl -> tPanel

Descrição
Utilize a classe tPanel quando desejar criar um painel estático, onde podem ser criados
outros controles com o objetivo de organizar ou agrupar componentes visuais.

Métodos
New
Descrição Método construtor da classe.
New([anRow], [anCol], [acText], [aoWnd], [aoFont], [alCentered],
Sintaxe [lPar6], [anClrText], [anClrBack], [anWidth], [anHeight],
[alLowered], [alRaised])
Parâmetro Tipo / Descrição
anRow Numérico, opcional. Coordenada vertical em pixels.
Numérico, opcional. Coordenada horizontal em
anCol
pixels.
acText Caractere, opcional. Texto a ser exibido ao fundo.
Parâmetros Objeto, opcional. Janela ou controle onde será criado
aoWnd
o objeto.
Lógico, opcional. Se .T. exibe o texto de título ao
alCentered
centro do controle.
lPar6 Reservado.
anClrText Numérico, opcional. Cor do texto do controle.
anClrBack Numérico, opcional. Cor do fundo do controle.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
Lógico, opcional. Se .T. exibe o painel rebaixado em
alLowered
relação ao controle de fundo.
Lógico, opcional. Se .T. exibe a borda do controle
alRaised
rebaixada em relação ao controle de fundo.
Retorno O objeto criado.

Exemplo
#include “protheus.ch”

User Function Teste()

Local oDlg, oPanel, oBtn1, oBtn2

DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE “My test”

oPanel:= tPanel():New(10,10,””,oDlg,,,,,CLR_BLUE,100,100) // cria o


painel

@ 10,10 BUTTON oBtn1 PROMPT “hide” OF oPanel ACTION oPanel:Hide() //


cria botão sobre o painel

@ 200,10 BUTTON oBtn2 PROMPT “show” OF oDlg ACTION oPanel:Show() //


cria botão fora o painel

ACTIVATE MSDIALOG oDlg CENTERED

Return
tRadMenu
Revisão: 23/02/2003

Abrangência

Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10

Classe de radio group.

Hierarquia
tSrvObject -> tControl -> tRadMenu

Descrição
Utilize a classe tRadMenu para criar um controle que possibilita escolha de item através
de uma lista.

Propriedades
Nome Tipo / Descrição
nOption Numérico. Item selecionado.
aItems Array de caracteres. Lista de items selecionáveis.

Métodos
New
Descrição Método construtor da classe.
New([anRow], [anCol], [aacItems], [abSetGet], [aoWnd], [aPar6],
[abChange], [anClrText], [anClrPan], [cPar10], [lPar11],
Sintaxe
[abWhen], [anWidth], [anHeight], [abValid], [lPar16], [lPar17],
[alPixel])
Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical em pixels ou
Parâmetros anRow
caracteres.
Numérico, opcional. Coordenada horizontal em pixels
anCol
ou caracteres.
aacItems Array de caracteres, opcional. Lista de opções.
Bloco de código, opcional. Bloco de código no
formato {|u| if( Pcount( )>0, <var>:= u, <var> ) } que
abSetGet
o controle utiliza para atualizar a variável <var>.
<var> deve ser tipo numérico.
Objeto, opcional. Janela ou controle onde o controle
aoWnd
será criado.
aPar6 Reservado.
Bloco de código, opcional. Executado quando o item
abChange
selecionado é alterado.
anClrText Numérico, opcional. Cor do texto do controle
anClrPan Numérico, opcional. Cor de fundo do controle.
cPar10 Reservado.
lPar11 Reservado.
Bloco de código, opcional. Executado quando
mudança de foco de entrada de dados está sendo
abWhen 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.
Bloco de código, opcional. Executado quando o
abValid conteúdo do controle deva ser validado, retornando .T.
se o conteúdo for válido, e .F. quando inválido.
lPar16 Reservado.
Lpar17 Reservado.
Lógico, opcional. Se .T. as coordenadas informadas
alPixel
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âmetro Tipo / Descrição
nItem Numérico, opcional. Item selecionado.
Parâmetros
Lógico, opcional. Se .T. habilita o item se .F.
lEnable
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
Lógico. Se .T. quebra o texto em várias linhas de maneira a enquadrar o
lWordWrap
conteúdo na área determinada para o controle, sendo o padrão .F.
Lógico. Se .T. a cor de fundo do controle é ignorada assumindo o
lTransparent
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.
New([anRow], [anCol], [abText], [aoWnd], [acPicture], [aoFont],
[lPar7], [lPar8], [lPar9], [alPixels], [anClrText], [anClrBack],
Sintaxe
[anWidth], [anHeight], [lPar15], [lPar16], [lPar17], [lPar18],
[lPar19])
Parâmetro Tipo / Descrição
Parâmetros Numérico, opcional. Coordenada vertical em pixels
anRow
ou caracteres.
Numérico, opcional. Coordenada horizontal em pixels
anCol
ou caracteres.
Codeblock, opcional. Quando executado deve retornar
abText
uma cadeia de caracteres a ser exibida.
Objeto, opcional. Janela ou diálogo onde o controle
aoWnd
será criado.
Caractere, opcional. Picture de formatação do
acPicture
conteúdo a ser exibido.
Objeto, opcional. Objeto tipo tFont para configuração
aoFont do tipo de fonte que será utilizado para exibir o
conteúdo.
lPar7 Reservado.
lPar8 Reservado.
lPar9 Reservado.
Lógico, opcional. Se .T. considera coordenadas
alPixels passadas em pixels se .F., padrão, considera as
coordenadas passadas em caracteres.
anClrText Numérico, opcional. Cor do conteúdo do controle.
anClrBack Numérico, opcional. Cor do fundo do controle.
anWidth Numérico, opcional. Largura do controle em pixels.
anHeight Numérico, opcional. Altura do controle em pixels.
lPar15 Reservado.
lPar16 Reservado.
lPar17 Reservado.
lPar18 Reservado.
lPar19 Reservado.
Retorno O objeto criado.

SetText
Descrição Modifica o conteúdo a ser exibido pelo controle.
Sintaxe SetText( [xVal] )
Parâmetro Tipo / Descrição
Parâmetros Caracter / Numérico / Data, Opcional. Valor a ser
xVal
exibido.
Retorno NIL
Exemplo
#include “protheus.ch”

User Function Teste()

Local oDlg, oSay

DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 TITLE “My dialog” PIXEL

oSay:= tSay():New(10,10,{||”para exibir”},oDlg,,,,;


,,.T.,CLR_WHITE,CLR_RED,100,20)

ACTIVATE MSDIALOG oDlg CENTERED

Return NIL
tScrollBox
Revisão: 23/02/2003

Abrangência

Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10

Classe de área de scroll.

Hierarquia
tSrvObject -> tControl -> tScrollbox

Descrição
Utilize a classe tScrollbox para criar um painel com scroll deslizantes nas laterais do
controle.

Métodos
New
Descrição Método construtor da classe.
New([aoWnd], [anTop], [anLeft], [anHeight], [anWidth],
Sintaxe
[alVertical], [alHorizontal], [alBorder])
Parâmetro Tipo / Descrição
Objeto, opcional. Janela ou controle onde o controle
aoWnd
será criado.
anTop Numérico, opcional. Coordenada vertical em pixels.
Numérico, opcional. Coordenada horizontal em
anLeft
pixels.
Parâmetros anHeight Numérico, opcional. Altura do controle em pixels.
anWidth Numérico, opcional. Largura do controle em pixels.
Lógico, opcional. Se .T. exibe a barra de scroll
alVertical
vertical.
Lógico, opcional. Se .T. exibe a barra de scroll
alHorizontal
horizontal.
alBorder Lógico, opcional. Se .T. exibe a borda do controle.
Retorno O objeto criado.

Exemplo
#include “protheus.ch”

User Function Teste()

Local oDlg, oScr, oGet1, oGet2, oGet3

Local cGet1, cGet2, cGet3

cGet1:= Space(10)
cGet2:= Space(10)
cGet3:= Space(10)

DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL “My test”

oScr:= TScrollBox():New(oDlg,10,10,200,200,.T.,.T.,.T.) // cria


controles dentro do scrollbox

@ 10,10 MSGET oGet1 VAR cGet1 SIZE 100,10 OF oScr PIXEL


@ 50,10 MSGET oGet2 VAR cGet2 SIZE 100,10 OF oScr PIXEL
@ 150,100 MSGET oGet3 VAR cGet3 SIZE 100,10 OF oScr PIXEL

ACTIVATE MSDIALOG oDlg CENTERED

Return NIL
Classe TIBrowser
Exemplo de uso da classe TIBrowser
Revisão: 09/06/2003

Abrangência

Versão 6.09 Versão 7.10

#include "protheus.ch"

function teste()

local oDlg, oTIBrowser, oBtnNav, oBtnPrint, oBtnHome

DEFINE MSDIALOG oDlg FROM 0,0 TO 320,460 PIXEL TITLE "Teste TIBrowser"

oTIBrowser:= TIBrowser():New( 10,10, 150, 150,


"http://www.google.com", oDlg )

@ 10, 160 BUTTON oBtnNav PROMPT "Ir para Microsiga" SIZE 50,10 ACTION
oTIBrowser:Navigate("http://www.microsiga.com.br") OF oDlg PIXEL
@ 20, 160 BUTTON oBtnPrint PROMPT "Imprimir" SIZE 50,10 ACTION
oTIBrowser:Print() OF oDlg PIXEL
@ 30, 160 BUTTON oBtnHome PROMPT "Home" SIZE 50,10 ACTION
oTIBrowser:GoHome() OF oDlg PIXEL

ACTIVATE MSDIALOG oDlg CENTERED

return
TIBROWSER:GOHOME
Revisão: 09/06/2003

Abrangência

Versão 6.09 Versão 7.10

Sintaxe

TIBROWSER:GOHOME ( ) --> nil

Retorno

Tipo 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
Endereço da página inicial a ser carregada, se não
ainitLink Caracter 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.
Caso .T., habilita barra de scroll horizontal e botões de
bScroll Lógico
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
Code-Block, que deve retornar um array, com uma
dimensão, onde devem ser retornados as strings
bLine Code-Block
referentes aos elementos referentes às colunas do
Browse.
Array, que deve retornar um array, com uma dimensão,
aHeaders Array contendo as strings referentes aos Títulos das colunas do
Browse.
Array, com uma dimensão, onde devem ser retornados
os números referentes ào tamanho horizontal das colunas
aColSizes Array
do Browse. Caso especificado NIL, os tamanhos das
colunas são calculados automaticamente.
oWnd Objeto Objeto visual sobre o qual a tWBrowse será criada.
Utilizado para especificar a expressão de índice para
cField Caracter 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.
Utilizado para especificar uma string, de acordo com a
chave de índice passada em cField, a ser utilizada para
cTopLimit Caracter identificar o limite superior do Browse. Apenas devemos
informar conteúdo neste, caso o parâmetro cField seja
especificado.
Utilizado para especificar uma string, de acordo com a
chave de índice passada em cField, a ser utilizada para
cBottomLiit Caracter identificar o limite inferior do Browse. Apenas devemos
informar conteúdo neste, caso o parâmetro cField seja
especificado.
Ação a ser executada quando alterado o foco entre as
bChange Code-Block linhas do Browse. Recebe o objeto do Browse como
parâmetro.
Ação a ser executada quando executado um dupli -clique
bLDblClick Code-Block
sobre uma célula do Browse.
Param14 (NULO) ( parâmetro reservado )
Objeto referente à uma fonte alternativa para exibição
oFont Objeto
dos dados neste Browse.
Param16 (NULO) ( parâmetro reservado )
Cor de escrita dos dados no TWBrowse. Verifique cores
nClrFore Numérico
disponíveis no include "colors.ch"
Cor de fundo da área da TWBrowse não preenchida com
nClrBack Numérico dados. Verifique cores disponíveis no include
"colors.ch"
Param19 (NULO) ( parâmetro reservado )
Param20 (NULO) ( parâmetro reservado )
Caso o Browse seja realizado sobre uma tabela aberta,
cAlias Caracter estecifique o alias da tabela a ser utilizada neste
parâmetro.
Caso .T., indica que as coordenadas de tela são
lPixel Lógico 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.
New([anTop], [anLeft], [anBottom], [anRight], [acCaption],
Sintaxe [cPar6], [nPar7], [lPar8], [nPar9], [anClrText], [anClrBack],
[oPar12], [aoWnd], [alPixel], [oPar15], [oPar16], [lPar17])
Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical superior em
anTop
Parâmetros pixels ou caracteres.
Numérico, opcional. Coordenada horizontal esquerda
anLeft
em pixels ou caracteres.
Numérico, opcional. Coordenada vertical inferior em
anBotom
pixels ou caracteres.
Numérico, opcional. Coordenada horizontal direita
anRight
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.
Objeto, opcional. Janela mãe da janela a ser criada,
aoWnd
padrão é a janela principal do programa.
Lógico, opcional. Se .T. considera as coordenadas
alPixel
passadas em pixels, se .F. considera caracteres.
oPar15 Reservado.
oPar16 Reservado.
nPar17 Reservado.

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

Retorno O Diálogo criado.

Activate
Descrição Ativa (exibe) o diálogo. Chamar somente uma vez este método.
Activate([bPar1], [bPar2], [bPar3], [alCentered], [abValid],
Sintaxe
[lPar6], [abInit], [bPar8], [bPar9] )

Parâmetro Tipo / Descrição

Parâmetros
bPar1 Reservado.

bPar2 Reservado.

bPar3 Reservado.

alCentered Lógico, opcional. Se .T. exibe a janela centralizada,


Bloco de código, opcional. Deve retornar .T. se
abValid conteúdo do diálogo é válido, se retornar .F. o diálogo
não fechará quando solicitada de encerrar.
lPar6 Reservado.
Bloco de código, opcional. Executado quando o
abInit
diálogo inicia exibição.
bPar8 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.
New( [anTop], [anLeft],[anBottom], [anRight], [acTitle], [nPar6],
[oPar7] ,[oPar8],[oPar9], [aoParent], [lPar11], [lPar12],
Sintaxe
[anClrFore], [anClrBack], [oPar15], [cPar16], [lPar17], [lPar18],
[lPar19], [lPar20], [alPixel] );
Parâmetro Tipo / Descrição
Numérico, opcional. Coordenada vertical superior em
Parâmetros nTop
pixels ou caracteres.
Numérico, opcional. Coordenada horizontal esquerda
nLeft
em pixels ou caracteres.
Numérico, opcional. Coordenada vertical inferior em
nBottom
pixels ou caracteres.
Numérico, opcional. Coordenada horizontal inferior
nRight
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.
Lógico, opcional. Se .T. (padrão) considera
lPixel 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.
Activate([acShow], [bPar2], [bPar3], [bPar4], [bPar5], [bPar6], [
Sintaxe abInit ], [bPar8], [bPar9], [bPar10], [bPar11], [bPar12] ,[bPar13],
[bPar14], [bPar15], [abValid], [bPar17], [bPar18] ).
Parâmetro Tipo / Descrição
acShow Caracter, opcional. “ICONIZED” para janela
bPar2 Reservado.
Parâmetros bPar3 Reservado.
bPar4 Reservado.
bPar5 Reservado.
bPar5 Reservado.
bPar6 Reservado.
Bloco de código. Executado quando janela está sendo
abInit
exibida.
bPar8 Reservado.
bPar9 Reservado.
bPar10 Reservado.
bPar11 Reservado.
bPar12 Reservado.
bPar13 Reservado.
bPar14 Reservado.
bPar15 Reservado.
Bloco de código. Executado quando a janela for
solicitada de fechar. Deverá retornar .T. se o conteúdo
abValid
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
Endereço do servidor POP, no caso de conexão SMTP passe esse como
cPop
""(branco).
Endereço do servidor SMTP, no caso de conexão POP passe esse como
cSmtp
""(branco).
cUser Login no servidor.
cPass Senha no servidor.
nTimeOut Time out para a conexão.
nPort Porta para se conectar.
SmtpConnect()
Conecta com o servidor, atraves dos parametros de Init

SetSmtpTimeOut( nTimeOut )
Configura o tempo para que uma conexão estabelecida ao servidor seja finalizada por
time-out
Parametro Descrição
nTimeOut Tempo para que a conexão seja fechada por Time-Out.

SmtpDisconnect()
Disconecta com o servidor SMTP

POPConnect()
Conecta com o servidor, atraves dos parametros de Init

SetPopTimeOut( nTimeOut )
Configura o tempo para que uma conexão estabelecida ao servidor seja finalizada por
time-out
Parametro Descrição
nTimeOut Tempo para que a conexão seja fechada por Time-Out.

GetNumMsgs( @nNumMsg )
Retorna o numero de mensagens que existem no servidor
Parametro Descrição
Parametro passado por referencia, retorna nele o numero de mensagens que
nNumMsg
estão no servidor.
DeleteMsg( nMsg )
Deleta uma mensagem do servidor
Parametro Descrição
nMsg Numero da mensagem a ser deletada.

POPDisconnect()
Disconecta com o servidor POP
TMAILMANAGER:DELETEMSG
Revisão: 09/04/2003

Abrangência

Versão 5.07 Versão 5.08 Versão 6.09 Versão 7.10

Sintaxe

TMAILMANAGER:DELETEMSG ( < nMsg > ) --> Nil

Parâmetros

Argumento 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


Parametro passado por referencia, retorna nele o numero
nNumMsg Numérico
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


Endereço do servidor POP, no caso de conexão SMTP
cPop Caracter
passe esse como ""(branco).
Endereço do servidor SMTP, no caso de conexão POP
cSmtp Caracter
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.
Recebe os dados pela conexão ativa do objeto, qualquer tipo de
Receive
dado pode ser recebido.
Finaliza anormalmente a conexão, não avisa o outro lado que a
Reset 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
Número IP ou nome do servidor onde a conexão deve ser
cIP Caracter
realizada
Número em milisegundos que o método deve esperar para
nTimeout Numérico
conectar

Retorno

Tipo Descrição
Retorna 0 (Zero) se conectou com sucesso, diferente de zero se a conexão
Numérico
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
Retorna True se a conexão esta ativa e false caso esteja
Lógico
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.
tempo em milisegundos que a função receive espera até
nTimeout Numérico
receber algum dado pela conexão.

Retorno

Tipo Descrição
Qtde de bytes recebidos, se houver algum erro nQtdRecebida será menor
Numérico
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
Numero de bytes transmitidos, caso o numero seja diferente do tamanho
Numérico
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 "eo@aqui.com.br" ;
TO "jose@bemlonge.com.br;joao@exemplo.com.br" ;
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} }