#Servicio empresarial

0 Seguidores · 16 Publicaciones

Un servicio empresarial forma parte de la producción para la compatibilidad operativa de InterSystems Ensemble, la cual es responsable de aceptar solicitudes desde aplicaciones externas.

Pregunta Kurro Lopez · oct 21, 2025

Hola comunidad,

Tengo un servicio que utiliza EnsLib.RecordMap.Service.FTPService para capturar ficheros en un directorio FTP.

Necesitaría que en lugar de cargarlos todos a la vez, los hiciera de uno en uno.

Tengo una clase que extiende de esta clase porque hace procesos previos, lo guarda todo en la clase RecordMap y luego los procesa todos los registros a la vez.

Cuando invoco al BP, lo hace a través del método set tStatus = ..SendRequest(message, 1)

He puesto el flag SynchronousSend = 1, pero sigue procesando todos a la vez.

4
0 37
Pregunta Kurro Lopez · sep 5, 2025

Hola comunidad.

Tengo una solicitud de un cliente que desea hacer lo siguiente.
Actualmente, tienen un proceso de carga de datos vía FTP en el que han implementado un RecordMap para almacenar la información de los archivos CSV que se suben al directorio FTP.
Ahora quieren tener otro directorio para que solo se ejecute mediante una instrucción externa, no cuando se sube el archivo.

0
0 31
Artículo Kurro Lopez · abr 1, 2025 1m read

Hola a todos,

Como parte del desarrollo de una API para saber a qué instancia de IRIS está conectada, he encontrado algunos métodos para obtener información sobre el servidor que pueden ser útiles.

Obtener el nombre del servidor: $SYSTEM.INetInfo.LocalHostName()

Obtener la IP del servidor: $SYSTEM.INetInfo.HostNameToAddr($SYSTEM.INetInfo.LocalHostName())

Obtener el nombre de la instancia: $PIECE($SYSTEM,":",2)

Entonces, he creado el siguiente código como clase BS:

0
0 60
Artículo Sanjib Pandey · mar 28, 2025 5m read

Contexto:

Esta guía proporciona una visión general de cómo diseñar e implementar una interfaz API REST para consultar los datos demográficos de un paciente desde un sistema de Registro Electrónico de Pacientes (EPR) utilizando HealthConnect. El proceso implica enviar una solicitud de consulta con el número de identificación del paciente, recuperar la respuesta del sistema EPR, extraer los datos demográficos requeridos del mensaje HL7 y enviarlos como una respuesta JSON al proveedor. El diagrama del proceso de alto nivel se muestra a continuación (Captura de pantalla 1).

0
0 47
Artículo Ricardo Paiva · ene 8, 2025 4m read

Link de Git: https://github.com/ecelg/InterSystems-IRIS-as-a-Spotify-REST-client

Recientemente se me ocurrió una idea: ¿cómo puedo poner mi lista de reproducción en IRIS? 🧐

Al mismo tiempo, me dijeron que debía pagar mi suscripción de Spotify 💸💸... oooh... ¿y si obtengo algunos datos de la API de Spotify? Así que empecé a investigar sobre eso.

Como en la mayoría de los desarrollos, comencemos con la documentación de la API: https://developer.spotify.com/documentation/web-api

Para obtener los datos, se requiere solicitar un token de acceso en la URL del endpoint de token. 🧐

0
0 89
Artículo Alberto Fuentes · sep 23, 2024 8m read

¡Hola, desarrolladores!

En esta serie de artículos hemos hablado del framework iris-datapipe, de cómo nos ayuda a crear "pipes" de datos para la ingesta y procesamiento, y de cómo instalarlo. Vamos a profundizar en cómo implementar uno de esos "pipes" paso a paso.

Si llegaste directamente a este artículo, te recomiendo revisar los anteriores y recordar que iris-datapipe incluye un QuickStart para que puedas explorar sus funcionalidades rápidamente 👌.

El ejemplo que abordaremos está incluido en el QuickStart, por lo que puedes utilizarlo como referencia.

Definir un nuevo Pipe

Comienza por definir un nuevo Pipe en la interfaz gráfica. Básicamente, solo se trata de asignar un código y una descripción.

Opcionalmente, puedes especificar un recurso de seguridad de IRIS que se requerirá para poder operar con ese Pipe (esto es útil si necesitas crear pipes que solo sean accesibles a determinados usuarios).

En el ejemplo, definimos un pipe llamado REST-API, que se encargará de procesar datos recibidos desde una API REST, donde llegarán datos sobre personas.

image

Procesamiento de los datos

Para procesar los datos utilizando un "pipe", necesitamos seguir los siguientes pasos:

1) Definir un modelo DataPipe

Debemos definir un modelo para los datos que queremos procesar.

Un modelo no es más que una clase que hereda o extiende de DataPipe.Model.cls donde tendrás que implementar algunos métodos.

Tu modelo debe implementar:

  • Cómo serializar/deserializar tus datos (por ejemplo, usando XML o JSON).
  • Cómo normalizar y validar tus datos.
  • Y finalmente, qué operación quieres ejecutar sobre tus datos una vez están normalizados y validados.

En mi ejemplo, el modelo que utilizaré será DataPipe.Test.REST.Models.Person.cls.

Dado que el modelo es una clase convencional en InterSystems IRIS, puedes añadir herencia u otro comportamiento que necesites. En mi caso, heredo de DataPipe.Test.REST.Msg.PersonData, donde tengo definidas las propiedades que me interesa tratar.

El modelo DataPipe.Test.REST.Models.Person.cls tiene diferentes métodos:

  • Serialize, Deserialize: Se utilizan para indicar cómo serializar/deserializar el modelo. En este caso, utilizo JSON.
  • Normalize: Especifica cómo quiero normalizar el modelo. En mi caso, solo quiero llamar a una transformación de datos.
/// Normalize model
Method Normalize(Output obj As DataPipe.Model) As %Status
{
    set ret = $$$OK
    try {
        // call normalizaton data transform
        set sc = $classmethod("DataPipe.Test.REST.DT.PersonNormalize", "Transform", $this, .obj)
        $$$ThrowOnError(sc)

    } catch ex {
        set ret = ex.AsStatus()
    }
    quit ret
}
  • Validate: Indica cómo quiero validar si mi modelo es correcto o no. Puedo añadir "warnings" también. Puedes implementar lo que necesites:
/// Validate model
Method Validate(Output errorList As %List) As %Status
{
    #define AddError(%list, %code, %desc) set error = ##class(DataPipe.Data.ErrorInfo).%New() set error.Code=%code set error.Desc=%desc do %list.Insert(error)
	
    set ret = $$$OK
    try {
        set errorList = ##class(%ListOfObjects).%New()

        // date of birth
        if ..DOB="" { 
            $$$AddError(errorList, "V001", "DOB required")
        } else {
            set yearDOB = $extract($zdate(..DOB,8),1,4)
            if (yearDOB < 1930) $$$AddError(errorList, "V002", "DOB must be greater than 1930")
            if (yearDOB < 1983) $$$AddError(errorList, "W083", "Warning! Older than 1983")
        }

        // model is invalid if errors (not warnings) found
        for i=1:1:errorList.Count() {
            set error = errorList.GetAt(i)
            set errorCode = error.Code

            // in this sample model, all warnings start with "W"
            if errorCode'["W" {
                $$$ThrowStatus($$$ERROR($$$GeneralError, "Invalid"))
            }
		}
       
    } catch ex {
        set ret = ex.AsStatus()
    }

    quit ret
}
  • GetOperation: Indica qué Business Operation quiero que ejecute la operación sobre los datos (lo entenderás mejor cuando comentemos los componentes de interoperabilidad).
/// Return the Business Operation name that will run the operation with the model
/// Each Business Operation can be used to hold different queues
Method GetOperation() As %Status
{
    quit "Person Operation"
}
  • RunOperation: Esta es la operación que quiero ejecutar sobre mis datos. Puedo guardarlos en la base de datos o llamar a otro componente de interoperabilidad para continuar el procesamiento más adelante. En mi ejemplo, los guardo en una global y también los envío a otro Business Process.
/// Run final operation with the model
/// This method can be used to persit data from the model to an operational data store
Method RunOperation(Output errorList As %List, Output log As %Stream.Object, bOperation As Ens.BusinessOperation = "", Output delayedProcessing As %Boolean = 0) As %Status
{
    #define AddError(%list, %code, %desc) set error = ##class(DataPipe.Data.ErrorInfo).%New() set error.Code=%code set error.Desc=%desc do %list.Insert(error)
    #define AddLog(%log, %msg) do %log.WriteLine("["_$zdt($h,3)_"] "_%msg)
	
    set errorList = ##class(%ListOfObjects).%New()
    set log = ##class(%Stream.GlobalCharacter).%New()

    set ret = $$$OK
    try {
        TSTART
        $$$AddLog(log, "Transaction Started")

        // simulate an operation error
        if ##class(Ens.Util.FunctionSet).In(..Name, ##class(DataPipe.Test.HL7.Helper).OperationErrorNames()) {
            $$$ThrowStatus($$$ERROR($$$GeneralError, "Simulated Operation Error"))
        }

        // store serialized model
        $$$ThrowOnError(..Serialize(.stream))
        set ^zDataPipe($i(^zDataPipe)) = stream.Read()
        $$$AddLog(log, "Model Stored in ^zDataPipe("_$get(^zDataPipe)_")")

        TCOMMIT
        $$$AddLog(log, "Transaction Commited")

        // you can send messages to other production components (while you are not on an open transaction)
        // you can use this feature to continue processing the record in other component (delayed processing)
        set delayedProcessing = 1
        if $isobject(bOperation) {
            set req = bOperation.OperRequest
            $$$ThrowOnError(bOperation.SendRequestAsync("REST Delayed Oper Update", req))
        }

    } catch ex {
        TROLLBACK 
        $$$AddLog(log, "Rollback!")

        set ret = ex.AsStatus()
        $$$AddLog(log, "Error catched: "_$system.Status.GetOneStatusText(ret))

        // include exception errors into errorList
        do $system.Status.DecomposeStatus(ret, .errors)
		for i=1:1:errors {
			$$$AddError(errorList, "Exception", errors(i))
		}
    }
    quit ret
}

2) Añadir componentes de interoperabilidad

Después de definir tu modelo, necesitas configurar una producción de interoperabilidad usando componentes de DataPipe. iris-datapipe incluye componentes preconstruidos que pueden operar con un modelo DataPipe como el que hemos definido anteriormente.

El único proceso que debes implementar es el proceso de ingestión.

2.1) Crear un Proceso de Ingestión

Necesitas crear un nuevo Business Process que utilice como contexto DataPipe.Ingestion.BP.IngestionManagerContext.

Este proceso recibirá la entrada de datos que decidas (en este ejemplo, el mensaje que envía una API REST que actúa como Business Service) y debe implementar:

Identificación de los datos que procesas (InboxAttributes):

  • Debes identificar el registro que estás procesando y proporcionar los InboxAttributes.
  • El "pipe" al que pertenece este registro debe indicarse en este momento.
  • Estos atributos describirán el registro que estás tratando y luego se utilizarán para la búsqueda desde la interfaz gráfica.
  • Para realizar lo anterior, puedes utilizar transformaciones de datos, código, ¡lo que necesites!

Convertir los datos de entrada en el modelo de datos que definiste previamente:

  • Debes utilizar transformaciones, código o lo que prefieras para transformar la información de entrada al modelo de datos que has desarrollado previamente.

image

2.2) Añadir el resto de componentes

El resto de los componentes de interoperabilidad son proporcionados por iris-datapipe y ya están preconstruidos. Estos componentes llamarán a los distintos métodos implementados en tu modelo.

En general, necesitarás añadir a la producción, por cada "pipe" diferente que quieras implementar:

Aquí tienes la producción de ejemplo que se utiliza en el QuickStart.

Con todo esto, cuando comiencen a llegar datos y se procesen, podrás verlos directamente desde la interfaz gráfica.

image

¡Espero que os sea útil!

0
0 74
Pregunta Kurro Lopez · mar 15, 2024

Hola a todos,

Por un requerimiento del cliente, tenermos un BS Rest Api con un montón de métodos, necesitamos obtener la IP del invocador, el método y cual es el tiempo que la API ha tomado para procesar.

He encontrado el evento onPreDispatch donde puedo capturar la IP, ClassMethod, etc.. Estoy usando una variable global para guardar esta información.

2
0 182
Pregunta Kurro Lopez · feb 12, 2024

Hola a todos,

Como sabéis, es muy complicado depurar una API Rest de Business Service porque el objeto se crea cuando las aplicaciones reciben una solicitud, por lo que no podemos tener el JobId que podemos usar para depurar.

https://docs.intersystems.com/iris20211/csp/docbook/DocBook.UI.Page.cls…

Entonces, estoy tratando de obtener el JobId cuando se crea la clase, escribir una traza en el método OnInit() y escribir el JobId en es traza.

Method OnInit() As%Status
{
	$$$LOGINFO("JobId: "_$JOB)
	hang20breakQuit..OnInit()
}
2
0 249
Artículo Ricardo Paiva · jul 7, 2022 15m read

Si tuvieras la oportunidad de cambiar algo en el Visualizador de Mensajes de Interoperabilidad en IRIS, ¿qué harías?

Después de publicar el artículo Panel de Control "IRIS History Monitor", recibí algunos comentarios muy interesantes y varias peticiones. Una de ellas fue un Visualizador de Mensajes mejorado.
 
Si aún no lo has hecho, echa un vistazo al proyecto: merece la pena que le dediques un rato, y además ganó el 3er premio (Bronce) a Los mejores desarrolladores y aplicaciones de InterSystems Open Exchange en 2019.
 
Empecé a pensar algunas ideas sobre lo que me gustaría incluir en el "nuevo" Visualizador de Mensajes pero ¿cómo podría mostrar estos recursos de la forma más rápida y sencilla?
0
0 174
Artículo Ricardo Paiva · mar 24, 2022 9m read

Este artículo es una continuación de esta publicación.

En ese artículo, analizamos el desarrollo de business processes, que forman parte de los componentes necesarios para la integración del sistema y sirven como coordinadores de la producción.

En este artículo mostraremos la creación de un business service, que es la ventana de entrada de información para la producción.

Y, finalmente, llegamos al último artículo de "¡Utilicemos la interoperabilidad!"

El business service proporciona una ventana de entrada para la información enviada desde fuera de IRIS, con o sin utilizar el adaptador para I/F externo.

Hay tres tipos de business services en la muestra (los enlaces entre paréntesis son enlaces al código de la muestra):

  1. Business services para archivos que utilizan adaptadores de entradaStart.FileBS
  2. Business services para servicios web que utilizan el adaptador de entrada SOAPStart.WS.WebServiceBS
  3. Business services llamados por procedimientos almacenados o REST sin utilizar adaptadoresStart.NonAdapterBS

Los diferentes métodos de conexión que se utilizan para introducir la información solo aumentarán el número de business services; sin embargo, el procesamiento realizado dentro de un business service es

Crear un mensaje de solicitud que se enviará
usando información introducida externamente y
simplemente llamar al business component

Sin ningún esfuerzo.

Ahora, describiremos cómo crear componentes que utilizan adaptadores de entrada de archivos.

Los business services se escriben en scripts, que pueden crearse en VSCode o Studio.

1. Business services para archivos que utilizan adaptadores de entrada(Start.FileBS

Si creas una clase en VSCode, deberías crear una clase que hereda de Ens.BusinessService. Para los adaptadores, puedes utilizar el parámetro ADAPTER como nombre de la clase ADAPTER (por ejemplo, especificar una clase de adaptador de entrada de archivos).
Si no utilizas el adaptador, no será necesaria ninguna configuración.

Class Start.FileBS Extends Ens.BusinessService
{
Parameter ADAPTER = "EnsLib.File.InboundAdapter";

En el adaptador de entrada de archivos, puedes especificar el directorio que se supervisará en Settings→File Path para el business service de la producción.

imagen

Si el archivo localizado en "File Path" coincide con la información especificada en "File Spec", este abre el archivo como un objeto de flujo. Lo define como la primera variable cuando se llama al business service ProcessInput().

Cuando se inicia ProcessInput(), se llama automáticamente a OnProcessInput(). OnProcessInput() se transmite directamente a OnProcessInput() con los parámetros transmitidos a ProcessInput().

imagen

En OnProcessInput() la sentencia inicial recibe la información del objeto file stream, que se transmite como primer parámetro, después crea un mensaje que se dará al siguiente componente, escribe el proceso de llamada al siguiente componente y completa la lógica básica.


【Memo】
En el caso de Studio, inicia el Asistente (Wizard) de Business Services en el menú de New Creation, selecciona el adaptador y haz clic en el botón Finalizar.


La definición del método OnProcessInput() es la siguiente:

Method OnProcessInput(pInput As %Stream.Object, Output pOutput As %RegisteredObject) As %Status

pInput es proporcionado con una instancia de la clase %Stream.FileCharacter para archivos de texto o de la clase %Stream.FileBinary para archivos binarios.

En el ejemplo, se introducirá un archivo en formato texto, y lo hemos escrito para aceptar solicitudes de varias líneas y una solicitud por línea.

La propiedad AtEnd se establece en 1 cuando se detecta EndOfFile. Puedes utilizar esta propiedad para detener el bucle.

En un bucle, leemos las líneas utilizando el método ReadLine(), que nos permite obtener información sobre los contenidos del archivo una línea cada vez ( consulta la documentación para más información sobre el adaptador de archivos).

Escribe el mensaje, recuperando información línea a línea. Después, ejecutamos el método ..SendRequestAsync(), que llama al resto de los componentes.

Cuando se ejecute el método, el primer parámetro debería ser el nombre del componente al que quieres llamar en forma de string, y el segundo parámetro debería ser el mensaje de solicitud que hayas creado.

Ten en cuenta que ..SendRequestAsync() es una llamada asincrónica y no espera recibir una respuesta.

Nota: También existe SendRequestSync() para las llamadas sincronizadas.。

El código de ejemplo es el siguiente:

imagen

Referencia: explicación del uso de la función $piece() en el texto de ejemplo anterior

$piece(“string”, ”delimiter mark”, ”position number”)

La función para establecer/obtener una string con un delimitador, en el ejemplo, para obtener el primer y segundo valor de datos separados por comas, se escribe con la siguiente sintaxis:

set request.Product=$piece(record,",",1)
set request.Area=$piece(record,",",2)

Ahora, revisemos la función de Start.FileBS tal y como aparecía en la descripción anterior.

En la producción del ejemplo, el "File Path" se estableció en /irisdev/src, y el "File Spec" se estableció en check.txt. Prepara el mismo directorio o cámbialo a otro y registra los datos de la muestra en el archivo check.txt con el siguiente formato: nombre del producto adquirido, nombre de la ciudad.

※Si estás utilizando el contenedor de muestra, cambia el nombre de [Test-check.txt] en el directorio src en el directorio que se creó con el clon de git.

imagen

imagen

2. Business services para servicios web que utilizan el adaptador de entrada SOAP (Start.WS.WebServiceBS

Posteriormente, describiremos la creación de business services para los servicios web.

La clase de Business Service para servicios web actúa como proveedor de servicios web = servidor de servicios web.

En el ejemplo, tenemos dos parámetros en el método del servicio web para esta producción de ejemplo, para tener información que se envía desde el cliente del servicio web. El método web utiliza los datos introducidos en los parámetros para crear una clase de mensaje y llamar a otros componentes.

imagen

Cuando se define una clase de servicio web, se crea una pantalla de prueba. Sin embargo, no se muestra de forma predeterminada.

Inicia sesión en IRIS (o inicia un terminal), ve al namespace donde se encuentra la producción y haz lo siguiente:

Para tu referencia:Acceso al catálogo y a las páginas de prueba

Esta es una configuración de código de ejemplo en el ajuste, donde el contenedor se inició con docker-compose up -d (ejecutar en el namespace %SYS)

set $namespace="%SYS"
set ^SYS("Security","CSP","AllowClass","/csp/user/","%SOAP.WebServiceInfo")=1
set ^SYS("Security","CSP","AllowClass","/csp/user/","%SOAP.WebServiceInvoke")=1


【Atención】Ten en cuenta que la frase distingue entre mayúsculas y minúsculas y debe escribirse con cuidado. Además, según el namespace en el que se utilice el producto, cambia el script especificado. La oración del ejemplo fue escrita considerando que el ejemplo se importa en el namespace USER.
Si importas el código del ejemplo en el namespace ABC, el cuarto subíndice debería ser "/csp/abc/".

Cuando se haya completado la configuración, ve a la siguiente URL:

http://localhost:52773/csp/user/Start.WS.WebServiceBS.cls

imagen

Si quieres ofrecer el WSDL a tu cliente de servicios web, especifica WSDL=1 al final de la siguiente URL

http://localhost:52773/csp/user/Start.WS.WebServiceBS.cls?WSDL

3. Business services llamados por procedimientos almacenados o REST sin utilizar adaptadores(Start.NonAdapterBS

A continuación, introduciremos el Business Service sin adaptadores (Start.NonAdapterBS).

imagen

Para los business services que utilizan adaptadores, el adaptador llama al método ProcessInput() del business service para detectar la información.

Si no utilizas adaptadores, puedes seguir llamando al método ProcessInput(), pero este método no es público. Por lo tanto, si implementas un business service que no utiliza adaptadores, tendrás que considerar ProcessInput().

La muestra utiliza los dos métodos siguientes:

Este es un ejemplo del procedimiento almacenado.

imagen

Después de añadir un business service (Start.NonAdapterBS) que no utiliza adaptadores a la producción (estado incorporado en la muestra), ejecuta el siguiente procedimiento almacenado

call Start.Utils_CallProduction('piroshki','Russia')

imagen

Un rastreo de los resultados de la ejecución es el siguiente:

imagen

A continuación, se muestra un ejemplo de creación de una clase dispatch para REST:

imagen

El XML descrito en el mapa de la URL de XData define qué métodos se llaman como respuesta a la URL en el momento que se realiza la llamada de REST.
En el ejemplo se describe una definición que llama al método WeatherCheck() cuando se proporcionan las URL's del /weather/first parameter (purchased product name)/ second parameter (name of the city) en la solicitud GET.

<Route Url="/weather/:product/:arecode" Method="GET" Call="WeatherCheck"/>

A continuación, define la URL base para la URL anterior en la pantalla de Configuración de la ruta de acceso a la aplicación web del Portal de administración, y estará completo.

Consulta este artículo para más detalles sobre la configuración.

Cuando esté listo, intenta ejecutar la información usando un business service que te permita enviar la información REST.

Ejemplo)http://localhost:52773/start/weather/Takoyaki/Osaka

imagen

imagen

Si no utilizas un adaptador, como ProcessInput() no se puede llamar directamente desde fuera, hemos creado un objeto para el business service en la lógica que se ejecuta por medio de REST o procedimientos almacenados (utilizando el método CreateBusinessService() de la clase Ens.Director) y llamado a ProcessInput()

Si utilizas un adaptador, este detecta la entrada y almacena la información en un objeto único y la transmite al business service. En cambio, si no utilizas un adaptador, el resto es prácticamente igual, la diferencia solo se encuentra en la parte del proceso mencionada anteriormente.

El business service está diseñado simplemente para utilizar la información que se introduce fuera de IRIS para crear mensajes de solicitud y llamar a los business components.

Durante la producción de la muestra, pudimos ver lo siguiente:

Los distintos componentes desempeñan diferentes funciones en la ejecución de una producción (business services, business processes, business operations).

Para transmitir información entre componentes, utiliza el mensaje.

Los mensajes se almacenan en la base de datos a menos que se borren y, por ello, se pueden rastrear en cualquier momento.

Algunos adaptadores facilitan el proceso que rodea a la conexión.

Estas son las operaciones básicas sobre cómo utilizar la interoperabilidad en IRIS.

También hay mapas de registros y herramientas de conversión de datos que son útiles para la entrada y salida de archivos CSV y otros archivos con formato específico.

Además, IRIS for Health también es compatible con las transmisiones FHIR y HL7 (incluyendo SS-MIX2).

Estaré encantado de explicarlo en otra publicación. Si tienes algo interesante que compartir, ¡deja un comentario!

Por último, también hay cursos de formación para aprender a utilizar la Interoperabilidad.

0
0 224
Anuncio Esther Sanchez · ago 31, 2021

¡Hola Comunidad y Partnes de InterSystems!

Compartimos con vosotros una excelente noticia para los Partners dados de alta en el Directorio de Partners de InterSystems -> el listado de servicios gratuitos que podéis usar para ser más visibles dentro de la Comunidad de InterSystems.

 

Como Partners de InterSystems podéis contratar, cada seis meses, uno de estos servicios sin ningún coste:

  • Cupón de $1,000 para una campaña de Google AdWords
  • Montaremos y lanzaremos la campaña para ti

  • Promoción en la Comunidad de Desarrolladores
  • Colocaremos un banner en nuestra web, con una audiencia mensual de más de 50 000 personas. 

  • Webinars
  • Nos ocuparemos de organizar los webinars por ti. Solo tienes que contarnos en qué consiste tu solución.

  • Creación de una etiqueta con el nombre de tu empresa en la Comunidad de Desarrolladores
  • Utiliza tu propia etiqueta para compartir las noticias de tu compañía.

  • Tus vídeos en el canal de YouTube de la Comunidad de Desarrolladores
  • Haz un video de tu aplicación y sobre cómo funciona con las soluciones de InterSystems y nosotros lo publicaremos en nuestro canal de YouTube con más de 186 000 suscriptores.

  • Publicación de una oferta de empleo
  • Envíanos tu oferta de empleo y lo publicaremos en la web de la Comunidad de Desarrolladores, con una audiencia mensual de más de 50 000 personas.

¡Muy pronto tendremos más servicios!

Y si se te ocurre algún otro servicio que pudiéramos ofrecer a los partners, puedes dejar un comentario en esta publicación.

Cómo solicitar los servicios gratuitos para partners:

1. Inicia sesión en el Directorio de Partners y asegúrate de que tu empresa está dada de alta en el Directorio. Si no lo está, puedes ver en este vídeo cómo dar de alta una empresa

2. Arriba a la derecha, pasa el cursor por el nombre de tu empresa para desplegar todas las opciones.

3. Ve a la opción "Ecosystem Services":

4. Haz clic en el botón "Request" al lado del servicio que quieres solicitar:

5. Puedes solicitar uno de los servicios de forma gratuita cada seis meses. Tan pronto recibamos tu petición, contactaremos contigo para conocer todos los detalles y prepararemos todo para ti.

Esperamos que estos servicios os resulten útiles y que enviéis muchas peticiones!

Y también nos gustaría saber vuestra opinión sobre los servicios del Ecosistema de Partners de InterSystems. ¡Os escuchamos!

0
0 154
Artículo Ricardo Paiva · jul 22, 2021 3m read

Posiblemente te hayas encontrado con esto y no supiste cómo evitarlo; o tal vez ni siquiera te diste cuenta...

Pero cuando se tienen componentes empresariales de la Producción de Interoperabilidad TCP (por ejemplo, un business service HL7), probablemente tienes (dependiendo de tu configuración de StayConnected) muchas entradas en el Registro de Eventos (Event log) de tipo Info. Cada entrada registraría una conexión o desconexión.

Por ejemplo:

0
0 156
Pregunta Kurro Lopez · sep 4, 2019

Hola a todos,

Tenemos un proceso que está a la escucha de un servicio FTP para recoger unos ficheros CSV y procesarlos. El proceso funciona correctamente y cuando termina vacia el directorio a la espera que entre algún otro fichero.

Desde hace tiempo estamos recibiendo el siguiente mensaje de error:

ERROR <Ens>ErrGeneral: Error in SFTP Dir() ERROR #7500: Error DirEnum SSH '-2146430967': 'SSH Error [80101009]: Would block waiting for status message [80101009] at SFTP.cpp:150,0

Esto sucede cuando no hay ficheros a procesar y aparece de vez en cuando, a lo mejor cada 20 minutos.

3
0 264
Artículo Bernardo Linarez · jul 1, 2019 16m read

Como todos sabemos, IRIS Database / Caché es un motor de base de datos que efectúa muchas tareas dentro de sí misma. Sin embargo, ¿qué puede hacer cuando necesita tener acceso a una base de datos externa? Una opción es utilizar el SQL Gateway en Caché mediante un conector JDBC. En este artículo, mi objetivo es responder las siguientes preguntas con el fin de ayudarle a que se familiarice con la tecnología y que resuelva algunos de los más problemascomunes.

0
1 886