power builder
TRANSCRIPT
Programação Sybase PowerBuilder
Marcelo Michels Autor
WorkSpace
WorkSpace é a base para a criação de aplicações. Cada WorkSpace pode
conter um ou mais projetos. Usando a WorkSpace é possível cria uma controlador de
versões. Sem a WorkSpace é impossível desenvolver uma aplicação.
New – WorkSpace – WorkSpace
Target
Os projetos são as Target‟s no PowerBuilder, lembrando que podemos ter
várias target‟s dentro de uma mesma WorkSpace.
New – Target – Aplication
PBT – PowerBuilder Target
A pbt é um arquivo que armazena as informações sobre sua aplicação, como
nome, lista de suas bibliotecas e deploy.
PBL – PowerBuilder Library
Dentro das Target‟s temos as PBL‟s que são utilizadas para separar os objetos
criados dentro da Target.
New – Library – Library
Window
A Window é bem subdividida e notamos na parte inferior algumas abas que fazem esta divisão, as principais são: A aba Event List exibe todos os eventos do objeto que está selecionado.
A aba Function List mostra as Funções e Métodos.
A aba Declare Instance Variables é onde podemos declarar as variáveis do tipo Global
e do tipo Instância.
New – PB Object – Window
Instância, Global e Local São os níveis de declaração das variáveis no sistema. Para entendermos
melhor.
Instância: são as variáveis que ficarão visíveis a todo o objeto e ficarão disponíveis quando o objeto estiver sendo utilizado. Global: pertencem à aplicação. Local: são as variáveis declaradas dentro de métodos ou funções e são destruídas após o término da execução do método ou função.
Variáveis São alocações de memória responsáveis por armazenar algum tipo de
informação. Existem vários tipos de variáveis no PowerBuilder. São eles: Integer, Double, Long, LongLong, Char, String, Date, Time, DateTime, Boolean DataWindow, DataStore e etc...
Padrões de nomenclatura usados no PowerBuilder
Nomes de variáveis devem dizer exatamente para que elas são usadas. Um importante ponto que surge neste instante é que devemos, ao olhar para o nome da
variável, saber sua abrangência e seu tipo de dados. As algumas das convenções de nomenclatura de variáveis são as seguintes:
Abrangência
Local l
De instância i
Global g
Recebida por parâmetro (funções)
a (argument)
Tipo
Integer i
Long l
Double d
Decimal dec
String s
Boolean b
Como usar os padrões: Variável local do tipo string, para armazenar o nome de uma pessoa: ls_nome Variável global do tipo integer para armazenar o número de usuários conectados ao sistema: gi_usuarios_conect Variável long de instância para armazenar um contador il_ctd
Sintaxes
Operadores Os operadores relacionais são: =; <>; >; <; >=; <=. Os operadores aritméticos são: +, -, *, /. Os operadores lógicos são: AND (e); OR (ou); NOT (não); e combinações entre eles.
Mensagens Para exibir mensagens em texto usando a caixa de mensagens padrão do
Windows, utilizamos o comando MessageBox(). Sintaxe: MessageBox(<Título>, <Sua mensagem>, <ícone>*, <botão>*, <botão default>*) * Opcionais Icon: Information! (Default) StopSign! Exclamation! Question! None! Button: OK! - (Default) Botão OK OKCancel! - Botões OK e Cancelar YesNo! - Botões Sim e Não YesNoCancel! - Botões Sim, Não, e Cancelar
RetryCancel! - Botões Repetir e Cancelar AbortRetryIgnore! - Botões Abortar, Repetir, e Ignorar Exemplo: MessageBox('Atenção', 'Programando!')
Comentários Há duas formas de se inserir comentários no script do PowerBuilder, são elas: Comentário em linha: // Comentário ou comentário em bloco: /* Comentário Comentário linha 2 Comentário linha 3 */
IF O IF é o comando fundamental para desenvolver um sistema
Sintaxe: IF <Condição> THEN <Valor verdadeiro> END IF Sintaxe: IF <Condição> THEN <Valor verdadeiro> ELSE <Valor falso> END IF Sintaxe: IF <Condição> THEN <Valor verdadeiro> Sintaxe: IF <Condição> THEN <Valor verdadeiro> ELSEIF <Condição> THEN <Valor verdadeiro> ELSE <Valor não satisfeito em nenhuma condição> END IF Exemplo: IF DataWindow.Update() > 0 THEN
MessageBox('Curso', 'Dados salvos', INFORMATION!, OK!, 1) ELSE
MessageBox('Curso', 'Problemas ao salvar!', STOPSIGN!, OK!, 1) END IF
Choose Case Como foi visto, o comando if serve para situações que exigem condições
(verdadeiro ou falso). Mas para determinadas situações, onde devemos analisar mais de duas condições, existe o comando choose case.
Sintaxe: Choose Case Valor Case 1 Faça Case 2 Faça Case 3, 4 Faça Case 5 TO 9, Faça Case Else Faça End Choose Exemplos: Uma variável chamada Time que tem um valor atribuído a ela. Fazer um teste, verificando qual é o nome do time, e em seguida, dizer qual é a cor da camisa. String Time, CorCamisa Time = „Santos‟ Choose case Time Case “Flamengo” CorCamisa = “vermelha” Case “Grêmio” CorCamisa = “azul” Case “Internacional” CorCamisa = “vermelha” Case “São Paulo” CorCamisa = “branca e vermelha” Case “Santos” CorCamisa = “preta e branca” Case “Palmeiras” CorCamisa = “verde” End choose MessageBox(„Cor da camisa‟, Cor_camisa)
Estruturas de repetição – Laços
For ... To ... Next Executa um conjunto de instruções um número definido ou indefinido de vezes Sintaxe: For <Variável> = <Valor inicial> To <Valor final> Step <Incremento> ... Código Next
Exemplos: Integer i For i = 1 to 4 MessageBox(„Testando‟, „Contador: „ + string(i)) Next Exemplos: Integer i For i = 4 to 1 Step –1 MessageBox(„Repetição regressiva‟, „Contador = „ + String(i)) Next Repare que uma variável deve ser declarada para receber o contador.
Do While ... Loop Executar um conjunto de instruções enquanto um determinado estado de
coisas prevalecer. Sintaxe: Do While <Expressão Booleana> Faça Loop Exemplos: Integer i i = 1 Do While i <= 4 i = i + 1 MessageBox(„Testando‟, String(i)) Loop
Exercícios Crie uma WorkSpace com o nome “MeuPrograma”, em: “C:\Aula\”. No mesmo
caminho crie uma Target com o nome “Curso”.
Crie uma window com o nome “w_comandos” e salve dentro da PBL “Curso”.
Na Aplicação chamada Curso coloque no evento Open() o código que fará a chamada para a
primeira window que será executada no nosso sistema, no caso a w_comandos.
Abra a w_ comandos e insira:
Duas SingleLineEdit: sle_Inicio; sle_Fim
Quatro CommandButton: cb_If; cb_choose; cb_Do; cb_For.
Criar quatros métodos: of_if; of_choose; of_do; of_for.
Cada botão deve chamar o seu respectivo método.
Dentro de cada método deve ser testado se o valor dos campos sle_inicio e sle_Fim
são número com o comando:
IsNumber(<string para condição>) Caso não atenda a condição anterior deve mostrar uma mensagem e sair do método.
Dentro do método of_If deve ser testado se sle_Inicio é maior do que sle_Fim e
informado em uma MessageBox.
No método of_Choose deve ser testado se sle_Inicio tem os seguintes valores(1, 5, de
6 a 8, maior do que 8 ou se não se encaixa em nenhuma destas condições) e informar
em uma MensageBox.
No método of_Do fazer um contador a partir com valor inicial de 1(um), o sistema deve
mostrar uma mensagem para informar que o valor do contador não é maior do que o
valor do sle_Final enquanto isto for verdade.
No método of_For deve mostrar mensagens com cada um dos números entre
sle_Inicio até sle_Fim.
Funções Internas da IDE Função Open
Abre um objeto de tela, o open exibe a janela e faz todas as suas propriedades
e controles disponiveis para scripts.
Exemplo:
Open(w_ExibeMensagem)
Função Close
Fecha uma Janela e libeba o espaço ocupado por uma janela e todos os
controles na janela.
Exemplo:
Close(w_ExibeMensagem)
Função OpenWithParm
A mesma funcionalidade da funçao Open, mas com um diferencial de
passagem de parâmetro para a janela. Estes parâmetros podem ser strings, numeros
e objetos.
Exemplo:
OpenWithParm (w_ExibeMensagem,”Gravação efetuada com sucesso!”)
Função CloseWithReturn
Fecha a janela e armazena em um valor de retorno no objeto de mensagem.
CloseWithReturn deve ser usado apenas em Windows response.
Exemplo:
CloseWithReturn(Parent,”Close OK!”)
Função Trim
Remove espaços de sobra antes e depois de qualquer string.
Exemplo:
ls_Trim = Trim(“ PowerBuilder ”)
A variável ls_Trim após sua execução resulta em “PowerBuilder”.
Função LeftTrim
Remove os espeços a partir do inicio de uma string.
Exemplo:
ls_LeftTrim = LeftTrim(“ PowerBuilder “)
A variável ls_LeftTrim após sua execução resulta em “PowerBuilder ”.
Função RightTrim
Remove os espeços a partir do inicio de uma string.
Exemplo:
ls_RightTrim = RightTrim(“ PowerBuilder “)
A variável ls_LeftTrim após sua execução resulta em “ PowerBuilder”.
Função Left
Obtém um numero especifico de caracteres a partir do inicio de uma string até
o numero informado no segundo parâmetro.
Exemplo:
ls_Left = Left (“PowerBuilder“,5)
A variável ls_Left após sua execução resulta em “Power”.
Função Right
Obtém um numero especifico de caracteres a partir do fim de uma string até o
numero informado no segundo parâmetro.
Exemplo:
ls_Right = Right(“PowerBuilder“,7)
A variável ls_ Right após sua execução resulta em “Builder”.
Função Pos
Procurara do inicio de um caractere ou exprexão dentro de um literal.
Exemplo:
ll_Pos = Pos(“PowerBuilder”,”er”)
A variável ll_ Right após sua execução resulta em 4.
Função Len
Retorna o tamanho da String ou Blob.
Exemplo:
ll_Len = Len(“PowerBuilder”)
A variável ll_ Len após sua execução resulta em 12.
Função Mid
Obtém um numero especificado de caracteres a partir de uma determinada
posição em uma string.
Exemplo:
ls_Mid = Mid(“PowerBuilder”,3,5)
A variável ls_Mid após sua execução resulta em “werbu”.
Função Upper
Converte todos os caracteres em uma string para maiúsculas.
Exemplo:
ls_Upper = Upper(“PowerBuilder”)
A variável ls_Upper após sua execução resulta em “POWERBUILDER”.
Função Lower
Converte todos os caracteres em uma string para minúsculas.
Exemplo:
ls_Lower = Lower(“POWERBUILDER”)
A variável ls_Lower após sua execução resulta em “powerbuilder”.
Função Reverse
Inverte a string informada.
Exemplo:
ls_Reverse = Reverse(“powerbuilder”)
A variável ls_Reverse após sua execução resulta em “redliubrewop”.
Função Replace
Altera parte de uma string, substitui um caractere por outro determinado.
Exemplo:
ls_Replace = Replace(“powerbuilder”, 1, 3, “SYBASE”)
A variável ls_Reverse após sua execução resulta em “SYBASEerbuilder”.
Função Round
Arredonda um número para o número especificado de casas decimais.
Exemplo:
lde_Round = Round(9.626, 2)
A variável lde_Round após sua execução resulta em 9.63.
Função Truncate
Trunca um número para o número especificado de casas decimais.
Exemplo:
lde_Truncate = Truncate(9.626, 2)
A variável lde_Round após sua execução resulta em 9.62.
Função UpperBound
Obtém o limite superior de uma dimensão de um array.
Exemplo:
Integer li_A[ ], li_UpperBound
li_A[1] = 1
li_A[2] = 5
li_A[3] = 10
li_UpperBound = UpperBound(li_A)
A variável li_UpperBound após sua execução resulta em 3.
Função Today
Obtém a data atual.
Exemplo:
Date ld_Atual
ld_Atual = Today( )
Função Now
Obtém a hora atual.
Exemplo:
Time lt_Atual
lt_Atual = Now( )
Função ABS
Obtém o valor absoluto de um número.
Exemplo:
Iteger li_Abs
li_Abs = Abs(-4)
A variável li_Abs após sua execução resulta em 4.
Função Sleep
Pausa a aplicação por um tempo em segundos, determinado no parâmetro da
função.
Exemplo:
Sleep(10)
Função Yield
Liberta o uso do processador dedicado a aplicação para ser usado em damais
recursos.
Exemplo:
Yield( )
Função DaysAfter
Obtém o número de dias entre as datas informadas.
Exemplo:
ll_Dias = DaysAfter(20/08/2011, 25/08/2011)
A variável ll_Dias após sua execução resulta em 5.
Função Fill
Cria uma sequência de caracteres especificada repetindo-os de acordo com o
parâmetro informado.
Exemplo:
ls_Fill = Fill(“-”,5)
A variável ls_Fill após sua execução resulta em “-----”.
Função IsNumber
Retorna se o valor string é um numero.
Exemplo:
If IsNumber(“12635475”) Then
MessageBox(“Tipo”,”É numero”)
Else
MessageBox(“Tipo”,”Não é numero”)
End If
Função IsDate
Retorna se o valor string é uma data.
Exemplo:
If Not IsDate (“12635475”) Then
MessageBox(“Tipo”,” Não é data”)
Else
MessageBox(“Tipo”,”É data”)
End If
Função RetativeDate
Obtém uma data de diferença entre número de dias informado antes ou depois
de outra data.
Exemplo:
ld_Relative = RelativeDate(21/08/2011, 2)
A variável ld_Relative após sua execução resulta em 23/08/2011.
Função RetativeTime
Obtém uma hora de diferença entre número de segundos informado antes ou
depois de outra hora.
Exemplo:
lt_Relative = RelativeTime(21/08/2011, 2)
A variável lt_Relative após sua execução resulta em 23/08/2011.
Função Restart
Interrompe a execução de todos os scripts, fecha todas as janelas, desconecta
do banco de dados e reinicia a aplicação.
Exemplo:
Restart( )
Create
Cria uma instância/objeto da classe para um tipo de objeto especificado ou
nome.
Exemplo:
Syntax 1
n_Conexao lnv_Conexao
lnv_Conexao = Create n_Conexao
Syntax 2
String ls_Classe
n_Conexao lnv_Conexao
ls_Classe = “n_Conexao”
lnv_Conexao = Create Using ls_Class
Destroy
Elimina uma instância do objeto que foi criado com a instrução CREATE.
Depois de uma declaração DESTROY, as propriedades da instância do objeto
excluído não pode ser mais referenciado.
TabOrder
TabOrder especifica a ordem na qual o controle receberá o foco. O TabOrder
só é aplicado em componentes visíveis.
Exemplo:
Objeto.TabOrder = 10
Também há possibilidade de definir o taborder em momento de construção do
aplicativo.
This
O pronome This refere-se a classe/objeto do aplicativo ou controle que possui o
script atual.
Exemplo:
This.Text = “OK”
Parent
O pronome Parent refere-se ao objeto que contem o objeto atual. Por exemplo,
uma janela é o objeto pai dos controles que ela possui. Resumindo-se é o objeto
principal onde o componente esta contido.
Exemplo:
Close(Parent)
Exercícios Construa uma nova window chamada w_principal. Quando a aplicação abrir, deve chamar a w_principal. No subitem Sair deve conter o código para fechar a aplicação. O subitem comandos fazer a chamada da tela w_comando Criar uma window chamada w_exercicio Modelar a w_exercicio contendo os seguintes controles:
Controles SingleLineEdit sle_nome sle_sobrenome sle_idade sle_filhos sle_rua sle_bairro DropDownListBox ddlb_estado RadioButton rb_masculino rb_feminino GroupBox gb_Dadosprincipais gb_sexo gb_endereco CommandButton cb_incluirfilhos cb_exibirfilhos cb_limpar cb_verificardados cb_mostrardados cb_sair
Propriedades Preencher a propriedade Items da ddlb_estado com os estados da região. Todos os campos devem iniciar limpos.
Função de cada botão da Window cb_limpar - Limpar todos os controles da window
Como fazer:
Para todos os controles que tiverem texto (propriedade Text), atribuir o valor „‟.
cb_verificardados – Analisar a validade dos dados digitados (emitir um MessageBox se todos estiverem ok, mas se algum estiver com problema, emitir um MessageBox e posicionar o foco em cima): Todos os campos devem ser preenchidos (obrigatórios). Como fazer: Fazer vários testes condicionais, testando cada conteúdo de campo texto. A idade do cliente deve ser maior que 15 e menor que 100 anos. O número de filhos não pode passar de 20 e não pode ser menor que 0. Ao validar os campos, todos os textos (conteúdos) devem ser convertidos para maiúsculo. Como fazer: Usar função que converte texto para caixa alta.
cb_incluirfilhos – Criar e chamar uma nova window a w_filho, chama a window tantas vezes quanto definido no número de filhos.
Criar uma variável de instância na w_exercicio_01[] ela irá armazenar cada filho em um elemento Criar estrutura de repetição para guardar cada filho – a janela w_filho deve ser chamada uma vez para cada filho cb_exibirfilhos – Mostrar um MessageBox com todos filhos do cliente. Como fazer:
Criar uma função (of_textofilhos) que retorne uma string contendo todos os filhos do cliente, separados por um caractere „~r‟ que serve para quebrar a linha. Exibir o resultado desta função em um MessageBox. Exemplo: Lista de filhos ----------------------------- Claudio Rafael Cristiane Roberta ----------------------------- cb_mostrardados – Mostrar um MessageBox com todos os dados do cliente, incluindo todos os filhos. Como fazer: Criar uma função (of_textodados) que retorne uma string contendo todos os dados do cliente (passar por todos os controles). Aproveitar a função of_textofilhos. Exemplo de texto a mostrar: Nome: João Batista Idade: 36 Anos Sexo: Masculino Filhos: 3 Lista de filhos ----------------------------- Claudio Rafael Cristiane Roberta ----------------------------- Endereço:
Rua: 7 de Setembro, 325 Bairro: Centro Estado: Paraná
cb_sair – Sair do programa – Pedir ao usuário se ele deseja realmente sair do programa (MessageBox).
Integração com banco de dados
Conexão
Para conectar-se a banco de dados o PowerBuilder Disponibiliza varias formas,
as mais usadas são:
Conexão pelo driver nativo.
Conexão pelo driver ODBC (Open Data Base Connectivity)
Objeto Transaction
Objeto responsável por criar uma transação entre sua aplicação e o banco de
dados, permitindo a leitura e a escrita no banco de dados. O PowerBuilder possui um
objeto padrao de transação SQLCA.
Tratamento de erro
SQLCode
Código referente ao cucesso ou erro referente a sua operação ao banco de
dados.
SQLDBCode
Código retornado do banco de dados.
SQLErrText
Mensagem de erro retornada pelo banco de dados.
SQLNRows
Numero de linhas afetadas no seu banco de dados referente a operação
executada.
Comandos SQL
Insert
Inserir registros no banco de dados.
Exemplo:
Insert Into cliente ( codigo, nome) Values ( 1, „Marcelo‟)
Update
Atualizar Registros no banco de dados que correspondem as especificações do
Where.
Exemplo:
Update Cliente Set nome = “Marcelo Michels” Where codigo = 1;
Delete
Apagar Registros do banco de dados, este comando também pode ser usado a
especificação Where.
Exemplo:
Delete From Cliente Where codigo = 1;
Select
Lê as Informações já gravadas em banco de dados.
Exemplo:
Select * From cliente Where codigo = 1;
Select codigo, nome From Cliente Where codigo = 1;
Commit & RollBack
Sempre que um comando DML (Data Manipulation Language) é executado no
banco de dados, é necessário executar o comando Commit ou RollBack.
Estes comandos são responsáveis por confirmar ou desfazer a operação.
o Commit – Responsável por confirmar a operação.
o RollBack – Responsável por desfazer a operação.
Uma Vez executado um dos comandos acima mencionados não é possível
executar outro na mesma operação.