Trying to send dynamic address to a FHIR connection using ws-rawclient protocol

Homepage Clovertech Forums Cloverleaf Trying to send dynamic address to a FHIR connection using ws-rawclient protocol

Tagged: ,

  • Creator
    Topic
  • #114279
    Marla Fallin
    Participant

    We are currently in development to pull med administrations out of Cerner via a FHIR connection.  We currently use cloverleaf to establish this connection which I’ve been able to successfully get working with the Cerner sandbox.  I’m using a java/ws-rawclient protocal with the Cerner sandbox address.  (see screen shot)   However, I’ve been having to hard code the patient ID in order to retrieve data. I want to be able to establish a dynamic address in order to trigger the connection.   Has anyone been able to do this with using cloverleaf?   THANKS!!

    Attachments:
    You must be logged in to view attached files.
Viewing 8 reply threads
  • Author
    Replies
    • #114627
      Tipu Razaq
      Participant

      You’ll have to edit the metadata of the message before it’s sent outbound using a TCL script, specifically the USERDATA httpRequestInfo keyedlist. You’ll need to override the requestURL key.

       

      We put our script in Route Messages on the route itself.

       

      Steps:

      Create the new URL you want to send the message to like so, for example:

      set userData {{httpRequestInfo {{requestURL <NEW URL>}}}}

      Then set the message’s metadata like so:

      msgmetaset <message handle> USERDATA $userData

      Then CONTINUE the message to it’s destination.

       

      You may want to use the TCL keyedlist commands because the way we have it setup in our script the URLs are known & hard-coded which is why we’re using braces. We have only 3 we need, but in your case you’re setting it based on patient IDs so you don’t know them beforehand. You’ll need those TCL keyedlist commands such as keylkeys, keylget, keylset, etc so you can be more dynamic.

      • This reply was modified 4 years, 9 months ago by Tipu Razaq.
      • #117618
        Brian
        Participant

        This is great stuff and totally saved my day.

        Where in the documentation do you find the udata which is used by the WS protocol? (or by any other protocol for that matter) I’ve tried finding it, because I was certain that something like requestURL would exist. But guessing the name was out of my reach 🙂

        Thanks.

      • #117679
        Tipu Razaq
        Participant

        Glad it was helpful!

        Cloverleaf documentation really lacks and their WebService adapter is very bare-bones, you have to do a lot of the work through scripts. Not sure why Cloverleaf doesn’t provide adequate documentation. Perhaps they want you to use their “consulting services”.

        I found out through trial and error and also the very helpful command, msgdump. I used that command in my script to output message info to the log, including all metadata so that’s where I saw the requestURL key.

    • #115021
      Marla Fallin
      Participant

      Hi Tipu,

      This has been very helpful information.  I’ve tried creating a very basic tclproc that I’ve been running on the outbound tab.  Below is the main body of my tcl and the Error message I’m getting.  Do you happen to have an suggestions?

      For POC, I was just hard coding my medication value into the URL to see if I could get it to work that way.

       

      Main part of the tcl:

      keylget args MSGID mh
      lappend dispList “CONTINUE $mh”
      # Get the message content and HL7 Control characters
      set msgData [msgget $mh]
      set fieldsep [string index $msgData 3]
      set compsep [string index $msgData 4]
      set repsep [string index $msgData 5]

      # set meta [msgmetaget $mh USERDATA]
      # echo meta: $meta

      set myURL “https://fhir-open.sandboxcerner.com/dstu2/0b8a0111-e8e6-4c26-a91c-5069cbc6b1ca/MedicationAdministration/&#8221;
      append myURL “7283373”
      set userData “{httpRequestInfo {requestURL $myURL}}”
      echo myURL: $myURL
      msgmetaset $mh USERDATA $userData
      echo [msgmetaget $mh USERDATA]
      msgset $mh “”

       

      This looks like it builds the URL perfectly, but it’s throwing a Bad Data error and sending my URL to the error DB.

      msg: 0x0x7f78492ba078
      msgType : DATA
      msgClass : PROTOCOL
      msgState : Bad data (419)
      msgPriority : 5120
      msgRecoveryDbState: Log:update (3)
      msgFlags : 0x8002
      msgMid : [0.0.30842]
      msgSrcMid : [0.0.30840]
      msgSrcMidGroup : midNULL
      msgHostId : 3278342957
      msgOrigSrcThread : Reply_CERT2
      msgOrigDestThread : Cerner_CERT2
      msgSrcThread : Reply_CERT2
      msgDestThread : Cerner_CERT2
      msgXlateThread :
      msgSkipXlate : 0
      msgSepChars :
      msgNumRetries : 0
      msgGroupId : 0
      msgDriverControl : {_TRXID_ _HCI_static_route_}
      msgRecordFormat :
      msgRoutes :
      msgUserData : {httpRequestInfo {requestURL https://fhir-open.sandboxcerner.com/dstu2/0b8a0111-e8e6-4c26-a91c-5069cbc6b1ca/MedicationAdministration/7283373}}
      msgStaticIsDirty : 0
      msgVariableIsDirty: 0
      msgRetryTimes :
      msgTimeStartIb : 1579899178.718(Fri Jan 24 15:52:58 2020)
      msgTimeStartOb : 1579899178.968(Fri Jan 24 15:52:58 2020)
      msgTimeCurQueStart: 0.000(Wed Dec 31 19:00:00 1969)
      msgTimeTotalQue : 0.005
      msgTimeRecovery : 1579899178.966(Fri Jan 24 15:52:58 2020)
      msgEoConfig : 0x(nil)
      msgData (BO) : 0x0x7f78492ba238
      message : ”

       

      Log File:

       

      [java:java:ERR /1:Cerner_CERT2_0:01/24/2020 15:52:59] com.infor.cloverleaf.gjdws.WSRawClient processMessageFromCloverleaf:SEVERE: Caught exception trying to process message from Cloverleaf
      [java:java:ERR /1:Cerner_CERT2_0:–/–/—- –:–:–] Catch Execption:
      [java:java:ERR /1:Cerner_CERT2_0:–/–/—- –:–:–] java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map
      [java:java:ERR /1:Cerner_CERT2_0:–/–/—- –:–:–] at com.infor.cloverleaf.gjdws.WSRawClient.processMessageFromCloverleaf(WSRawClient.java:132)
      [java:java:ERR /1:Cerner_CERT2_0:–/–/—- –:–:–] at com.lawson.cloverleaf.driver.FromCloverleafLink.doMsg(FromCloverleafLink.java:46)
      [java:wrte:ERR /0:Cerner_CERT2_0:01/24/2020 15:52:59] Call to “doMsg” returned error string “BADDATA caught exception trying to processMessageFromCloverleaf: caught exception trying to process message from Cloverleaf”. Returning bad send to engine.

    • #115024
      Tipu Razaq
      Participant

      I think it’s this part: msgset $mh “”

       

      You’re setting the message to null. You need to the set it the message you’re working with. If you’re not modifying the content at all, then you can just comment that line out. Try it that way since you seem to only be modifying the message metadata (not the actual data)

    • #115025
      Marla Fallin
      Participant

      I am actually passing it a message to basically just “trigger” the process.  Right now, I’m not sending any real data and you are correct that I don’t really care about that actual data right now.  I just want to be able to build and pass the URL.

      I commented out the msgset $mh “” and it’s still saying BAD DATA, but the error db now includes my very basic message data ($mh).

       

      java:java:ERR /1:Cerner_CERT2_0:01/24/2020 16:30:38] com.infor.cloverleaf.gjdws.WSRawClient processMessageFromCloverleaf:SEVERE: Caught exception trying to process message from Cloverleaf
      [java:java:ERR /1:Cerner_CERT2_0:–/–/—- –:–:–] Catch Execption:
      [java:java:ERR /1:Cerner_CERT2_0:–/–/—- –:–:–] java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map
      [java:java:ERR /1:Cerner_CERT2_0:–/–/—- –:–:–] at com.infor.cloverleaf.gjdws.WSRawClient.processMessageFromCloverleaf(WSRawClient.java:132)
      [java:java:ERR /1:Cerner_CERT2_0:–/–/—- –:–:–] at com.lawson.cloverleaf.driver.FromCloverleafLink.doMsg(FromCloverleafLink.java:46)
      [java:wrte:ERR /0:Cerner_CERT2_0:01/24/2020 16:30:38] Call to “doMsg” returned error string “BADDATA caught exception trying to processMessageFromCloverleaf: caught exception trying to process message from Cloverleaf”. Returning bad send to engine.

      msg: 0x0x7ff6bfc40078
      msgType : DATA
      msgClass : PROTOCOL
      msgState : Bad data (419)
      msgPriority : 5120
      msgRecoveryDbState: Log:update (3)
      msgFlags : 0x8002
      msgMid : [0.0.30846]
      msgSrcMid : [0.0.30844]
      msgSrcMidGroup : midNULL
      msgHostId : 3278342957
      msgOrigSrcThread : Reply_CERT2
      msgOrigDestThread : Cerner_CERT2
      msgSrcThread : Reply_CERT2
      msgDestThread : Cerner_CERT2
      msgXlateThread :
      msgSkipXlate : 0
      msgSepChars :
      msgNumRetries : 0
      msgGroupId : 0
      msgDriverControl : {_TRXID_ _HCI_static_route_}
      msgRecordFormat :
      msgRoutes :
      msgUserData : {httpRequestInfo {requestURL https://fhir-open.sandboxcerner.com/dstu2/0b8a0111-e8e6-4c26-a91c-5069cbc6b1ca/MedicationAdministration/7283373}}
      msgStaticIsDirty : 0
      msgVariableIsDirty: 0
      msgRetryTimes :
      msgTimeStartIb : 1579901438.057(Fri Jan 24 16:30:38 2020)
      msgTimeStartOb : 1579901438.275(Fri Jan 24 16:30:38 2020)
      msgTimeCurQueStart: 0.000(Wed Dec 31 19:00:00 1969)
      msgTimeTotalQue : 0.005
      msgTimeRecovery : 1579901438.272(Fri Jan 24 16:30:38 2020)
      msgEoConfig : 0x(nil)
      msgData (BO) : 0x0x7ff6bfc40238
      message : ‘{\x0a\x09″resourceType”:”MedicationAdministration”,\x0a\x09″subject”:{\x0a\x09},\x0a\x09″_id”:{\x0a\x09\x09″id”:””\x0a\x09}\x0a}’

       

      THANKS!!

    • #115026
      Marla Fallin
      Participant

      I’ve included some screen shots of the basic set up that I’m using.  It’s totally bare bones, but I’ve been trying to just get the concepts to work before I really get into building it out.

      Attachments:
      You must be logged in to view attached files.
    • #115028
      Tipu Razaq
      Participant

      How are your threads setup? Are you sending to a Client Raw thread? Do you have a java/ws server thread?

       

      We have a java/ws-server thread that accepts incoming webservice calls and routes them to the appropriate outbound java/ws-rawclient threads.

    • #115029
      Marla Fallin
      Participant

      Right now, I just have the inbound thread set to read a file.  I haven’t set up receiving a thread that accepts inbound calls.   I am routing it to a java/ws-rawclient thread.  I’ve included screen shots in my last post that might help explain what I’m trying to do.  This is more of a POC right now so it’s pieced together while I work on getting it to work.

      • #118909
        TorfinnK
        Participant

        Hello

        I don’t know if you ever solved this problem, but I have the exact same issue.

        Did you find a solution

        /Torfinn

      • #118919
        Marla Fallin
        Participant

        Hi Torfinn,

         

        We did finally solve this issue.   Infor had supplied a “test” site called “dtcsample” which included examples of DTC processing and some FHIR processing.   As a part of that sample site, they provided some tclprocs as well. One of them is called tpsFhirSetServerUrl and this will help you set up the dynamic URL.   We did have to modify it for our own use, but this should help you get started. Initially we had it set up as a post tps which passed the dynamic URL to our PROTOCOL:java/ws-rawclient thread.

         

        Hopefully this will help you. We struggled for a very long time before we found this proc. We tried several other things including global variables, but we could never make it work any other way.   Good Luck!!

         

        Marla

      • #119017
        Feda Birani
        Participant

        Hi Marla,

        Thanks for the info. Where can i get my hands on this dtcsample site? Did you have to go to Infor directly for it or is it hidden here somewhere and i can’t find it? I’m currently on ver 6.2.4 and it’s not a sample site that comes with it. Thanks,

        Feda

      • #119734
        Bill Pitts
        Participant

        Hi Marla

        Running into the same issue

        Would it be possible to share the tpsFhirSetServerUrl  proc?

        Was this on your Cloverleaf server(s) or did Infor have to provide it?

        We’re on v19.1

        Thanks

      • #119850
        Mike Taylor
        Participant

        Hello Marla,

        We are beginning to play with FHIR configurations.  We are a Cerner client and are using Cloverleaf as well.  There are times we are looking for better ways to pull information from Cerner than using jdbc.

        I know the process for registering an app and providing  a redirect url for fhir apps with Cerner.  In this case where the request would be from Cloverleaf were you able to set it up for provisioning and the oAuth2 token to make a GET request to Cerner?  I haven’t found any documentation on how that would be achieved.

        Any information you may have would be appreciated.

    • #118958
      Paul Stein
      Participant

      This is extremely valuable info. Thanks for sharing this.

    • #119739
      Paul Stein
      Participant

      I usually get bad data errors when resending the message form smat or if the reply doesn’t have an endpoint. Try to send the message from the thread it will be routed from using an external client, like HL7Spy or SOAPUI.  Basically, if the IB message that is routing the message is trying to send a reply but doesn’t have any where to send to since it was resent via SMAT

      • #119740
        Paul Stein
        Participant

        Disregard,  intended for a different topic thread.

Viewing 8 reply threads
  • You must be logged in to reply to this topic.

Forum Statistics

Registered Users
5,129
Forums
28
Topics
9,301
Replies
34,447
Topic Tags
288
Empty Topic Tags
10