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