
segunda-feira, 25 de maio de 2009
Integração com o Twitter

domingo, 16 de novembro de 2008
uniPaaS 1.5
uniPaaS 1.5
Liberada a nova versão da ferramenta de desenvolvimento uniPaas versão 1.5 prometendo uma nova era para o desenvolvimento de sistemas. Como o nome já disse a intenção é num único ambiente de desenvolvimento trazer o que a de melhor para o mundo do desktop e web.
Para o ambiente desktop foram anunciados varias melhorias para acelerar o desenvolvimento de novos e sofisticados aplicativos. Imagens animadas e com transparência, tooltip para funções no Editor de Expressões, hiperlink com possibilidade de troca de cores entre outras mais, são velhas reivindicações atendidas para esta versão.
Já para o mundo web a troca de componentes Java para .Net promete dar mais estabilidade. A grande sacada da versão é o desenvolvimento RIA em inglês Rich Internet Application, traduzindo seria algo como Aplicações ricas para web, neste leia-se JavaScript e Ajax, é a ferramenta RAD entrando para o universo web 2.0.
Com a versão, você recebe duas demos dos aplicativos:
Magic Optmizer - ferramenta que analisa seu código e passa importantes informações sobre a estrutura do seu ambiente.
RM Comverter - ferramenta para retirar o RM Compatible que ocorre na conversão do versão 9 para 10. Permitindo a você iniciar o mais breve possível no mundo RIA.
Novos certificados
- MSSQL 2008
- Oracle 11g
- Windows 2008 Server
Novas recursos, mudança de comportamento
Editor de expressões (Expression Editor)
- A descrição da sintaxe da expressão foi acrescentada a lista de funções, tornando mais fácil para o desenvolver conhecer as funções
- Um dinâmico tooltip exibindo a sintaxe da função foi adicionado. O Tooltip é aberto automaticamente mas você pode invocar novamente pressionando Ctrl+space
Lista de variáveis coloridas
As variáveis agora mudam de cor conforme o seu tipo (Virtual, Parameter ou Column)
Push Bottom
O Push Bottom control recebeu novas funcionalidades, agora é possível enviar parâmetros quando o botão é disparado através de um Raise Event.
Quando utilizado como um hiperlink, agora é possível alinhar horizontalmente (Esquerda, Direta, Centro)
Adiciona a propriedade de Cor para o Hiperlink, com isso não teremos mais apenas hiperlinks com a cor cinza.
Tab
Uma nova propriedade chamada "Visible Layer List" promete definir as Guias que serão listadas no Runtime e também você poderá mostrar, esconder ou reordenar todas as guias com muito mais facilidade.
Imagens
Esta versão passa a suportar imagens transparente e animadas.
Modify in Query
O controle Modify in Query mode foi extendido para Edit e Check Box.
Evento Control Modify
Um novo evento chamando "Control Modify" foi adicionado. Este evento será disparado toda vez que um controle for modificado. Isto lhe ajudará a escrever uma lógica para ser executada após um valor ser alterado, inclusive caracter a caracter, sem que o usuário saia do controle. Para pegar o valor que o usuário está digitado você pode usar a função Editget().
Verify Operation
O Verify Operation recebeu as seguintes novidades:
Possibilidade de informar o título
Selecionar uma imagem para ser mostrada na janela de mensagem
Selecionar os tipos de botões que serão listados
Definir o tipo de mensagem que irá aparecer no log de mensagem
Chamadas entre programas
Um recurso bem interessante que foi incluído na versão é a capacidade de pular para um programa definido na operação Call Program. Para abrir o programa, basta pressionar Ctrl+F5 em cima da linha da operação. O eDev10 irá automaticamente abrir o programa, para retornar ao programa original basta pressionar Ctrl+Shift+F5.
Este recurso também pode ser acessado via Menu de Opções.
Open Aplication com parâmetro
Uma novo parâmetro opcional foi incluído no evento Open Aplication. Este parâmetro permite ao desenvolvedor trocar de aplicações sem a necessidade de uma intervenção do usuário.
Melhorias na função DBName()
Função CabinetUnload()
Mensagem de aviso para Programas grandes
sexta-feira, 19 de setembro de 2008
Como atualizar subform usando Event
Tenho a seguinte estrutura no programa, a task principal abre a tabela Ordem de Serviço no Main Table. Nesta task tenho um form onde tenho alguns campos da O.S. e também um subform para os itens da O.S.
Na task filha, temos a abertura da tabela Itens da OS, no form desta task alguns campos do Item e também um subform para as atividades do Item da OS.
Na task Atividade da OS, também temos alguns campos no form e um botão chamado Atualizar Item. Quando clicar neste botão, vou atualizar todos os Itens da OS, neste caso, já vou querer ver as alterações nos registros.

Para resolver este problema, vamos criar um Evento (CTRL+U) na task inicial (O.S.) chamado AtualizarSubForm, adicionando um parâmetro neste evento que iremos chamar de p_nomeForm

Vamos implementar o evento na task e dentro do evento vamos adicionar um Raise Event SubForm Refresh, passando como parâmetro a variável p_nomeForm.

Para finalizar vamos alterar a propriedade do Event para Propagate=Yes
Agora quando estivermos posicionados nas atividades da O.S. conseguiremos disparar o evento da task inicial, passando como parâmetro o nome do subForm que desejamos atualizar, no meu caso ‘FormItem´.

Agora basta implementar em seus programas.
Boa sorte.
Maurício Ouriques
terça-feira, 6 de novembro de 2007
Refresh - Como atualizar os registros da tela
Screen Refresh e View Refresh.
Record Flush
O evento interno Record Flush causa a gravação do registro sem sair do
mesmo. Após a execução o ciclo do registro corrente é completado.
Screen Refresh
O evento interno Screen Refresh permite ao desenvolvedor atualizar os
dados da tela. Primeiro, o ciclo do registro em que se está
posicionado é completado (como ocorre no evento Record Flush), Depois
a operação Get Current é realizada para cada registro da tela. Você
deve usar este evento quando desejar atualizar os registros que estão
sendo mostrado na tela. O registro atual não será alterado (exceto
quando outro usuário alterar o registr).
View Refresh
O evento View Refresh permite ao desenvolvedor atualizar os dados da
tela. Primeiro , o ciclo do registro atual é completado (como ocorre
no evento Record Flush). Depois, o dataview é criado baseando-se na
definição do dataview (Range, Locate e Sort). Você deve usar este
evento quando desejar atualizar completamente o dataview. O eDeveloper
irá tentar manter o cursor no mesmo registro posicionado.
Quando usar este evento, se o evento Get Current (posicionar no
registro) falhar, a mensagem "Record is not longer in view" será
mostrada e irá posicionar no próximo registro (baseado na definição do
dataview). A operação Ger Current pode falhar porque outro usuário
pode excluir o registro ou modificá-lo.
sexta-feira, 24 de agosto de 2007
Configurando eDev10 para usar Web Services
When typing "%WASP_HOME%" in "Start->Run" you should navigate to the SSJ directory that was created by eDeveloper 10 installation.
When typing "%JAVA_HOME%" you should navigate to the installed Java directory along side SSJ (if you didn't have Java when installing eDeveloepr) or to another location if Java was installed before eDeveloper, in this case you must make sure you have JDK version 1.5.
2. In the %WASP_HOME%\lib directory you should find many JAR files (among them edevSSJ.jar and edevRequester.jar).
3. After you create the service entry and load it (at the moment you can't reach this) you should have a new JAR file under "Magic directory/SoapClientModules/Service name".
You can identify the JAVA version by opening the "ReadMe.html" file located under your %JAVA_HOME%.
sexta-feira, 17 de agosto de 2007
Magic - Rich Client
Este novo conceito de programação é totalmente voltado para ambiente Web, uma das grandes vantagens é a utilização de computadores com baixa configuração. Mesmo sendo um produto web, será possível utilizar todos os recursos de interface GUI disponíveis atualmente, permitindo uma interação completa com o usuário. Outra vantagem que eles estão anunciando é a execução da ferramenta em vários sistemas operacionais, inclusive em dispositivos móveis.
Falando mais tecnicamente, este novo recurso utiliza uma aplicação JAVA que irá rodar no lado do client, eles prometem uma performance surpreendente. A vantagem será que o usuário não precisa utilizar um navegador web (no browser), a ferramenta utiliza seu próprio mecanismo de navegação.
Falando um pouco mais sobre os recursos de interface, estarão disponíveis os controles tree view, tab control, combo Box, list Box, etc. Teremos integração com menus. Houve uma melhoria considerável no table control para web, permitindo sort, multi marking, resizing columns.
OS recursos não param por ai, o aplicativo poderá executar comandos no S.O. do usuário, também será permitido a integração com ActiveX, manipulação de arquivos e no ambiente do sistema operacional.
Para finalizar, este ambiente rodará em Windows, Linux ou ainda Mac OS, podendo ser utilizado em celulares com Windows Mobile ou CE.
Agora é esperar para ver.
Maurício Ouriques
segunda-feira, 13 de agosto de 2007
eDeveloper 10 SP3
Liberado novo release do eDev 10 SP3
Version Control
Permite trabalhar com aplicativo de controle de versão chamado PushOK
http://www.pushok.com/soft_cvs_proxy.php
http://www.pushok.com/soft_cvs_vsvss.php
Browse Client
Melhorias nos scripts eDevScripts (Browse Client)
Migração
Agora permite migrar parte de uma aplicação v9, como range de programas.
Suporte PDF
O eDev10 agora suporta imprimir diretamente para um arquivo PDF, eliminando a necessidade de configurar uma impressora PDF
Possibilita implementar política de segurança em vários níveis com proteção por senha para impressão, cópia ou anotação.
Arquivo de Segurança
Um novo utilitário chamado MgUsrDmp.exe é instalado na pasta eDeveloper.
Este utilitário permite exportar o arquivo de segurança para um arquivo XML, tornando fácil o acesso e pesquisa as informações do usuário.
Para rodar este utilitário você precisa informar a senha do usuário SUPERVISOR.
Utilitário para extração de String
Um novo utilitário foi desenvolvido para permitir a você extrair frases do seu projeto do arquivo XML.
Este utilitário irá ajudá-lo quando você precisar traduzir o sistema para multi-linguagens.
Este utilitário pode ser executado por ambas as FERRAMENTA (Tools) de menus como um componente.
Gerenciamento de Janelas
A função SetWindowsFocus() foi melhorada para permitir setar o foco em outras janelas que não pertencem ao eDeveloper.
Retorno de valor de Store Procedure para MSSQL
Agora a ferramenta suporta receber o valor de uma SP do MSSQL
Isso pode ser feito escrevendo "? =" no enunciado DSQL ("EXEC ? = proc_name") e receber o retorno na variável virtual do return code do SQL Command.
Utilizando Cursor para MSSQL em Store Procedure
O eDeveloper agora suporta usar cursor para enunciados DSQL que retornam um result set.
Isso pode ser feito adicionando "/*=== CURSOR=Y ===*/" no DSQL.
Suporte a SP no DB2
Agora com suporte as Store Procedures do banco DB2.
sexta-feira, 29 de junho de 2007
Tratamento diferenciado para Verify Error em telas com guias.
Programação: Criar um Block Combine Forward, com a condição que indica o Verify Error, dentro deste bloco deve existir um Update na virtual que controla a guia em Combine Backward e o próprio Verify Error em Combine Forward. Quando ocorrer o erro, o processo do Magic será entrar no Block, passar pelo Update e executar o Verify Error que causa um retorno em Backward para o último campo que pode receber foco, neste retorno que é feito o Update que permite o Magic se posicionar na guia e no campo de onde não se pode passar sem antes resolver o erro apresentado.

terça-feira, 19 de junho de 2007
Instalando o eDeveloper no Win2003SP2
Segundo a nave mae, Magic Enterprise, existe um bug no InstallShield, ocasionando um erro ao tentar iniciar a instalação do eDev.
Para contornar este pequeno problema, existem duas soluções.
1a. Baixar a última versão do InstallShield no endereço http://support.installshield.com/kb/files/Q108322/InstallShieldEngineUpdate701.exe
2a. Descompactar o pacote numa pasta e a partir da pasta executar o setup.exe
Para descompatar utilize o comando
EXE_name /extract_all:FOLDERNAME
EX.
eDev101sp2.exe /extrac_all:C:\temp\sp2install
Com isso será criada uma pasta dentro de c:\temp chamada sp2instal, ai é só executar o setup.exe.
T+
domingo, 13 de maio de 2007
Integrações com Google - Geocoding
Para iniciar, precisamos de um xsd do kml para integrarmos com o serviço do Google. Com o xsd na mão é necesário adicioná-lo ao nosso projeto. Para isso crie um nova linha no repositório de dados, selecione o database de XML e então pressione
Agora vamos criar o programa que irá buscar na web o CEP de um endereço informado. Para isso crie um novo programa no repositório de programas chamado Geocoding.
Crie uma variável do tipo Blob e altere a propriedade Details.Content para Ansi.
Na guia Logic crie uma linha para o Task Prefix, dentro deste handler adicione o comando Update na variável CEP com a seguinte informação: HttpGet('http://maps.google.com/maps/geo?q=Rua+Saldanha+Marinho+336,+Novo+Hamburgo,+Brazil
&output=xml&key=abcde')
Sendo que
http://maps.google.com/maps/geo? é o site onde irá retornar a informar do CEP
Rua+Saldanha+Marinho+336,+Novo+Hamburgo,+Brazil é o endereço pesquisado, aqui um pequeno deslize do nosso amigo Google, Brasil precisa ser informado com Z :(
key=abcde que é a sua chave de ativação ao serviço, para conseguir esta chave entre neste endereço. Aqui uma dica, o serviço só irá funcionar se você informar uma chave correta.
Com o procedimento acima, acabamos de buscar o CEP do endereço informado, agora basta usufruir desta informação. Vamos criar uma subtask para isso.
No Main Source da task filha vamos informar nosso XML PostalCode , na propriedade deste data source vamos informar em Data.XML Source variable a variável criada na task pai (PostalCode_CEP) e vamos adicionar o segmento (Column) PostalCodeNumber.
Pronto agora basta colocar na tela a informação
Caso queria dar uma espiada no projeto baixe ele aqui.
Este é apenas um pequeno exemplo de como podemos integrar o eDeveloper com serviçõs na web, este mesmo serviço fornece também as coordenadas geogáficas do endereço, basta apenas explorá-lo.
Enjoy :)
domingo, 29 de abril de 2007
eDeveloper - Componentes
Para quem está usando o eDeveloper 10 tem se confrontado com um grande problema que é a re-chamada entre componetes, ou seja, se tenho um componente A que chama o componente B este não pode chamar o componente A.
Para resolver este "pequeno" impasse seguem algumas dicas de uma solução:
Deve ser criado um Evento Global para que o componente chamado possa devolver um valor, vamos ao passos:
. No projeto A (principal) dentro do Main Program, deve ser criado um Evento Público teclando (CTRL+U) Janela Events (fig1). Conforme a figura, informe um nome para este Evento, crie um parâmetro para receber um valor e adicione o nome publico no nosso exemplo "ChamarPrograma".
. Ainda no Main Program agora devemos criar na Guia Logic o gatilho deste Evento, (CTRL+H) para criar o Event. Na coluna nome pressione F5 para informar o Evento, Type User Event ChamarPrograma. Será solicitado para criar a variável nesta parte do programa. Este recurso é interessante porque a variável estará disponível apenas quando o evento for chamado.
Com isso estamos preparados para receber a informação do componente que estamos chamando.
No projeto B (componente chamado) deve ser criada uma chamada para o Evento Público (fig3) gerado no projeto A.
Dentro de um programa na Guia logic crie um evento conforme a necessidade. dentro deste evento crie uma linha com a operação Raise Event apontando para o Public Event informando o nome deste evento, no nosso caso 'ChamarPrograma'. Na coluna Arguments informe os parâmetros que serão passados para o projeto A.
Com isso estaremos devolvendo ou chamando algum componente do projeto que iniciou a chamada.
Espero que com isso alguns probleminhas sejam resolvidos ;)
quinta-feira, 26 de abril de 2007
Gerenciamento de Dados - E que tal o ambiente multi-usuário?
O que acontece? Neste caso, o cenário não é tão simples como possa parecer:
| Fred | Wilma |
| Lê o total da conta poupança | |
| Subtrai $50 da conta poupança | |
| Lê o total da conta corrente | |
| Soma $50 ao total da conta corrente | Lê o total da conta corrente |
Ao mesmo tempo
Neste caso, ela provavelmente verá que o dinheiro ainda não foi transferido. Ela então verificará o saldo da conta poupança e o que ela verá? Está vazia (lembre que nós mencionamos que Fred está sacando os últimos $50).
O resultado agora será uma conversa zangada entre o feliz casal.
No mundo das transações, este cenário seria ligeiramente diferente. Quando o processo é executado como uma unidade lógica única, um subproduto útil disto é que quaisquer dados atualizados são bloqueados até que a transação tenha sido concluída.
Neste caso, Wilma ainda provavelmente veria que o dinheiro não teria sido transferido, e quando ela verificasse o saldo da conta poupança, ela veria que o dinheiro ainda está na conta. O telefone tocando para Fred teria um tom diferente.
Deve ser observado que os bloqueios são acumulativos dentro da transação. Por exemplo, depois de atualizar um certo registro (o qual é bloqueado como um resultado), o usuário atualiza um segundo registro. Ambos os registros são parte da transação e serão bloqueados até a transação ser ou aplicada (committed) ou cancelada (rolled back).
Supondo que Wilma decide que ao invés de ligar para Fred, ela vai transferir o dinheiro ela mesma. Mas pelo tempo que isso leva para acontecer, a transação com o Fred tenha sido completada (committed). Agora, neste caso, quando ela tentar verificar o saldo atual da conta poupança, o total já terá sido atualizado. Ela pode agora alegremente sacar o dinheiro da conta corrente.
O que de fato acontece neste caso em particular realmente depende do DBMS usado, mas o propósito aqui é dar uma simples visão das transações.
Fonte: "Data Management.pdf", arquivo acompanha a instalação do eDeveloper 10, em inglês.
Gerenciamento de Dados - Porque nós precisamos de transações?
Pode haver problemas se você não usar transações para assegurar a integridade da base de dados e isto pode ser ilustrado pelo seguinte cenário:
Um usuário, chamado Fred, quer transferir $50 de sua conta poupança para sua conta corrente. Neste caso, a matemática é simples:
Conta corrente = conta corrente + 50
O que aconteceria se houvesse uma falha de algum tipo entre as duas operações?
Neste caso, a conta poupança seria subtraída em $50, mas a conta corrente não seria atualizada. Pobre Fred ficou sem os $50 e existe também a questão do fundo perdido. Espere até a auditoria!
Nós podemos dizer que, neste exemplo, a integridade de dados está extrema prejudicada.
Se uma transação tivesse sido usada para assegurar que as duas operações fossem executadas como uma unidade lógica única, então se houvesse uma falha durante a execução deste simples processo, todo o processo teria sido abortado ou voltado ao seu estado inicial (rolled back - na linguagem SQL) e a integridade dos dados estaria preservada.
Assim o dinheiro, nas contas, retornaria ao valor inicial que estavam antes de iniciar a transação.
Aqui, eu deveria também adicionar o obvio: no cenário acima no qual parecem existir apenas duas operações, existiram realmente mais duas operações:
Ler o saldo da conta poupança
Ler o saldo da conta corrente
Isto é, sem considerar as modificações reais ao banco de dados.
Gerenciamento de Dados - O que é uma Transação?
Transações são partes integrantes do desenvolvimento de aplicações de dados integrados (data-bound applications). Uma chave para o desenvolvimento de aplicações no ambiente de base de dados é a habilidade de usar transações de forma otimizada para garantir a integridade de dados.
A palavra “Transação” é usada frequentemente quando falamos em aplicações SQL.
Uma transação é uma parte integral de um processo, contribuindo para a composição da aplicação como um todo, e pode ser definida como:
“... Uma unidade atômica de trabalho consistindo de um conjunto de modificações de dados a qual deve ser aplicada na sua totalidade ou abortada completamente”
Isto quer dizer que ou o processo como um todo é bem sucedido ou o processo todo falha.
Não existe meio termo. Inúmeras operações, tais como: UPDATE, DELETE e INSERT podem criar uma unidade única. Só se todas as operações são bem sucedidas, esta unidade lógica será bem sucedida.
Um processo de transação pode ser todo um processo de negócio lógico ou uma unidade menor que é parte de um processo de negócio lógico.
Fonte: "Data Management.pdf", arquivo acompanha a instalação do eDeveloper 10, em inglês.
Apresentação
Estamos iniciando este blog com um trabalho de apresentação da documentação referente ao eDeveloper 10, a qual acompanha a instalação do mesmo, porém o documento original é disponibilizado em inglês.
O objetivo deste blog é facilitar a vida dos "magicianos", com a tradução e publicação frequentes dos assuntos abordados nesta documentação, bem como, fornecer informações sobre experiências dos colaboradores no que se refere ao desenvolvimento e ao domínio específico da ferramenta e banco de dados.
Façam um bom uso do material e se sintam à vontade para contribuir sobre os assuntos abordados e assim enriquecer este blog.
Caso alguém tenha alguma documentação sobre os assuntos aqui abordados e a mesma esteja em inglês, por favor, nos encaminhem este material que estaremos avaliando e, se for o caso, efetuando a sua tradução.
Bom trabalho a todos!
quarta-feira, 25 de abril de 2007
Magic Blog Brasil
Mas o Magic não serve apenas para este simples exemplo, é possível desenvolver grandes softwares, como benchmark temos o ERP CIGAM. Na sua origem embrionária usou-se o Joiner, mas devido a necessidades de evolução optou-se por usar o Magic.
Neste Blog, tentaremos discutir um pouco mais o que é possível realizar com esta grande ferramenta de desenvolvimento.
Enjoy :)