Puede descargarse desde aqui:
https://docs.google.com/open?id=0B3mMOmL380ZJZTgxNmFhNTQtOTI5ZC00ZjQ3LTliOTctMDY2ZWExNjY4NTBj
Set tSC = ##class(Ens.Director).CreateBusinessService("MyService",.tService)
Aqui esta el paso 2 de la academia.
En este ocasión en el video veremos un paso a paso para realizar la creación de una producción básica de gestión de mensajería HL7. Posteriormente en los siguientes pasos utilizaremos esta producción quitando, añadiendo y configurando componentes.
Atención si seguis el video tened en cuenta que a la hora de crear la producción el nombre del paquete "academia" va en minúsculas. Si no lo hacéis así en pasos posteriores os dará problemas ya que tendréis que importar clases en ese paquete (que debe tener exactamente ese nombre).
Aqui está el primer video de la academia de Ensemble del pasado Simposio de InterSystems 2011 que tuvo lugar en Valencia (25 y 26 de Mayo).
Para entender los objetivos de la academia podeis ver la presentación inicial
Descarga la presentación en PDFSi seguis el video tened en cuenta que esta academia esta presentada con una versión preliminar de la futura 2011.1 que aún no está liberada. Lo hicimos así para que pudierais comenzar a familiarizaros con el nuevo interfaz.
En ocasiones nos puede interesar consultar mediante código si un servicio determinado está o no habilitado.
Para eso he implementado este método de clase que puedes agregar a tu clase o a otra más general de la que heredar, y luego invocarlo según interese:
ClassMethod IsServiceEnabled() as %Boolean
{
#dim tSC as %Status
#dim productionName as %String
#dim productionStatus as %Integer
set tSC= ##class(Ens.Director).GetProductionStatus(.productionName,.productionStatus)
#dim config as Ens.Config.Production
set config = ##class(Ens.Config.Production).%OpenId(productionName)
#dim item as Ens.Config.Item
set item=config.FindItemByConfigName(..%ClassName(1))
quit item.Enabled
}
Si tienes mensajes con campos de más de 32 Kb (por ejemplo un mensaje con un OBX de radiología que tenga un texto de más de 32 KB) y realizas una manipulación directa de ese campo desde un DTL (una manipulación puede ser una copia directa cuando transformas de XML a ER7). Entonces EL VALOR SE TRUNCA A 32 KB.
Para hacerlo correctamente hay que hacerlo de una manera especial:
For DTL's that provide transformation on segments with fields > 32k, there are some different things that need to be done. For the purpose of my explanation, lets assume my OBX:5 field is > 32K.
Basically, if you have a DTL that makes no changes to any part of the OBX segment, and are using a copy, there is nothing different you need to do. If you are adjusting a field (the most likely case) we will need to use some stream manipulation.
What happens is that Ensemble stores segment data in 32k chunks internally. While providing the string value, it returns only the contents of the first chunk. This will also occur even if the long strings are enabled.
To get around this, you need to use the ReadRawDataStream and StoreRawDataStream of the EnsLib.HL7.Segment class.
The behavior of ReadRawDataStream is
0) If you do not specify a property path the whole of the segment is returned
1) If the field you want is < 32K, you just get that field
2) If the field you want is >32K, you get from that field to the end of the segment.
3) If the field you want is after the 32K field you get nothing returned. ReadRawDataStream was intended for use when the final field of the segment was greater than 32k.
I've included a sample below. In this case, I want to manipulate a field prior
to 5 (the > than 32)
If you want to manipulate 5 or a field after it, you would have to use standard stream manipulation.The test transformation is studio does also have a 32K limit, but that is not related to what is actually happening when the message passes through.
Saludos
Dejo a disposición un documento resumen con las tareas básicas de administración de Ensemble como puede ser:
- Controlar la instancia
- Gestionar las Bases de Datos
- Gestionar las copias de seguridad
- Gestionar las producciones
- Gestionar tareas programadas
Hay dos maneras,
1. Desde dentro de Ensemble: Puedes crear un BS que tenga un adaptador de tipo "Ens.InboundAdapter" que solo tiene un intervalo de llamada y opcionalmente programar su ejecución mediante el setting "Programar" (http://docs.intersystems.com/ens20102/csp/docbook/DocBook.UI.Page.cls?KEY=EGMG_items#EGMG_items_host_schedule). El BS solo envía un mensaje al BP/BO para que haga lo que tenga que hacer.
2. Desde fuera de Ensemble: Crear un BS sin adaptador y luego invocarlo desde una rutina o método de clase que es planificado por una tarea programada. Esta forma es más potente pero requiere la creación de la tarea en el portal de gestión general (no el de Ensemble). La tarea programada la puedes ajustar a tus requerimientos de ejecución temporal (http://docs.intersystems.com/ens20102/csp/docbook/DocBook.UI.Page.cls?KEY=GSA_manage#GSA_manage_taskmgr). Las tareas predefinidas están en el paquete %SYS pero hay posibilidad de crear tareas personalizadas (Clases que heredan de %SYS.Task.Definition), además existe una tarea predefinida o personalizada puede ejecutar un código cualquiera eligiendo como tipo de la tarea RunLegacyTask.
La invocación del BS en este caso sería algo como:
#dim tSC as %Status
#dim bs as MiServicio
set tSC=##class(Ens.Director).CreateBusinessService("NombreDeConfiguracionDelServicio",.bs)
do bs.MetodoDelServicio(parametros)