This article will describe and include an example of how to embed an external PDF file into an HL7 segment, specifically ADT_A01:2.3.1 OBX().  This can be useful when attempting to insert pictures or other external data into an HL7 message.  In this example, the name of the PDF file to be embedded is provided in the incoming HL7 message in OBX(1):ObservationValue field.

2 3 6,854


Hi everyone,

I am very pleased to announce that the Readmission Demo has been released as open source. Many thanks to the Solution Factory team that worked hard on making this possible.

Here are the changes:

2 0 267

DTL Transformations and GetValueAt/SetValueAt calls on HL7 messages will truncate any fields longer than 32K.  To avoid this, the methods GetFieldStreamRaw and StoreFieldStreamRaw must be used when dealing with fields that might be larger than 32K.  OBX:5 is a frequent example.  These methods have some subtleties and must be used carefully.

This can't be done by simply dragging from left to right in a DTL.  It must be done with a code action.  Also, the StoreFieldStreamRaw call must be the last edit made to the segment because the segment becomes immutable after that.

3 5 1,276

Two fairly common requests we receive from HL7 customers are (1) how to remove all trailing delimiters for fields and segments in HL7 messages and (2) how to "find and replace" for an entire HL7 message (as opposed to one segment/field at a time).  The code sample below shows a custom function that solves for item 1 and by extension item 2 above.  In other words the same approach can be used for finding/replacing any sequence of chars in an entire HL7 message, with some tweaks to the custom function.

0 6 2,104

There has been some confusion about how to edit Business Process Language (BPL) and Data Transformation Language (DTL) files in Atelier using the graphical editor. The following steps describe how to do this with Atelier version 1.0:

Copy the file you want to edit from the server to an Ensemble-enabled project in your Atelier workspace. To do this, find the file in the Server Explorer, right click and select Copy to project.

Open the file in the Atelier class editor just as you would any other class file.

1 2 636
Alberto Fuentes · Oct 23, 2019 2m read
Unit Tests for Data Transforms

Would you like to be sure your data transforms work as expected with a single command? And what about writing unit tests for your data transforms in a quick and simple way? 

When talking about interoperability, there are usually a lot of data transforms involved. Those data transforms are used to convert data between different systems or applications in your code, so they are running a very important job.

1 2 344

Do you find yourself commonly adding code actions to your data transformations? If so, what do these contain? Is there a reason you choose to add a code action over creating a custom function that you can call?

0 10 980

Hi all,

We have a big problem with spanish accent and special characters using Data Transformation (HL7 Messages).

We have some DT to transform HL7 messages to other type (OUL^R22 To OML^O21) so it copys the PID segment to the new one, but if in the PatienName field has any special character, the transformation stops and it not continues with the transformation.

This is the message

0 1 624

We have a data transformation where source is object collection (populated from a json file)  and target is EnsLib.EDI.XML.Document.

If source file is large enough, transformation fails and we get <store> error and I quickly found this: which at the bottom in "Avoiding <STORE> Errors with Large Messages" section tells to: 

0 1 177


I am trying to add an OR condition in the DTL but not able to. Sorry if this is a silly question, but can you advice?

I want to add a condition where if source.45 is "" or "..." then map "" to the target. But I am not able to add the OR condition

Currently I have as below

What will I need to do to add an "OR" condition to the DTL?

Would appreciate your guidance



0 2 337

XML Virtual documents introduce a powerful new way to handle XML documents in Ensemble. By providing direct DTL graphical editor that is driven from the XML schema without having to instantiate documents, and the ability to perform DOM style parsing

Ensemble EnsembleDTL
0 0 0

Does anyone know how to disable the auto-refresh in Healthshare, especially for Message viewer , Business process designer, DTL editor pages?  

These pages in management portal refresh every 15min( i.e. as per the session time out setting) . I tried to  set the following two configs to disable the auto refresh but both had no impact. 

set ^EnsPortal("DisableInactivityTimeout","Portal") = 1
set ^%SYS("Portal","EnableAutoRefresh") = 1


Thank you for your help. 


0 8 106
Paul Hula · Dec 5, 2019


   I've heard from two different sources the SMP (or parts of it) and for sure the DTL front end (in studio? via SMP?) have been rewritten to be more modern.  But on a latest IRIS Community download everything looks the same to me.  Am I missing something or is this Marketting Spin?




  Hopefully I won't get banned for this post aswell......


0 2 186

I installed Atelier on Windows in order to take a look at how the BPL and DTL graphical editors accessible via the "Open diagram editor" action work. The diagram editor is opened but I get the following error:

Message from webpage
Unable to load SVG diagram. Please ensure your browser is supported for portal access.

It looks like Atelier uses IE in order to display the editor even though my Windows default browser is Chrome.

0 8 497

Way back when during our Siemens LCR days we had to limit the number of characters in OBX.5 to a length of 75. That was back when we had eGate.

Now I need to do the reversal of that and take loop through a string length and split the string up into multiple OBX or NTE based on a certain length. In reading documentation $EXTRACT can do this if you know the exact length, but in this case we don't. 

So how would one loop through a string and say every 75 characters create a new OBX or NTE segment?



0 6 1,479

Consider the below scenario:

1. HL7 Service -> Process

2. DTL makes a call to a webservice (Post) via a REST operation via SendRequestSync call.

        a. if the post is successful, end the DTL

        b. if the server that hosts the webservice is down, i would like to keep retrying with the same message and not lose any messages in the queue.

does a simple "quit 0" at the DTL will  rollback the message and will retry? please let me know how not to lose any messages if the webservice server is down.

Appreciate it.

1 8 311


Does anyone have a sample that demonstrates how to use the Data Transformation option create='existing', in order to update an existing object by its ID?  My use-case is that I have an HL7 message coming in which contains data on a patient that may or may not already exist in a (non-HL7) table.  I want to use the PatientID from the (source) HL7 message, check if that patient exists in the (target) object, and if so, insert some new data into the existing patient, or if not, create a new patient.


0 3 431
Kurro Lopez · Dec 19, 2016
HL7 Section to JSON

Hi all,

I'm trying to convert a HL7 section to a XML or JSON string.

We need to save the content of PID section into a SQL Column, therefore we need to convert it into a XML o JSON string

is there any easy way to convert it?

I've tried to convert it directly into a DTL, but all my attempts have been unsuccessful

Best regards,

Francisco Lopez

0 4 790

I  have a business service that brings in a xml virtual document to the production and also a csv service  that brings in a csv file and have a process that transforms both to a xml output  but I have a problem with the csv as it is giving me this error when I try to trans form it ```ERROR <Ens>ErrException: <PROPERTY DOES NOT EXIST>zOnRequest+1 ^EnsLib.MsgRouter.VDocRoutingEngine.1 *DocType``` I have read here followed the suggestion but now I do not get any errors but my m

0 5 346


I have a delimited flat file that I need to read and then generate an HL7 A08 message from the fields in the file.  I used the Management Portal's Record Mapper to generate the Map.Record class, then used drag & drop to map fields in the delimited flat-file to an A08 message.

But when I try testing this in the test tool, I'm getting an ERROR #6254: Tag expected . XML input. ... is not in proper format as child of Record (ending at line 2 character 11).

0 2 244

Hello All

I'm not sure what the best practice is for this. I have a DTL for returning ORUs back to a hospital in a different time zone. They have requested that various timestamps have the time zone offset added to the HL7 format (%q%k, I think). First, I just wanted to be sure the system was aware it was DST. I was able to determine if DST is in effect like this:

0 4 162
David Loveluck · Sep 28, 2015

Ensemble is based on message flow, and a data transformation is a way to convert from one message type to another. DTL (Data Transformation Language) adds a layer to this - it provides a graphical way to do the conversion. This is really helpful because most of the time, people with domain-specific knowledge may not have extensive coding skills. However, you always have the ability to do some coding, so if you need or want to, this is available.

DTL has several components: the data transformation engine, the language itself, and the DTL editor.

0 0 0

Hello Community,

I need advice converting a comma delimited string container with multiple records into some type of recordmap that iterates through all the records.

My string container has several records and I would like to loop through the number of records in the string container and transform each record in the container individually. Number of records will vary but the number of fields per record is static (28 fields). Meaning after every 28 fields, a new record begins. The goal is to convert to individual delimited flat file records.

0 2 315
Dhaval Shah · Jan 24, 2019
How to make a XML Message ?

Hi All,

Actually I am trying to implement a RESt API where in I will get ZIPCODE as request and I need to call external API which will take ZIPCODE as input and give State and City in response.

But the problem is the request is in XML Format and also response is in XML format.

Example :

0 2 271