Hi Vic,

Thank you for this. I used the code that Eduard had referenced for the Iterate method and was able to use a Trace to see all the relevant values and keys. The code I have used so far is as follows including the traces are:

Method Iterate(object As %DynamicAbstractObject, level = 0, path = "object")
{     set iterator = object.%GetIterator()
        set indent = $j("", level * 4)
    #dim iterator As %Iterator.Array
    set iterator = object.%GetIterator()
    while iterator.%GetNext(.key, .value) {
        set type = object.%GetTypeOf(key)
        set key=key
        $$$TRACE("key: "_key)
        set type=type
        $$$TRACE("type: "_type)
        if $classname(object) = "%Library.DynamicArray" {
            set newPath = path _ ".%GetAt(" _ key _ ")"
        else {
            if $zname(key, 6) = 1 {
                set newPath = path _ "." _ key
            else {
                set newPath = path _ ".""" _ key _ """"
        set path1=newPath
        $$$TRACE("path: "_path1)
        if $isObject(value) {
            do ..Iterate(value, level + 1, newPath)
        else {
            set value=value
            $$$TRACE("Value: "_value)

I have come across some problems with the HL7 message generation within the iterate method. I am unsure as to where to place the code to generate message and how to code the relevant keys/value in the relevant segments.  I tried to place the code as below :

while iterator.%GetNext(.key, .value) {

 Set RefMess = ##class(EnsLib.HL7.Message).%New()
Set RefMess.DocType="2.4Epic:REF_I12"

but this code caused for multiple messages to be created and I was unsure what the trigger was. I have tried to place the code outside the while loop and it still produced less than expected messages as I would expect a message to be triggered for each patient within my response. Do you have any suggestions on where the message generation code should go and also how to set the value from the response into a particular segment?