Power Builder - Ejecutar un programa externo desde Aplicación PB

 
Vista:

Ejecutar un programa externo desde Aplicación PB

Publicado por Alex (3 intervenciones) el 09/05/2013 05:48:06
Buen día.

Espero puedan ayudarme compañeros, tengo el siguiente problema o situación.

tengo 2 aplicaciones en PB, aplicacion1 y aplicacion2, entonces necesito de aplicación1 correr aplicacion2 con una opcion especifica de menu [consultas-topes]

Se como llamar el run de la aplicacion2 seria asi:

run('C:\programas\aplicacion2.exe´)
esta linea si abre el sistema pero al abrirse obviamente es desde el inicio del sistema que en mi caso es la solicitud de un password, lo que yo quiero es que no me abra todo el sistema sino especificamente la ventana que se abriria si yo le diera click al menu consultas y a la opción topes.

espero haber explicado mi caso de forma que me haya dado a entender y puedan brindarme su ayuda porque he estado buscando pero no he encontrado la forma de lograrlo :(.

gracias! y que tengan lindo dia :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Ejecutar un programa externo desde Aplicación PB

Publicado por JeinnerH (646 intervenciones) el 10/05/2013 19:07:55
Esto se puede lograr de varias formas, la más simple sería agregar el PBL de la aplicación que se desea ejecutar a la lista de librerías de la aplicación que realiza el llamado. Ya con eso debieras poder ejectuar la ventana sin problemas. Claro esto requeriría de algunas modificaciones a la ventana y seguramente agregar algunas variables globales y demás ajustes.

La otra opción es agrear un parámetro al llamado que realizas, algo como:
run('C:\programas\aplicacion2.exe /ConsultaTopes´)

Y en el Open de la aplicación recibes estos parámetros por medio de algo como esto:
string ls_cmd, ls_arg[]

integer i, li_argcnt
// Get the arguments and strip blanks
// from start and end of string
ls_cmd = Trim(CommandParm())
li_argcnt = 1
DO WHILE Len(ls_cmd) > 0

// Find the first blank
i = Pos( ls_cmd, " ")
// If no blanks (only one argument),
// set i to point to the hypothetical character
// after the end of the string
if i = 0 then i = Len(ls_cmd) + 1
// Assign the arg to the argument array.
// Number of chars copied is one less than the
// position of the space found with Pos
ls_arg[li_argcnt] = Left(ls_cmd, i - 1)
// Increment the argument count for the next loop
li_argcnt = li_argcnt + 1
// Remove the argument from the string

// so the next argument becomes first
ls_cmd = Replace(ls_cmd, 1, i, "")

LOOP

La otra opción podría ser declarar una función externa a la aplicación que hace el llamado, la cual hará referencia a una función en la aplicación que contiene la ventana de consulta, algo como:
FUNCTION returndatatype name ( { { REF } datatype1 arg1,
..., { REF } datatypen argn } ) LIBRARY "libname"
ALIAS FOR "extname{;ansi}”

Esto se debe agregar en la ventana que hace el llamado en la opción del menú: Declare/Local Exterlal Function

De hecho no he utilizado las opciones 2 y 3, pero sí la primera anteriormente.

Nos cuentas cómo te va con el llamado y cómo terminas haciéndolo.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar