Hola,

Si conoces el ID para mi es siempre mejor usar el acceso a objetos.

Pero si no conoces el ID y buscas a través de una SQL posiblemente la única opción viable es la segunda, aunque siempre puedes acceder directamente a los globals.

Saludos

Gracias por tus comentarios @Jose Antonio Benitez

Creo que no es demasiado práctico contestar a todo dentro del comentario, por lo que estamos trabajando en publicar estos artículos que comentas, los enlazaré como comentario a este articulo para que el que lea estos comentarios pueda seguir el hilo. Adicionalmente creo que hay que explicar como es el proceso de Journal y para qué sirve. Por último será muy útil entender todos los globals de la parte de Interoperabilidad (Ensemble), y esto también merecería un capítulo aparte :-)

He revisado y el adaptador internamente está usando un objeto de clase %Net.FtpSession, esta clase tiene un método Delete que es el que se está llamando y solo sirve para fichero. El método para borrar directorio es RemoveDirectory, pero ese método no se ha llevado al adaptador. Creo que sería relativamente fácil crear tu propio adaptador heredando de EnsLib.FTP.OutboundAdapter y añadir el método RemoveDirectory. Puedes copiar prácticamente todo el código del método Delete y cambiar lo necesario para llamar correctamente a RemoveDirectory.... se me ocurre que incluso sería una buena clase para compartir en el OpenExchange.

¿A qué te refieres con versiones anteriores a IRIS? ¿Caché o Ensemble? En ambos casos el problema es el mismo. La recomendación por ahora sería usar Docker o Máquina Virtual.

Hola @Yunier Gonzalez hay varias opciones. Una es hacer como dices un Backup/Restore de la BD para "jugar" con una imagen sin perjudicar los datos reales. Otra cosa que se puede hacer es utilizar un Shadow. Un Shadow replica todo lo que sucede en una BD a otra BD en otra instancia mediante el uso del journal. De esta forma tienes datos "casi" en tiempo real. En el caso de un Mirror se puede usar una replicación asíncrona para uso como Reporting.
 

Hola @Francisco Cadenas,

Lo primero, agradecer tu participación. Estamos deseosos de que la comunidad tenga vida.

Bien, sobre FHIR decirte que está soportado por HealthShare Health Connect y por InterSystems IRIS for Health pero no por Ensemble.

Sobre las versiones:

Se acaba de liberar la versión 2019.1 de HealthShare Health Connect que soporta DSTU2 y STU3. DSTU2 se soporta desde la versión 15.01. Se está trabajando en el soporte de R4 y seguramente ya esté disponible en la próxima versión.

Saludos

@Javier Ordonez Martin 

El error, a priori parece claro, "permiso denegado". ¿Has probado a acceder mediante FTP directamente desde línea de comandos al servidor y probar que funciona correctamente? También es posible que el error se produzca porque el fichero no exista, así que si no es tema de privilegios es posible que esté buscando un fichero pero no un directorio y es por eso que salta este error. En la documentación habla solo de fichero y no de directorio.

Hola,

Gracias por preguntar. 

Por lo que veo me parece que esto es un mensaje de MONMGR. Si es así este mensaje es generado por el Core y no por la para de Interoperabilidad así que ahora mismo el mecanismo es solo correo. Pero se me ocurre que pueden utilizar un servicio de lectura de correo y generar una alerta (Ens.Alert) que puedan manipular a su criterio. Aunque claro siendo una advertencia del correo es posible que haya procesos que se paren.

Hola,

Yo te diría que no se dispone de esa característica directamente pero sin embargo es posible implementar algo similar de una manera muy eficiente mediante procedimiento almacenado en Object Script. Si envías un poco más de detalle del objetivo especifico podemos revisar y enviar algún ejemplo.

Gracias

Solo para dar alguna idea de que se podría enviar al concurso, echa un ojo a Rosetta Code - hay un montón de oportunidades de implementar esto u otros algoritmos populares que ya están implementados en otros lenguajes pero no en ObjectScript.

Hola Jorge, 

Me surgen varias dudas. Si trabajáis con diferentes Namespaces es porque son proyectos diferentes o ¿cómo están relacionados?. En principio lo lógico es que cada Namespace disponga de un Repo diferente. También podría estar todo junto si no hay solapamiento entre nombres de paquetes y clases. Ya que la idea es que cada desarrollador tenga un entorno aislado y por lo tanto el que toque clases de un Namespace normalmente no tocará las otras y esas no molestan. Sin embargo es muy importante que los despliegues en el servidor en producción se hagan de manera controlada y mediante paquetes de despliegue que se construyan ex-profeso para el mismo. No se si me he explicado bien...

Pero en resumen, una cosa es como se organiza el código en el desarrollo y otra diferente es como repartas las clases en el despliegue

Sí claro, eso tiene mucho sentido. Lo único es que os toca gestionar varios Repos. Pero será muy práctico ir identificando funcionalidad común y llevarlo  al Repo común. Luego las clases comunes gestionarlos como librerías independientes. Si el esquema que tenéis se despliega todo en la misma instancia entonces también podéis hacer mapeos de clases entre Namespaces.

Lo que @Kurro Lopez te ha presentado con detalle es lo que te decía en la primera respuesta:

También podría estar todo junto si no hay solapamiento entre nombres de paquetes y clases.

Como ellos ya lo han hecho han elegido la forma que mejor les ha funcionado. Por lo que desde luego es una buena solución.

El uso de mapeo de paquetes es util para no tener que duplicar clases (y código) en diferentes Namespaces. Pero es un mecanismo asociado a la operación/despliegue pero no al desarrollo. Son cuestiones diferentes. Puedo desarrollar un paquete de forma común y luego repartirlo entre varios namespaces (como una librería) o puedo ponerlo en un lugar accesible por varios (aka mapeo). Pero lo haga de una manera o de otra no me afecta a como lo desarrollo.

Enhorabuena a los ganadores!! 

Como ya habéis visto vamos a hacer concurso cada mes, espero que os animéis a participar !!!

Cualquier duda sobre todo esto preguntad en la comunidad... estamos abiertos 24x7 ;-)

Kurro dices que tu clase hereda de FTPService, si ves en el error la línea donde te da el error ¿es código tuyo o es código de la clase FTPService?

Hola Mathew,

Siempre se puede hacer una clase que herede de %Persistent y que exponga los métodos que quieras para guardar por ejemplo. Internamente allí puedes crear tu Callback y luego llamar al %Save.

Algo así como:

Class MiPersistente Extends %Persistent {

Method OnGuardar() {
}

Method Guardar() {
  ..OnGuardar()
  ..%Save()
}
}

Luego en lugar de heredar de %Persistent heredas de esta clase y sobre escribes el Callback.

No lo he probado pero es una alternativa a investigar

Gracias