- MAGGSIUI ;WOIFO/GEK/NST - Utilities for Image Import API ; 20 Jan 2010 10:10 AM
- ;;3.0;IMAGING;**7,8,48,20,85,59,108,121**;Mar 19, 2002;Build 2340;Oct 20, 2011
- ;; Per VHA Directive 2004-038, this routine should not be modified.
- ;; +---------------------------------------------------------------+
- ;; | Property of the US Government. |
- ;; | No permission to copy or redistribute this software is given. |
- ;; | Use of unreleased versions of this software requires the user |
- ;; | to execute a written test agreement with the VistA Imaging |
- ;; | Development Office of the Department of Veterans Affairs, |
- ;; | telephone (301) 734-0100. |
- ;; | The Food and Drug Administration classifies this software as |
- ;; | a medical device. As such, it may not be changed in any way. |
- ;; | Modifications to this software may result in an adulterated |
- ;; | medical device under 21CFR820, the use of which is considered |
- ;; | to be a violation of US Federal Statutes. |
- ;; +---------------------------------------------------------------+
- ;;
- Q
- REMOTE(MAGRY,MAGDATA) ;RPC [MAG4 REMOTE IMPORT]
- ; Import Images from a Windows App, by sending an array.
- I ($D(MAGDATA)<10) S MAGRY(0)="0^Missing Data Array !." Q
- N I,J,ICT,DCT,MAGIX,IMAGES,ERR,X,Z
- S (ERR,ICT,DCT)=0
- S I="" F S I=$O(MAGDATA(I)) Q:I="" S X=MAGDATA(I) D Q:ERR
- . S Z=$P(X,U)
- . I (X="")!(Z="") S MAGRY(0)="0^INVALID Data in Input Array: Node "_I_"="""_X_"",ERR=1 Q
- . I Z="IMAGE" S ICT=ICT+1,IMAGES(ICT)=$P(X,U,2,99) Q
- . S DCT=DCT+1,MAGIX(Z)=$P(X,U,2,99)
- I 'ERR D IMPORT(.MAGRY,.IMAGES,.MAGIX)
- Q
- ;
- IMPORT(MAGRY,IMAGES,MAGIX) ;
- ; "IDFN","PXPKG","PXIEN","PXDT","TRKID","ACQD","ACQS","ACQL","STSCB","ITYPE",
- ; "CMTH","CDUZ","USERNAME","PASSWORD","GDESC","DFLG","TRTYPE","DOCCTG","DOCDT",
- ; "IXTYPE","IXSPEC","IXPROC","IXORIGIN ;Patch 8: Added Index fields
- ; "PXSGNTYP","PXNEW","PXTIUTTL","PXTIUTXTxxxxx" ; Patch 108
- ;
- ;Index fields Package, Class ("IXPKG" and "IXCLS") aren't accepted
- ; they are computed values.
- ; - Convert field codes into an Input Data Array,
- ; validate, then set the Import Queue
- ;
- N $ETRAP,$ESTACK S $ETRAP="D ERR^"_$T(+0)
- K MAGRY S MAGRY(0)="0^Importing data..."
- N APISESS,MWIN
- S MWIN=$$BROKER^XWBLIB
- N PRM,CT,MAGA,MAGY,MAGTN,TNODE
- N IDFN,PXPKG,PXIEN,PXDT,TRKID,ACQD,ACQS,ACQN,ACQL,STSCB,ITYPE,CMTH,CDUZ,USERNAME,PASSWORD
- N GDESC,DFLG,TRTYPE,DOCCTG,DOCDT,IXPKG,IXCLS,IXTYPE,IXSPEC,IXPROC,IXORIGIN,MAX,SITEPLC
- N ERR,MAGTM,QTIME,MAGIXZ
- N PXNEW,PXTIUTTL,PXSGNTYP ; Patch 108
- N ACTION
- S CT=0,ERR=0
- M MAGIXZ=MAGIX
- ; DON'T CONVERT ACQS(really a ACQN) to a REAL ACQS, leave it ACQS to be converted by MAGGSIV
- ; 121: 'ACTION' is new
- F PRM="ACTION","IDFN","PXSGNTYP","PXPKG","PXIEN","PXDT","PXNEW","PXTIUTTL","TRKID","ACQD","ACQS","ACQN","ACQL","STSCB","ITYPE","CMTH","CDUZ","USERNAME","PASSWORD","GDESC","DFLG","TRTYPE","DOCCTG","DOCDT","IXTYPE","IXSPEC","IXPROC","IXORIGIN" D
- . S @PRM=$G(MAGIX(PRM)) K MAGIX(PRM) ; P8T14 added K.. and next line to account for field numbers later.
- . Q
- S PRM="" F S PRM=$O(MAGIX(PRM)) Q:PRM="" D SA(PRM,$G(MAGIX(PRM)))
- ;
- S MAGTM=$$NOW^XLFDT
- I '$G(DUZ) S MAGRY(0)="0^DUZ is undefined." Q ;D ERRTRK Q
- ; DATATRK sets Global var. APISESS = IEN of Session File.
- D DATATRK
- I '$$REQPARAM^MAGGSIU2() D ERRTRK Q
- S MAX=$P(TRKID,";",1)="MAX"
- ;I 'MWIN W !,"----------------" ZW W !,"---------------------"
- ; Workaround VIC (Maximus) is sending Station Number
- ; we'll convert to Institution IEN
- I MAX&(ACQS]"") D Q:ERR
- . S X=$O(^DIC(4,"D",ACQS,""))
- . I X="" S MAGRY(0)="0^Invalid Station Number:(Maximus ACQS): "_ACQS,ERR=1 Q
- . S SITEPLC=X ; We need the Place for the Queue
- . ;S ACQS=X Out in 85. Don't change to ACQS, that's done in VAL^MAGGSIV
- . Q
- ; Change to Allow ACQN - STATION NUMBER from INSTITUTION File.
- I $L(ACQN) D Q:ERR
- . S ACQS=$O(^DIC(4,"D",ACQN,""))
- . I ACQS="" S MAGRY(0)="0^Invalid STATION NUMBER: (ACQN): "_ACQN,ERR=1 Q
- . ; VAL^MAGGSIV Will fail if ACQS is real and this is Maximus
- . I MAX S ACQS=ACQN K ACQN Q
- . S ACQN="" ;We converted to ACQS, lets make "" so no confusion later.
- . Q
- ;
- ; Set the input data array
- ;
- ; Patch 108
- D SA("PXSGNTYP",PXSGNTYP) ; Signature Type - 0 unsigned/ 1 administrative closed/ 2 signed
- D SA("PXTIUTTL",PXTIUTTL) ; TIU Title in case a new TIU stub needs to be created
- D SA("PXNEW",PXNEW) ; Flag to create a new package ( e.g. a new TUI stub)
- ; PXIEN has to be set to zero because of Delphi function TMagImport.FileSpecialtyPointers
- ; In this way we don't need to recompile BP
- S:PXNEW="1" PXIEN=0
- D SA(5,IDFN) ;PATIENT
- D SA(16,PXPKG) ;PARENT DATA FILE
- D SA(17,PXIEN) ;PARENT GLOBAL ROOT
- D SA(15,PXDT) ; PROCEDURE/EXAM DATE/TIME
- D SA(108,TRKID) ; TRACKING ID (new)
- D SA("ACQD",ACQD) ; ACQUISTION DEVICE ( new )
- I 'MAX S SITEPLC=ACQS D SA(.05,ACQS) ; this used to be fld 105
- D SA(101,ACQL)
- D SA("STATUSCB",STSCB) ; STATUS CALLBACK (was referred to as ExceptionHandler)
- D SA(3,ITYPE) ; OBJECT TYPE
- D SA("CALLMTH",CMTH) ; CALL METHOD
- D SA(8,CDUZ) ; IMAGE SAVE BY
- D SA("USERNAME",USERNAME)
- D SA("PASSWORD",PASSWORD)
- D SA(10,GDESC) ; SHORT DESCRIPTION
- D SA("DELFLAG",DFLG) ; DELETE FLAG
- D SA("TRNSTYP",TRTYPE) ; TRANSACTION TYPE
- D SA(100,DOCCTG) ; document Main category
- D SA(110,DOCDT) ; document date
- ; Patch 8 allows Index fields to be imported.
- ;"IXTYPE","IXSPEC","IXPROC","IXORIGIN"
- D SA(42,IXTYPE) ; Index Type
- D SA(43,IXPROC) ; Index Proc/Event
- D SA(44,IXSPEC) ; Index Spec/SubSpec
- D SA(45,IXORIGIN) ; Index Origin
- ; Patch 121 allows ACTION of RESCIND
- D SA("ACTION",ACTION) ; P121 ACTION=RESCIND
- ;
- D VAL^MAGGSIV(.MAGRY,.MAGA,1) I 'MAGRY(0) D ERRTRK Q
- I MAX D SA(.05,ACQS) ; this used to be fld 105
- ; Also Done in MAGGSIA when image is being Saved.
- I '$$VALINDEX^MAGGSIV1(.MAGRY,IXTYPE,IXSPEC,IXPROC) D ERRTRK Q
- ; Array of Images to Import
- D SI("IMAGES",.IMAGES) I 'MAGRY(0) D ERRTRK Q
- K MAGRY
- ;
- I TRTYPE="NOQUEUE" M MAGRY=MAGA S MAGRY(0)="1^" Q
- ; This call is for BP
- S QTIME=$$NOW^XLFDT
- ; p85 use ACQS instead of DUZ(2)
- S MAGY=$$IMPORT^MAGBAPI(.MAGA,STSCB,TRKID,$$PLACE^MAGBAPI(SITEPLC))
- ; Return Queue Number
- I 'MAGY S MAGRY(0)="0^Error Setting Queue: "_$P(MAGY,U,2),MAGY=TRKID
- E S MAGRY(0)=MAGY_"^Data has been Queued.",MAGY=+MAGY
- ; for debugging we'll track input array, and results array by Queue number.
- I 'MAGRY(0) D ERRTRK Q
- D LOGRES^MAGGSIU3(.MAGRY,0,APISESS)
- ;
- Q
- ;
- SA(FLD,VAL) ;Set the data array with Fld,Value
- Q:VAL=""
- S CT=CT+1,MAGA(CT)=FLD_U_VAL
- Q
- SI(FLD,ARR) ;Set the images into the data array
- ; 'CT' is a global variable.
- S MAGRY(0)="1^Valid Image file Extensions."
- N I,MAGEXT,MAGFN
- N RES
- S I="" F S I=$O(ARR(I)) Q:I="" D Q:'MAGRY(0)
- . S CT=CT+1
- . ; special case ACTION=RESCIND
- . I ACTION="RESCIND" S MAGA(CT)="IMAGE^"_ARR(I) Q
- . I ($L($P(ARR(I),U),".")<2) S MAGRY(0)="0^Invalid file name: "_ARR(I) Q
- . S MAGFN=$P(ARR(I),"^")
- . S MAGEXT=$$UP^XLFSTR($P(MAGFN,".",$L(MAGFN,".")))
- . K RES
- . D INFO^MAGGSFT(.RES,MAGEXT)
- . I 'RES(0) S MAGRY(0)=RES(0) Q
- . S MAGA(CT)="IMAGE"_U_ARR(I)
- Q
- GETARR(ARR,QNUM) ;RPC [MAG4 DATA FROM IMPORT QUEUE]
- ; Get the Input Array from Queue Number
- I '$G(QNUM) S ARR(0)="0^INVALID QUEUE Number: "_$G(QNUM) Q
- D IMPAR^MAGQBUT2(.ARR,QNUM)
- Q
- STATUSCB(MAGRY,STAT,TAGRTN,DOCB) ;RPC [MAG4 STATUS CALLBACK]
- ; Report Status to calling application
- ; Now the IAPI and OCX make this call. Not BP
- ; STAT(0)= "0^message" or "1^message"
- ; STAT(1)=TRKID,
- ; (2)=QNUM
- ; (3..N)=warnings
- ;TAGRTN : The TAG^RTN to call with Status Array
- ;DOCB : (1|0) to suppress execution of Status Callback
- ;
- N APISESS,TRKID,CBMSG
- S DOCB=$S($G(DOCB)="":1,1:+$G(DOCB)) ; Default to TRUE
- ; Old Import API and BP that made this call, will work : DOCB defaults to 1
- S CBMSG=$S(DOCB:"Status Callback was called",1:"Status Callback was NOT called")
- I DOCB D @(TAGRTN_"(.STAT)")
- S MAGRY="1^"_CBMSG
- S STAT($O(STAT(""),-1)+1)=MAGRY
- S TRKID=$G(STAT(1))
- ; Log Results. Always.
- I $L(TRKID) D
- . S APISESS=$$SES4TRK^MAGGSIU3(TRKID) ;
- . I APISESS D LOGRES^MAGGSIU3(.STAT,0,APISESS) ;gek/send Tracking ID to log status
- Q
- TESTCB(STATARR) ;TESTING. This is the Status Callback for testing.
- ; the STATUSCB property must have a Valid "M" TAG^ROUTINE
- ; TAG TESTCB exists so that STATUSCB validates successfully
- Q
- ERRTRK ;Track bad data and Quit
- N I
- D LOGERR^MAGGSERR("---- New Error ----",APISESS)
- S I="" F S I=$O(MAGRY(I)) Q:I="" D LOGERR^MAGGSERR(MAGRY(I),APISESS)
- Q
- DATATRK ; Track the raw data being sent to the Import API.
- ; Log the data being imported. Results are logged later.
- N XY
- S APISESS=$$LOG^MAGGSIU3(.XY,.MAGIXZ,.IMAGES,IDFN,ACQD,TRKID)
- Q
- ERR ; ERROR TRAP FOR Import API
- N ERR S ERR=$$EC^%ZOSV
- S MAGRY(0)="0^ETRAP: "_ERR
- D @^%ZOSF("ERRTN")
- I $G(APISESS) D ERRTRK
- Q
- ; Patch 108
- GETIAPID(OUT,TRKID) ; Returns Import API data in OUT array from file (#2006.82) by tracking ID
- ; OUT(FIELD)=VALUE
- N I,X,Y,SNUM,VAL1
- S SNUM=$O(^MAG(2006.82,"E",TRKID,""),-1) ; Get the last recording for this TRKID
- I 'SNUM Q ; no data found
- ; Patch 121/ gek Add the Return of the 'Image:' Data
- S I=1
- F S I=$O(^MAG(2006.82,SNUM,"ACT",I)) Q:I'?1N.N D
- . S VAL1=$G(^MAG(2006.82,SNUM,"ACT",I,0))
- . I VAL1="Data:" D
- . . S X=$G(^MAG(2006.82,SNUM,"ACT",I,1))
- . . S Y=$TR($P(X,":"),"()","")
- . . S:Y'="" OUT(Y)=$P(X,": ",2,999)
- . . Q
- . I VAL1="Image:" D
- . . S X=$G(^MAG(2006.82,SNUM,"ACT",I,1))
- . . S Y=$TR($P(X,":"),"()","")
- . . S:Y'="" OUT("IMAGE",Y)=$P(X,": ",2,999)
- . . Q
- . Q
- Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HMAGGSIUI 9910 printed Feb 18, 2025@23:29:16 Page 2
- MAGGSIUI ;WOIFO/GEK/NST - Utilities for Image Import API ; 20 Jan 2010 10:10 AM
- +1 ;;3.0;IMAGING;**7,8,48,20,85,59,108,121**;Mar 19, 2002;Build 2340;Oct 20, 2011
- +2 ;; Per VHA Directive 2004-038, this routine should not be modified.
- +3 ;; +---------------------------------------------------------------+
- +4 ;; | Property of the US Government. |
- +5 ;; | No permission to copy or redistribute this software is given. |
- +6 ;; | Use of unreleased versions of this software requires the user |
- +7 ;; | to execute a written test agreement with the VistA Imaging |
- +8 ;; | Development Office of the Department of Veterans Affairs, |
- +9 ;; | telephone (301) 734-0100. |
- +10 ;; | The Food and Drug Administration classifies this software as |
- +11 ;; | a medical device. As such, it may not be changed in any way. |
- +12 ;; | Modifications to this software may result in an adulterated |
- +13 ;; | medical device under 21CFR820, the use of which is considered |
- +14 ;; | to be a violation of US Federal Statutes. |
- +15 ;; +---------------------------------------------------------------+
- +16 ;;
- +17 QUIT
- REMOTE(MAGRY,MAGDATA) ;RPC [MAG4 REMOTE IMPORT]
- +1 ; Import Images from a Windows App, by sending an array.
- +2 IF ($DATA(MAGDATA)<10)
- SET MAGRY(0)="0^Missing Data Array !."
- QUIT
- +3 NEW I,J,ICT,DCT,MAGIX,IMAGES,ERR,X,Z
- +4 SET (ERR,ICT,DCT)=0
- +5 SET I=""
- FOR
- SET I=$ORDER(MAGDATA(I))
- if I=""
- QUIT
- SET X=MAGDATA(I)
- Begin DoDot:1
- +6 SET Z=$PIECE(X,U)
- +7 IF (X="")!(Z="")
- SET MAGRY(0)="0^INVALID Data in Input Array: Node "_I_"="""_X_""
- SET ERR=1
- QUIT
- +8 IF Z="IMAGE"
- SET ICT=ICT+1
- SET IMAGES(ICT)=$PIECE(X,U,2,99)
- QUIT
- +9 SET DCT=DCT+1
- SET MAGIX(Z)=$PIECE(X,U,2,99)
- End DoDot:1
- if ERR
- QUIT
- +10 IF 'ERR
- DO IMPORT(.MAGRY,.IMAGES,.MAGIX)
- +11 QUIT
- +12 ;
- IMPORT(MAGRY,IMAGES,MAGIX) ;
- +1 ; "IDFN","PXPKG","PXIEN","PXDT","TRKID","ACQD","ACQS","ACQL","STSCB","ITYPE",
- +2 ; "CMTH","CDUZ","USERNAME","PASSWORD","GDESC","DFLG","TRTYPE","DOCCTG","DOCDT",
- +3 ; "IXTYPE","IXSPEC","IXPROC","IXORIGIN ;Patch 8: Added Index fields
- +4 ; "PXSGNTYP","PXNEW","PXTIUTTL","PXTIUTXTxxxxx" ; Patch 108
- +5 ;
- +6 ;Index fields Package, Class ("IXPKG" and "IXCLS") aren't accepted
- +7 ; they are computed values.
- +8 ; - Convert field codes into an Input Data Array,
- +9 ; validate, then set the Import Queue
- +10 ;
- +11 NEW $ETRAP,$ESTACK
- SET $ETRAP="D ERR^"_$TEXT(+0)
- +12 KILL MAGRY
- SET MAGRY(0)="0^Importing data..."
- +13 NEW APISESS,MWIN
- +14 SET MWIN=$$BROKER^XWBLIB
- +15 NEW PRM,CT,MAGA,MAGY,MAGTN,TNODE
- +16 NEW IDFN,PXPKG,PXIEN,PXDT,TRKID,ACQD,ACQS,ACQN,ACQL,STSCB,ITYPE,CMTH,CDUZ,USERNAME,PASSWORD
- +17 NEW GDESC,DFLG,TRTYPE,DOCCTG,DOCDT,IXPKG,IXCLS,IXTYPE,IXSPEC,IXPROC,IXORIGIN,MAX,SITEPLC
- +18 NEW ERR,MAGTM,QTIME,MAGIXZ
- +19 ; Patch 108
- NEW PXNEW,PXTIUTTL,PXSGNTYP
- +20 NEW ACTION
- +21 SET CT=0
- SET ERR=0
- +22 MERGE MAGIXZ=MAGIX
- +23 ; DON'T CONVERT ACQS(really a ACQN) to a REAL ACQS, leave it ACQS to be converted by MAGGSIV
- +24 ; 121: 'ACTION' is new
- +25 FOR PRM="ACTION","IDFN","PXSGNTYP","PXPKG","PXIEN","PXDT","PXNEW","PXTIUTTL","TRKID","ACQD","ACQS","ACQN","ACQL","STSCB","ITYPE","CMTH","CDUZ","USERNAME","PASSWORD","GDESC","DFLG","TRTYPE","DOCCTG","DOCDT","IXTYPE","IXSPEC","IXPROC","IXORIGIN"
- Begin DoDot:1
- +26 ; P8T14 added K.. and next line to account for field numbers later.
- SET @PRM=$GET(MAGIX(PRM))
- KILL MAGIX(PRM)
- +27 QUIT
- End DoDot:1
- +28 SET PRM=""
- FOR
- SET PRM=$ORDER(MAGIX(PRM))
- if PRM=""
- QUIT
- DO SA(PRM,$GET(MAGIX(PRM)))
- +29 ;
- +30 SET MAGTM=$$NOW^XLFDT
- +31 ;D ERRTRK Q
- IF '$GET(DUZ)
- SET MAGRY(0)="0^DUZ is undefined."
- QUIT
- +32 ; DATATRK sets Global var. APISESS = IEN of Session File.
- +33 DO DATATRK
- +34 IF '$$REQPARAM^MAGGSIU2()
- DO ERRTRK
- QUIT
- +35 SET MAX=$PIECE(TRKID,";",1)="MAX"
- +36 ;I 'MWIN W !,"----------------" ZW W !,"---------------------"
- +37 ; Workaround VIC (Maximus) is sending Station Number
- +38 ; we'll convert to Institution IEN
- +39 IF MAX&(ACQS]"")
- Begin DoDot:1
- +40 SET X=$ORDER(^DIC(4,"D",ACQS,""))
- +41 IF X=""
- SET MAGRY(0)="0^Invalid Station Number:(Maximus ACQS): "_ACQS
- SET ERR=1
- QUIT
- +42 ; We need the Place for the Queue
- SET SITEPLC=X
- +43 ;S ACQS=X Out in 85. Don't change to ACQS, that's done in VAL^MAGGSIV
- +44 QUIT
- End DoDot:1
- if ERR
- QUIT
- +45 ; Change to Allow ACQN - STATION NUMBER from INSTITUTION File.
- +46 IF $LENGTH(ACQN)
- Begin DoDot:1
- +47 SET ACQS=$ORDER(^DIC(4,"D",ACQN,""))
- +48 IF ACQS=""
- SET MAGRY(0)="0^Invalid STATION NUMBER: (ACQN): "_ACQN
- SET ERR=1
- QUIT
- +49 ; VAL^MAGGSIV Will fail if ACQS is real and this is Maximus
- +50 IF MAX
- SET ACQS=ACQN
- KILL ACQN
- QUIT
- +51 ;We converted to ACQS, lets make "" so no confusion later.
- SET ACQN=""
- +52 QUIT
- End DoDot:1
- if ERR
- QUIT
- +53 ;
- +54 ; Set the input data array
- +55 ;
- +56 ; Patch 108
- +57 ; Signature Type - 0 unsigned/ 1 administrative closed/ 2 signed
- DO SA("PXSGNTYP",PXSGNTYP)
- +58 ; TIU Title in case a new TIU stub needs to be created
- DO SA("PXTIUTTL",PXTIUTTL)
- +59 ; Flag to create a new package ( e.g. a new TUI stub)
- DO SA("PXNEW",PXNEW)
- +60 ; PXIEN has to be set to zero because of Delphi function TMagImport.FileSpecialtyPointers
- +61 ; In this way we don't need to recompile BP
- +62 if PXNEW="1"
- SET PXIEN=0
- +63 ;PATIENT
- DO SA(5,IDFN)
- +64 ;PARENT DATA FILE
- DO SA(16,PXPKG)
- +65 ;PARENT GLOBAL ROOT
- DO SA(17,PXIEN)
- +66 ; PROCEDURE/EXAM DATE/TIME
- DO SA(15,PXDT)
- +67 ; TRACKING ID (new)
- DO SA(108,TRKID)
- +68 ; ACQUISTION DEVICE ( new )
- DO SA("ACQD",ACQD)
- +69 ; this used to be fld 105
- IF 'MAX
- SET SITEPLC=ACQS
- DO SA(.05,ACQS)
- +70 DO SA(101,ACQL)
- +71 ; STATUS CALLBACK (was referred to as ExceptionHandler)
- DO SA("STATUSCB",STSCB)
- +72 ; OBJECT TYPE
- DO SA(3,ITYPE)
- +73 ; CALL METHOD
- DO SA("CALLMTH",CMTH)
- +74 ; IMAGE SAVE BY
- DO SA(8,CDUZ)
- +75 DO SA("USERNAME",USERNAME)
- +76 DO SA("PASSWORD",PASSWORD)
- +77 ; SHORT DESCRIPTION
- DO SA(10,GDESC)
- +78 ; DELETE FLAG
- DO SA("DELFLAG",DFLG)
- +79 ; TRANSACTION TYPE
- DO SA("TRNSTYP",TRTYPE)
- +80 ; document Main category
- DO SA(100,DOCCTG)
- +81 ; document date
- DO SA(110,DOCDT)
- +82 ; Patch 8 allows Index fields to be imported.
- +83 ;"IXTYPE","IXSPEC","IXPROC","IXORIGIN"
- +84 ; Index Type
- DO SA(42,IXTYPE)
- +85 ; Index Proc/Event
- DO SA(43,IXPROC)
- +86 ; Index Spec/SubSpec
- DO SA(44,IXSPEC)
- +87 ; Index Origin
- DO SA(45,IXORIGIN)
- +88 ; Patch 121 allows ACTION of RESCIND
- +89 ; P121 ACTION=RESCIND
- DO SA("ACTION",ACTION)
- +90 ;
- +91 DO VAL^MAGGSIV(.MAGRY,.MAGA,1)
- IF 'MAGRY(0)
- DO ERRTRK
- QUIT
- +92 ; this used to be fld 105
- IF MAX
- DO SA(.05,ACQS)
- +93 ; Also Done in MAGGSIA when image is being Saved.
- +94 IF '$$VALINDEX^MAGGSIV1(.MAGRY,IXTYPE,IXSPEC,IXPROC)
- DO ERRTRK
- QUIT
- +95 ; Array of Images to Import
- +96 DO SI("IMAGES",.IMAGES)
- IF 'MAGRY(0)
- DO ERRTRK
- QUIT
- +97 KILL MAGRY
- +98 ;
- +99 IF TRTYPE="NOQUEUE"
- MERGE MAGRY=MAGA
- SET MAGRY(0)="1^"
- QUIT
- +100 ; This call is for BP
- +101 SET QTIME=$$NOW^XLFDT
- +102 ; p85 use ACQS instead of DUZ(2)
- +103 SET MAGY=$$IMPORT^MAGBAPI(.MAGA,STSCB,TRKID,$$PLACE^MAGBAPI(SITEPLC))
- +104 ; Return Queue Number
- +105 IF 'MAGY
- SET MAGRY(0)="0^Error Setting Queue: "_$PIECE(MAGY,U,2)
- SET MAGY=TRKID
- +106 IF '$TEST
- SET MAGRY(0)=MAGY_"^Data has been Queued."
- SET MAGY=+MAGY
- +107 ; for debugging we'll track input array, and results array by Queue number.
- +108 IF 'MAGRY(0)
- DO ERRTRK
- QUIT
- +109 DO LOGRES^MAGGSIU3(.MAGRY,0,APISESS)
- +110 ;
- +111 QUIT
- +112 ;
- SA(FLD,VAL) ;Set the data array with Fld,Value
- +1 if VAL=""
- QUIT
- +2 SET CT=CT+1
- SET MAGA(CT)=FLD_U_VAL
- +3 QUIT
- SI(FLD,ARR) ;Set the images into the data array
- +1 ; 'CT' is a global variable.
- +2 SET MAGRY(0)="1^Valid Image file Extensions."
- +3 NEW I,MAGEXT,MAGFN
- +4 NEW RES
- +5 SET I=""
- FOR
- SET I=$ORDER(ARR(I))
- if I=""
- QUIT
- Begin DoDot:1
- +6 SET CT=CT+1
- +7 ; special case ACTION=RESCIND
- +8 IF ACTION="RESCIND"
- SET MAGA(CT)="IMAGE^"_ARR(I)
- QUIT
- +9 IF ($LENGTH($PIECE(ARR(I),U),".")<2)
- SET MAGRY(0)="0^Invalid file name: "_ARR(I)
- QUIT
- +10 SET MAGFN=$PIECE(ARR(I),"^")
- +11 SET MAGEXT=$$UP^XLFSTR($PIECE(MAGFN,".",$LENGTH(MAGFN,".")))
- +12 KILL RES
- +13 DO INFO^MAGGSFT(.RES,MAGEXT)
- +14 IF 'RES(0)
- SET MAGRY(0)=RES(0)
- QUIT
- +15 SET MAGA(CT)="IMAGE"_U_ARR(I)
- End DoDot:1
- if 'MAGRY(0)
- QUIT
- +16 QUIT
- GETARR(ARR,QNUM) ;RPC [MAG4 DATA FROM IMPORT QUEUE]
- +1 ; Get the Input Array from Queue Number
- +2 IF '$GET(QNUM)
- SET ARR(0)="0^INVALID QUEUE Number: "_$GET(QNUM)
- QUIT
- +3 DO IMPAR^MAGQBUT2(.ARR,QNUM)
- +4 QUIT
- STATUSCB(MAGRY,STAT,TAGRTN,DOCB) ;RPC [MAG4 STATUS CALLBACK]
- +1 ; Report Status to calling application
- +2 ; Now the IAPI and OCX make this call. Not BP
- +3 ; STAT(0)= "0^message" or "1^message"
- +4 ; STAT(1)=TRKID,
- +5 ; (2)=QNUM
- +6 ; (3..N)=warnings
- +7 ;TAGRTN : The TAG^RTN to call with Status Array
- +8 ;DOCB : (1|0) to suppress execution of Status Callback
- +9 ;
- +10 NEW APISESS,TRKID,CBMSG
- +11 ; Default to TRUE
- SET DOCB=$SELECT($GET(DOCB)="":1,1:+$GET(DOCB))
- +12 ; Old Import API and BP that made this call, will work : DOCB defaults to 1
- +13 SET CBMSG=$SELECT(DOCB:"Status Callback was called",1:"Status Callback was NOT called")
- +14 IF DOCB
- DO @(TAGRTN_"(.STAT)")
- +15 SET MAGRY="1^"_CBMSG
- +16 SET STAT($ORDER(STAT(""),-1)+1)=MAGRY
- +17 SET TRKID=$GET(STAT(1))
- +18 ; Log Results. Always.
- +19 IF $LENGTH(TRKID)
- Begin DoDot:1
- +20 ;
- SET APISESS=$$SES4TRK^MAGGSIU3(TRKID)
- +21 ;gek/send Tracking ID to log status
- IF APISESS
- DO LOGRES^MAGGSIU3(.STAT,0,APISESS)
- End DoDot:1
- +22 QUIT
- TESTCB(STATARR) ;TESTING. This is the Status Callback for testing.
- +1 ; the STATUSCB property must have a Valid "M" TAG^ROUTINE
- +2 ; TAG TESTCB exists so that STATUSCB validates successfully
- +3 QUIT
- ERRTRK ;Track bad data and Quit
- +1 NEW I
- +2 DO LOGERR^MAGGSERR("---- New Error ----",APISESS)
- +3 SET I=""
- FOR
- SET I=$ORDER(MAGRY(I))
- if I=""
- QUIT
- DO LOGERR^MAGGSERR(MAGRY(I),APISESS)
- +4 QUIT
- DATATRK ; Track the raw data being sent to the Import API.
- +1 ; Log the data being imported. Results are logged later.
- +2 NEW XY
- +3 SET APISESS=$$LOG^MAGGSIU3(.XY,.MAGIXZ,.IMAGES,IDFN,ACQD,TRKID)
- +4 QUIT
- ERR ; ERROR TRAP FOR Import API
- +1 NEW ERR
- SET ERR=$$EC^%ZOSV
- +2 SET MAGRY(0)="0^ETRAP: "_ERR
- +3 DO @^%ZOSF("ERRTN")
- +4 IF $GET(APISESS)
- DO ERRTRK
- +5 QUIT
- +6 ; Patch 108
- GETIAPID(OUT,TRKID) ; Returns Import API data in OUT array from file (#2006.82) by tracking ID
- +1 ; OUT(FIELD)=VALUE
- +2 NEW I,X,Y,SNUM,VAL1
- +3 ; Get the last recording for this TRKID
- SET SNUM=$ORDER(^MAG(2006.82,"E",TRKID,""),-1)
- +4 ; no data found
- IF 'SNUM
- QUIT
- +5 ; Patch 121/ gek Add the Return of the 'Image:' Data
- +6 SET I=1
- +7 FOR
- SET I=$ORDER(^MAG(2006.82,SNUM,"ACT",I))
- if I'?1N.N
- QUIT
- Begin DoDot:1
- +8 SET VAL1=$GET(^MAG(2006.82,SNUM,"ACT",I,0))
- +9 IF VAL1="Data:"
- Begin DoDot:2
- +10 SET X=$GET(^MAG(2006.82,SNUM,"ACT",I,1))
- +11 SET Y=$TRANSLATE($PIECE(X,":"),"()","")
- +12 if Y'=""
- SET OUT(Y)=$PIECE(X,": ",2,999)
- +13 QUIT
- End DoDot:2
- +14 IF VAL1="Image:"
- Begin DoDot:2
- +15 SET X=$GET(^MAG(2006.82,SNUM,"ACT",I,1))
- +16 SET Y=$TRANSLATE($PIECE(X,":"),"()","")
- +17 if Y'=""
- SET OUT("IMAGE",Y)=$PIECE(X,": ",2,999)
- +18 QUIT
- End DoDot:2
- +19 QUIT
- End DoDot:1
- +20 QUIT