FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Problema con TAdTerminal de los Async 4 Prof.
http://sourceforge.net/projects/tpapro/
Uso D7 Buen día estoy haciendo un pequeño programa que recibira las llamadas tomadas por un conmutador, tome el ejemplo que vienen junto con los Apro y funciona muy bien, el programa recibe todas las llamadas, pero el problema que tengo es que no encuentro como guardar en un archivo de texto las llamadas recibidas, en la propiedad CaptureFile le pongo c:\Recibe.ap ó c:\Recibe.txt y al abrirlo no hay nada, y probe con la propiedad Capture los siguientes valores (cmAppend,cmOn,cmOff) Agradezco cualquier comentario al respecto
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King Última edición por AGAG4 fecha: 01-06-2007 a las 17:52:14. |
#2
|
|||
|
|||
Prueba con este código
El problema que le veo es que solo podrás abrirlo hasta que cierras la AdTerminal, ya que abre el archivo de forma no compartida. Debes de asignar la propiedad Capture en cmAppend de otra forma cada vez que abras la AdTerminal te va a crear un nuevo archivo y esto lo debes hacer por código no en tiempo de diseño. Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#3
|
||||
|
||||
Gracias EgoStar por su pronta respuesta, voy a probarlo.
Que tengas buen día.
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King |
#4
|
||||
|
||||
Ya hice la prueba EgoStar asi como me la planteo por codigo le meti las lineas
Y no puedo abrir el archivo que crea cuando recibe la llamada, tengo que cerrar el programa para poder ver el contenido del archivo, de plano no se puede abrir el archivo, porque lo que quiero es leer el archivo grabar los datos de la llamada(s) en una Base de datos firebird y borrar el contenido del archivo, no hay otro componente igual que el TapdTerminal pero que deje accesar el archivo ????
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King |
#5
|
||||
|
||||
¡Hola Alfredo!
Gusto en saludarte. Me parece muy interesante tu caso. No me sorprende que Eliseo sepa de esos componentes. En lo personal, me tocó manejar un par de componentes de TurboPower Async Professional hace tiempo. Aún recuerdo el día en que un contacto en el mensajero me lanzó la noticia "¿Qué crees? ¡Han liberado los TurboPower!" (yo ni los conocía entonces ). Empezaba la cultura del Open Source. Bueno, pero la razón principal de mi intervención es sugerirte una solución que podría ser viable. No sin antes preguntarte si te sirvió cerrar temporalmente el TAdTerminal en tiempo de ejecución cada vez que deseas leer el archivo, como de alguna manera ya lo sugiere Eliseo. La alternativa: En algún lugar del código fuente, estará seguramente la sentencia o grupo de sentencias que se encargan de guardar cada una de las llamadas en el archivo. Creo que podrías echarte un clavado en dicho código fuente para ver de qué manera puedes interceptar ese momento. Quizá haya un evento o método virtual que puedas aprovechar, o ya de plano modificar el código fuente del componente. Inténtalo por ese lado y si tienes alguna dificultad, no dejes de comentarnos. Un abrazo conmutado. Al González. |
#6
|
||||
|
||||
Gracias Alberto, tambien es un gusto saludarlo por este rumbo, ya lo había pensado en cerrar la terminal y volverla abrir, pero mi temor es que cuando este cerrada la terminal y en el comutador envia otra llamada se pierda dicha llamada, espero que no pase eso, porque por lo que he leido el que se encarga de recibir la llamada es el componente ApdComPort y de mostrarla es el TAdTerminal, ya si no es por alli, a espurgar el fuente de los APRO , bueno voy a continuar con las pruebas, yo les platico como me fue.
Gracias por su respuesta Al.
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King Última edición por AGAG4 fecha: 02-06-2007 a las 19:35:17. |
#7
|
||||
|
||||
Como se podrá simular que llegue una llamada a la TApdTerminal ????
Como las pruebas reales las tengo que hacer con el cable del conmutador conectado a la pc, ahorita no cuento con eso porque no estoy con el cliente, pero me gustaría hacer las pruebas sin estar con el cliente, si alguien sabe como emular algo por el estilo solo para hacer pruebas con el archivo que genera el TApdTerminal, para que me permita Visualizarlo y Editarlo. Agradezco cualquier sugerencia.
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King |
#8
|
||||
|
||||
Creo que tengo copia del código fuente de esos componentes. Trataré de darme un espacio de tiempo para revisarlo en las próximas 24 horas.
Saludos. |
#9
|
|||
|
|||
Hola Alfredo,
Mira, lo que yo hago para almacenar la cadena que me llegue a través de ApdComPort es usar el componente ApdDataPacket y configurarlo para que reciba la cadena del equipo al que se conecta, solo necesitas saber el comienzo y el final de la cadena, lo mas común es que el comienzo sea scAnyString y el final #10#13 o #13#10. Algunos equipos tienen un protocolo que te facilita mas la identificación del paquete, por ejemplo INICIO = #2 (StartofText) y FIN #3 (EndofText). Una vez que se recibe el paquete, yo la grabo en un archivo de texto con código y no uso el AdTerminal. algo asi:
Solo una anotación: Yo proceso las cadenas recibidas en tiempo real, es decir, una vez que la tengo el paquete disparo los procesos correspondientes y sólo grabo la cadena en un archivo para tener un registro de los eventos. Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#10
|
|||
|
|||
Cita:
Eso es lo más práctico, mi laptop no tiene puertos seriales pero con dos USB-DB9 se resuelve el problema y no son caros, en cualquier steren, (incluso los he visto en Wallmart) los puedes comprar y no son caros. Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#11
|
|||
|
|||
Cita:
Todo se lo debo a mi manager..... Salud OS históricos, como lo dirías tú.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#12
|
||||
|
||||
Gracias EgoStar y Al gonzalez, voy hacer pruebas !!!!
Un saludo tAPD_EMPAQUETADO
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King Última edición por AGAG4 fecha: 05-06-2007 a las 21:21:48. |
#13
|
|||
|
|||
Muy bien, comentanos tus resultados, sin embargo yo te recomiendo ampliamente usar el componente ApdDataPacket, me parece lo mejor.
Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#14
|
||||
|
||||
Ya realize las pruebas, me fue más ó menos, primero hice pruebas con el componente apdDataPacket no me funciono, no entra nunca al evento ApdDataPacket1StringPacket, por lo que me fui con la siguiente prueba que fue cachar el buffer en el evento OnTriggerAvail del componente apdComPort, haciendo un intervalo de tiempo de 2 segundos en cada llamada para que la cadena quedara en una sola linea, no se si sea lo más adecuado pero logre cachar la llamada.
Lo que se me hizo raro es que no me funcionara el componente apdDataPacket, lo tengo enlazado al apdComPort, tengo la propiedad AutoEnables = true y Enabled = True, y al hacer una llamada no entra a ninguno de los 3 eventos que tiene, le meti un ShowMessage('Hola') para hacer la prueba, uso los Apro 4.06 Gracias por sus sugerencias.
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King |
#15
|
|||
|
|||
Vamos por partes amigo Alfredo.
El componente ApdDatacket requiere que se configuren las siguientes propiedades para que funcione correctamente. EndCondition = [ecString] EndString = Depende que te llegue del PBX, pero lo normal el #10#13 que al momento de dar enter te va a poner ^J^M, si no, puede ser #13#10 o su equivalente ^M^J StartCond = scAnyData StartString = vacio Usa el evento OnStringPacket para que leas lo que recibe como ya te lo mostre en un mensaje previo, Data es el string que deberá contener la cadena que recibes. Nota: Si me dices que PBX estas usando o si puedes postear el archivo que recibiste del PBX te puedo configurar correctamente el componente. Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#16
|
||||
|
||||
Te soy sincero no se que sea el PBX, pero te paso los 2 archivos que recibí del conmutador....
Estos los recibí del componente ApdComPort en el evento OnTriggerAvail. Dentro de dicho evento tengo el siguiente código: Cita:
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King Última edición por AGAG4 fecha: 27-11-2008 a las 01:26:16. |
#17
|
|||
|
|||
Cita:
EndCondition = [ecString] EndString = #13#10 que se verá así: ^M^J StartCond = scString StartString = C En el evento OnStringPacket pon esto:
Con eso creo que debe funcionar correctamente. Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#18
|
||||
|
||||
Gracias EgoStar, voy hacer pruebas, que tengas buen día.!!!!
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King |
#19
|
||||
|
||||
Viendo el código...
¡Hola a todos!
Alfredo: Le eché un vistazo al código fuente del componente. Veo que es en el método mensaje TAdCustomTerminal.ApwTermStuff donde se hace el guardado al archivo: FCaptureStream.Write(DataPtr^, DataLen); Al observar este código, lo primero que se me ocurrió fue que podría crearse un componente derivado TAGAGAdTerminal, agregando un evento OnCapture (que sinceramente extraño que no venga ya incluido). Esto con el objetivo de acceder al campo FByteQueue o al campo FCaptureStream, pero desgraciadamente tanto uno como el otro están declarados en la sección privada de la clase TAdCustomTerminal (hace tiempo que evito usar secciones Private; suele resultar algo desalentador a otros programadores bibliotecarios cuando desean crear clases derivadas). Aún así, la solución es viable. Podrías derivar una nueva clase de componente, redefiniendo el método mensaje ApwTermStuff, pero tendrías que agregarla en la misma unidad (ADTrmEmu.pas) para acceder "decentemente" al campo privado FByteQueue. Una solución más fácil es modificar directamente el código de ese método y leer la variable DataPtr para el propósito buscado. TAdCustomTerminal.ApwTermStuff ofrece una ventana a la solución, pero es muy probable que, examinando el código con mayor detalle, encontremos alternativas. ¿Cómo ven la situación? ¿Por dónde nos vamos? Un abrazo terminal. Al González. |
#20
|
|||
|
|||
Cita:
Gracias por el dato Alberto. Salud OS recordatorios....
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
utilizacion codigos de barras en Dephi 5 prof | xavier | Varios | 2 | 18-06-2006 14:12:47 |
Sobre Delphi 2005 Prof | joanajj | Varios | 7 | 02-12-2004 00:27:55 |
instalar ms sql server en windows 2000 prof. | Juan Carlo | MS SQL Server | 4 | 16-07-2004 14:58:00 |
Driver de Impresión de Async Pro | guillotmarc | Varios | 0 | 16-01-2004 21:01:04 |
QuickReport 3.6.2 Prof - PDF | Jose Manuel | Impresión | 1 | 29-10-2003 19:00:58 |
|