XUREMAP ;VISS/CEP - Remote Application Registration ; 2-6-2025
;;8.0;KERNEL;**759**;Jul 10, 1995;Build 40
;Per VA Directive 6402, this routine should not be modified.
Q
;
;
RAENABLE(XURET,XURANAME,XUENABLE) ; entry point for RPC is used exclusively by
; the Identity and Access Management (IAM) service to enable or disable an entry
; in the REMOTE APPLICATION file (#8994.5).
;
; INPUT PARAMETER: XURANAME (REQUIRED)--The value of the NAME (#.01)
; field of the entry in the REMOTE APPLICATION (#8994.5)
; file, for the REMOTE APPLICATION to be disabled.
;
; INPUT PARAMETER: XUENABLE (REQUIRED)--boolean: 1 for enable, 0 for disable
;
; RETURN PARAMETER: XURET--success or failure
; success: 1 ^ [name of remote application] ^ ENABLED/DISABLED ^ SITE #
; failure: -1 ^ [name of remote application] ^ error text ^ SITE #
;
; Since the field is called "DISABLED", and the RPC and entry pont is ...ENABLE,
; we will reverse the parameter to make sense
; so XUENABLE(1)= *not* disabled
; XUENABLE(0)= *disabled*
N RAIEN,IENS,XUFDA,XUERR,XUSVRB
I $G(XURANAME)="" D Q
. S XURET(0)="-1"_U_"XURANAME input is required."
S RAIEN=$$FIND1^DIC(8994.5,"","MX",XURANAME,"","","ERR")
I +RAIEN'>0 D Q
. S XURET(0)="-1"_U_XURANAME_U_"No Remote application found matching "_XURANAME_U_$P($$SITE^VASITE(),U,3)
;
I "^0^1^"'[(U_$G(XUENABLE)_U) D Q
. S XURET(0)="-1"_U_XURANAME_U_"XUENABLE parameter must be either 0 (disable) or 1 (enable)"_U_$P($$SITE^VASITE(),U,3)
;
; set DISABLED field for RA entry passed (and found)
;
S IENS=RAIEN_","
S XUSVRB=$S(XUENABLE=1:"ENABLE",1:"DISABLE")
S XUENABLE='XUENABLE ;TO MAKE FIELD (DISABLED) AGREE WITH INPUT NAME (ENABLE)
S XUFDA(8994.5,IENS,.05)=+XUENABLE
D FILE^DIE("K","XUFDA","XUERR")
I $D(XUERR("DIERR")) D Q
. S XURET(0)="-1"_U_XURANAME_U_XUSVRB_" request failure - filer error: "_$G(XUERR("DIERR",1,"TEXT",1))_U_$P($$SITE^VASITE(),U,3)
S XURET(0)="1"_U_XURANAME_U_XUSVRB_U_$P($$SITE^VASITE(),U,3)
Q
;
ADDRA(XURET,XUARR) ; RPC entry point for XUS IAM RA ADD OR REPLACE
; to add/update a Remote Application file (#8994) entry
; disable REMOTE APPLICATION Entry by passing null in
; Application Code Field
;
; The behavior of this API is ADD/REPLACE, as follows:
; 1. If the remote application entry passed to the API in array XUARR
; does not exist then the filer attempts to file the entire record.
; 2. If the entry exists (input name matches exactly with an entry on
; the target system) then the API will replace the existing entry
; with the input entry if the following condition is met:
; A faux filing of the input record is successful.
; Note: the remote application entry being updated is removed and
; the passed entry completely replaces the original. Therefore
; it is the consumer's responsibility to send a fully qualified
; and populated entry to replace the original.
;
; called from rpc: XUS IAM RA ADD OR REPLACE
; Input:
; XUARR(#) = FILE #;FIELD #^FIELD NAME^FIELD VALUE
;
; notes: 1. content of each field is between < >
; 2. # is sequential and unique
; 3. CONTEXTOPTION is existing B-Type option or
; created with ENDPOINTs. See ADDEP^XUREMAP
; 4. APPLICATIONCODE (application security phrase) is sent UNencrypted
;
;
; XUARR(#)="8994.5;.01^NAME^<name of REM APP>^"
; XUARR(#)="8994.5;.02^CONTEXTOPTION^<name of B type option>^" <-- must exist
; XUARR(#)="8994.5;.03^APPLICATIONCODE^<some code>^"
; XUARR(#)="8994.5;.04^CANADDUSERS^<BOOLEAN>^"
; ---- CALL BACK TYPE MULTIPLE (XUARR optional)
; { 0:n of this block:
; XUARR(#)="8994.51;.01^CALLBACKTYPE^<call back type code>"
; XUARR(#)="8994.51;.02^CALLBACKPORT^<port number>"
; XUARR(#)="8994.51;.03^CALLBACKSERVER^<server spec>"
; XUARR(#)="8994.51;.04^URLSTRING^<url string>"
; }
;
N FILE,FILENO,RANAME,XUARRM,FOUND,XUNAME,ERR,TMPXURET,XUARRIN
S XURET(0)="-1^Nothing Filed."
S FILE=$$GETFLNUM^XUREMAP1(.XUARR)
S FILENO=+FILE
S RANAME=$P(FILE,U,2)
I +FILENO'=8994.5 D Q
. S XURET(0)="-1^Invalid file number"
S FOUND=$$FIND1^DIC(+FILENO,"","MX",RANAME,"","","ERR")
; make a copy of the input array for debugging purposes to leave input alone
M XUARRIN=XUARR
; parse input into two arrays: a top level entry and the multiple
D INSPLIT^XUREMAP1(.XUARRIN,.XUARRM)
;
I FOUND D
.;
.; make sure INPUT entry will file before removing FOUND entry
. D FAUXFL^XUREMAP1(.XURET,.XUNAME,.XUARRIN,.XUARRM)
. Q:($G(XURET(0))'>0)
. L +^XWB(8994.5,FOUND,0):2 I '$T S XURET(0)="-1^"_RANAME_" entry locked for file: "_FILENO Q
. D REMOVE^XUREMAP1(.TMPXURET,XUNAME,8994.5)
.;
.; file the input entry passed in XUARR
. D ADDRA^XUREMAP1(.XURET,.XUARRIN,.XUARRM,+FOUND)
. L -^XWB(8994.5,FOUND,0)
E D
.; input entry in XUARR not found, so file new entry
. D ADDRA^XUREMAP1(.XURET,.XUARRIN,.XUARRM,0)
Q
;
RAQ2(XURET,NAME,FLAGS) ; API to query the remote application file and return entry data
;
;INPUT: NAME = full name of entry to search for OR leading characters
; to return partial matches
; FLAGS= X = NAME input must match an entry exactly
; (AND/OR)
; M = return context option (file 19) data that is pointed
; to by .02 field (CONTEXTOPTION)
;
;OUTPUT:
; FAIL:
; XURET(0)="0 ^ matching entries^station #"
;
; SUCCESS:
; XURET(0)="n ^ matching entries^station #"
; XURET(1)=file;field no.^ field name^data
; XURET(2)=file;field no.^ field name^data
;
; REPEATED AS:
; {
; XURET(n)=8994.5;.01^NAME ^ ra name
; XURET(n)=8994.5;.02^CONTEXTOPTION ^ ra context option
; XURET(n)=8994.5;.03^APPLICATION CODE ^ ra app code (encrypted)
; XURET(n)=8994.5;.04^CAN ADD USERS ^ ra can add users (boolean YES/NO)
; XURET(n)=8994.5;.05^DISABLED ^ ra disabled (boolean YES/NO)
; XURET(n)=8994.51;.01^CALLBACKTYPE^ ra callback type
; XURET(n)=8994.51;.02^CALLBACKPORT^ ra callback port
; XURET(n)=8994.51;.03^CALLBACKSERVER^ ra callback server
; XURET(n)=8994.51;.04^URLSTRING^ ra url string
; } for each matching entry
;
; AND, if the M flag is set for the context multiple, with each entry above...
; {
; XURET(n)=19;.01^NAME^context option name
; XURET(n)=19;1^MENU TEXT^context option menu text
; XURET(n)=19;1.1^UPPERCASE MENU TEXT^context option UC menu text
; { XURET(n)=19;3.5^DESCRIPTION^context option wp ln }
; XURET(n)=19;3.6^CREATOR^context option creator
; XURET(n)=19;4^TYPE^ context option type
; XURET(n)=19;99.1^TIMESTAMP OF PRIMARY MENU^$h timestamp
; { XURET(n)=19.05;.01^RPC^context option attached RPC }
; }
;
;
I $L($G(NAME))'>1 D Q
. S XURET(0)="-1"_U_"NAME input must be at least 2 characters."
N SCREEN,OUT,XUERR,FOUND,EES,COUNT,RAIEN,IENS,OUTCB
;
S FLAGS=$G(FLAGS)
S SCREEN=""
I ($G(NAME)'="")&($G(FLAGS)["X") S SCREEN="I $P(^(0),U)=NAME"
;
D LIST^DIC(8994.5,"",".01;.02;.03;.04;.05","","*","",$G(NAME),"B",$G(SCREEN),"","OUT","XUERR")
;
I $D(XUERR("DIERR")) D Q
. S XURET(0)="-1^"_$G(XUERR("DIERR",1,"TEXT",1))
;
S FOUND=+$G(OUT("DILIST",0))
S EES=$S(FOUND>1:"entries",1:"entry")
S XURET(0)=1_U_FOUND_" matching "_EES_U_$P($$SITE^VASITE(),U,3)
;
; get each entries CallBackType and Context Option (if flagged)
;
S COUNT=0
F S COUNT=$O(OUT("DILIST",2,COUNT)) Q:COUNT'>0 D
. S RAIEN=+$G(OUT("DILIST",2,COUNT))
. S IENS=","_RAIEN_","
. S OUTCB="OUTCB("_RAIEN_")"
. D LIST^DIC(8994.51,IENS,".01;.02;.03;.04","","","","","","","",OUTCB,"ERRCB")
. ;
. ; if requested, get the .02 CONTEXTOPTION pointed to entry data for return,
. ;
. I FLAGS["M" D GETCNTXT^XUREMAP1(.OUTCTXT,$G(OUT("DILIST","ID",COUNT,.02)),RAIEN) ;
;
D FORMAT^XUREMAP1(.XURET,.OUT,.OUTCB,.OUTCTXT)
K OUT,ERR,OUTCB,OUTCTXT
;
Q
;
;
CONTEXTQ(RETURN,NAME) ; API restricted to IAM to Query Context Options
; and return entry data
;
; API restricted to IAM to Query Context Options and return entry data.
;
; called from rpc: XUS IAM RA CONTEXT QUERY
;
;
; INPUT: NAME--full name of entry to search for an exact match.
;
; SUCCESS:
; XURET(0)="LOCAL IEN^Option [name of matching entry]^SITE #"
; XURET(1)=file;field no.^ field name^data
; XURET(2)=file;field no.^ field name^data
; ...
; XURET(n)=file;field no.^ field name^data
;
; FAIL:
; XURET(0)="-1^Option [name of matching entry] not found.^SITE #"
;
N FOUND
I $G(NAME)="" D Q
. S RETURN(0)="-1"_U_"NAME input cannot be empty."
S RETURN(0)="-1^Option "_NAME_" not found."
D GETCNTXT^XUREMAP1(.FOUND,NAME,1)
I +FOUND(0) S RETURN(0)=FOUND(0)
;
D CONTEXT^XUREMAP1(.RETURN,.FOUND,0,1)
;
Q
;
ADDEP(XURET,XUARR) ; RPC to create new or update ENDPOINT entries
;
; called from rpc: XUS IAM RA CONTEXT ADD
; File Entry Even if 1 or more RPCs are not on local system and include unfiled RPCs in return array.
;
; Input:
; XUARR(#) = FILE #;FIELD #^FIELD NAME^INTERNAL VALUE^EXTERNAL VALUE
; content of each field is in between < >
;
; XUARR(1)="19;.01^NAME^<name of option>^"
; XUARR(2)="19;1^MENU TEXT^<menu text of option>^"
; XUARR(3)="19;4^TYPE^B^" ; must be B type
; XUARR(4)="19;3.5^DESCRIPTION^line 1 of option description."
; XUARR(5)="19;3.5^DESCRIPTION^line 2 of option description."
; XUARR(6)="19;3.5^DESCRIPTION^" ;file a blank line
; XUARR(7)="19.05;.01^NAME^<name of endpoint>^"
; XUARR(8)="19.05;1^RPC KEY^<rpc key>^"
; XUARR(9)="19.05;.01^NAME^<>^"
; XUARR(10)="19.05;1^RPC KEY^<rpc key>^"
;
; Success:
; XURET(0) = 1
;
; Fail:
; XURET(0) = "-1^No data passed"
; XURET(0) = "-1^"_$G(XUERR("DIERR",1,"TEXT",1))
;
;
N FILE,FILENO,CTXTNAME,FOUND,XUNAME,TMPXURET,ERR
S FILE=$$GETFLNUM^XUREMAP1(.XUARR)
S FILENO=+FILE
S CTXTNAME=$P(FILE,U,2)
I +FILENO'=19 D Q
. S XURET(0)="-1^Invalid file number"
D CHKAEPIN^XUREMAP1(.XURET,.XUARR)
Q:+$G(XURET(0))<0
S XURET(0)="-1^Nothing Filed." ;DEFAULT AFTER INPUT CHECK
S FOUND=$$FIND1^DIC(FILENO,"","MX",CTXTNAME,"","","ERR")
I FOUND D
. D FAUXFL^XUREMAP1(.XURET,.XUNAME,.XUARR)
. Q:($G(XURET(0))'>0)
. K XURET S XURET(0)="-1^Invalid file number"
. L +^DIC(19,FOUND,0):2 I '$T S XURET(0)="-1^"_CTXTNAME_" entry locked for file: "_FILENO Q
. D REMOVE^XUREMAP1(.TMPXURET,XUNAME,FILENO)
. ; file the input entry passed in XUARR
. D ADDEP^XUREMAP1(.XURET,.XUARR,FOUND)
. L -^DIC(19,FOUND,0)
E D
. D ADDEP^XUREMAP1(.XURET,.XUARR,"")
Q
CANADD(XURET,XURANAME,XUCANADD) ; entry point for RPC is used exclusively by
; the Identity and Access Management (IAM) service to mark an entry in the
; remote application file (#8994.5) as either CAN ADD USERS=YES OR CAN ADD USERS=NO
;
; INPUT PARAMETER: XURANAME (REQUIRED)--The value of the NAME (#.01)
; field of the entry in the REMOTE APPLICATION (#8994.5)
; file, for the REMOTE APPLICATION to be disabled.
;
; INPUT PARAMETER: XUCANADD (REQUIRED)--boolean
; 1 - CAN ADD USERS = YES
; 0 - CAN ADD USERS = NO
; RETURN PARAMETER: XURET--success or failure
; success: 1 ^ [name of remote application] ^ CAN ADD / CANNOT ADD ^ SITE #
; failure: -1 ^ [name of remote application] ^ error text ^ SITE #
;
N RAIEN,IENS,XUFDA,XUERR,XUSVRB
I $G(XURANAME)="" D Q
. S XURET(0)="-1"_U_"XURANAME input cannot be empty."
S RAIEN=$$FIND1^DIC(8994.5,"","MX",XURANAME,"","","ERR")
I +RAIEN'>0 D Q
. S XURET(0)="-1"_U_XURANAME_U_"No Remote application found matching "_XURANAME_U_$P($$SITE^VASITE(),U,3)
;
I "^0^1^"'[(U_$G(XUCANADD)_U) D Q
. S XURET(0)="-1"_U_XURANAME_U_"XUCANADD parameter must be either 0 (disable) or 1 (enable)"_U_$P($$SITE^VASITE(),U,3)
;
; set DISABLED field for RA entry passed (and found)
;
S IENS=RAIEN_","
S XUSVRB=$S(XUCANADD=1:"CAN ADD",1:"CANNOT ADD")
S XUFDA(8994.5,IENS,.04)=+XUCANADD
D FILE^DIE("K","XUFDA","XUERR")
I $D(XUERR("DIERR")) D Q
. S XURET(0)="-1"_U_XURANAME_U_XUSVRB_" request failure - filer error: "_$G(XUERR("DIERR",1,"TEXT",1))_U_$P($$SITE^VASITE(),U,3)
S XURET(0)="1"_U_XURANAME_U_XUSVRB_U_$P($$SITE^VASITE(),U,3)
Q
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HXUREMAP 12767 printed May 25, 2026@12:46:47 Page 2
XUREMAP ;VISS/CEP - Remote Application Registration ; 2-6-2025
+1 ;;8.0;KERNEL;**759**;Jul 10, 1995;Build 40
+2 ;Per VA Directive 6402, this routine should not be modified.
+3 QUIT
+4 ;
+5 ;
RAENABLE(XURET,XURANAME,XUENABLE) ; entry point for RPC is used exclusively by
+1 ; the Identity and Access Management (IAM) service to enable or disable an entry
+2 ; in the REMOTE APPLICATION file (#8994.5).
+3 ;
+4 ; INPUT PARAMETER: XURANAME (REQUIRED)--The value of the NAME (#.01)
+5 ; field of the entry in the REMOTE APPLICATION (#8994.5)
+6 ; file, for the REMOTE APPLICATION to be disabled.
+7 ;
+8 ; INPUT PARAMETER: XUENABLE (REQUIRED)--boolean: 1 for enable, 0 for disable
+9 ;
+10 ; RETURN PARAMETER: XURET--success or failure
+11 ; success: 1 ^ [name of remote application] ^ ENABLED/DISABLED ^ SITE #
+12 ; failure: -1 ^ [name of remote application] ^ error text ^ SITE #
+13 ;
+14 ; Since the field is called "DISABLED", and the RPC and entry pont is ...ENABLE,
+15 ; we will reverse the parameter to make sense
+16 ; so XUENABLE(1)= *not* disabled
+17 ; XUENABLE(0)= *disabled*
+18 NEW RAIEN,IENS,XUFDA,XUERR,XUSVRB
+19 IF $GET(XURANAME)=""
Begin DoDot:1
+20 SET XURET(0)="-1"_U_"XURANAME input is required."
End DoDot:1
QUIT
+21 SET RAIEN=$$FIND1^DIC(8994.5,"","MX",XURANAME,"","","ERR")
+22 IF +RAIEN'>0
Begin DoDot:1
+23 SET XURET(0)="-1"_U_XURANAME_U_"No Remote application found matching "_XURANAME_U_$PIECE($$SITE^VASITE(),U,3)
End DoDot:1
QUIT
+24 ;
+25 IF "^0^1^"'[(U_$GET(XUENABLE)_U)
Begin DoDot:1
+26 SET XURET(0)="-1"_U_XURANAME_U_"XUENABLE parameter must be either 0 (disable) or 1 (enable)"_U_$PIECE($$SITE^VASITE(),U,3)
End DoDot:1
QUIT
+27 ;
+28 ; set DISABLED field for RA entry passed (and found)
+29 ;
+30 SET IENS=RAIEN_","
+31 SET XUSVRB=$SELECT(XUENABLE=1:"ENABLE",1:"DISABLE")
+32 ;TO MAKE FIELD (DISABLED) AGREE WITH INPUT NAME (ENABLE)
SET XUENABLE='XUENABLE
+33 SET XUFDA(8994.5,IENS,.05)=+XUENABLE
+34 DO FILE^DIE("K","XUFDA","XUERR")
+35 IF $DATA(XUERR("DIERR"))
Begin DoDot:1
+36 SET XURET(0)="-1"_U_XURANAME_U_XUSVRB_" request failure - filer error: "_$GET(XUERR("DIERR",1,"TEXT",1))_U_$PIECE($$SITE^VASITE(),U,3)
End DoDot:1
QUIT
+37 SET XURET(0)="1"_U_XURANAME_U_XUSVRB_U_$PIECE($$SITE^VASITE(),U,3)
+38 QUIT
+39 ;
ADDRA(XURET,XUARR) ; RPC entry point for XUS IAM RA ADD OR REPLACE
+1 ; to add/update a Remote Application file (#8994) entry
+2 ; disable REMOTE APPLICATION Entry by passing null in
+3 ; Application Code Field
+4 ;
+5 ; The behavior of this API is ADD/REPLACE, as follows:
+6 ; 1. If the remote application entry passed to the API in array XUARR
+7 ; does not exist then the filer attempts to file the entire record.
+8 ; 2. If the entry exists (input name matches exactly with an entry on
+9 ; the target system) then the API will replace the existing entry
+10 ; with the input entry if the following condition is met:
+11 ; A faux filing of the input record is successful.
+12 ; Note: the remote application entry being updated is removed and
+13 ; the passed entry completely replaces the original. Therefore
+14 ; it is the consumer's responsibility to send a fully qualified
+15 ; and populated entry to replace the original.
+16 ;
+17 ; called from rpc: XUS IAM RA ADD OR REPLACE
+18 ; Input:
+19 ; XUARR(#) = FILE #;FIELD #^FIELD NAME^FIELD VALUE
+20 ;
+21 ; notes: 1. content of each field is between < >
+22 ; 2. # is sequential and unique
+23 ; 3. CONTEXTOPTION is existing B-Type option or
+24 ; created with ENDPOINTs. See ADDEP^XUREMAP
+25 ; 4. APPLICATIONCODE (application security phrase) is sent UNencrypted
+26 ;
+27 ;
+28 ; XUARR(#)="8994.5;.01^NAME^<name of REM APP>^"
+29 ; XUARR(#)="8994.5;.02^CONTEXTOPTION^<name of B type option>^" <-- must exist
+30 ; XUARR(#)="8994.5;.03^APPLICATIONCODE^<some code>^"
+31 ; XUARR(#)="8994.5;.04^CANADDUSERS^<BOOLEAN>^"
+32 ; ---- CALL BACK TYPE MULTIPLE (XUARR optional)
+33 ; { 0:n of this block:
+34 ; XUARR(#)="8994.51;.01^CALLBACKTYPE^<call back type code>"
+35 ; XUARR(#)="8994.51;.02^CALLBACKPORT^<port number>"
+36 ; XUARR(#)="8994.51;.03^CALLBACKSERVER^<server spec>"
+37 ; XUARR(#)="8994.51;.04^URLSTRING^<url string>"
+38 ; }
+39 ;
+40 NEW FILE,FILENO,RANAME,XUARRM,FOUND,XUNAME,ERR,TMPXURET,XUARRIN
+41 SET XURET(0)="-1^Nothing Filed."
+42 SET FILE=$$GETFLNUM^XUREMAP1(.XUARR)
+43 SET FILENO=+FILE
+44 SET RANAME=$PIECE(FILE,U,2)
+45 IF +FILENO'=8994.5
Begin DoDot:1
+46 SET XURET(0)="-1^Invalid file number"
End DoDot:1
QUIT
+47 SET FOUND=$$FIND1^DIC(+FILENO,"","MX",RANAME,"","","ERR")
+48 ; make a copy of the input array for debugging purposes to leave input alone
+49 MERGE XUARRIN=XUARR
+50 ; parse input into two arrays: a top level entry and the multiple
+51 DO INSPLIT^XUREMAP1(.XUARRIN,.XUARRM)
+52 ;
+53 IF FOUND
Begin DoDot:1
+54 ;
+55 ; make sure INPUT entry will file before removing FOUND entry
+56 DO FAUXFL^XUREMAP1(.XURET,.XUNAME,.XUARRIN,.XUARRM)
+57 if ($GET(XURET(0))'>0)
QUIT
+58 LOCK +^XWB(8994.5,FOUND,0):2
IF '$TEST
SET XURET(0)="-1^"_RANAME_" entry locked for file: "_FILENO
QUIT
+59 DO REMOVE^XUREMAP1(.TMPXURET,XUNAME,8994.5)
+60 ;
+61 ; file the input entry passed in XUARR
+62 DO ADDRA^XUREMAP1(.XURET,.XUARRIN,.XUARRM,+FOUND)
+63 LOCK -^XWB(8994.5,FOUND,0)
End DoDot:1
+64 IF '$TEST
Begin DoDot:1
+65 ; input entry in XUARR not found, so file new entry
+66 DO ADDRA^XUREMAP1(.XURET,.XUARRIN,.XUARRM,0)
End DoDot:1
+67 QUIT
+68 ;
RAQ2(XURET,NAME,FLAGS) ; API to query the remote application file and return entry data
+1 ;
+2 ;INPUT: NAME = full name of entry to search for OR leading characters
+3 ; to return partial matches
+4 ; FLAGS= X = NAME input must match an entry exactly
+5 ; (AND/OR)
+6 ; M = return context option (file 19) data that is pointed
+7 ; to by .02 field (CONTEXTOPTION)
+8 ;
+9 ;OUTPUT:
+10 ; FAIL:
+11 ; XURET(0)="0 ^ matching entries^station #"
+12 ;
+13 ; SUCCESS:
+14 ; XURET(0)="n ^ matching entries^station #"
+15 ; XURET(1)=file;field no.^ field name^data
+16 ; XURET(2)=file;field no.^ field name^data
+17 ;
+18 ; REPEATED AS:
+19 ; {
+20 ; XURET(n)=8994.5;.01^NAME ^ ra name
+21 ; XURET(n)=8994.5;.02^CONTEXTOPTION ^ ra context option
+22 ; XURET(n)=8994.5;.03^APPLICATION CODE ^ ra app code (encrypted)
+23 ; XURET(n)=8994.5;.04^CAN ADD USERS ^ ra can add users (boolean YES/NO)
+24 ; XURET(n)=8994.5;.05^DISABLED ^ ra disabled (boolean YES/NO)
+25 ; XURET(n)=8994.51;.01^CALLBACKTYPE^ ra callback type
+26 ; XURET(n)=8994.51;.02^CALLBACKPORT^ ra callback port
+27 ; XURET(n)=8994.51;.03^CALLBACKSERVER^ ra callback server
+28 ; XURET(n)=8994.51;.04^URLSTRING^ ra url string
+29 ; } for each matching entry
+30 ;
+31 ; AND, if the M flag is set for the context multiple, with each entry above...
+32 ; {
+33 ; XURET(n)=19;.01^NAME^context option name
+34 ; XURET(n)=19;1^MENU TEXT^context option menu text
+35 ; XURET(n)=19;1.1^UPPERCASE MENU TEXT^context option UC menu text
+36 ; { XURET(n)=19;3.5^DESCRIPTION^context option wp ln }
+37 ; XURET(n)=19;3.6^CREATOR^context option creator
+38 ; XURET(n)=19;4^TYPE^ context option type
+39 ; XURET(n)=19;99.1^TIMESTAMP OF PRIMARY MENU^$h timestamp
+40 ; { XURET(n)=19.05;.01^RPC^context option attached RPC }
+41 ; }
+42 ;
+43 ;
+44 IF $LENGTH($GET(NAME))'>1
Begin DoDot:1
+45 SET XURET(0)="-1"_U_"NAME input must be at least 2 characters."
End DoDot:1
QUIT
+46 NEW SCREEN,OUT,XUERR,FOUND,EES,COUNT,RAIEN,IENS,OUTCB
+47 ;
+48 SET FLAGS=$GET(FLAGS)
+49 SET SCREEN=""
+50 IF ($GET(NAME)'="")&($GET(FLAGS)["X")
SET SCREEN="I $P(^(0),U)=NAME"
+51 ;
+52 DO LIST^DIC(8994.5,"",".01;.02;.03;.04;.05","","*","",$GET(NAME),"B",$GET(SCREEN),"","OUT","XUERR")
+53 ;
+54 IF $DATA(XUERR("DIERR"))
Begin DoDot:1
+55 SET XURET(0)="-1^"_$GET(XUERR("DIERR",1,"TEXT",1))
End DoDot:1
QUIT
+56 ;
+57 SET FOUND=+$GET(OUT("DILIST",0))
+58 SET EES=$SELECT(FOUND>1:"entries",1:"entry")
+59 SET XURET(0)=1_U_FOUND_" matching "_EES_U_$PIECE($$SITE^VASITE(),U,3)
+60 ;
+61 ; get each entries CallBackType and Context Option (if flagged)
+62 ;
+63 SET COUNT=0
+64 FOR
SET COUNT=$ORDER(OUT("DILIST",2,COUNT))
if COUNT'>0
QUIT
Begin DoDot:1
+65 SET RAIEN=+$GET(OUT("DILIST",2,COUNT))
+66 SET IENS=","_RAIEN_","
+67 SET OUTCB="OUTCB("_RAIEN_")"
+68 DO LIST^DIC(8994.51,IENS,".01;.02;.03;.04","","","","","","","",OUTCB,"ERRCB")
+69 ;
+70 ; if requested, get the .02 CONTEXTOPTION pointed to entry data for return,
+71 ;
+72 ;
IF FLAGS["M"
DO GETCNTXT^XUREMAP1(.OUTCTXT,$GET(OUT("DILIST","ID",COUNT,.02)),RAIEN)
End DoDot:1
+73 ;
+74 DO FORMAT^XUREMAP1(.XURET,.OUT,.OUTCB,.OUTCTXT)
+75 KILL OUT,ERR,OUTCB,OUTCTXT
+76 ;
+77 QUIT
+78 ;
+79 ;
CONTEXTQ(RETURN,NAME) ; API restricted to IAM to Query Context Options
+1 ; and return entry data
+2 ;
+3 ; API restricted to IAM to Query Context Options and return entry data.
+4 ;
+5 ; called from rpc: XUS IAM RA CONTEXT QUERY
+6 ;
+7 ;
+8 ; INPUT: NAME--full name of entry to search for an exact match.
+9 ;
+10 ; SUCCESS:
+11 ; XURET(0)="LOCAL IEN^Option [name of matching entry]^SITE #"
+12 ; XURET(1)=file;field no.^ field name^data
+13 ; XURET(2)=file;field no.^ field name^data
+14 ; ...
+15 ; XURET(n)=file;field no.^ field name^data
+16 ;
+17 ; FAIL:
+18 ; XURET(0)="-1^Option [name of matching entry] not found.^SITE #"
+19 ;
+20 NEW FOUND
+21 IF $GET(NAME)=""
Begin DoDot:1
+22 SET RETURN(0)="-1"_U_"NAME input cannot be empty."
End DoDot:1
QUIT
+23 SET RETURN(0)="-1^Option "_NAME_" not found."
+24 DO GETCNTXT^XUREMAP1(.FOUND,NAME,1)
+25 IF +FOUND(0)
SET RETURN(0)=FOUND(0)
+26 ;
+27 DO CONTEXT^XUREMAP1(.RETURN,.FOUND,0,1)
+28 ;
+29 QUIT
+30 ;
ADDEP(XURET,XUARR) ; RPC to create new or update ENDPOINT entries
+1 ;
+2 ; called from rpc: XUS IAM RA CONTEXT ADD
+3 ; File Entry Even if 1 or more RPCs are not on local system and include unfiled RPCs in return array.
+4 ;
+5 ; Input:
+6 ; XUARR(#) = FILE #;FIELD #^FIELD NAME^INTERNAL VALUE^EXTERNAL VALUE
+7 ; content of each field is in between < >
+8 ;
+9 ; XUARR(1)="19;.01^NAME^<name of option>^"
+10 ; XUARR(2)="19;1^MENU TEXT^<menu text of option>^"
+11 ; XUARR(3)="19;4^TYPE^B^" ; must be B type
+12 ; XUARR(4)="19;3.5^DESCRIPTION^line 1 of option description."
+13 ; XUARR(5)="19;3.5^DESCRIPTION^line 2 of option description."
+14 ; XUARR(6)="19;3.5^DESCRIPTION^" ;file a blank line
+15 ; XUARR(7)="19.05;.01^NAME^<name of endpoint>^"
+16 ; XUARR(8)="19.05;1^RPC KEY^<rpc key>^"
+17 ; XUARR(9)="19.05;.01^NAME^<>^"
+18 ; XUARR(10)="19.05;1^RPC KEY^<rpc key>^"
+19 ;
+20 ; Success:
+21 ; XURET(0) = 1
+22 ;
+23 ; Fail:
+24 ; XURET(0) = "-1^No data passed"
+25 ; XURET(0) = "-1^"_$G(XUERR("DIERR",1,"TEXT",1))
+26 ;
+27 ;
+28 NEW FILE,FILENO,CTXTNAME,FOUND,XUNAME,TMPXURET,ERR
+29 SET FILE=$$GETFLNUM^XUREMAP1(.XUARR)
+30 SET FILENO=+FILE
+31 SET CTXTNAME=$PIECE(FILE,U,2)
+32 IF +FILENO'=19
Begin DoDot:1
+33 SET XURET(0)="-1^Invalid file number"
End DoDot:1
QUIT
+34 DO CHKAEPIN^XUREMAP1(.XURET,.XUARR)
+35 if +$GET(XURET(0))<0
QUIT
+36 ;DEFAULT AFTER INPUT CHECK
SET XURET(0)="-1^Nothing Filed."
+37 SET FOUND=$$FIND1^DIC(FILENO,"","MX",CTXTNAME,"","","ERR")
+38 IF FOUND
Begin DoDot:1
+39 DO FAUXFL^XUREMAP1(.XURET,.XUNAME,.XUARR)
+40 if ($GET(XURET(0))'>0)
QUIT
+41 KILL XURET
SET XURET(0)="-1^Invalid file number"
+42 LOCK +^DIC(19,FOUND,0):2
IF '$TEST
SET XURET(0)="-1^"_CTXTNAME_" entry locked for file: "_FILENO
QUIT
+43 DO REMOVE^XUREMAP1(.TMPXURET,XUNAME,FILENO)
+44 ; file the input entry passed in XUARR
+45 DO ADDEP^XUREMAP1(.XURET,.XUARR,FOUND)
+46 LOCK -^DIC(19,FOUND,0)
End DoDot:1
+47 IF '$TEST
Begin DoDot:1
+48 DO ADDEP^XUREMAP1(.XURET,.XUARR,"")
End DoDot:1
+49 QUIT
CANADD(XURET,XURANAME,XUCANADD) ; entry point for RPC is used exclusively by
+1 ; the Identity and Access Management (IAM) service to mark an entry in the
+2 ; remote application file (#8994.5) as either CAN ADD USERS=YES OR CAN ADD USERS=NO
+3 ;
+4 ; INPUT PARAMETER: XURANAME (REQUIRED)--The value of the NAME (#.01)
+5 ; field of the entry in the REMOTE APPLICATION (#8994.5)
+6 ; file, for the REMOTE APPLICATION to be disabled.
+7 ;
+8 ; INPUT PARAMETER: XUCANADD (REQUIRED)--boolean
+9 ; 1 - CAN ADD USERS = YES
+10 ; 0 - CAN ADD USERS = NO
+11 ; RETURN PARAMETER: XURET--success or failure
+12 ; success: 1 ^ [name of remote application] ^ CAN ADD / CANNOT ADD ^ SITE #
+13 ; failure: -1 ^ [name of remote application] ^ error text ^ SITE #
+14 ;
+15 NEW RAIEN,IENS,XUFDA,XUERR,XUSVRB
+16 IF $GET(XURANAME)=""
Begin DoDot:1
+17 SET XURET(0)="-1"_U_"XURANAME input cannot be empty."
End DoDot:1
QUIT
+18 SET RAIEN=$$FIND1^DIC(8994.5,"","MX",XURANAME,"","","ERR")
+19 IF +RAIEN'>0
Begin DoDot:1
+20 SET XURET(0)="-1"_U_XURANAME_U_"No Remote application found matching "_XURANAME_U_$PIECE($$SITE^VASITE(),U,3)
End DoDot:1
QUIT
+21 ;
+22 IF "^0^1^"'[(U_$GET(XUCANADD)_U)
Begin DoDot:1
+23 SET XURET(0)="-1"_U_XURANAME_U_"XUCANADD parameter must be either 0 (disable) or 1 (enable)"_U_$PIECE($$SITE^VASITE(),U,3)
End DoDot:1
QUIT
+24 ;
+25 ; set DISABLED field for RA entry passed (and found)
+26 ;
+27 SET IENS=RAIEN_","
+28 SET XUSVRB=$SELECT(XUCANADD=1:"CAN ADD",1:"CANNOT ADD")
+29 SET XUFDA(8994.5,IENS,.04)=+XUCANADD
+30 DO FILE^DIE("K","XUFDA","XUERR")
+31 IF $DATA(XUERR("DIERR"))
Begin DoDot:1
+32 SET XURET(0)="-1"_U_XURANAME_U_XUSVRB_" request failure - filer error: "_$GET(XUERR("DIERR",1,"TEXT",1))_U_$PIECE($$SITE^VASITE(),U,3)
End DoDot:1
QUIT
+33 SET XURET(0)="1"_U_XURANAME_U_XUSVRB_U_$PIECE($$SITE^VASITE(),U,3)
+34 QUIT
+35 ;