Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Say you have a text file with a bunch of HL7 messages. Each segment ends with \r. And each message ends with \n. Here’s the a sample file attached:

View file
namemessages.hl7

You could use the simulator component and feed it in via an HL7 Server - but honestly it’s probably easier to write you own little simple component and feed the data directly into the component you are testing.

Expand
titleUse a custom field for the input file name

See Custom Fields Here we use ~/test.txt for the default location of the input file. Take a look at Custom Fieldsif you haven’t already.

You access that the field with:

Code Block
languagelua
local FileName = component.fields()
Expand
titleRead in the file using the FIL library with FILread

The FIL libraryLibrary makes it really easy to inhale the file:

Code Block
languagelua
local Content = FILread("main.lua");
Expand
titleExamine the file contents in the translator - each segment ends in \r but the message ends with \n characters

We can easily see this by looking at the contents of the file using escaped mode of:

The string viewing window

Expand
titleThen we split the contents on the \n with local List = Content:split("\n")

See String:split(). The List contains a Lua table as list with the messages.

Code Block
languagelua
local List = Content:split("\n")
trace(#List)   
Expand
titleWith a for loop we can push these messages into the queue:

See Lua table as list

Code Block
languagelua
for i=1, #List do
   queue.push{data=List[i]}
end

And now we have a working test component!

...

Expand
titleAdd some custom logging

Let’s add some Custom Logging

Just added lines 7 and 11 to the script:

Code Block
languagelua
function main(Data)
   local F = component.fields().InputFile
   trace(F)
   local Content = FILread(F)
   local List = Content:split("\n")
   trace(#List)  
   iguana.logInfo("#start About to queue "..#List.." messages");
   for i=1, #List do
      queue.push{data=List[i]}
   end
   iguana.logInfo("#end Finished queueing "..#List.." messages");
end
Expand
titleAnd some custom status

See Custom Status

Code Block
languagelua
require "FIL.FILreadWrite"

function Status(N, Total)
   component.setStatus{data="Sending "..N.." of "..Total}  
end

function StatusDone(Total)
   component.setStatus{data="Completed sending "..Total.." messages."}
end

function main(Data)
   local F = component.fields().InputFile
   trace(F)
   local Content = FILread(F)
   local List = Content:split("\n")
   trace(#List)  
   iguana.logInfo("#start About to queue "..#List.." messages");
   for i=1, #List do
      Status(i, #List)
      queue.push{data=List[i]}
   end
   StatusDone(#List)
   iguana.logInfo("#end Finished queueing "..#List.." messages");
end

...