Source code
Contents
Here is the source code for the highrise module. To use it:
- Create a new shared module called “highrise” and copy paste in the code below.
- Add the code require(‘highrise’) at the top of the main module.
- Test using sample data.
Code for main:
require('highrise')
URL_p='https://interfaceware.highrisehq.com/people.xml' -- url for people (create or read all)
URL_fs='https://interfaceware.highrisehq.com/people/70421633-fred-smith.xml' --individual example url for read
function main(Data)
print(highrise,_G)
local msg, name = hl7.parse({vmd = 'demo.vmd', data = Data})
local T = highrise.InsertTemplate()
T=mapPatientData(T,msg,name)
-- read an individual contact from highrise
local R,C,H = net.http.get{url=URL_fs,live=true,
auth={username='Your Highrise API Token here', password='X'}}
print(C,R,H)
-- read all contacts (only change is the URL)
R,C,H = net.http.get{url=URL_p,live=true,
auth={username='Your Highrise API Token goes here', password='X'}}
print(C,R,H)
-- create a new contact in highrise
R,C,H=net.http.post{url=URL_p,live=false, -- live=true, -- for testing
auth={username='Your Highrise API Token goes here', password='X'},
headers={['Content-Type']='application/xml'},
body=T:S()
}
print(C,R,H) -- code 201 (c=201) is a successful insert
end
function mapPatientData(Xml,Msg,Name)
if Name=='ADT' then
Xml.person["first-name"][1]=Msg.PID[5][1][2]
Xml.person["last-name"][1]=Msg.PID[5][1][1][1]
end
return Xml
end
, 'fIncludeLineNumbers
Code for highrise module:
highrise={}
function highrise.InsertTemplate()
return xml.parse
{data=
'<person>'..
' <first-name>#</first-name>'..
' <last-name>#</last-name>'..
-- ' <background>#</background>'..
-- ' <title>#</title>'..
-- ' <company-name>#</company-name>'..
'</person>'
}
end
function node.S(ANode)
return tostring(ANode)
end
Possible modifications interesting notes etc:
- You need to use the API token from your own Highrise account to logon (replace “Your Highrise API Token here” on lines 14, 18 and 23 of main)
- Gotcha: you need placeholders like # in the XML template (highrise module), deleting them causes errors in mapPatientData() – try it and see if you want.
- There are three other Contact fields you can include in the insert <background>, <title> and <company-name>
- Adding personal details to contacts
- When I tried an insert including contact data (email, phone, address etc) the <contact-data> segment was ignored
- When I tried an insert with a <tag> segment the insert failed
- Try an update using the Contact Id in the returned Header Message (the H return in the code)
- The XML formats on the highrise API reference page are not 100% clear, I suggest using Highrise to update a contact , and looking at the returned XML.
Continue: Test the channel