Buenas,

Una de las cosas mas destacables de Intersystems IRIS es la facilidad de crear interoperabilidad con otros sistemas.

Me explico. Crear una api que reciba peticiones, crear colas de procesos y consultas a base de datos, tanto de IRIS como externas y que pueda gestionar otra api para recuperar información de terceros, el desarrollo se puede hacer en pocas horas.

Si lo queremos hacer en C#, por ejemplo, necesitariamos crear la API, gestión de acceso a BBDD, gestión de MS Queue para generar colas y reintentos, invocación a terceros a través de otra API, gestión de errores... este desarrollo sería muy laborioso y tardarías una semana (mínimo) en tener una versión mas o menos estable.

El sistema de interoperabilidad de Intersystems IRIS nos ha ahorrado muchas horas de desarrollo.... ¡¡¡¡Pero muchas horas!!!!

Seguimos trabajando con servicios API en C#, pero a la mínima, intentamos convencer al cliente que hacer ciertas operaciones desde IRIS es mucho mas económica y rápida de desarrollar.

Otro ejemplo, el proceso de carga de ficheros usando Record Map, tener que que desarrollar un proceso de conexión con FTP a una carpeta, leer los ficheros, validarlos, procesarlos y guardarlo en BBDD se ha hecho en 1 semana usando IRIS, en cambio, si hubieraos querido hacerlo en C# habría que crearnos nuestras propias rutinas desde cero para leer ficheros, gestionar el FTP, etc... No hay punto de comparación.

Espero que mi experiencia os sirva de mucho.

Un saludo a toda la comunidad.

Kurro

Hola Laura,

Esa idea me la han sugerido también, y no es del todo descabellada. Pero me gustaría evitar levantar una conexión ODBC o JDBC contra si misma, por lo que estoy buscando alguna alternativa.... Igual miro como funciona internamente el componente e intento sobreescribir algunos método para que la query la realice contra una tabla interna.

Muchas gracias por tu aportación.

Nota: Hemo hecho el siguiente código para capturar el error nativo... pero es un poco código chapucero.

// run the query
Set tSC = ..Adapter.ExecuteUpdateParmArray(.nrows,SQL,.param)

// Check if there is any error
If $$$ISERR(tSC)
{
	Set msgError = $System.Status.GetErrorText(tSC) 
	// Check here if the native error code is 2601 (Cannot insert duplicate key row into object 'MYPATIENTS' with unique index 'UQ_UNIQUE_INDEX')
	if $FIND(msgError, "[2601]") > 0
	{
	    // This is a insert/update that violates the unique code
	    // remove duplicate record
	    quit $$$OK
	}
	else
	{
	    // Generic error... thow excepction
	    quit tSC
	}
}

Añado la respuesta que me han dado en el community en inglés:

Hola Kurro!

Gracias por tu artículo y por probar IntegratedML. Con suerte, le indicaremos la dirección correcta:

1. IntegratedML no es "solo redes neuronales", sino más bien una canalización de autoML (consulte la Guía de AutoML) que primero prueba varios métodos de ML en un subconjunto de datos y luego realiza una ejecución de entrenamiento utilizando los datos completos utilizando el método de ML (redes neuronales). , regresión logística, bosques aleatorios, etc.) que obtuvieron mejores resultados en el subconjunto de datos. De hecho, de forma predeterminada, para problemas de regresión como este, solo usamos XGBRegressor, por lo que en este caso el método que utiliza IntegratedML no es una red neuronal en absoluto.

2. Solo es necesario llamar al "TRAIN MODEL" una vez por conjunto de datos de entrenamiento. El bucle sobre los ejemplos se maneja dentro de esa llamada.

3. Este es potencialmente un conjunto de datos demasiado pequeño para producir resultados confiables. IntegratedML divide los datos internamente en subconjuntos de entrenamiento y prueba, por lo que probablemente obtendrá mejores resultados si tiene al menos 100 ejemplos aleatorios.

Atentamente,

tomás

Gracias a la comunidad, tengo un par de respuestas que son válidas. Por si os interesa:

Para poder capturar el SessionId

Method OnProcessInput(
    pDocIn As %RegisteredObject,
    Output pDocOut As %RegisteredObject) As %Status
{
    // here you need to pass the jobid from the %CSP.REST that is invoking the BS
    set tJobId = pDocIn.JobID
    // your code here
    set ^CallApi($CLASSNAME(),tJobId,"sessionid") = ..%SessionId
    set pDocOut = pDocIn
    quit $$$OK
}

El evento que controla cuando ha terminado de procesar la llamada OnEndRequest

Ver las réplicas de Guillaume Rongier y de Vitaliy Serdtsev

Si quieres saber cómo funciona… mira el siguiente vídeo

https://www.youtube.com/embed/VaTRgDB5HO0
[Este es un enlace integrado, pero no puede ver el contenido integrado directamente en el sitio porque rechazó las cookies que se necesitan para acceder a él. Para ver el contenido integrado, debe aceptar todas las cookies desde la Configuración de cookies]