This is not a trick, but expansion of example from page Custom ACK Example combined with example from page Raising and Catching Errors, spiced with ‘retry’ module applied ‘as is’.
Note: This is the same example Retrying a Custom ACK, but with a some extra explanatory comments added to the code. The code is also in our repository.
require('retry')
-- main() is given the original HL7 message.
function main(Data)
local Msg = hl7.parse{vmd='ack.vmd', data=Data}
local Ack = hl7.message{vmd='ack.vmd', name='Ack'}
Ack.MSH[3][1] = Msg.MSH[5][1]
Ack.MSH[4][1] = Msg.MSH[6][1]
Ack.MSH[5][1] = Msg.MSH[3][1]
Ack.MSH[6][1] = Msg.MSH[4][1]
Ack.MSH[10] = Msg.MSH[10]
Ack.MSH[9][1] = 'ACK'
Ack.MSH[11][1] = 'P'
Ack.MSH[12][1] = '2.6.1'
Ack.MSH[7][1] = os.date('%Y%m%d%H%M%S')
Ack.MSA[1] = 'AA'
Ack.MSA[2] = Msg.MSH[10]
Ack.MSA[3] = "Everything was okay dokay!"
local s = Ack:S()
local Success, Err = pcall(retry.call,
{ func = ack.send, arg1 = s, retry = 10, pause = 2} )
if not Success then
print("Skipping error: "..Err)
end
end
It has been several times that people asked how to combine these all together, so maybe this page will save few emails 🙂