Connexion.Core Interface Changes

In Connexion v14, some work has gone into the Connexion.Core library to make the interface easier to use. This has resulted in some required changes to devices that make use of this library. This document list the changes that were made.

The primary reason for the change is to make the programming model easier to use when dealing with HL7 field repeats, components, and subcomponents.

In v13 of Connexion a field has a list of HL7Subcomponents, in v14 the hierarchy has been expanded so that it represents the hierarchy inherent in HL7: fields have a list repeats, repeats have list of components, and components have a list of subcomponents.

We believe that the new programming model is easier to understand, and use, however; the down-side is that some devices will need to have some minor changes made to them to have them run in v14. For the most part, unless you are shuffling repeats, components, and subcomponents around, your code will not be impacted by the changes. For example, in the Poiesis.Device, which is a fairly complex device, only required us to replace 3 occurrences of Segment with HL7Segment.

The other change that will cause v13 to v14 device compatibility issues is that we make extensive use of the async functions available in the .NET 4.5 framework. Therefore, new devices in v14 will need to be compiled against the .NET 4.0 framework.

 

Connexion v13Connexion v14
32-bit only64-bit, option to run channels within a tab in 32-bit mode
Connexion.Core version 1.0.0.0Connexion.Core version 14.0.0.0
Compiled against .NET 4.0Compiled against .NET 4.5
class Segmentclass HL7Segment
class Fieldclass HL7Field
class FieldList<T>class HL7FieldCollection<T>
n/aclass HL7Repeat
n/aclass HL7RepeatCollection<T>
n/aclass HL7Component
n/aclass HL7ComponentCollection<T>
n/aclass HL7SubcomponentCollection<T>

Iterating through nodes in the 1st repeat of the 7th field

var field= segment.Fields[7];
foreach(HL7Subcomponent sub in field.Repeat(1))
{
    // DO SOMETHING
}

Iterating through nodes in the 1st repeat of the 7th field

var field= segment.Fields[7];
var repeat = field.Repeats.FirstOrDefault();

foreach(HL7Component comp in repeat.Components)
{
    foreach(HL7Subcomponent sub in comp.Subcomponents)
    {
        // DO SOMETHING

    }
}

 

Field.RepeatCountHL7Field.Repeats.Count
.ValueIn v14, only the subcomponent has the .Value method, use .Set
if you want to set the value of an entire field, or component.
interface IMessageChannel

IMessageContext PostMessageOnChannel(object message);
has been removed

Instead use these 2 calls:
IMessageContext CreateMessageContext(object message=null);
void PostOnChannel(IMessageContext messageContext);

KeyValueMessage: Dictionary<string, string> Fields was public
now it is marked internal.
Use new methods on the KeyValueMessage for Adding and Removing
items.

MessageContext.AddAttachment
MessageContext.GetAttachment
MessageContext.RemoveAttachment
MessageContext.ListAttachments

MessageContext.Attachments.Add
MessageContext.Attachments[string name]
MessageContext.Attachments.Remove
MessageContext.Attachments.List

IMessageChannelIMessageChannelDevice
IClientChannel.OnBeforeChannelSavedIDeviceUiParams.OnBeforeChannelSaved
IClientChannel.OnAfterChannelSavedIDeviceUiParams.OnAfterChannelSaved