Esto no ha hecho mas que empezar. Vamos a darlo todo, la comunidad hispano hablante tiene mucho que decir. Enhorabuena
- Inicie sesión para enviar comentarios
Esto no ha hecho mas que empezar. Vamos a darlo todo, la comunidad hispano hablante tiene mucho que decir. Enhorabuena
Hay una respuesta aceptada en el foro en inglés.
Genial..
La comunidad hispanohablante lo va a agradecer.
Muchas gracias
Un saludo,
Francisco López
wow... tengo que probarlo, tiene muy buena pinta
Probado, implementado y funcionando... una gran idea
Te importaría realizar la misma respuesta en el community en inglés, hasta que no se implememte la funcionalidad de traducir las respuestas aceptadas, hay que estar hacíendolo así. De esta forma quedará registrado en ambos foros, y la solución es muy buena.
https://community.intersystems.com/post/how-delete-item-production-code
Muchas gracias
Aqui otra solución mucho más sencilla
/// Elimina un item de la producción
ClassMethod ProductionItemRemove(pProdName, pItemName) As %Status
{
write !,"Removing Item: "_pItemName
if ##class(Ens.Config.Item).NameExists(pProdName, pItemName,.itemId)
{
set objItem=##class(Ens.Config.Item).%OpenId(itemId)
set prod=##class(Ens.Config.Production).%OpenId(pProdName)
do prod.RemoveItem(objItem)
do prod.%Save()
kill objItem
do ##class(Ens.Director).RestartProduction(0,1)
}
quit $$$OK
}
Un saludo,
Francisco López
Genial, muchas gracias por compartir este código.
Lo que sería un plus, es poder añadir alguna propiedad en el export para que no serialice alguna propiedad. Los que no usamos IRIS lo tenemos complicado.
Hola Javier,
Parece que el problema está en que está constantemente consultando el servidor, está vacio y la lista no se crea. Pero está perdiendo la conexión TCP y por eso lanza el error. Lo que no comprendo es, si tengo la configuración de mantener conectado ¿No debería de realizar la conexión automáticamente?
A lo mejor no comprendo correctamente cual es el funcionamiento de este parámetro
Muchas gracias Alberto y David.
Ha sido muy instructivo y habeis contado cosas que me han servido de mucho.
Nota: El dedo mágico de David no existe... lo que si son mágicos solo los dedos de Alberto al teclado
Para versiones anteriores a IRIS, ¿Va a existir actualizaciones para macOS 10.15?
Me refiero a Ensemble 2017.2. Es una versión que no va en Docker como IRIS, y preguntaba que si se sacará también algún parche para que sea compatible con esta versión de Mac. En caso contrario se tendrá que trabajar bajo máquina virtual
Hola,
No es posible porque el cliente tiene instalado una versión Healthcare 2017.2 y no tiene mucha intención de cambiar de aplicación. Además, las dos versiones han de convivir simultaneamente en producción.
Hola Pilar,
Prueba a hacer lo siguiente:
1) Crea un recurso para tu WebApi (p.e. ResourceMyApi) Sistema -> Gestión de seguridad -> Recursos

2) Generamos un nuevo Rol para asignar este recurso (p.e. RolMyApi) Sistem -> Gestión de seguridad -> Roles
Asignamos el recurso a este rol

3) Creamos un nuevo usuario para acceder a MyAPi (o abrimos la configuración del usuario que queremos darle los privilegios)
Sistema -> Gestión de seguridad -> Usuario -> Editar usuario
Asignamos el rol RolMyApi en la solapa de Roles

4) Ahora, en la configuración del WebApi indicamos que es necesario que el usuario tenga el recurso ResourceMyApi para poder acceder.

Si intentas acceder con otro usuario verás que recibes un error 401 not authorized

Mas información:
Caché Security Administration Guide
Espero que con esta explicación puedas continuar con tu desarrollo
Un saludo,
Francisco López
Una pregunta,
¿Hay alguna página o documentación donde se pueda consultar cuales son los IDs que se pueden usar?
Por lo que veo tendríamos:
1.- Host
2.- Instancia
3.- Namespace
....
8.- NIvel de transacción
Gracias por adelantado
Hola,
Para ese tipo de llamadas deberías de usar un adaptador HTTP para conectar con el servidor y leer la respuesta en la propiedad %response
Mas info:
Using HTTP Adapters with Ensemble
Using the HTTP Outbound Adapter
No será usar un CURL directamente, pero es una invocación GET/POST/PUT/DELETE a una URL
Un saludo,
Francisco López
Hola Jorge.
Bienvenido a la comunidad.
En mi empresa tenemos varios proyectos separados por NAMESPACES y cada proyecto tiene un repositorio independiente. Pero a lo mejor te podría servir la forma que lo tenemos distribuido, luego tener el mismo repositorio (GIT, TFS, etc..) para todo el conjunto:
1) Crear un directorio común con todos los namespaces, cada namespace tendrá su propia carpeta

2) Guardar en el directorio principal (Healthshare) el area de trabajo, pero cada carpeta que no sea visible (luego explico el por qué)
Quedará el siguiente aspecto en VSCode

3) Configuramos el VSCode ObjectScript de @Dmitry Maslennikov de la siguiente forma:
en MyWork.code-workspace. Esta sería la configuración general de conexión con el servidor de Ensemble / ObjectScript
4) En cada uno de los directorios, añadimos una configuración por carpeta con el nombre del namespace que esté trabajando cada subconjunto
De esta forma cada workspace trabajará con su conexión correspondiente

A la hora de subir el repositorio, se sube en Git como cualquier otro fichero, incluso se tendría el equipo totalmente actualizado dado que se podría sincronizar los otros NAMESPACE a la vez y tener actualizado el entorno de desarrollo.
Espero que esta forma de distribuición te sirva como nos está sirviendo a nosotros.
Un saludo,
Francisco López
Los despliegues lo gestionamos utilizando la exportación de producción y añadiendo todos los elementos que queremos incluir en la instalación.
Para incluir mas cosas en la instalación utilizamos un fichero Installer.class extendiendo de %Projection.AbstractProjection
Entiendo que el setting.config de cada uno de los folders contiene el nombre del namespace a que se quiere desarrollar.
Por defecto siempre se carga en namespace "USER", si no puede conectarse con el servidor y no encuentra el namespace indicado se conecta al namespace por defecto.
Como comentas, tienes un namespace con ese nombre. Prueba a seleccionar el folder "scr" e intenta crear un fichero (prueba.cls) y ver que te cambia el namespace correcto
Me alegro que haya sido una tontería, si te digo la verdad, ni me había fijado que era settings.json :(
Un saludo y happy coding!!!

Buenas David.
Estoy muy interesado en cual es la mejor opción o proceso de exportación e implantación de producciones y su correspondiente mantenimiento con un cliente.
Actualmente estamos usando la exportación de producción que proporciona Ensemble, pero es bastante tediosa (hay que ir uno a uno seleccionando los ficheros) y no permite seleccionar ni macros ni includes. Pero te permite hacer instalaciones con rollback y es mas controlado si se produce algún error en la implantación.
Además, lo combinamos con ficheros installer.cls para instalar configuraciones, lookup tables, etc...
Si existe alguna opción mejor o profesional, bienvenida sean.
Un saludo,
Kurro
Hola,
Hereda de FTPService, pero el error lo está dando el RecordMap cuando hace el save.
Es código mio, tengo sobreescrito el método OnProcessInput para que, en lugar de invocar al BP por cada una de las filas que recupera, lo haga al final tras haber guardado cada una de los registros en la clase RecordMap.
Ya lo hemos desbloqueado borrando registros en la tabla de LockTable pero no se como se gestiona esta tabla.
¿Estos elementos se eliminan solos? ¿Cómo se pueden eliminar todos a la vez, en lugar de uno a uno?
Muchas gracias por la aportación. En una sola linea tienes la fórmula del DNI.
En este caso, también gestiona el NIE y se aprovecha la misma función. Por otro lado, soy mas partidiario del código mas amplio y legible, para tener un facil mantenimiento, e intentar evitar las contracciones de comandos.
Un saludo,
Francisco
La App es: Native Api Contest Template
Nota: El 28/05/2020 ha cambiado de app y ahora es IRIS OData Client
Y la otra tarjeta, se la regalo a @Félix de Federico
No te preocupes, que si me toca te compro un libro en Amazon ![]()
Muchas gracias y felicidades a @Jacobo Rios Bordas y @Carlos Collazo Fernández por su premio.
Efectivamente,
El problema está en el backspace ($c(8,......)) porque en una simulación en HTML no es reconocido ese caracter.
Prueba a cambiar por esta linea:
f r v#1 q:(v?.1n) w " !no number", $c(27,91)_12_"D"
Esto sería la sentencia ESC[12D que sería lo mismo pero el WebTerminal si sabría interpretarlo
Espero que te sirva de mucha ayuda
Un saludo,
Kurro López
Recuerda, puedes usar los comandos ESC que funcionarán en ambos entornos
Échale un vistazo a este link sobre las secuencias Ansi ESC
http://ascii-table.com/ansi-escape-sequences.php
Buena suerte.
Un saludo,
Kurro López
Buenas, en el foro en inglés me han dado varias soluciones y os expongo la que he tomado finalmente
He añadido un nuevo método en la clase Request
De este modo, encuentro mi Lab-Center
> set obj=##class(ListLabCenter).%OpenId(1)
> zw obj
obj=<OBJECT REFERENCE>[2@ListLabCenter]
+----------------- general information ---------------
| oref value: 2
| class name: ListLabCenter
| %%OID: $lb("1","ListLabCenter")
| reference count: 2
+----------------- attribute values ------------------
| %Concurrency = 1 <Set>
+----------------- swizzled references ---------------
| i%ListCenter = ""
| i%ListCenter(1) = $lb($lb("A08829848","A088298480001",""))
| i%ListCenter(2) = $lb($lb("A08829848","A088298480002",""))
| i%ListCenter(3) = $lb($lb("A08829848","A088298480003",""))
| i%ListCenter(4) = $lb($lb("U66700196","U667001960002",""))
| i%ListCenter(5) = $lb($lb("U66700196","U667001960003",""))
| r%ListCenter = "1@%Collection.ListOfObj"
| r%ListCenter(1) = "3@LabCenter"
+-----------------------------------------------------
> set objFind = ##class(LabCenter).%New()
> set objFind.LabId="A08829848"
> set objFind.Center="A088298480003"
> zw objFind
objFind=<OBJECT REFERENCE>[5@LabCenter]
+----------------- general information ---------------
| oref value: 5
| class name: LabCenter
| reference count: 2
+----------------- attribute values ------------------
| Center = "A088298480003"
| Code = ""
| LabId = "A08829848"
+-----------------------------------------------------
> w obj.Find(objFind)
3
> set objFindFake = ##class(LabCenter).%New()
> set objFindFake.LabId="FAKE"
> set objFindFake.Center="A088298480003"
> w obj.Find(objFindFake)
0Un saludo a todos
Me parece una buena idea. Quería sacar la certificación este año, y lo del Virtual Summit me ha venido de lujo.
Muchas gracias David.
Un saludo,
Kurro
Muchas gracias Alberto, me ha venido genial.
Un saludo,
Kurro