[613] | 1 | XOBVRH ;mjk/alb - VistaLink Request Handler Utilities ; 07/27/2002 13:00
|
---|
| 2 | ;;1.5;VistALink;;Sep 09, 2005
|
---|
| 3 | ;;Foundations Toolbox Release v1.5 [Build: 1.5.0.026]
|
---|
| 4 | ;
|
---|
| 5 | QUIT
|
---|
| 6 | ;
|
---|
| 7 | ; ------------------------------------------------------------------
|
---|
| 8 | ; Message Type Handler Utilities
|
---|
| 9 | ; ------------------------------------------------------------------
|
---|
| 10 | ;
|
---|
| 11 | ; -- set up msg type info using message name
|
---|
| 12 | MSGNAME(XOBMSG,XOBHDLR) ; -- set up msg type info
|
---|
| 13 | QUIT $$SETMSG(XOBMSG,"NAME",.XOBHDLR)
|
---|
| 14 | ;
|
---|
| 15 | ; -- set up msg type info using message type
|
---|
| 16 | MSGTYPE(XOBMSG,XOBHDLR) ; -- set up msg type info
|
---|
| 17 | QUIT $$SETMSG(XOBMSG,"MSGTYPE",.XOBHDLR)
|
---|
| 18 | ;
|
---|
| 19 | ; -- set up msg type info using proprietary string
|
---|
| 20 | MSGSINK(XOBMSG,XOBHDLR) ; -- set up msg type info
|
---|
| 21 | QUIT $$SETMSG(XOBMSG,"D",.XOBHDLR)
|
---|
| 22 | ;
|
---|
| 23 | CACHE(XOBHDLR) ; -- cache req handlers
|
---|
| 24 | NEW TYPE,TYPE0,XOBOK
|
---|
| 25 | SET TYPE=0
|
---|
| 26 | SET XOBOK=1
|
---|
| 27 | ;
|
---|
| 28 | ; -- load request handler info
|
---|
| 29 | FOR SET TYPE=$ORDER(^XOB(18.05,"AS",1,TYPE)) QUIT:'TYPE DO QUIT:'XOBOK
|
---|
| 30 | . SET TYPE0=$GET(^XOB(18.05,TYPE,0))
|
---|
| 31 | . DO SET(TYPE,TYPE0,.XOBHDLR)
|
---|
| 32 | . SET XOBOK=$GET(XOBHDLR(TYPE))
|
---|
| 33 | . IF 'XOBOK SET XOBOK=XOBOK_U_$GET(XOBHDLR,"ERROR")
|
---|
| 34 | QUIT XOBOK
|
---|
| 35 | ;
|
---|
| 36 | ; -- set up msg type info
|
---|
| 37 | SETMSG(XOBMSG,XOBXREF,XOBHDLR) ;
|
---|
| 38 | NEW TYPE,TYPEO
|
---|
| 39 | KILL XOBHDLR(0)
|
---|
| 40 | ;
|
---|
| 41 | ; -- already cached?
|
---|
| 42 | SET TYPE=$ORDER(XOBHDLR(XOBXREF,XOBMSG,""))
|
---|
| 43 | IF TYPE QUIT TYPE
|
---|
| 44 | ;
|
---|
| 45 | ; -- load req handler
|
---|
| 46 | SET TYPE=+$ORDER(^XOB(18.05,XOBXREF,XOBMSG,""))
|
---|
| 47 | IF TYPE DO
|
---|
| 48 | . SET TYPE0=$GET(^XOB(18.05,TYPE,0))
|
---|
| 49 | . DO SET(.TYPE,.TYPE0,.XOBHDLR)
|
---|
| 50 | IF 'TYPE DO
|
---|
| 51 | . SET XOBHDLR(0)=0
|
---|
| 52 | . SET XOBHDLR(0,"ERROR")="No message type defined"
|
---|
| 53 | QUIT TYPE
|
---|
| 54 | ;
|
---|
| 55 | SET(TYPE,TYPE0,XOBHDLR) ; -- set nodes
|
---|
| 56 | NEW IRTN,XOBICBK
|
---|
| 57 | KILL XOBHDLR(TYPE)
|
---|
| 58 | SET IRTN=$$IRTN(TYPE0)
|
---|
| 59 | IF IRTN="" DO GOTO SETQ
|
---|
| 60 | . SET XOBHDLR(TYPE)=0
|
---|
| 61 | . IF TYPE0="" SET XOBHDLR(TYPE,"ERROR")="No entry for message type ["_TYPE_"]" QUIT
|
---|
| 62 | . IF IRTN="" SET XOBHDLR(TYPE,"ERROR")="Invalid interface routine specified ["_$PIECE(TYPE0,U,5)_"]" QUIT
|
---|
| 63 | ;
|
---|
| 64 | SET XOBHDLR(TYPE)=1
|
---|
| 65 | SET XOBHDLR(TYPE,"AUTHENTICATE")=+$PIECE(TYPE0,U,4)
|
---|
| 66 | SET XOBHDLR(TYPE,"REQHDLR")="DO REQHDLR^"_IRTN_"(.XOBDATA)"
|
---|
| 67 | SET XOBHDLR(TYPE,"READER")="DO READER^"_IRTN_"(.XOBX,.XOBDATA)"
|
---|
| 68 | IF $PIECE(TYPE0,U,1)]"" SET XOBHDLR("NAME",$PIECE(TYPE0,U,1),TYPE)=""
|
---|
| 69 | IF $PIECE(TYPE0,U,2)]"" SET XOBHDLR("MSGTYPE",$PIECE(TYPE0,U,2),TYPE)=""
|
---|
| 70 | IF $PIECE(TYPE0,U,7)]"" SET XOBHDLR("D",$PIECE(TYPE0,U,7),TYPE)=""
|
---|
| 71 | ;
|
---|
| 72 | ; -- set up SAX callbacks
|
---|
| 73 | SET XOBHDLR(TYPE,"CB","ELEST")="QUIT"
|
---|
| 74 | SET XOBHDLR(TYPE,"CB","ELEND")="QUIT"
|
---|
| 75 | SET XOBHDLR(TYPE,"CB","CHR")="QUIT"
|
---|
| 76 | ;
|
---|
| 77 | XECUTE "DO CALLBACK^"_IRTN_"(.XOBICBK)"
|
---|
| 78 | IF $DATA(XOBICBK("STARTELEMENT")) SET XOBHDLR(TYPE,"CB","ELEST")="DO "_XOBICBK("STARTELEMENT")_"(.ELE,.ATR)"
|
---|
| 79 | IF $DATA(XOBICBK("ENDELEMENT")) SET XOBHDLR(TYPE,"CB","ELEND")="DO "_XOBICBK("ENDELEMENT")_"(.ELE)"
|
---|
| 80 | IF $DATA(XOBICBK("CHARACTERS")) SET XOBHDLR(TYPE,"CB","CHR")="DO "_XOBICBK("CHARACTERS")_"(.TXT)"
|
---|
| 81 | SETQ ;
|
---|
| 82 | QUIT
|
---|
| 83 | ;
|
---|
| 84 | ; -- get interface routine and test for existence
|
---|
| 85 | IRTN(XOBTYPE0) ;
|
---|
| 86 | NEW X,RTN
|
---|
| 87 | SET RTN=""
|
---|
| 88 | SET X=$PIECE(XOBTYPE0,"^",5)
|
---|
| 89 | IF X]"" DO
|
---|
| 90 | . XECUTE ^%ZOSF("TEST")
|
---|
| 91 | . IF $TEST SET RTN=X
|
---|
| 92 | QUIT RTN
|
---|
| 93 | ;
|
---|