Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: XOBVRH

XOBVRH.m

Go to the documentation of this file.
  1. XOBVRH ;mjk/alb - VistaLink Request Handler Utilities ; 07/27/2002 13:00
  1. ;;1.5;VistALink;;Sep 09, 2005
  1. ;;Foundations Toolbox Release v1.5 [Build: 1.5.0.026]
  1. ;
  1. QUIT
  1. ;
  1. ; ------------------------------------------------------------------
  1. ; Message Type Handler Utilities
  1. ; ------------------------------------------------------------------
  1. ;
  1. ; -- set up msg type info using message name
  1. MSGNAME(XOBMSG,XOBHDLR) ; -- set up msg type info
  1. QUIT $$SETMSG(XOBMSG,"NAME",.XOBHDLR)
  1. ;
  1. ; -- set up msg type info using message type
  1. MSGTYPE(XOBMSG,XOBHDLR) ; -- set up msg type info
  1. QUIT $$SETMSG(XOBMSG,"MSGTYPE",.XOBHDLR)
  1. ;
  1. ; -- set up msg type info using proprietary string
  1. MSGSINK(XOBMSG,XOBHDLR) ; -- set up msg type info
  1. QUIT $$SETMSG(XOBMSG,"D",.XOBHDLR)
  1. ;
  1. CACHE(XOBHDLR) ; -- cache req handlers
  1. NEW TYPE,TYPE0,XOBOK
  1. SET TYPE=0
  1. SET XOBOK=1
  1. ;
  1. ; -- load request handler info
  1. FOR SET TYPE=$ORDER(^XOB(18.05,"AS",1,TYPE)) QUIT:'TYPE DO QUIT:'XOBOK
  1. . SET TYPE0=$GET(^XOB(18.05,TYPE,0))
  1. . DO SET(TYPE,TYPE0,.XOBHDLR)
  1. . SET XOBOK=$GET(XOBHDLR(TYPE))
  1. . IF 'XOBOK SET XOBOK=XOBOK_U_$GET(XOBHDLR,"ERROR")
  1. QUIT XOBOK
  1. ;
  1. ; -- set up msg type info
  1. SETMSG(XOBMSG,XOBXREF,XOBHDLR) ;
  1. NEW TYPE,TYPEO
  1. KILL XOBHDLR(0)
  1. ;
  1. ; -- already cached?
  1. SET TYPE=$ORDER(XOBHDLR(XOBXREF,XOBMSG,""))
  1. IF TYPE QUIT TYPE
  1. ;
  1. ; -- load req handler
  1. SET TYPE=+$ORDER(^XOB(18.05,XOBXREF,XOBMSG,""))
  1. IF TYPE DO
  1. . SET TYPE0=$GET(^XOB(18.05,TYPE,0))
  1. . DO SET(.TYPE,.TYPE0,.XOBHDLR)
  1. IF 'TYPE DO
  1. . SET XOBHDLR(0)=0
  1. . SET XOBHDLR(0,"ERROR")="No message type defined"
  1. QUIT TYPE
  1. ;
  1. SET(TYPE,TYPE0,XOBHDLR) ; -- set nodes
  1. NEW IRTN,XOBICBK
  1. KILL XOBHDLR(TYPE)
  1. SET IRTN=$$IRTN(TYPE0)
  1. IF IRTN="" DO GOTO SETQ
  1. . SET XOBHDLR(TYPE)=0
  1. . IF TYPE0="" SET XOBHDLR(TYPE,"ERROR")="No entry for message type ["_TYPE_"]" QUIT
  1. . IF IRTN="" SET XOBHDLR(TYPE,"ERROR")="Invalid interface routine specified ["_$PIECE(TYPE0,U,5)_"]" QUIT
  1. ;
  1. SET XOBHDLR(TYPE)=1
  1. SET XOBHDLR(TYPE,"AUTHENTICATE")=+$PIECE(TYPE0,U,4)
  1. SET XOBHDLR(TYPE,"REQHDLR")="DO REQHDLR^"_IRTN_"(.XOBDATA)"
  1. SET XOBHDLR(TYPE,"READER")="DO READER^"_IRTN_"(.XOBX,.XOBDATA)"
  1. IF $PIECE(TYPE0,U,1)]"" SET XOBHDLR("NAME",$PIECE(TYPE0,U,1),TYPE)=""
  1. IF $PIECE(TYPE0,U,2)]"" SET XOBHDLR("MSGTYPE",$PIECE(TYPE0,U,2),TYPE)=""
  1. IF $PIECE(TYPE0,U,7)]"" SET XOBHDLR("D",$PIECE(TYPE0,U,7),TYPE)=""
  1. ;
  1. ; -- set up SAX callbacks
  1. SET XOBHDLR(TYPE,"CB","ELEST")="QUIT"
  1. SET XOBHDLR(TYPE,"CB","ELEND")="QUIT"
  1. SET XOBHDLR(TYPE,"CB","CHR")="QUIT"
  1. ;
  1. XECUTE "DO CALLBACK^"_IRTN_"(.XOBICBK)"
  1. IF $DATA(XOBICBK("STARTELEMENT")) SET XOBHDLR(TYPE,"CB","ELEST")="DO "_XOBICBK("STARTELEMENT")_"(.ELE,.ATR)"
  1. IF $DATA(XOBICBK("ENDELEMENT")) SET XOBHDLR(TYPE,"CB","ELEND")="DO "_XOBICBK("ENDELEMENT")_"(.ELE)"
  1. IF $DATA(XOBICBK("CHARACTERS")) SET XOBHDLR(TYPE,"CB","CHR")="DO "_XOBICBK("CHARACTERS")_"(.TXT)"
  1. SETQ ;
  1. QUIT
  1. ;
  1. ; -- get interface routine and test for existence
  1. IRTN(XOBTYPE0) ;
  1. NEW X,RTN
  1. SET RTN=""
  1. SET X=$PIECE(XOBTYPE0,"^",5)
  1. IF X]"" DO
  1. . XECUTE ^%ZOSF("TEST")
  1. . IF $TEST SET RTN=X
  1. QUIT RTN
  1. ;