Llamar dinamicamente a funciones

Obsydian, Cool:Plex, Advantage Plex, AllFusion Plex...

Moderadores: Jorge Ubeda, pacopicon

Llamar dinamicamente a funciones

Notapor Adolfo » Mié Abr 19, 2006 12:08 pm

Hola,

necesito hacer una función WINC que ejecute otras funciones WINC. El problema es que a priori no se a que otras funciones debo llamar. Es decir, tengo un fichero que me va a indicar a que función debo llamar en base a una serie de condiciones. Estas condiciones son dinamicas y pueden cambiar periodicamente.

En un principio había contemplado hacerlo como indica Lucio Gayosso en su pagina web: http://www.plex-world.com

Código: Seleccionar todo
How can I meta-call one of many functions based on an input parameter on a calling function A without having to define a case statement to add "real" call statements for all possible calls. (CooL Plex 4.5- Win/ODBC Generator)

Solution: Define all the functons that can possibly be called by Function A by adding "Function A Calls FNC" triples.

On the Action Digram add the following Meta Code:

Seq Meta Code
    +++Define Field: FIELDS/Function
    +For Each Property FNC calls FNC
        +++Set Value To Current Field: FIELDS/Function, .Target
        ++Name Defined Field: FIELDS/Function, Local<USR Web Calling Function>
        If Local<USR Web Calling Function> == WebInput<USR Web Calling Function>
            ++Call Field: FIELDS/Function, MetaParameters
            Terminate


Problema de esta solución: cada vez que añada una nueva función winc que no tenga previamente tratada se deberá crear el triple correspondiente y recompilar la función. Y es requisito imprescindible que no deba recompilar la función para cada llamada que se le añada.

Posteriormente he probado ha hacerlo mediante un WinExec, pero me implica tener un ejecutable para cada proceso y no me es viable.

Se os ocurre alguna otra forma de hacerlo? (no se, tal vez mediante un API?).
Adolfo
 
Mensajes: 27
Registrado: Lun Dic 05, 2005 5:47 pm
Ubicación: Madrid - España

EDGE

Notapor Jorge Ubeda » Mié Abr 19, 2006 1:59 pm

Hay un viejo thread en Edge sobre ese asunto. Funciona.
http://www.edgeusergroup.org/forums/Thr ... ssage70066
Jorge Ubeda
Site Admin
 
Mensajes: 229
Registrado: Mié Oct 26, 2005 6:00 pm
Ubicación: Valencia

Casi...

Notapor Adolfo » Mié Abr 19, 2006 3:31 pm

Muchas gracias Jorge... pero me surge un problema. El entorno en que trabajamos es plex 5.5, y generamos en .NET, con lo que nos encontramos con que la sintaxis de las llamadas nos ha variado.

Ahora en vez de ser algo como:

Código: Seleccionar todo
v->ObIn_TEMP.Input1.Parameter219 = in->Input1.Parameter219;
v->ObIn_TEMP.Input1.Parameter118 = in->Input1.Parameter118;
ObCallExternalFunction(p_fnc_data, &v->ObIn_TEMP, &v->ObOut_TEMP, Dummy, Dummy," ",0);
v->Environment0.xReturned_status10 = v->st_returned;


La función se genera con algo así:

Código: Seleccionar todo
ObCallMgr::Call(p_fnc_data, &v->ObIn_Dummy, &v->ObOut_Dummy, OB_RTDI_Dummy);
v->Environment0.xReturned_status10 = v->st_returned;


Como ves ahora en la sintaxis de la llamada ya no aparece el nombre de la DLL, sino que la misma esta en un array de registros que se gestiona automáticamente en una parte del código inaccesible con sources. Entonces me implica modificar el código fuente de forma manual, lo que preferiría evitar...

El array al que hago referencia es el siguiente:


Código: Seleccionar todo
ObPtrArray*  ObFnc_DynCall::SetRTDIFncArray()
{
    CreateRTDIFncArray(2);

    OB_RTDI_FNCD( 0    , 0xFFFFFF65, "Funcion Padre", DynCall, DynCall, External, WinC, "","", 0);

    OB_RTDI_FNCD( 1    , 0xFFFFFF4E, "Funcion Llamada", Dummy, Dummy, External, WinC, "", "", 0);

    return GetRTDIFncArray();
}


Si pudieramos modificar en algun punto este array para meterle los parametros sería perfecto, pero no lo veo...
Adolfo
 
Mensajes: 27
Registrado: Lun Dic 05, 2005 5:47 pm
Ubicación: Madrid - España

Ya esta.

Notapor Adolfo » Mié Abr 19, 2006 4:00 pm

Vale, no he dicho nada.

He probado y aunque este en .NET, la sintaxis de ObCallExternalFunction sigue funcionando. Ya lo he conseguido.

Muchas gracias!
Adolfo
 
Mensajes: 27
Registrado: Lun Dic 05, 2005 5:47 pm
Ubicación: Madrid - España

Re: Llamar dinamicamente a funciones

Notapor HarryJohon » Vie Dic 26, 2014 6:21 am

Como requerimientos en la máquina que debe ejecutar el informe, que esté instalado el engine de Crystal Reports (CR en adelante), y que hayas definido previamente el fichero .rpt (plantilla de informe CR) del informe y ocean accesible. Luego en Plex se crea un objeto de tipo "Source Code", al que habrá que definirle los parámetros que se consideren necesarios: información de conexión con la base de datos de origen, filtros an aplicar en el informe, opciones de generación, and so on. En el script, será necesarío definir y usar un conjunto de objetos del engine de CR que te permitirán generar el informe y en su caso exportarlo o imprimirlo. Encontrarás numerosos ejemplos de script para la generación de informes de CR en Internet, en cualquier caso si me pasas tu dirección de correo electrónico te puedo mand


______________________________
You can check out our latest comptia - exam and testking exams written by our N10-005 - exam - my braindumps to help you pass Miami International University of Art & Design.You can also purchase mines.edu. Our northwood is simply excellent in quality.
HarryJohon
 
Mensajes: 1
Registrado: Vie Dic 26, 2014 6:19 am


Volver a Plex

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados

cron