1  · web viewa análise e projeto orientados a objetos têm como meta ... um programa orientado a...

40
CURSO ADVPL II RECURSOS AVANÇADOS Versão 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 utilização de querys melhoram consideravelmente a velocidade das consultas aos dados e reduzem a sobrecarga no servidor de aplicação, TopConnect e Banco de Dados. Normalmente uma query é utilizada em substituição a um Loop ( While ) na base de dados de programação convencional. Querys mais complexas utilizando joins poder ser construídas com a mesma função de vários loops. 1.1. DIFERENÇAS E SIMILARIDADES ENTRE DBF E SQL A princípio não existem diferenças na programação para a versão SQL, já que pelo próprio fato de ser uma linguagem interpretada, o sistema é quem se encarrega de executar os comandos e funções adequadamente no ambiente em que trabalha. Mas é importante manter algumas informações 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 invés de arquivos, e onde o sistema não tem acesso aos dados de forma nativa e sim através do TopConnect. Essa forma de acesso adiciona ao sistema algumas das características e vantagens oferecidas pelo SGBD em uso (por exemplo, o Oracle, MSSQL Server ou o DB2) como por exemplo segurança e integridade referencial, e as imensas facilidades da linguagem SQL, mas por outro lado tem-se também as implicações da conversão dos comandos no padrão xBase para a perfeita compreensão no ambiente SQL. Imagine a montagem de uma expressão de filtro para um índice condicional. Tome a seguinte expressão como exemplo: "DTOS(E1_VENCTO) >= DTOS(mv_par01)". Em um ambiente padrão xBase, como o NTX ou o ADS, pode-se utilizar variáveis sem qualquer problema em uma expressão 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 temporária, onde estão selecionados apenas os registros conforme a condição indicada. A seleção de dados em tabelas pelo SQL é mais rápida, mas em compensação o SGBD não tem como reconhecer a variável informada na expressão. Ela existe apenas no sistema ou, mais especificamente, no seu programa. A v . L e o n a r d o d a V i n c i , n º 6 0 8 M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8 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 4

Upload: ngodan

Post on 30-Nov-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 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 utilização de querys melhoram consideravelmente a velocidade das consultas aos dados e reduzem a sobrecarga no servidor de aplicação, TopConnect e Banco de Dados.

Normalmente uma query é utilizada em substituição a um Loop ( While ) na base de dados de programação convencional. Querys mais complexas utilizando joins poder ser construídas com a mesma função de vários loops.

1.1. DIFERENÇAS E SIMILARIDADES ENTRE DBF E SQL

A princípio não existem diferenças na programação para a versão SQL, já que pelo próprio fato de ser uma linguagem interpretada, o sistema é quem se encarrega de executar os comandos e funções adequadamente no ambiente em que trabalha. Mas é importante manter algumas informações 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 invés de arquivos, e onde o sistema não tem acesso aos dados de forma nativa e sim através do TopConnect. Essa forma de acesso adiciona ao sistema algumas das características e vantagens oferecidas pelo SGBD em uso (por exemplo, o Oracle, MSSQL Server ou o DB2) como por exemplo segurança e integridade referencial, e as imensas facilidades da linguagem SQL, mas por outro lado tem-se também as implicações da conversão dos comandos no padrão xBase para a perfeita compreensão no ambiente SQL.

Imagine a montagem de uma expressão de filtro para um índice condicional. Tome a seguinte expressão como exemplo: "DTOS(E1_VENCTO) >= DTOS(mv_par01)". Em um ambiente padrão xBase, como o NTX ou o ADS, pode-se utilizar variáveis sem qualquer problema em uma expressão 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 temporária, onde estão selecionados apenas os registros conforme a condição indicada. A seleção de dados em tabelas pelo SQL é mais rápida, mas em compensação o SGBD não tem como reconhecer a variável informada na expressão. Ela existe apenas no sistema ou, mais especificamente, no seu programa.

Por isso, deve-se substituir a expressão anteriormente exemplificada pela seguinte (que também funcionaria perfeitamente em um ambiente xBase): "DTOS(E1_VENCTO) >= ‘"+DTOS(mv_par01)+"’". Esta expressão é melhor que anterior simplesmente porque não se utilizada variável e sim do conteúdo da mesma, o que pode ser compreendido em qualquer ambiente. Toda essas explicações são válidas, da mesma maneira, a filtros criados através do comando SET FILTER.

Ainda existem outros detalhes a se considerar quando se trabalha com índices em um ambiente SQL. É que na verdade não existem índices condicionais nesse ambiente. O filtro é criado independente do índice. Então, você pode criar um INDREGUA com um filtro e mudar a ordem, mas o filtro permanecerá ativo, em qualquer ordem. Do mesmo modo, não se pode manter, dois índices, com filtros diferentes, pois um filtro sobrescreveria o outro.

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

4

Page 2: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

Outro ponto de atenção deve ser a função xBase chamada DBSETINDEX. Podem ocorrer alguns erros ao tentar-se utilizar essa função para abrir um índice de trabalho criado. Por esses motivos e pelo fato de tornar o processamento mais lento deve-se evitar ao máximo o uso de índices de trabalho no ambiente SQL.

Da mesma maneira que a funcão DBSETINDEX, os comandos COPY TO e APPEND FROM também devem ter uma atenção especial. No ambiente SQL esses comandos são 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 FUNÇÕES PARA TOPCONNECT

TCCONTYPE - Define o tipo de conexão que será utilizada entre o Protheus e o TopConnect.

SintaxeTCCONTYPE ( cTipo )Argumento Obrigat. Tipo Descrição

cTipo Sim C Tipo da conexão. Pode ser: "TCPIP" ou "NPIPE"

 Exemplo:

TCConType("NPIPE")TCConType("TCPIP")

TCDELFILE - Apaga um arquivo de um banco de dados.

Sintaxe TCDELFILE ( cTabela )Argumento Obrigat. Tipo Descrição

cTabela Sim C Nome da tabela que deve ser apagada.

Exemplo:

If  TcDelFile("SA1020")MSGINFO(“Tabela excluída com sucesso”)

ElseMSGINFO(“Não foi possível excluir a tabela”)

Endif

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

5

Page 3: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

TCGENQRY - Define a execução de uma Query, a próxima chamada à DBUseArea será a abertura de uma Query e não de tabela.

Sintaxe TCGENQRY ([ xPar1, xPar2, ], cQuery)

Argumento Obrigat. Tipo Descrição

xPar1, xPar2 Não Qualquer Parâmetros apenas para compatibilização. Não

tem função.

cQuery Sim C Contém a expressão da query que se deseja executar.

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 dicionário.

Sintaxe TCSETFIELD (cAlias cCampo, cTipo, nTam, nDec)

Argumento Obrigat. Tipo Descrição

cAlias Sim C Alias para aplicação o formatocCampo Sim C Nome do campo a formatarcTipo Sim C Tipo do camponTam Sim N Tamanho nDec Sim N Decimal

Exemplo:

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 Obrigat. Tipo Descrição

CAlias Sim C Alias desejado

Exemplo:

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

6

Page 4: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

cQry1 := "SELECT * FROM " + RetSqlName("SZ2") + " WHERE D_E_L_E_T_ = ''")

SQLORDER - Retorna a instrução do indice corrente.

Sintaxe SQLORDER (cAlias) Argumento Obrigat. Tipo Descrição

cChave Sim N ou CInstrução com a chave, se numérico, busca a expressão da ordem informada, se caracter utiliza a própria expressão informada.

Exemplo:

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())) oucQry1 := "SELECT * FROM " + RetSqlName("SZ2") + " WHERE D_E_L_E_T_ = ''") cQry1+= "ORDER BY " + SqlOrder(SZ2->(indexorder()))

TCREFRESH - Faz refresh em uma tabela, através de uma leitura forçada da tabela no banco de dados. Utilizada após o DELETE e o INSERT.

Sintaxe TCREFRESH ( cTabela )

Argumento Obrigat. Tipo Descrição

cTabela Sim Lógico Indica nome da tabela que deve ser feito refresh.

  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 Obrigat. Tipo Descrição

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

7

Page 5: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

CStoredProc Sim C Nome da Stored Procedure.

Exemplo

if TCSPExist("SP000001")      cStr := "DROP PROCEDURE "+ "SP000001 "      TCSqlExec(cStr)endif

TCSQLEXEC - Executa um comando em SQL

Sintaxe TCSQLEXEC (cComando) Argumento Obrigat. Tipo Descrição

cComando Sim C Instrução em SQL.

Exemplo

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

TCSPEXEC - Executa Executa uma Stored Procedure, no banco de dados, com número variável de parâmetros. Retorna um array contendo os valores de retorno da SP

Sintaxe TCSPEXEC ( cSProc [, xParam1,...,xParamN])--> [array]

Argumento Obrigat. Tipo Descrição

cSProc Sim C Nome da Stored Procedure.

xParamX Não Qualquer Parâmetro(s) da Stored Procedure

 Create Procedure teste1( @IN_VALUE int, @OUT_STR char(255), @OUT_VALUE int)WITH RECOMPILEAsBegin   Select @OUT_STR = "Teste", @OUT_VALUE = @IN_VALUE + 3

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

8

Page 6: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

EndGO aResult := TCSPEXEC(xProcedures ('teste1'), 100 )

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

9

Page 7: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

1.3.EXERCÍCIOS

1. Fazer um programa utilizando funções de bancos de Dados que imprima os seguintes campos:

Campos:No. Pedido, Nome do Cliente, Codigo do Produto, Descrição do Produto, Data de Emissao do Pedido.

Tabelas de Apoio: SC5, SC6, SA1, SB1

2. Fazer um programa utilizando funções de bancos de Dados.

Parametros: Cliente Inicial (SA1) Cliente Final (SA1) Quebra por: Cliente/Produto Analitico / Sintético

Campos:Nome do Cliente, Numero da Nota, Data de Emissao, Código do Produto, Descrição do Produto, Quantidade, Valor Unitário, Total

Tabelas de Apoio: SD2, SF2, SA1, SB1

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

10

Page 8: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 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 código AdvPL, sem ter que montar códigos complexos que dificultam a leitura do comando, porém sua utilização está disponível apenas para build 7.00.050721p ou superior.

Instrução Descrição

BeginSQL Alias Inicia o Embedded SQL

EndSQL Finaliza a instrução

%xxx% Instrução literal a ser substituída

Column Especifica tipo de conversão para campos dos tipos data, numérico ou lógico utilizado em substuição do TCSetField

%exp.% Utilizado para especificar variáveis, expressões e funções.

%NoParcer% indica que a consulta não deve passar pela função “ChangeQuery”

%Table.<cAlias>% Indica a tabela a ser utilizada, substitui a função “RetSqlName”

%NotDel% Substitui a expressão D_E_L_E_T_ = “ ”‘

%Order:<alias>%Define a ordem a utilizar no ORDER BY, substitui a função

SqlOrder(<Alias>->(IndexKey()))%Order:<cAlias>, <nIndice>% Define a ordem a utilizar no ORDER BY, substitui a função

SqlOrder(<Alias>->(Indexorder(nIndice)))%Order:<cAlias>, <nNick>%

Define a ordem a utilizar no ORDER BY, substitui a função

SqlOrder(<Alias>->(DBNickIndexKey(cNick)))

GetLastQuery() Retorna um vetor com cinco elementos, com as seguintes informações da ultima query executada:

[1] - Alias usado para abrir o cursor[2] – Query executada[3] –Vetor de campos com critérios de conversão especificados[4] –Caso .T. não foi utilizada QueryChange na string original[5] –Tempo em segundos utilizado para a abertura do cursor

Limitações:

A utilização de funções dentro do Código Embedded não é permitida, caso necessite execute a

função antes de iniciar o embedded pois a instrução só recebe variáveis resolvidas.

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

11

Page 9: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

Não é possível debugar.

Exemplo utilizando a forma usual

cADQry := “SELECT C6_NUM, C6_PRODUTO, C6_QTDVEN, C6_PRCVEN , C6_ENTREG“ + CRLF

cADQry += “FROM “ + RetSqlName(“SC6”) + ” C6 “+CRLF

cADQry += “WHERE C6_FILIAL = ‘” + xFilial(“SC6”) + “’ AND D_E_L_E_T_ = ‘ ‘ “+CRLF

cADQry += “ORDER BY “+RetSqlOrder(“SC6”) +CRLF

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 SQLBeginSQL Alias “TRB”

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%

EndSQL

1.5.EXERCÍCIOS

1. Fazer um programa utilizando Embedded SQL que imprima os seguintes campos:

Campos:No. Pedido, Nome do Cliente, Codigo do Produto, Descrição 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 / Sintético

Campos:Nome do Cliente, Numero da Nota, Data de Emissao, Código do Produto, Descrição do Produto, Quantidade, Valor Unitário, Total

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

12

Page 10: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

Tabelas de Apoio: SD2, SF2, SA1, SB1

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

13

Page 11: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

2. PROGRAMAÇÃO ORIENTADA A OBJETOS

A análise e projeto orientados a objetos têm como meta identificar o melhor conjunto de objetos para descrever um sistema de software. O funcionamento deste sistema se dá através do relacionamento e troca de mensagens entre estes objetos.

Na programação 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 métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos.

Programas que utilizam conceitos OO, ao invés de definir funções independentes que são 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 através de funções definidas nestes objetos (métodos). Objetos (e seus métodos) fazem referência a outros objetos e métodos; o termo “envio de mensagens” é utilizado para descrever a comunicação que ocorre entre os métodos dos diferentes objetos.

Na prática, um programa orientado a objetos pode ser descrito como um conjunto de classes pré-definidas ou definidas pelo usuário que possuem atributos e métodos, e que são instanciadas em objetos, durante a execução do programa.

2.1. Conceitos Básicos

Classe representa um conjunto de objetos com diversas características. Uma classe define o comportamento dos objetos, através de métodos, e quais estados ele é capaz de manter, através de atributos.

Exemplo de classe: Empresa.

Objeto é uma instância de uma classe. Um objeto é capaz de armazenar estados através 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 são os dados ou informações do objeto, basicamente a estrutura de dados que vai representar a classe.

Exemplos:

Funcionário: nome, endereço,telefone Cursos: nome, Tempo, preço Alunos: Nome, endereco, telefone

Métodos definem as habilidades de cada objeto.

Biale é uma instância da classe Empresa(objeto), que tem habilidade para dar suporte, implementada através do método SuporteCliente(). A ação só ocorre quando o método é invocado através do objeto, no

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

14

Page 12: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

caso Biale. Dentro do programa, a utilização de um método 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. Normalmente, uma classe possui diversos métodos, que no caso da classe empresa poderiam ser treina(), atendetelefone() .

Mensagem é uma chamada a um objeto para invocar um de seus métodos, ativando um comportamento descrito por sua classe. Também pode ser direcionada diretamente a uma classe.

Sobrecarga é a utilização do mesmo nome para símbolos ou métodos com operações ou funcionalidades distintas. Geralmente diferencia-se os métodos pela sua assinatura.

Herança é o mecanismo pelo qual uma classe (sub-classe) pode estender outra classe (super-classe), aproveitando seus comportamentos (métodos) e estados possíveis (atributos). Há Herança múltipla quando uma sub-classe possui mais de uma super-classe. Essa relação é normalmente chamada de relação "é um".

Um exemplo de herança: Filial é super-classe de Empresa. Ou seja, uma Filial é uma empresa.

Associação é o mecanismo pelo qual um objeto utiliza os recursos de outro. Pode tratar-se de uma associação 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 separação 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 métodos que alteram estes estados. Exemplo: você não precisa conhecer os detalhes dos circuitos de um telefone para utilizá-lo. A carcaça do telefone encapsula esses detalhes, provendo a você uma interface mais amigável (os botões, o monofone e os sinais de tom).

Polimorfismo é o princípio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar métodos que têm a mesma assinatura (lista de parâmetros e retorno) mas comportamentos distintos, especializados para cada classe derivada, usando para tanto uma referência a um objeto do tipo da superclasse. A decisão sobre qual o método que deve ser selecionado, de acordo com o tipo da classe derivada, é tomada em tempo de execução. No caso de polimorfismo, é necessário que os métodos tenham exatamente a mesma identificação, sendo utilizado o mecanismo de redefinição de métodos.

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

15

Page 13: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

Exemplo Ilustrativo de Classe

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

16

Page 14: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

3. CRIAÇÃO DE JANELAS PADRÃO OOP

3.1. TWINDOW

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 - 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] )

Argumento Obrigat. Tipo Descrição

AnTop Não N Coordenada  vertical superior em pixels ou caracteres.

AnLeft Não N Coordenada horizontal esquerda em pixels ou caracteres.

AnBottom Não N Coordenada vertical inferior em pixels ou caracteres.

AnRight Não N Coordenada horizontal inferior em pixels ou caracteres.

acTitle Não C Título da janela.

nPar6 Reservado.

oPar7 Reservado.

oPar8 Reservado.

oPar9 Reservado.

AoParent Não Obj Janela mãe da janela corrente.

lPar11 Reservado.

lPar12 Reservado.

anClrFore Não N Cor de fundo da janela.

anClrText Não N Cor do texto da janela.

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

17

Page 15: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

oPar15 Reservado.

cPar16 Reservado.

lPar17 Reservado.

lPar18 Reservado.

lPar19 Reservado.

lPar20 Reservado.

AlPixel Não Log Se .T. (padrão) considera coordenadas passadas em pixels, se .F. considera caracteres.

Activate - 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] )

Argumento Obrigat. Tipo Descrição

AcShow Não C “ICONIZED” para janela iconizada ou “MAXIMIZED” para janela maximizada.

bPar2 Reservado.

bPar3 Reservado.

bPar4 Reservado.

bPar5 Reservado.

bPar6 Reservado.

AbInit Sim Bloco Executado quando janela está sendo exibida.

bPar8 Reservado.

bPar9 Reservado.

bPar10 Reservado.

bPar11 Reservado.

bPar12 Reservado.

bPar13 Reservado.

bPar14 Reservado.

bPar15 Reservado.

AbValid Sim BlocoBloco 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.

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

18

Page 16: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

bPar18 Reservado.

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

19

Page 17: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

End – Solicita fechamento da janela.

Sintaxe: End()

RetornoLógico. .T. se encerrou a janela e .F. se não.

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

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

20

Page 18: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

3.2. MSDIALOG

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.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])

Argumento Obrigat. Tipo Descrição

anTop Não N Coordenada vertical superior em pixels ou caracteres.

anLeft Não N Coordenada horizontal esquerda em pixels ou caracteres.

anBotom Não N Coordenada vertical inferior em pixels ou caracteres.

anRight Não N Coordenada horizontal direita em pixels ou caracteres.

acCaption Não C Título da janela. cPar6 Reservado. nPar7 Reservado. lPar8 Reservado. nPar9 Reservado. anClrText Não N Cor do texto.

anClrBack Não N Cor de fundo.

oPar12 Reservado.

aoWnd Não Obj Janela mãe da janela a ser criada, padrão é a janela principal do programa.

alPixel Não Lóg Se .T. considera as coordenadas passadas em pixels, se .F. considera caracteres.

oPar15 Reservado.

oPar16 Reservado.

nPar17 Reservado.

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

// cria diálogoLocal oDlg:=MSDialog():New(10,10,300,300,”Meu dialogo”,,,,,CLR_BLACK,CLR_WHITE,,,.T.)

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

21

Page 19: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

// ativa diálogo centralizado oDlg:Activate(,,,.T.,{||msgstop(“validou!”),.T.},,{||msgstop(“iniciando…”) )Return

Equivalências

A utilização dos includes nos permitem a utilização dos objetos a partir de equivalências, 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 Of oDlg

@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()

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

22

Page 20: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

Return

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

23

Page 21: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

3.3. TFONT

Classe que encapsula fonte de edição.

Métodos

New – Construtor do objeto

Sintaxe New([acName], [nPar2], [anHeight], [lPar4], [alBold], [nPar6], [lPar7],;

[nPar8], [alItalic], [alUnderline])

Argumento Obrigat. Tipo Descrição

acName Não C Caractere, opcional. Nome da fonte, o padrão é “Arial”.

nPar2 Reservado.

anHeight Não N Numérico, opcional. Tamanho da fonte. O padrão é -11.

lPar4 Reservado.

AlBold Não Log Se .T. o estilo da fonte será negrito.

nPar6 Reservado.

lPar7 Reservado.

nPar8 Reservado.

alItalic Não Log Se .T. o estilo da fonte será itálico.

alUnderline Não Log Se .T. o estilo da fonte será sublinhado.

Exemplo

#include “protheus.ch”

User Function Teste()

Local oDlg, oSayLocal 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

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

24

Page 22: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 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 mãe de todos os controles editáveis. tControl é a classe comum entre todos os componentes visuais editáveis.

Propriedades:

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 – Força mudança do foco de entrada de dados para o controle.

Sintaxe: Setfocus()

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

25

Page 23: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

3.5. TBUTTON

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

Propriedades:

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 – Construtor do objeto

Sintaxe New([anRow], [anCol], [acCaption], [aoWnd], [abAction], [anWidth], [anHeight], [nPar8], ; [aoFont], [lPar10], [alPixel],[lPar12],[cPar13], [lPar14], [abWhen], [bPar16], [lPar17])

Argumento Obrigat. Tipo Descrição

anRow Não N Numérico, opcional. Coordenada vertical em pixels ou carateres.

anCol Não N Numérico, opcional. Coordenada horizontal em pixels ou caracteres.

acCaption Não C Titulo do botão.

aoWnd Não Obj Janela ou controle onde o botão deverá ser criado.

abAction Não Bloco Bloco que deverá ser acionado quando o botão for pressionado.

anWidth Não N Largura do botão em pixels.

anHeight Não N Altura do botão em pixels.

nPar8 Reservado.

aoFont Não Obj Objeto tipo tFont com propriedades da fonte utilizada para o título do botão.

lPar10 Reservado.

alPixel Não Log Se .T. considera as coordenadas passadas em pixels, se .F. (padrão) considera em caracteres.

lPar12 Reservado.

cPar13 Reservado.

lPar14 Reservado.

abWhenNão Bloco 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.

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

26

Page 24: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

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 janelaoButton:=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”)// Botão 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

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

27

Page 25: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

3.6 GAIA

Faça uma tela conforme a seguir utilizando o Gaia.

Premissas:

Usuário deve trazer o nome do usuário logado. Criar a tabela de motivos no SX5 – Tabela Z9. Criar uma arquivo com os seguintes campos: SZ0

Filial C 2 / Motivo C 2 / Observação M 10 / Usuario C 15 Na combo do motivo deve trazer os itens da tabela Z9. O botão “sim” deve ser habilitado somente se a observação estiver preenchida e o motivo for diferente de

nenhum, Quando o botão “sim” for clicado as informações da tela deverão ser gravadas na tabela SZ0.

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

28

Page 26: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

3.7 MONTANDO JANELAS

LISTBOX

A sintaxe clássica 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 não necessita da especificação de um cabeçalho.

Lista com colunas: lista com diversas colunas que necessita de um cabeçalho no formato de um aHeader (array de cabeçalho).

LISTBOX SIMPLES

Sintaxe:@ nLin,nCol LISTBOX oListbox VAR nLista ITEMS aLista; SIZE nLarg,nAlt OF oDlg PIXEL ON CHANGE CHANGE

Parâmetros:nLin,nCol Posição do objeto ListBox em função da janela em que ele será

definido.oListBox Objeto ListBox que será criado.

nLista Variável numérica que guarda o item selecionado no ListBox.

aLista Array simples com os itens da lista.

nLarg,nAlt Dimensões do objeto ListBox.

oObjetoRef

Objeto dialog no qual o componente será definido.

PIXEL Se informado, as dimensões serão em pixel.

CHANGE Lista de expressões que será executada na seleção de um item do ListBox.

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

29

Page 27: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 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.

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

30

Page 28: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 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

Parâmetros:nLin,nCol Posição do objeto ListBox em função da janela em que ele

será definido.oListBox Objeto ListBox que será criado.

nLista Variável numérica que guarda o item selecionado no ListBox.

“Header1”,...,“HeaderX”

Strings identificando os títulos das colunas do Grid.

nLarg,nAlt Dimensões do objeto ListBox.

oObjetoRef Objeto dialog no qual o componente será definido.

PIXEL Se informado, as dimensões serão em pixel.

CHANGE Lista de expressões que será executada na seleção de um item do ListBox.

Métodos:

SetArray()

Método o objeto ListBox que define qual o array contém os dados que serão exibidos no grid.

Atributos:bLine Atributo do objeto ListBox que vincula cada linha,coluna do array, com

cada cabeçalho do grid.

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

31

Page 29: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 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 := LoadBitmap( GetResources(), "LBOK" )

Local oNo := 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

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

32

Page 30: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

4. TELAS DE PADRÃO MICROSIGA

Comando/Função/Objeto Modelo2()Descrição Tela de Manutenção Utilizando uma Tabela (Cabeçalho/Itens).

Argumento Obrigat. Tipo Descrição

cTitulo Sim C Título da Janela

aCab Sim A Array com dados do cabeçalhoEx:{cVariavel,{nLin,nCol},cTitulo_Campo,cPicture,Funcao_valid,F3,lEditavel}

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

aGetdados Sim A Array com posições da getdadosEx:{nLinIni,nColIni,nLinFim,nColFim}

nOpc Nao N Modo de operação (3/4 Inclui ou altera, 6 altera, outros visualiza)Ex: nOpc := 3

cLinOk Não C Função para validar linhaEx: “allwaystrue()”

cTudOk Nao C Função que valida tudoEx: “allwaystrue()”

aCols Sim A Array com os campos que podem ser alteradosEx:{“A1_COD”,”A1_NREDUZ”}

bF4 Não B Bloco de Código Chamado pelo F4Ex: {||MsgAlert(“Teste”)}

cInitPos Não C String com nome dos campos que devem ser inicializados ao teclar seta para baixo.

nMax Não N Número máximo de linhas

aCoord Não A Array com as coordenadas das janelas

lDelGet Não L Determina se a linha da getdados pode ser apagada ou não

lMaximized Não L Maximiza a tela

aButtons Não A Array com botões a serem acrescentados no toolbar

Retorno Tipo.T. / .F. (Verdadeiro ou Falso Confirma Operação) Lógico

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

33

Page 31: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

Comando/Função/Objeto Modelo3()

Descrição Tela de Manutenção Utilizando duas Tabelas (Cabecalho/Itens).

Argumento Obrigat. Tipo Descrição

cTitulo Sim C Título da Janela

cAlias1 Sim C Alias da tabela do Cabeçalho

cAlias2 Sim C Alias da Tabela dos Itens

aEnchoice Sim A Array com os campos da enchoice(Cabecalho)

cLinOk Não C Função de Validação de Itens

cTudOK Não C Função de Validação tudo

nOpc1 Não N Opção de edição da Enchoice

nOpc2 Não N Opção de edição da Getdados

cFieldOk Não C Função de validação dos campos da Getdados

lVirtual Não L Permite visualizar campos virtuais na Enchoice

nLinhas Não N Numero Maximo de Linhas da Getdados

aAltEnchoice

Não A Array com os campos alteráveis da enchoice

nFreeze Não N Qtde de colunas que ficarão congeladas (da esquerda pra direita)

aButtons Não A Array com botões a serem acrescentados ao toolbar

aCoord Não A Array com as coordenadas da tela

aSize Não A Desconhecido

Retorno Tipo.T. / .F. (Verdadeiro ou Falso Confirma Operação) Lógico

5. MSEXECAUTO

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

34

Page 32: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

Objetivo

Fazer manutenção automática (inclusão, alteração e exclusão) das rotinas de manipulação 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 são enviados a rotina em forma de campos e conteúdos (array) e desta forma não é necessário a apresentação de nenhuma interface ao usuário.

2) Segurança : A utilização de rotinas automáticas aumenta consideravelmente a segurança do sistema, uma vez que utiliza as validações padrões e diminui os problemas causados por atualização de versão ou inclusão de customizações nas rotinas padrões do sistema.

3) Agilidade no processo : Aumenta consideravelmente o tempo de desenvolvimento das customizações que necessitam de entrada de dados. Exemplo: Importação de pedido de venda.

Procedimentos

Existem duas maneiras de utilizar a rotina automática, sendo elas:

1. Sem Interface 2. Com Interface

Para a utilização da rotina automática sem interface deve-se, configurar o ambiente utilizando-se o comando PREPARE ENVIRONMENT e chamar diretamente o nome da função.

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

35

Page 33: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 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 logPrivate 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 lMsErroAutoDisarmTransaction()breakEndIfEnd Transaction If lMsErroAuto/*Se estiver em uma aplicar normal e ocorrer alguma inconsistência nos parâmetros passados,mostrar na tela o log informando qual coluna teve a inconsistência.*/Mostraerro() Return .f.EndIfReturn .t.

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

36

Page 34: 1  · Web viewA análise e projeto orientados a objetos têm como meta ... um programa orientado a objetos pode ser descrito como um conjunto de ... Objeto dialog no qual o

CURSO ADVPL IIRECURSOS AVANÇADOS

Versão 3.0 – 05/2008 – Todos direitos reservados”Escola conveniada”

Já para rotinas que possuem interface, devemos usar a MSExecAuto, pois a mesma tem a função de guardar o ambiente , executar a função automática 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 logPrivate lMsErroAuto := .f. //necessario a criacao, pois sera //atualizado quando houver //alguma incosistencia nos parametrosBegin 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 lMsErroAutoDisarmTransaction()breakEndIfEnd Transaction If lMsErroAuto /* Se estiver em uma aplição normal e ocorrer alguma inconsistência nos parâmetros passados,mostrar na tela o log informando qual coluna teve a inconsistência.*/ Mostraerro() Return .f.EndIfReturn .t.

A v . L e o n a r d o d a V i n c i , n º 6 0 8 – M e t r ô C o n c e i ç ã o - S ã o P a u l o - S P T e l : 1 1 5 0 1 1 – 4 8 9 5 / 5 0 1 1 – 6 0 8 2 / 9 8 0 8 – 1 9 8 8

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

37