Você está na página 1de 30

CURSO ADVPL II RECURSOS AVANADOS

Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

1. PROGRAMANDO PARA BANCO DE DADOS


Podemos utilizar querys no Protheus quando acessamos bancos de dados via TopConnect. A utilizao de querys melhoram consideravelmente a velocidade das consultas aos dados e reduzem a sobrecarga no servidor de aplicao, TopConnect e Banco de Dados. Normalmente uma query utilizada em substituio a um Loop ( While ) na base de dados de programao convencional. Querys mais complexas utilizando joins poder ser construdas com a mesma funo de vrios loops.

1.1. DIFERENAS E SIMILARIDADES ENTRE DBF E SQL A princpio no existem diferenas na programao para a verso SQL, j que pelo prprio fato de ser uma linguagem interpretada, o sistema quem se encarrega de executar os comandos e funes adequadamente no ambiente em que trabalha. Mas importante manter algumas informaes em mente ao programar para o ambiente SQL. Deve-se lembrar que estamos trabalhando com um banco de dados relacional, que se utiliza de tabelas ao invs de arquivos, e onde o sistema no tem acesso aos dados de forma nativa e sim atravs do TopConnect. Essa forma de acesso adiciona ao sistema algumas das caractersticas e vantagens oferecidas pelo SGBD em uso (por exemplo, o Oracle, MSSQL Server ou o DB2) como por exemplo segurana e integridade referencial, e as imensas facilidades da linguagem SQL, mas por outro lado temse tambm as implicaes da converso dos comandos no padro xBase para a perfeita compreenso no ambiente SQL. Imagine a montagem de uma expresso de filtro para um ndice condicional. Tome a seguinte expresso como exemplo: "DTOS(E1_VENCTO) >= DTOS(mv_par01)". Em um ambiente padro xBase, como o NTX ou o ADS, pode-se utilizar variveis sem qualquer problema em uma expresso de filtro pois a mesma ser avaliada registro a registro durante a montagem do ndice. Mas no ambiente SQL, o filtro nada mais do que uma tabela temporria, onde esto selecionados apenas os registros conforme a condio indicada. A seleo de dados em tabelas pelo SQL mais rpida, mas em compensao o SGBD no tem como reconhecer a varivel informada na expresso. Ela existe apenas no sistema ou, mais especificamente, no seu programa. Por isso, deve-se substituir a expresso anteriormente exemplificada pela seguinte (que tambm funcionaria perfeitamente em um ambiente xBase): "DTOS(E1_VENCTO) >= "+DTOS(mv_par01)+"". Esta expresso melhor que anterior simplesmente porque no se utilizada varivel e sim do contedo da mesma, o que pode ser compreendido em qualquer ambiente. Toda essas explicaes so vlidas, da mesma maneira, a filtros criados atravs do comando SET FILTER. Ainda existem outros detalhes a se considerar quando se trabalha com ndices em um ambiente SQL. que na verdade no existem ndices condicionais nesse ambiente. O filtro criado independente do ndice. Ento, voc pode criar um INDREGUA com um filtro e mudar a ordem, mas o filtro permanecer ativo, em qualquer ordem. Do mesmo modo, no se pode manter, dois ndices, com filtros diferentes, pois um filtro sobrescreveria o outro. Outro ponto de ateno deve ser a funo xBase chamada DBSETINDEX. Podem ocorrer alguns erros ao tentar-se utilizar essa funo para abrir um ndice de trabalho criado. Por esses motivos e pelo fato de

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

tornar o processamento mais lento deve-se evitar ao mximo o uso de ndices de trabalho no ambiente SQL. Da mesma maneira que a funco DBSETINDEX, os comandos COPY TO e APPEND FROM tambm devem ter uma ateno especial. No ambiente SQL esses comandos so executados entre uma tabela e um arquivo DBF (e vice-versa) ou entre dois arquivos DBF. Por exemplo, o comando COPY TO pode ser usado para copiar os dados da tabela ativa para um DBF local e o comando APPEND FROM pode ser usado para importar os dados de um arquivo local para a tabela ativa. Os dois podem ser usados entre dois arquivos, mas nunca pode-se usar, por exemplo, o comando APPEND FROM para importar os dados de uma tabela para outra.

1.2. COMANDOS E FUNES PARA TOPCONNECT TCCONTYPE - Define o tipo de conexo que ser utilizada entre o Protheus e o TopConnect. Sintaxe TCCONTYPE ( cTipo ) Argumento Obrigat. cTipo Exemplo: TCConType("NPIPE") TCConType("TCPIP") TCDELFILE - Apaga um arquivo de um banco de dados. Sintaxe TCDELFILE ( cTabela ) Argumento Obrigat. cTabela Exemplo: If TcDelFile("SA1020") MSGINFO(Tabela excluda com sucesso) Else MSGINFO(No foi possvel excluir a tabela) Endif Sim Sim

Tipo C

Descrio Tipo da conexo. Pode ser: "TCPIP" ou "NPIPE"

Tipo C

Descrio Nome da tabela que deve ser apagada.

TCGENQRY - Define a execuo de uma Query, a prxima chamada DBUseArea ser a abertura de

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

uma Query e no de tabela. Sintaxe TCGENQRY ([ xPar1, xPar2, ], cQuery) Argumento xPar1, xPar2 cQuery Exemplo: cQuery := 'SELECT X2_CHAVE CHAVE, R_E_C_N_O_ RECNO from SX2990' dbUseArea(.T., 'TOPCONN', TCGenQry(,,cQuery), 'TRB', .F., .T.) TCSETFIELD - Define formato de campos numericos e data de acordo com o dicionrio. Sintaxe TCSETFIELD (cAlias cCampo, cTipo, nTam, nDec) Argumento cAlias cCampo cTipo nTam nDec Exemplo: Obrigat. Sim Sim Sim Sim Sim Tipo C C C N N Descrio Alias para aplicao o formato Nome do campo a formatar Tipo do campo Tamanho Decimal Obrigat. No Sim Tipo Qualquer C Descrio Parmetros apenas para compatibilizao. No tem funo. Contm a expresso da query que se deseja executar.

cQuery := 'SELECT E2_NUM, E2_VALOR, E2_EMISSAO from SE2990' dbUseArea(.T., 'TOPCONN', TCGenQry(,,cQuery), 'TRB', .F., .T.) TCSetField( "TRB", "E2_VALOR, "N", 17, 2 ) TCSetField( TRB", "E2_EMISSAO, "D", 8, 0 ) RETSQLNAME - Retorna o nome da tabela de acordo com a empresa posicionada. Sintaxe RETSQLNAME (cAlias) Argumento CAlias Exemplo: cQry1 := "SELECT * FROM " + RetSqlName("SZ2") + " WHERE D_E_L_E_T_ = ''") Obrigat. Sim Tipo C Descrio Alias desejado

SQLORDER - Retorna a instruo do indice corrente.

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

Sintaxe SQLORDER (cAlias) Argumento Obrigat. Tipo Descrio

cChave Exemplo:

Sim

Instruo com a chave, se numrico, busca a expresso da N ou C ordem informada, se caracter utiliza a prpria expresso informada.

cQry1 := "SELECT * FROM " + RetSqlName("SZ2") + " WHERE D_E_L_E_T_ = ''") cQry1+= "ORDER BY " + SqlOrder("Z2_FILIAL+Z2_CODIGO") ou cQry1 := "SELECT * FROM " + RetSqlName("SZ2") + " WHERE D_E_L_E_T_ = ''") cQry1+= "ORDER BY " + SqlOrder(SZ2->(indexkey())) ou cQry1 := "SELECT * FROM " + RetSqlName("SZ2") + " WHERE D_E_L_E_T_ = ''") cQry1+= "ORDER BY " + SqlOrder(SZ2->(indexorder())) TCREFRESH - Faz refresh em uma tabela, atravs de uma leitura forada da tabela no banco de dados. Utilizada aps o DELETE e o INSERT. Sintaxe TCREFRESH ( cTabela ) Argumento cTabela Exemplo: cTabela:= "SA1990" cComando := "Delete "+ cTabela +" Where R_E_C_N_O_ > 50000 " TCSqlExec(cComando) TCRefresh(cTabela) TCSPEXIST - Verifica se uma Stored Procedure existe. Sintaxe TCSPEXIST ( cStoredProc ) Argumento CStoredProc Exemplo if TCSPExist("SP000001") cStr := "DROP PROCEDURE "+ "SP000001 " TCSqlExec(cStr) endif Obrigat. Sim Tipo C Descrio Nome da Stored Procedure. Obrigat. Sim Tipo Lgico Descrio Indica nome da tabela que deve ser feito refresh.

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

TCSQLEXEC - Executa um comando em SQL Sintaxe TCSQLEXEC (cComando) Argumento cComando Obrigat. Sim Tipo C Descrio Instruo em SQL.

Exemplo TCSQLEXEC("DELETE " + RetSqlName("SZ2") + " WHERE D_E_L_E_T_ = '*'")

TCSPEXEC - Executa Executa uma Stored Procedure, no banco de dados, com nmero varivel de parmetros. Retorna um array contendo os valores de retorno da SP Sintaxe TCSPEXEC ( cSProc [, xParam1,...,xParamN])--> [array] Argumento cSProc xParamX Obrigat. Sim No Tipo C Qualquer Descrio Nome da Stored Procedure. Parmetro(s) da Stored Procedure

Create Procedure teste1( @IN_VALUE int, @OUT_STR char(255), @OUT_VALUE int) WITH RECOMPILE As Begin Select @OUT_STR = "Teste", @OUT_VALUE = @IN_VALUE + 3 End GO aResult := TCSPEXEC(xProcedures ('teste1'), 100 )

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

1.3.EXERCCIOS
1. Fazer um programa utilizando funes de bancos de Dados que imprima os seguintes campos: Campos: No. Pedido, Nome do Cliente, Codigo do Produto, Descrio do Produto, Data de Emissao do Pedido. Tabelas de Apoio: SC5, SC6, SA1, SB1 2. Fazer um programa utilizando funes de bancos de Dados. Parametros: Cliente Inicial (SA1) Cliente Final (SA1) Quebra por: Cliente/Produto Analitico / Sinttico Campos: Nome do Cliente, Numero da Nota, Data de Emissao, Cdigo do Produto, Descrio do Produto, Quantidade, Valor Unitrio, Total Tabelas de Apoio: SD2, SF2, SA1, SB1

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

1.4. PROTHEUS EMBEDDED SQL O objetivo do Embedded SQL facilitar a escrita e a leitura de consultas ao banco de dados. Para isso, foi definida uma sintaxe para que se possa escrever a consulta diretamente no cdigo AdvPL, sem ter que montar cdigos complexos que dificultam a leitura do comando, porm sua utilizao est disponvel apenas para build 7.00.050721p ou superior. Instruo BeginSQL Alias EndSQL %xxx% Column %exp.% %NoParcer% %Table.<cAlias>% %NotDel% %Order:<alias>% %Order:<cAlias>, <nIndice>% Descrio Inicia o Embedded SQL Finaliza a instruo Instruo literal a ser substituda Especifica tipo de converso para campos dos tipos data, numrico ou lgico utilizado em substuio do TCSetField Utilizado para especificar variveis, expresses e funes. indica que a consulta no deve passar pela funo ChangeQuery Indica a tabela a ser utilizada, substitui a funo RetSqlName Substitui a expresso D_E_L_E_T_ = Define a ordem a utilizar no ORDER BY, substitui a funo SqlOrder(<Alias>->(IndexKey())) Define a ordem a utilizar no ORDER BY, substitui a funo SqlOrder(<Alias>->(Indexorder(nIndice))) %Order:<cAlias>, <nNick>% Define a ordem a utilizar no ORDER BY, substitui a funo SqlOrder(<Alias>->(DBNickIndexKey(cNick))) GetLastQuery() Retorna um vetor com cinco elementos, com as seguintes informaes da ultima query executada: [1] - Alias usado para abrir o cursor [2] Query executada [3] Vetor de campos com critrios de converso especificados [4] Caso .T. no foi utilizada QueryChange na string original [5] Tempo em segundos utilizado para a abertura do cursor

Limitaes:

A utilizao de funes dentro do Cdigo Embedded no permitida, caso necessite execute a funo antes de iniciar o embedded pois a instruo s recebe variveis resolvidas. No possvel debugar.

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

10

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

Exemplo utilizando a forma usual


SELECT C6_NUM, C6_PRODUTO, C6_QTDVEN, C6_PRCVEN , C6_ENTREG + CRLF FROM + RetSqlName(SC6) + C6 +CRLF WHERE C6_FILIAL = + xFilial(SC6) + AND D_E_L_E_T_ = +CRLF ORDER BY +RetSqlOrder(SC6) +CRLF

cADQry := cADQry += cADQry += cADQry +=

dbUseArea( .T., TOPCONN, TcGenQry(,,cQuery),TRB, .T., .T. ) TcSetField(TRB, C6_QTDVEN, N, 17, 5 ) TcSetField(TRB, C6_PRCVEN, N, 17, 5 ) TcSetField(TRB, C6_ENTREG, D, 17, 5 )

Exemplo usando Embedded SQL


Column C6_QTDVEN as numeric(17,2) Column C6_PRCVEN as numeric(17,2) Column C6_ENTREG as date %NoParser% SELECT C6_NUM, C6_PRODUTO, C6_QTDVEN, C6_PRCVEN, C6_ENTREG FROM %Table:SC6% C6 WHERE C6_FILIAL = %xFilial:SC6% AND %NotDel% ORDER BY %Order:SC6%

BeginSQL Alias TRB

EndSQL

1.5.EXERCCIOS 1. Fazer um programa utilizando Embedded SQL que imprima os seguintes campos:
Campos: No. Pedido, Nome do Cliente, Codigo do Produto, Descrio do Produto, Data de Emissao do Pedido. Tabelas de Apoio: SC5, SC6, SA1, SB1

2. Fazer um programa utilizando Embedded SQL.


Parametros: Cliente Inicial e Final (SA1) Quebra por: Cliente/Produto Analitico / Sinttico Campos: Nome do Cliente, Numero da Nota, Data de Emissao, Cdigo do Produto, Descrio do Produto, Quantidade, Valor Unitrio, Total Tabelas de Apoio: SD2, SF2, SA1, SB1

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

11

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

2. PROGRAMAO ORIENTADA A OBJETOS


A anlise e projeto orientados a objetos tm como meta identificar o melhor conjunto de objetos para descrever um sistema de software. O funcionamento deste sistema se d atravs do relacionamento e troca de mensagens entre estes objetos. Na programao orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no sistema de software. Cada classe determina o comportamento (definidos nos mtodos) e estados possveis (atributos) de seus objetos, assim como o relacionamento com outros objetos. Programas que utilizam conceitos OO, ao invs de definir funes independentes que so utilizadas em conjunto, dividem conceitualmente o problema em partes independentes (objetos), que podem conter atributos que os descrevem, e que implementam o comportamento do sistema atravs de funes definidas nestes objetos (mtodos). Objetos (e seus mtodos) fazem referncia a outros objetos e mtodos; o termo envio de mensagens utilizado para descrever a comunicao que ocorre entre os mtodos dos diferentes objetos. Na prtica, um programa orientado a objetos pode ser descrito como um conjunto de classes pr-definidas ou definidas pelo usurio que possuem atributos e mtodos, e que so instanciadas em objetos, durante a execuo do programa.

2.1. Conceitos Bsicos Classe representa um conjunto de objetos com diversas caractersticas. Uma classe define o comportamento dos objetos, atravs de mtodos, e quais estados ele capaz de manter, atravs de atributos. Exemplo de classe: Empresa. Objeto uma instncia de uma classe. Um objeto capaz de armazenar estados atravs de seus atributos e reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros objetos. Exemplo de objetos da classe Empresa: Microsiga, ADVPL, Biale. Atributos so os dados ou informaes do objeto, basicamente a estrutura de dados que vai representar a classe. Exemplos: Funcionrio: nome, endereo,telefone Cursos: nome, Tempo, preo Alunos: Nome, endereco, telefone

Mtodos definem as habilidades de cada objeto. Biale uma instncia da classe Empresa(objeto), que tem habilidade para dar suporte, implementada atravs do mtodo SuporteCliente(). A ao s ocorre quando o mtodo invocado atravs do objeto, no caso Biale. Dentro do programa, a utilizao de um mtodo deve afetar apenas um objeto em particular; Todas as empresas podem dar suporte ao cliente, mas voc quer que apenas a Biale de o suporte.

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

12

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

Normalmente, uma classe possui diversos mtodos, que no caso da classe empresa poderiam ser treina(), atendetelefone() . Mensagem uma chamada a um objeto para invocar um de seus mtodos, ativando um comportamento descrito por sua classe. Tambm pode ser direcionada diretamente a uma classe. Sobrecarga a utilizao do mesmo nome para smbolos ou mtodos com operaes ou funcionalidades distintas. Geralmente diferencia-se os mtodos pela sua assinatura. Herana o mecanismo pelo qual uma classe (sub-classe) pode estender outra classe (super-classe), aproveitando seus comportamentos (mtodos) e estados possveis (atributos). H Herana mltipla quando uma sub-classe possui mais de uma super-classe. Essa relao normalmente chamada de relao " um". Um exemplo de herana: Filial super-classe de Empresa. Ou seja, uma Filial uma empresa. Associao o mecanismo pelo qual um objeto utiliza os recursos de outro. Pode tratar-se de uma associao simples "usa um" ou de um acoplamento "parte de". Por exemplo: Uma empresa usa um telefone. A tecla "1" parte de um telefone. Encapsulamento consiste na separao de aspectos internos e externos de um objeto. Este mecanismo utilizado para impedir o acesso direto aos atributos de um objeto, disponibilizando externamente apenas os mtodos que alteram estes estados. Exemplo: voc no precisa conhecer os detalhes dos circuitos de um telefone para utiliz-lo. A carcaa do telefone encapsula esses detalhes, provendo a voc uma interface mais amigvel (os botes, o monofone e os sinais de tom). Polimorfismo o princpio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar mtodos que tm a mesma assinatura (lista de parmetros e retorno) mas comportamentos distintos, especializados para cada classe derivada, usando para tanto uma referncia a um objeto do tipo da superclasse. A deciso sobre qual o mtodo que deve ser selecionado, de acordo com o tipo da classe derivada, tomada em tempo de execuo. No caso de polimorfismo, necessrio que os mtodos tenham exatamente a mesma identificao, sendo utilizado o mecanismo de redefinio de mtodos.

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

13

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

Exemplo Ilustrativo de Classe

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

14

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

3. CRIAO DE JANELAS PADRO OOP


3.1. TWINDOW Classe de janela principal de programa, dever existir apenas uma instncia deste objeto na execuo do programa. Propriedades bInit lEscClose oCtlFocus . Mtodos Bloco de cdigo. Executado quando a janela est sendo exibida. Lgico. Se .T. habilita o <ESC> cancelar a execuo da janela. Objeto. Objeto contido na janela que est com foco de entrada de dados

New - Mtodo 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] ) Argumento AnTop AnLeft AnBottom AnRight acTitle nPar6 oPar7 oPar8 oPar9 AoParent lPar11 lPar12 anClrFore anClrText oPar15 cPar16 lPar17 No No N N No Obj Obrigat. No No No No No Tipo N N N N C Descrio Coordenada vertical superior em pixels ou caracteres. Coordenada horizontal esquerda em pixels ou caracteres. Coordenada vertical inferior em pixels ou caracteres. Coordenada horizontal inferior em pixels ou caracteres. Ttulo da janela. Reservado. Reservado. Reservado. Reservado. Janela me da janela corrente. Reservado. Reservado. Cor de fundo da janela. Cor do texto da janela. Reservado. Reservado. Reservado.

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

15

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

lPar18 lPar19 lPar20 AlPixel No Log

Reservado. Reservado. Reservado. Se .T. (padro) considera coordenadas passadas em pixels, se .F. considera caracteres.

Activate - Ativa (exibe) a janela. Chamar esse mtodo apenas uma vez.

Sintaxe Activate([acShow], [bPar2], [bPar3], [bPar4], [bPar5], [bPar6], [ abInit ], [bPar8], [bPar9], [bPar10],; bPar11],[bPar12] ,[bPar13], [bPar14], [bPar15], [abValid], [bPar17], [bPar18] )
Argumento AcShow bPar2 bPar3 bPar4 bPar5 bPar6 AbInit bPar8 bPar9 bPar10 bPar11 bPar12 bPar13 bPar14 bPar15 AbValid bPar17 bPar18 Sim Bloco Sim Bloco Obrigat. No Tipo C Descrio ICONIZED para janela iconizada ou MAXIMIZED para janela maximizada. Reservado. Reservado. Reservado. Reservado. Reservado. Executado quando janela est sendo exibida. Reservado. Reservado. Reservado. Reservado. Reservado. Reservado. Reservado. Reservado. Bloco de cdigo. Executado quando a janela for solicitada de fechar. Dever retornar .T. se o contedo da janela for vlido, ou .F. se no. Se o bloco retornar .F. a janela no fechar. Reservado. Reservado.

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

16

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

End Solicita fechamento da janela. Sintaxe: End() Retorno Lgico. .T. se encerrou a janela e .F. se no.

Center Centraliza a janela. Sintaxe: Center()

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

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

17

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

3.2. MSDIALOG MSDialog deve ser utilizada como padro de janela para entrada de dados. MSDialog um tipo de janela dilogo modal, isto , no permite que outra janela ativa receba dados enquanto esta estiver ativa. Mtodos New Descrio Mtodo construtor da classe. Sintaxe New([anTop], [anLeft], [anBottom], [anRight], [acCaption], [cPar6], [nPar7], [lPar8], [nPar9],;
[anClrText], [anClrBack], [oPar12], [aoWnd], [alPixel], [oPar15], [oPar16], [lPar17]) Tipo N N N N C Descrio Coordenada vertical superior em pixels ou caracteres. Coordenada horizontal esquerda em pixels ou caracteres. Coordenada vertical inferior em pixels ou caracteres. Coordenada horizontal direita em pixels ou caracteres. Ttulo da janela. Reservado. Reservado. Reservado. Reservado. No No N N Cor do texto. Cor de fundo. Reservado. No No Obj Lg Janela me da janela a ser criada, padro a janela principal do programa. Se .T. considera as coordenadas passadas em pixels, se .F. considera caracteres. Reservado. Reservado. Reservado.

Argumento anTop anLeft anBotom anRight acCaption cPar6 nPar7 lPar8 nPar9 anClrText anClrBack oPar12 aoWnd alPixel oPar15 oPar16 nPar17

Obrigat. No No No No No

Exemplo #INCLUDE protheus.ch User Function Teste() // cria dilogo Local oDlg:=MSDialog():New(10,10,300,300,Meu dialogo,,,,,CLR_BLACK,CLR_WHITE,,,.T.) // ativa dilogo centralizado oDlg:Activate(,,,.T.,{||msgstop(validou!),.T.},,{||msgstop(iniciando) ) Return

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

18

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

Equivalncias A utilizao dos includes nos permitem a utilizao dos objetos a partir de equivalncias, veja a seguir:
#xcommand DEFINE MSDIALOG <oDlg> ; [ <resource: NAME, RESNAME, RESOURCE> <cResName> ] ; [ TITLE <cTitle> ] ; [ FROM <nTop>, <nLeft> TO <nBottom>, <nRight> ] ; [ <lib: LIBRARY, DLL> <hResources> ] ; [ <vbx: VBX> ] ; [ STYLE <nStyle> ] ; [ <color: COLOR, COLORS> <nClrText> [,<nClrBack> ] ] ; [ BRUSH <oBrush> ] ; [ <of: WINDOW, DIALOG, OF> <oWnd> ] ; [ <pixel: PIXEL> ] ; [ ICON <oIco> ] ; [ FONT <oFont> ] ; [ <status: STATUS> ] ; => ; //Equivalencia <oDlg> = MsDialog():New(<nTop>, <nLeft>, <nBottom>, <nRight>, <cTitle>, <cResName>, <hResources>,; <.vbx.>, <nStyle>, <nClrText>, <nClrBack>, <oBrush>, <oWnd>, <.pixel.>,; <oIco>, <oFont> , <.status.> )

Exemplo utiizando forma equivalente a Classe MSDialog


#INCLUDE protheus.ch User Function fTela1() Local nVar := 0 Private oDlg Define MSDialog oDlg Title OemToAnsi("Titulo da janela") From 0,0 To 160,380 Pixel @05,10 To 50,180 Pixel @15,20 Say "Colocar aqui a mensagem que quiser" Pixel Of oDlg @25,20 MSGet oVar Var nVar Picture "@E 999,999.99" Size 50,10 Pixel @70,20 Button oBtnOk Prompt "&Ok" Size 30,15 Pixel ; Action (msginfo("Cliquei no OK"), Close(oDlg)) Of oDlg @70,80 Button oBtnCancel Prompt "&Cancelar" Size 30,15 Pixel ; Action (msginfo("Cliquei no Cancelar"), oDlg:End()) Cancel Of oDlg Activate MSDialog oDlg Centered Static Function Close oDlg:End() Return Of oDlg

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

19

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

3.3. TFONT Classe que encapsula fonte de edio. Mtodos New Construtor do objeto New([acName], [nPar2], [anHeight], [lPar4], [alBold], [nPar6], [lPar7],; [nPar8], [alItalic], [alUnderline])
Argumento acName nPar2 anHeight lPar4 AlBold nPar6 lPar7 nPar8 alItalic alUnderline No No Log Log No Log No N Obrigat. No Tipo C Descrio Caractere, opcional. Nome da fonte, o padro Arial. Reservado. Numrico, opcional. Tamanho da fonte. O padro -11. Reservado. Se .T. o estilo da fonte ser negrito. Reservado. Reservado. Reservado. Se .T. o estilo da fonte ser itlico. Se .T. o estilo da fonte ser sublinhado.

Sintaxe

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 Minha tela com Fonte Courier New PIXEL // apresenta o tSay com a fonte Courier New // oSay:= tSay():New(10,10,{||para exibir},oDlg,,oFont,,,,.T.,CLR_WHITE,CLR_RED,100,20) oSay:lTransparent:= .T. ACTIVATE MSDIALOG oDlg CENTERED Return

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

20

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

Exemplo utiizando forma equivalente a Classe TFont


#include "protheus.ch" User Function Telafont() Local oDlg, oSay, oFont DEFINE FONT oFont Name "Courier New" SIZE 0,-14 BOLD DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 ; TITLE "Minha tela Courier New" PIXEL @ 010,010 SAY "para exibir" SIZE 100,20 FONT oFont; COLOR CLR_RED PIXEL of ODlg ACTIVATE MSDIALOG oDlg CENTERED Return

3.4. TCONTROL Classe abstrata me de todos os controles editveis. tControl a classe comum entre todos os componentes visuais editveis. Propriedades: lModified lReadOnly hParent bChange Lgico. Se .T. indica que o contedo da varivel associada ao controle foi modificado. Lgico. Se .T. o contedo da varivel associada ao controle permanecer apenas para leitura. Numrico. Handle (identificador) do objeto sobre o qual o controle foi criado. Bloco de cdigo. Executado quando o estado ou contedo do controle modificado pela ao sobre o controle.

Mtodos

SetFocus Fora mudana do foco de entrada de dados para o controle. Sintaxe: Setfocus()

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

21

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

3.5. TBUTTON Utilize a classe tButton para criar um controle visual do tipo boto. Propriedades: lProcessing bAction Mtodos New Construtor do objeto
New([anRow], [anCol], [acCaption], [aoWnd], [abAction], [anWidth], [anHeight], [nPar8], ; [aoFont], [lPar10], [alPixel],[lPar12],[cPar13], [lPar14], [abWhen], [bPar16], [lPar17]) Obrigat. No No No No No No No Tipo N N C Obj Bloco N N Descrio Numrico, opcional. Coordenada vertical em pixels ou carateres. Numrico, opcional. Coordenada horizontal em pixels ou caracteres. Titulo do boto. Janela ou controle onde o boto dever ser criado. Bloco que dever ser acionado quando o boto for pressionado. Largura do boto em pixels. Altura do boto em pixels. Reservado. No Obj Objeto tipo tFont com propriedades da fonte utilizada para o ttulo do boto. Reservado. No Log Se .T. considera as coordenadas passadas em pixels, se .F. (padro) considera em caracteres. Reservado. Reservado. Reservado. No abWhen bPar16 lPar17 Bloco Executado quando mudana 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 no. Reservado. Reservado.

Lgico. Se .T. indica o boto est efetuando uma ao. Bloco de cdigo. Executado quando o boto pressionado.

Sintaxe

Argumento anRow anCol acCaption aoWnd abAction anWidth anHeight nPar8 aoFont lPar10 alPixel lPar12 cPar13 lPar14

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

22

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

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) // Boto 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

Exemplo utiizando forma equivalente a Classe TButton


#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) // Boto para fechar a janela @ 30,10, BUTTON PROMPT fechar ACTION oDlg:End() SIZE 100,20 PIXEL of oDlg ACTIVATE MSDIALOG oDlg CENTERED MsgStop( O valor +cCombo ) Return nil

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

23

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

3.6 GAIA
Faa uma tela conforme a seguir utilizando o Gaia.

Premissas: Usurio deve trazer o nome do usurio logado. Criar a tabela de motivos no SX5 Tabela Z9. Criar uma arquivo com os seguintes campos: SZ0 Filial C 2 / Motivo C 2 / Observao M 10 / Usuario C 15

Na combo do motivo deve trazer os itens da tabela Z9. O boto sim deve ser habilitado somente se a observao estiver preenchida e o motivo for diferente de nenhum, Quando o boto sim for clicado as informaes da tela devero ser gravadas na tabela SZ0.

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

24

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

3.7 MONTANDO JANELAS LISTBOX A sintaxe clssica da linguagem ADVPL permite que o componente visual ListBox implemente dois tipos distintos de objetos: Lista simples: lista de apenas uma coluna no formato de um vetor, a qual no necessita da especificao de um cabealho. Lista com colunas: lista com diversas colunas que necessita de um cabealho no formato de um aHeader (array de cabealho). LISTBOX SIMPLES Sintaxe: @ nLin,nCol LISTBOX oListbox VAR nLista ITEMS aLista; SIZE nLarg,nAlt OF oDlg PIXEL ON CHANGE CHANGE Parmetros:
nLin,nCol oListBox nLista aLista nLarg,nAlt oObjetoRef PIXEL CHANGE

Posio do objeto ListBox em funo da janela em que ele ser definido. Objeto ListBox que ser criado. Varivel numrica que guarda o item selecionado no ListBox. Array simples com os itens da lista. Dimenses do objeto ListBox. Objeto dialog no qual o componente ser definido. Se informado, as dimenses sero em pixel. Lista de expresses que ser executada na seleo de um item do ListBox.

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

25

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

Exemplo:
#INCLUDE "PROTHEUS.CH" User Function listbox1() Local OLISTBOX Private nLista := 2 Private aLista := {"Linha 1", "Linha 2"} DEFINE MSDIALOG _oDlg TITLE "ListBox" FROM (210),(210) TO (468),(520) PIXEL @ 05,05 LISTBOX oList VAR nLista ITEMS aLista PIXEL SIZE 100,100 OF _oDlg ; ON CHANGE MSGINFO(nLista) ACTIVATE MSDIALOG _oDlg CENTERED Return

Resultado:

Ao Clicar no Item da lista aparece a mensagem seguinte.

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

26

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

LISTBOX MULTIPLOS Sintaxe: @ nLin,nCol LISTBOX oListbox VAR nLista FIELDS HEADER Header1 HeaderX; SIZE nLarg,nAlt OF oDlg PIXEL ON CHANGE CHANGE

Parmetros:
nLin,nCol oListBox nLista Header1,...,HeaderX nLarg,nAlt oObjetoRef PIXEL CHANGE

Posio do objeto ListBox em funo da janela em que ele ser definido. Objeto ListBox que ser criado. Varivel numrica que guarda o item selecionado no ListBox. Strings identificando os ttulos das colunas do Grid. Dimenses do objeto ListBox. Objeto dialog no qual o componente ser definido. Se informado, as dimenses sero em pixel. Lista de expresses que ser executada na seleo de um item do ListBox.

Mtodos: SetArray() Mtodo o objeto ListBox que define qual o array contm os dados que sero exibidos no grid.

Atributos: bLine

Atributo do objeto ListBox que vincula cada linha,coluna do array, com cada cabealho do grid.

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

27

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

Exemplo:
User Function listbox2() // Figura 1 Local OLIST Private nLista := 0 Private aLista := {{"Linha 1 a", "Linha 1 b"},{"Linha2 a", "Linha 2 b"}} DEFINE MSDIALOG _oDlg TITLE "ListBox" FROM (210),(210) TO (330),(420) PIXEL // Cria Componentes Padroes do Sistema @ 05,05 LISTBOX oList FIELDS HEADER "Coluna 1" ,"Coluna 2" PIXEL SIZE 100,50 OF _oDlg oList:SetArray( aLista ) oList:bLine := {|| { aLista[oList:nAt,1],; aLista[oList:nAt,2]}} ACTIVATE MSDIALOG _oDlg CENTERED Return -------------------------------------------------------------User Function listbox3()// Figura 2 Local OLIST Local oOk Local oNo := LoadBitmap( GetResources(), "LBOK" ) := LoadBitmap( GetResources(), "LBNO" )

Private nLista := 0 Private aLista := {{.f.,"Linha 1 a", "Linha 1 b"},{.f., "Linha2 a", "Linha 2 b"}} DEFINE MSDIALOG _oDlg TITLE "ListBox" FROM (210),(210) TO (390),(480) PIXEL // Cria Componentes Padroes do Sistema @ 05,05 LISTBOX oList FIELDS HEADER "", "Coluna 1" ,"Coluna 2" PIXEL SIZE 100,80 OF _oDlg; ON dblClick(aLista[oList:nAt,1] := !aLista[oList:nAt,1],oList:Refresh()) oList:SetArray( aLista ) oList:bLine := {|| {Iif(aLista[oList:nAt,1],oOk,oNo),; aLista[oList:nAt,2],; aLista[oList:nAt,3]}} ACTIVATE MSDIALOG _oDlg CENTERED Return

figura 1

Figura 2

4. TELAS DE PADRO MICROSIGA

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

28

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

Comando/Funo/Objeto Descrio Argumento cTitulo aCab Obrigat. Sim Sim Tipo C A

Modelo2() Tela de Manuteno Utilizando uma Tabela (Cabealho/Itens). Descrio Ttulo da Janela Array com dados do cabealho Ex:{cVariavel,{nLin,nCol},cTitulo_Campo,cPicture,Funcao_valid,F3,lEditavel}

aRod

Sim

Array com dados do rodap Ex;{cVariavel,{nLin,nCol},cTitulo_Campo,cPicture,Funcao_valid,F3,lEditavel}

aGetdados

Sim

Array com posies da getdados Ex:{nLinIni,nColIni,nLinFim,nColFim}

nOpc

Nao

Modo de operao (3/4 Inclui ou altera, 6 altera, outros visualiza) Ex: nOpc := 3

cLinOk

No

Funo para validar linha Ex: allwaystrue()

cTudOk

Nao

Funo que valida tudo Ex: allwaystrue()

aCols

Sim

Array com os campos que podem ser alterados Ex:{A1_COD,A1_NREDUZ}

bF4

No

Bloco de Cdigo Chamado pelo F4 Ex: {||MsgAlert(Teste)}

cInitPos nMax aCoord lDelGet lMaximized aButtons

No No No No No No

C N A L L A

String com nome dos campos que devem ser inicializados ao teclar seta para baixo. Nmero mximo de linhas Array com as coordenadas das janelas Determina se a linha da getdados pode ser apagada ou no Maximiza a tela Array com botes a serem acrescentados no toolbar

Retorno .T. / .F. (Verdadeiro ou Falso Confirma Operao)

Tipo Lgico

Comando/Funo/Objeto

Modelo3()

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

29

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

Descrio

Tela de Manuteno Utilizando duas Tabelas (Cabecalho/Itens).

Argumento cTitulo cAlias1 cAlias2 aEnchoice cLinOk cTudOK nOpc1 nOpc2 cFieldOk lVirtual nLinhas aAltEnchoice nFreeze aButtons aCoord aSize

Obrigat. Sim Sim Sim Sim No No No No No No No No No No No No

Tipo C C C A C C N N C L N A N A A A

Descrio Ttulo da Janela Alias da tabela do Cabealho Alias da Tabela dos Itens Array com os campos da enchoice(Cabecalho) Funo de Validao de Itens Funo de Validao tudo Opo de edio da Enchoice Opo de edio da Getdados Funo de validao dos campos da Getdados Permite visualizar campos virtuais na Enchoice Numero Maximo de Linhas da Getdados Array com os campos alterveis da enchoice Qtde de colunas que ficaro congeladas (da esquerda pra direita) Array com botes a serem acrescentados ao toolbar Array com as coordenadas da tela Desconhecido

Retorno .T. / .F. (Verdadeiro ou Falso Confirma Operao)

Tipo Lgico

5. MSEXECAUTO

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

30

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

Objetivo Fazer manuteno automtica (incluso, alterao e excluso) das rotinas de manipulao de dados do sistema, automatizando o processo de entrada de dados sem a necessidade de desenvolver rotinas especificas. Vantagens 1) Interface : Os dados de entrada so enviados a rotina em forma de campos e contedos (array) e desta forma no necessrio a apresentao de nenhuma interface ao usurio. 2) Segurana : A utilizao de rotinas automticas aumenta consideravelmente a segurana do sistema, uma vez que utiliza as validaes padres e diminui os problemas causados por atualizao de verso ou incluso de customizaes nas rotinas padres do sistema. 3) Agilidade no processo : Aumenta consideravelmente o tempo de desenvolvimento das customizaes que necessitam de entrada de dados. Exemplo: Importao de pedido de venda. Procedimentos Existem duas maneiras de utilizar a rotina automtica, sendo elas: 1. Sem Interface 2. Com Interface Para a utilizao da rotina automtica sem interface deve-se, configurar o ambiente utilizando-se o comando PREPARE ENVIRONMENT e chamar diretamente o nome da funo.

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

31

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

Exemplo:
User Function IncProd() Local aRotAuto := {} Local nOpc := 3 // inclusao Private lMsHelpAuto := .t. // se .t. direciona as mensagens de help para o arq. de log Private lMsErroAuto := .f. //necessario a criacao, pois sera //atualizado quando houver //alguma incosistencia nos parametros PREPARE ENVIRONMENT EMPRESA '99' FILIAL '01' MODULO 'FAT' Begin Transaction aRotAuto:= {{'B1_COD' ,'1010' ,Nil},; {'B1_DESC' ,'Produto teste',Nil},; {'B1_TIPO' ,'PA' ,Nil},; {'B1_UM' ,'UN' ,Nil},; {'B1_LOCPAD' ,'01' ,Nil},; {'B1_PICM' ,0 ,Nil},; {'B1_IPI' ,0 ,Nil},; {'B1_PRV1' ,100 ,Nil},; {'B1_LOCALIZ' ,'N' ,Nil},; {'B1_CODBAR' ,'789888800001' ,Nil}} MSExecAuto({|x,y| mata010(x,y)},aProduto,nOpc) If lMsErroAuto DisarmTransaction() break EndIf End Transaction If lMsErroAuto /* Se estiver em uma aplicar normal e ocorrer alguma inconsistncia nos parmetros passados,mostrar na tela o log informando qual coluna teve a inconsistncia. */ Mostraerro() Return .f. EndIf Return .t.

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

32

CURSO ADVPL II RECURSOS AVANADOS


Verso 3.0 05/2008 Todos direitos reservados

Escola conveniada

J para rotinas que possuem interface, devemos usar a MSExecAuto, pois a mesma tem a funo de guardar o ambiente , executar a funo automtica e retornar de onde parou. Exemplo: User Function IncProd() Local aRotAuto := {} Local nOpc := 3 // inclusao Private lMsHelpAuto := .t. // se .t. direciona as mensagens de help para o arq. de log Private lMsErroAuto := .f. //necessario a criacao, pois sera //atualizado quando houver //alguma incosistencia nos parametros Begin Transaction aRotAuto:= {{'B1_COD' ,'1010' ,Nil},; {'B1_DESC' ,'Produto teste',Nil},; {'B1_TIPO' ,'PA' ,Nil},; {'B1_UM' ,'UN' ,Nil},; {'B1_LOCPAD' ,'01' ,Nil},; {'B1_PICM' ,0 ,Nil},; {'B1_IPI' ,0 ,Nil},; {'B1_PRV1' ,100 ,Nil},; {'B1_LOCALIZ' ,'N' ,Nil},; {'B1_CODBAR' ,'789888800001' ,Nil}} MSExecAuto({|x,y| mata010(x,y)},aProduto,nOpc) If lMsErroAuto DisarmTransaction() break EndIf End Transaction If lMsErroAuto /* Se estiver em uma aplio normal e ocorrer alguma inconsistncia nos parmetros passados,mostrar na tela o log informando qual coluna teve a inconsistncia. */ Mostraerro() Return .f. EndIf Return .t.

Av. Leona rdo da Vinci, n 608 Metr Conceio - So Paulo Tel: 11 50114895 / 50116082 / 98081988 E m a i l / M S N : s u p o r t e @ a d v p l . c o m . b r - w.w.w.advpl.com.br

SP

33