Postagem em destaque
- Gerar link
- X
- Outros aplicativos
BlackTDN :: Harbour/ADVPL :: Send/GetData uma alternativa a apconnxcontrol.ocx
Vimos, em Protheus :: apconnxcontrol.ocx with Harbour e Protheus :: apconnxcontrol.ocx, PowerShell e SendMessage para envio de Mensagem a Usuário Específico, que é possível a comunicação e transferência de dados usando apconnxcontrol.ocx. Um exemplo mais completo poderá ser obtido em “integração do Protheus com C# (Luis Gustavo Pessoa Lacombe)”.
O problema com apconnxcontrol.ocx é sua instalação. Temos que garantir que estaremos utilizando, sempre, a última versão do aplicativo.
Uma alternativa, na comunicação de dados entre aplicações externas e o protheus, poderá ser a técnica desenvolvida por Roberto Lopez (criador da Harbour MiniGui e mantenedor do fórum HMG Fórum para divulgação de suas idéias) para comunicação entre aplicações da HMG. A idéia básica é que cada aplicação possua um Nome (StationName) e um local para Gravação/Compartilhamento dos Dados (CommPath). Os dados são gravados em arquivos Nomeados de acordo com o Destino.Origem e são enviados e recuperados, respectivamente, através das funções SendData e GetData (funções essas muito simples de implementar em qualquer linguagem). Uma idéia bem simples, de fácil implementação e que resolve muitos problemas de comunicação de dados e que não necessita de nenhum aplicativo adicional. Além disso é extensível (poderá ter os recursos ampliados de acordo com a necessidade e, se padronizado, servir como base de comunicação com qualquer aplicação).
As funções originais SendData e GetData foram adaptadas para o Protheus e, com isso, além de servirem para comunicação de dados entre aplicações da HMG poderão ser utilizadas para comunicação entre aplicações do Protheus e aplicações externas; como o próprio Harbour.
Veremos, agora, um exemplo de SendData e GetData usando uma aplicação em Harbour e, posteriormente, o mesmo exemplo usando o Protheus como Receptor/Transmissor dos Dados. Nele termos:
- Como aplicação receptora: 'John_Station' e;
- Como aplicação transmissora: 'Roberto_Station'
Os nomes dos exemplos originais do HMG foram mantidos.
O código, para o envio dos dados, baseado no HMG:
/* #include "minigui.ch" Function Main Set StationName To 'Roberto_Station' DEFINE WINDOW Form_0 ; DEFINE MAIN MENU END WINDOW CENTER WINDOW Form_0 ACTIVATE WINDOW Form_0 Return Nil Procedure SendTest aAdd ( aData , 'Juan' ) aAdd ( aMultiData , {'John','Smith','555-5555'} ) SendData ( 'John_Station' , 100 ) SendData ( 'John_Station' , Date() ) SendData ( 'John_Station' , Time() ) SendData ( 'John_Station' , .t. ) SendData ( 'John_Station' , aData ) SendData ( 'John_Station' , aMultiData ) Return |
e, para a recepção:
/* #include "minigui.ch" Function Main Set StationName To 'John_Station' DEFINE WINDOW Form_0 ; DEFINE MAIN MENU END WINDOW CENTER WINDOW Form_0 ACTIVATE WINDOW Form_0 Return Nil Procedure GetTest() Repeat r := GetData() If Valtype (r) == 'A' If Valtype ( r [1] ) != 'A' Aeval ( r, { |i| MsgInfo( i ) } ) Else For Each i In r Aeval ( i, { |j| MsgInfo( j ) } ) Next EndIf ElseIf r # Nil MsgInfo( r ) EndIf Until r # Nil Return |
(Olha que interessante: Harbour suporta Repeat/Until)
Executando os exemplos do HMG teremos:
Os dados serão gravados em: D:\totvs\p10\ndj\pdata\comm conforme definição
e agora; usando GetDada:
A cada dado obtido o arquivo que o originou é excluído até que todos os dados tenham sido recuperados e todos os arquivos excluídos.
Agora, o mesmo exemplo no Protheus:
Vou usar o Programa SendData em Harbour para Enviar os Dados e U_HBDataEx para recuperá-los a partir do Protheus.
e mostrar a saída no Browser:
O código do Exemplo de GetData, no Protheus, poderá ser obtido em: Source path: svn/trunk/harbour/samples/MiniGUI/comm/U_HBDataEx.prg ou através do svn/update em sua cópia local. O exemplo depende de: NDJLIB023.prg e NDJ.CH
No Exemplo abaixo, o Protheus Envia e Recebe os Dados. A opção de “Reenviar” é para o teste com captura pelo Harbour dos dados gerados pelo Protheus.
#INCLUDE "NDJ.CH" #DEFINE HBDataExCommPath "D:\totvs\p10\ndj\pdata\comm" /*/ /*/ Local aData Set StationName To "John_Station" aData := StaticCall( NDJLIB023 , GetAllData ) oData:Close( .T. , .T. ) oData := NIL Return /*/ Local aData Local nI Set StationName To "Robert_Station" StaticCall( NDJLIB023 , SendData , cDest , "Olá" ) aData := {; StaticCall( NDJLIB023 , SendData , cDest , aClone( aData ) ) For nI := 1 To nF StaticCall( NDJLIB023 , SendData , cDest , aMultData ) Return Static Function __Dummy( lRecursa ) |
[]s
иαldσ dj
- Gerar link
- X
- Outros aplicativos
Comentários
Postagens mais visitadas
BlackTDN :: RLeg ~ Desvendando a Função ParamBox
- Gerar link
- X
- Outros aplicativos
Protheus :: Chamando Funções do Menu Diretamente e sem a Necessidade de Login
- Gerar link
- X
- Outros aplicativos
Bom artigo. Legal ver que existem várias possibilidades de integração do Protheus com outras linguagens. Parabéns.
ResponderExcluir