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