6 Followers · 241 Posts

Ensemble supports Data Transformation Language (DTL) for describing data transformations. DTL is an XML language. Ensemble provides wizards and graphical tools for creating, editing, and testing DTL transformations. A data transformation is a Caché class like the following. If you prefer you can use Studio to edit the class definition directly and bypass the wizards and graphical tools.

Documentation.

Question Colin Brough · Jun 6, 2023

One of our development Ensemble instances is misbehaving. We suspect we'll just need to reinstall it - which would be a hassle. Before we do, we wanted to check we weren't missing some kind of easy fix. The symptoms we are seeing:

  1. A Cache process is running at 100% CPU on one core of the server - its the TASKMGR process
  2. That Cache process resumes at 100% on Ensemble restart, and indeed after server reboot
  3. There might be evidence of corruption in the task schedule: there's a "next scheduled date" of 1840-12-31 00:05...! (yes, we know that's $HOROLOG zero), and Description message that look
12
0 661
Question Sebastian Thiele · May 31, 2023

Hi all,

I am looking for a way to serialize fhir content received via interoperability adapter into it´s corresponding ISC model class (e.g. HS.FHIR.DTL.vR4.Model.Resource.DiagnosticReport) for later use. In my opinion the outline to accomplish this would be something like

1) Receive the FHIR data
2) Get quick stream containing the JSON data
3) Examine if bundle or single ressource
4) For resource serialize to coressponding model class (HS.FHIR.DTL.vR4.Model.Resource.*)
5) further use of newly created object of type HS.FHIR.DTL.vR4.Model.Resource.*

Of course something like set tObj = {}.%FromJS

3
0 321
Article Yuri Marx · Aug 25, 2022 8m read

EHR (Electronic Health Record) systems are modeled in a proprietary format/structure and are not based on market models such as FHIR or HL7. Some of these systems can interoperate data in a proprietary format for FHIR and other market models, but others can not. InterSystems has two platforms that can interoperate proprietary formats for market ones: InterSystems HealthShare Connect and InterSystems IRIS for Health. The transformation functionality (DTL - Data Transformation Language) of these platforms can receive data in any format, structure, or communication channel (CSV, JSON, XML, and ot







1
6 1248
Question Oliver Wilms · Mar 21, 2023

Hello, I want to show a fellow DC member how to convert JSON file into HL7 message. I personally do not work with HL7. I set up a production with EnsLib.File.PassthroughService. It passes Ens.StreamContainer to BPL process. I call a DTL to transform StreamContainer to HL7 message. I run into an error:

ERROR <Ens>ErrBPTerminated: Terminating BP JSON2HL7 # due to error: ERROR #5035: General exception Name 'Parsing error' Code '3' Data ''
> ERROR #5035: General exception Name 'Parsing error' Code '3' Data ''

The code is in this GitHub repo:

https://github.com/oliverwilms/HL7

2
0 834
Article Julian Matthews · Jul 21, 2021 4m read

Over the years, I have found myself needing to create multiple HL7 messages based on a single inbound message. Usually these take the form of an order or result from a lab. Each time I have approached it, I have tried to start from scratch under the belief that the previous attempt could have been done better.

Recently, the need arose again and I was able to create a solution that I wasn't ashamed of. My main concern was that I would always either find myself getting buried in a BPL, or use ObjectScript and attempt to edit messages using the SetValueAt Method for the HL7 Message Class.

Probl

1
2 1463
Discussion Evgeny Shvarov · Feb 9, 2023

Hi folks!

I'm playing with IRIS interoperability at the moment and it turned out that Data Transformation cannot be the element of production by itself.

It can be called either from data rule or from business process.

But why? 

What if I just want to change the message with the transformation and transfer the message somewhere else? Why the overhead with Rule or Business process?

1
0 217
Article Jeff Morgan · Oct 21, 2016 3m read

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.


The basic stipulations for this example are as follows:

  1. Accept a PDF file
  2. Accept an HL7 message
  3. Using the name of the PDF file, embed the PDF data into the HL7 message
  4. Output the message to file




4
6 15853
Question Evgeny Shvarov · Jan 15, 2023

Hi Interoperability experts!

I'm into interoperability now with data transformations and I wonder: how can I use DTLs?

I've created one that transform Ens.Request into Ens.Response. How can I use it now in the production?

I'm trying to add the business process expecting to see it available in the list but it seems it is not the case. 

Tried documentation and it doesn't say either what to do after creation the DTL.  If it is obvious could you please help?

4
0 307
Question Glenda Anaya · Dec 19, 2019

Hi,

Is there a way to insert new Key/Value in an existing  lookup Table via a DTL code?  The only thing I found in the documentation is that we could use the following command SELECT KeyName,DataValue FROM Ens_Util.LookupTable WHERE TableName = 'myTab'. In the meantime I just created a table and  used it in my DTL to insert new values and validate if the Key exist.

Regards

2
0 711
Question Colin Brough · Dec 1, 2022

I'm testing an HL7 2.4 -> HL7 2.3.1 set of transformations. For the time being the source (service) and sink (operation) are file adapters. What I'd really like is to be able to save the output file with a name matching/containing the input file name - but as the DTL transformation in between uses "new" rather than "copy" it looks like I'm losing (some of?) the metadata, including the "Source" field (Body tab, message viewer).
Is there any way of preserving the Source field so the OutboundAdapter has access to it?


More generally, is there documentation on how message metadata is handled as mes

3
0 523
Question Chip Gore · Nov 18, 2022

In terms of general through-put design and long term support, I'm considering what would be a "best approach" for needing to create multiple batch files in a few different layouts from the same data-sets.

I need to iterate over a few very large tables to generate consistent batch outputs for different partner applications that need to be working on the same "version" of the source data. Initially, this will be 30-50 million records, and then after the 1st iteration, a "delta" version will need to be created for all followup batches (not 100% sure what percentage of the total dataset will have

0
1 528
Question Smythe Smythee · Oct 10, 2022

Hi ,

Still a newbie for ensemble, I am trying to convert XML message to HL7 Message. I am using Custom schema for XML structure which includes MSH and PID segments from HL7 Message.

These are the service, process, Operation classes i am using 

Business service-EnsLib.EDI.XML.Service.FileService

Business Process-EnsLib.MsgRouter.RoutingEngine

Business operation -EnsLib.HL7.Operation.FileOperation

I am using data transformation to convert XML message to HL7 message  and data transformation is working fine and im getting this in the business operation.

 

ERROR <Ens>ErrGeneral:

8
0 1176
Discussion Kevin Koloska · Oct 21, 2022

HI Dev's

I dont work for Intersystems but i have found this training course very helpful and wanted to make sure others know about it. 

Advanced Data Transformations

Advanced Data Transformations 

Add a for each loop.
Create and use utility functions.
Create and use lookup tables.
Use counting.
Create and implement a subtransformation.
Add a code action.
Add a group of actions to organize relevant actions.

0
0 241
Question prashanth ponugoti · Oct 19, 2022

Hi Friends,

I have a requirement to convert pdf from URL to Base64 format. I have created one utility method and used in the DTL.

Working fine for small pdf files , we got one pdf with size 4MB , this method is failing (creating corrupted base64 content).

Could you please suggest me the way to convert big pdfs?

set encodedData = ""
set request=##class(%Net.HttpRequest).%New()
    do request.Get(httpUrl)
    if request.HttpResponse.StatusCode = 200
    {
//set len = request.HttpResponse.Data.SizeGet()
    set content = request.HttpResponse.Data.Read()
    set encodedData = $system.Encryption.B

6
0 2294
Question Harshdeep Acharya · Mar 23, 2022

Hi Team,

Can you please help me to develop EDI X12 to XML and XML to EDI X12 conversion in IRIS 2021.1 for EDI 204, also known as Motor Carrier Load Tender?

Also, suggest flow for how to achieve this kind of functionality in InterSystems IRIS. If you are able to provide some Videos/Documents on the EDI X12 interface for 204 then it would be very helpful for me.

Thanks,

Harshdeep Acharya

1
0 424
Article Aya Heshmat · Oct 11, 2022 3m read

Watch the session here: HealthShare Health Connect: Tips & Tricks

Enhanced HL7 V2 Productions

1. Review of Interface Settings: Ensure these are set purposefully! (Documentation linked)

Review of Recent Product Features 

(Documentation Linked)

1. HL7 V2 Schema Editor

  • Drag & Drop tooling for faster schema editing!
  • Note: Add-on segments may be made optional if starting from a generic schema.

2. DTL Editor Enhancements

  • Improved UI a
0
0 318
Question Smythe Smythee · Sep 28, 2022

Hi ,

I am Converting HL7 message into SDA3 format by using Ens.DataTransform Class but transformation is not happening while using this class and throwing the below error

ERROR <Ens>ErrException: <UNDEFINED>zTransform+1^Hosiptal.SDA3.DataTrans.1 *target -- logged as '-' number - @' Set target.Patient.Name=source.GetValueAt("PID:5")'

Let me know if any mistake please refer the below code

Class Hosiptal.SDA3.DataTrans Extends Ens.DataTransform
{

ClassMethod Transform(source As EnsLib.HL7.Message, target As HS.SDA3.Container) As %Status
{
 
   Set target.Patient.Name=source.GetValueAt("PID:5")

15
0 647
Question Kathy Ward · Aug 9, 2022

Is there a way to compare the value in a source field against all of the values in a repeating field?  For example, we have multiple DG1 target segments populated.  Is there an easy way to check a source DG1 segments against all of the target DG1 segments?  I didn't know if there is a wild card I can use for the comparison.

1
0 371
Question Kurro Lopez · Dec 19, 2016

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

6
0 1601
Question Daniel Lee · Jul 28, 2022

I have an existing DTL and I need to insert a trace statement so that it writes the value of the target object. However, I haven't been successful in completing this. 

I have opened the DTL viewer in Studio, and have inserted a trace statement. 

  • If I insert just plain text, the trace statement works, e.g., Value="Hello World"
  • If I insert the target variable, it does not work, e.g., target.Patient.Allergies.(k1).AllergyID. For this value, compile fails with an InvalidName error ERROR #1011: Invalid name : '##class(Ens.Util.Trace).WriteTrace("user","PHI.DTL.SDAtoACX","Transform",targe
1
0 539
Question Julian Matthews · Jun 10, 2022

Hi all.

I have a transform that I am calling from within an objectscript process, and I need to pass it a few values. I have in the past done this using the aux property, however I have got away with only needing to pass in a single value, so I have not had to worry about passing in anything other than a string container.

My initial thoughts were to create a custom message class with the properties I require and then pass this in as the aux value to the Transform, however I'm really unsure if this message class would then get picked up by my productions purges and I'd like to avoid filling u

2
0 385
Question Scott Roth · Jun 3, 2022

I noticed today that when we are creating a message from one doc type to another doc type, that the message type categories are not necessarily set. This is causing some issues with routing rules when we try to reference the Message Type Categories. Is there a way to make sure the Message Type Categories are being set within a DTL to make sure this doesn't cause problems down the road?

Thanks

Scott

7
0 484
Announcement Marcus Wurlitzer · May 29, 2022

Hi, I am glad to announce another submission to OpenExchange and the current contest, the FHIR Pseudonymization Proxy. The FHIR Pseudonymization Proxy adds a transparent pseudonymization layer to any existing FHIR server, enabling clients to perform queries on the FHIR server – which may contain personal identifying information – and receive an on-the-fly pseudonymized version of the data.

The proxying mechanism is realized with the IRIS for Health platform through an interoperability production, BPLs and DTLs, and the FHIR interoperability adapter. The pseudonymization includes all IDs and p

smiley

0
2 366
Question Steve Pisani · Apr 1, 2022

Hi

I have an a Ens.Request subclass (Invoice) that has a relationship property to another persistent class (InvoiceItems), with properties of its own and the inverse relationship defined referring back to Invoice. 

When building a DTL with these classes, the Relationship’s inverse relationship (Invoice, within InvoiceDetails) is displayed.   

Can this be hidden ? 

thanks

5
0 381
Question John Klahn · Apr 28, 2022

Good afternoon,

I'm trying to take an unformatted social security number and insert the dashes into it.  I'm getting a value in PID-19 like this:  "123456789" and would like to use a data transformation to set the value in PID-19 to "123-45-6789". 

I can't find any insert or append functions and I can't find anything in the Intersystems doc repository that would do this.  Can someone help point the way for me please?  I would like to keep this as a "set" action in my DT.  I'm a little new to calling classes so it would be helpful if you included some syntax that would go in the "Value" field

12
0 793
Question Nicky Zhu · Sep 3, 2018

Hi, guys,

I've written a DT for a partner which transfers a csv file into SDA3. 

I', using record map to gather data from a folder storing csv files and using the DT to tranfer the records into sda3 entities.

The followings are the codes of that DT:

Class POC.DT.CSV2SDA3 Extends Ens.DataTransformDTL [ DependsOn = (User.PhysicalExam.Record, POC.SDA.Container) ]

{

Parameter IGNOREMISSINGSOURCE = 1;

Parameter REPORTERRORS = 1;

Parameter TREATEMPTYREPEATINGFIELDASNULL = 0;

XData DTL [ XMLNamespace = "http://www.intersystems.com/dtl" ]

{

<transform sourceClass='User.PhysicalExam.Record' targetClass='POC.SDA.C

1
0 434