Beruflich Dokumente
Kultur Dokumente
2
Taller: Application Function Server
Introduccin
Es el mas adecuado mtodo de integracin entre BaaN (Versin c4 o superior) y productos de terceros, conocido como Business Object Interface o BOI. BOI provee una API para acceder a las funcionalidades Baan. Las interfases de alto nivel no pueden acceder a la lgica funciona Baan. La lgica del negocio se lleva a cabo por medio de sesiones que son principalmente basadas en la interfaz del usuario. BOI proporciona acceso programtico a las sesiones por medio de un protocolo del mensaje de bajo nivel. Este mensaje se encapsula en un juego de funciones primitivas llamado Application Function Server (AFS). Es as como BOI codifica los accesos la funcionalidad del negocio por medio del AFS. Usualmente no es necesario crear el BOI y las AFS desde un comienzo. El BOI puede ser generado usando la sesin ccboi0102m000 o ccboi0104m000 y los AFS-DLL son generados utilizando la sesin ttstpcreatdll. Los BOI y AFS son generados para resolver problemas donde se implementan juegos de funciones especiales de integracin. En escenarios de integracin complejos se hace necesario la extra-programacin para complementar lgicas que no son cubiertas por el pre-cdigo y que requieren un conocimiento de la arquitectura y la programacin AFS.
Arquitectura
El subsiguiente diagrama muestra el rol de AFS en la arquitectura BOI. Se muestra claramente que las llamadas de BOI hablan con la sesion baan subyacente a traves de AFS.
Field buffer
Session Instance
G -Engine
Session logic
BOI/ L/4 L El programa que desea accesar la funcionaloidad de la sesion. AFS-DLL El DLL, que contiene el paquete de funciones AFS primitivas. Estos DLL son opcionales. AFS API que contiene la implementacion de las funciones AFS primitivas. Este API se comunica con el 4 L-Engine a traves de un protocolo dedicado B BE para permitir que la sesion ejecute la funcionalidad requerida.
BOI/3G / G
AFS-
AFS
Calling rocess
Field buffer El field buffer, contiene el campo (valores) de la forma, el cual ser introducido a la sesin. uando ocurre la primera llamada API, a una sesin, este campo es llenado por los valores de la sesin. Estos pueden ser tanto campos de tablas como otros campos de pantalla de la sesin usado para Input. Los valores de la BOI son almacenados en al field buffer. uando la sesin necesita estos valores (en el field loop de la sesin), el 4- L-Engine toma estos valores del field buffer y los hace disponibles para la sesin. 4 L-Engine El motor para cada sesin Baan 4 L, la cual se realiza para todas las pantallas, campos, eventos, manejo de maintable y dems. Se tata del mismo motor usado cuando se ejecuta una sesin bajo interfaz de usuario (por ejemplo el BW). Mientras en una sesin normalmente se espera por la interaccin del usuario (el llenado de un campo por ejemplo), este ahora espera por un comando AFS. La variable api.mode es valorada en TRUE. Esto permite que el engine 4 L pueda comportarse diferente. Esta variable predefinida se puede usar para identificar si la sesin esta corriendo bajo AFS y conducir otros comportamientos de la sesin. Session logic La funcionalidad de la sesion Baan 4 L que se lleva acabo por AFS. Pueden existir mas de una sesion, sobre todo si se lleva a cabo el llamado a una sub-sesion o una sincronizacion entre sesiones de multiocurrencia a simple ocurrencia (ERP solamente). Tengase presenta que solo puede trabajar con un registro a la vez, para sesiones de tipo 2 y , solo una ocurrencia es usada.
Compilacin
Para compilar programas que utilizan funciones AFS, es mandatorio atachar al programa principal la librera ottstpapihand o en su defecto incluir el codigo de programa #pragma used dll ottstpapihand dentro del script
Activacin de sesiones
La activacin se la sesin ocurre cuando se llama la primera funcin AFS, sin embargo existen algunas funciones que requieren que la sesin haya sido activada con anterioridad: stpapi.insert() Uno o mas llamados stpapi.put.field() deben haber ocurrido. stpapi.update() Debe haber un registro actual o un llamado stpapi.find() debe haber ocurrido. stpapi.delete() Debe haber un registro actual o un llamado stpapi.find() debe haber ocurrido. stpapi.save() Un llamado stpapi.insert(), stpapi.update() debe haber ocurrido. stpapi.recover() Un llamado stpapi.insert(), stpapi.update() debe haber ocurrido id. stpapi.continue.process() Los parmetros de sesin deben haber sido completados.
Administracin de Textos
La administracin de textos no es soportada por AFS.
stpapi.put.field("dtfsa1101s000", "dtfsa100.name", o.name) - Se coloca el valor del campo o.name en el campo dtffsa100.name de la sesin.
WG1
Ejemplos:
Slide 11 WG1 Los mensajes de error retornados son: Sesion no disponible Comando no habilitado, no ha sido posible. Sesion inicial no sincronizada (solo ERP) Algun mansaje de error propio de la sesion
WG2
Ejemplos:
Slide 12 WG2 Los mensajes de error retornados son: Sesion no disponible Comando no habilitado, no ha sido posible. Sesion inicial no sincronizada (solo ERP) Algun mansaje de error propio de la sesion
WG3
Ejemplos:
Slide 13 WG3 Los mensajes de error retornados son: - Sesion no disponible - Comando no habilitado, no ha sido posible. - Algun mansaje de error propio de la sesion
Willian Garcia, 7/11/2004
Valor de retorno: 0 El registro no pudo ser salvado. 1 El registro pudo ser salvado con xito.
Ejemplos:
Valor de retorno: 0 El registro no pudo ser recobrado. 1 El registro pudo ser recobrado con xito.
Ejemplos:
Valor de retorno: 0 Registro no encontrado. 1 El registro fue encontrado con xito. Ejemplos:
(N/O)
- Si retval = 1 el registro fue encontrado. - Si retval = 0 el registro no ha sido encontrado, la tabla esta vaca o ocurri un error. err.mess guarda el mensaje de error.
stpapi.put.field("dtfsa1101s000", "dtfsa101.seno", str$(i.seno)) ret = stpapi.find("dtfsa1101s000", error.msg) if ret <> 1 then message("Record not found") endif
stpapi.put.field("dtfsa1101s000", "dtfsa100.seno", str$(i.seno)) retval = stpapi.find("dtfsa1101s000", error.msg) if retval = 1 then stpapi.get.field("dtfsa1101s000", "dtfsa100.name", o.name) stpapi.get.field("dtfsa1101s000", "balance", o.balance) endif
stpapi.put.field("dtfsa1201s000", "seno.f", str$(i.seno)) stpapi.put.field("dtfsa1201s000", "seno.t", str$(i.seno)) stpapi.put.field("dtfsa1201s000", "proc.date", str$(date.num())) stpapi.put.field("dtfsa1201s000", "do.update", str$(etol(dtyesno.no))) stpapi.continue.process("dtfsa1201s000", error.msg)
stpapi.put.field("dtfsa1101s000", "dtfsa101.seno", str$(i.seno)) stpapi.put.field("dtfsa1101s000", "dtfsa101.name", name) retval1 = stpapi.insert("dtfsa1101s000", true, error.msg) if not retval1 then retval2 = stpapi.recover("dtfsa1101s000", recover.msg) endif
stpapi.put.field("dtfsa1101s000", "dtfsa101.seno", str$(i.seno)) ret = stpapi.find("dtfsa1101s000", error.msg) if ret = 1 then stpapi.put.field("dtfsa1101s000", "dtfsa101.name", name) retval1 = stpapi.update("dtfsa1101s000", true, error.msg) if not retval1 then retval2 = stpapi.recover("dtfsa1101s000", recover.msg) endif endif
stpapi.put.field("dtfsa1101s000", "dtfsa101.seno", str$(i.seno)) ret = stpapi.find("dtfsa1101s000", error.msg) if ret = 1 then retval1 = stpapi.delete("dtfsa1101s000", true, error.msg) if not retval1 then retval2 = stpapi.recover("dtfsa1101s000", recover.msg) endif endif
stpapi.put.field("dtfsa1101s000", "dtfsa101.seno", str$(i.seno)) ret = stpapi.find("dtfsa1101s000", error.msg) if ret = 1 then stpapi.put.field("dtfsa1101s000", "dtfsa101.name", name) retval1 = stpapi.update("dtfsa1101s000", false, error.msg) if retval1 then retval2 = stpapi.save("dtfsa1101s000", false, error.msg) endif if not retval1 or not retval2 then retval = stpapi.recover("dtfsa1101s000", recover.msg) endif endif
Valor de retorno: 0 Registro no marcado. 1 El registro fue marcado con xito. Ejemplos:
err.mess
Valor de retorno: 0 Registro no encontrado. 1 El registro fue encontrado con xito. Ejemplos:
Valor de retorno: 0 Registro no encontrado. 1 El grupo fue encontrado con xito. 2 Fue encontrado un grupo siguiente. Ejemplos:
Valor de retorno: 0 Vista no encontrada. 1 Nueva vista de grupo fue encontrado con xito. Ejemplos:
Valor de retorno: 0 La sesin o pudo ser sincronizada. 1 Sesin sincronizada con xito. Ejemplos:
err.mess
Variable string que contendr el mensaje de error si el comando no es ejecutado con xito.
stpapi.continue.process("dtfsa1501m000, error.msg)
(Si se trata de una sesin de reporte, los datos del mismo deben ser establecidos antes)
Dispositivo Un cdigo de dispositivo valido. err.mess Variable string que contendr el mensaje de error si el comando no es ejecutado con xito.
err.mess
Variable string que contendr el mensaje de error si el comando no es ejecutado con xito.
stpapi.print.report("dtfsa1401m000, error.msg)
( Este comando enva un execute(prind.data) a la sesin)
err.mess
Variable string que contendr el mensaje de error si el comando no es ejecutado con xito.
stpapi.end.session("dtfsa1401m000, error.msg)
( En el caso de sub-sesiones, estas deben ser finalizadas antes que la sesin principal)
stpapi.application.option("dtfsa1401m000,2, , error.msg)
err.mess
Valor de retorno: digo de error. Err.mess contiene un valor de vacio si no existen errores.
Ejemplos:
Ejemplos: