KMPUTLW2 ;SP/JML - Manage REST interfaces for VSM Monitors ;7/1/2025
;;4.0;CAPACITY MANAGEMENT;**1,4,5**;3/1/2018;Build 9
;
;
;
EVTPKG(KMPOPT) ;
; calculate eventname, parenteventname, eventtype, eventsource
N KMPENAME,KMPESTR,KMPPSTR
S KMPESTR="|||",KMPPSTR="|"
S KMPESTR=$$CALCEVT(KMPOPT)
S KMPENAME=$P(KMPESTR,"|")
;
S KMPPSTR=$G(^KMPVPKG(KMPENAME))
I KMPPSTR="" D
.S KMPPSTR=$$CALCPKG(KMPENAME)
Q KMPESTR_"|"_KMPPSTR
;
CALCEVT(KMPOPT) ;
N KMPENAM,KMPETYP,KMPP1,KMPP2,KMPPENAM,KMPRUMD
S (KMPENAM,KMPPENAM,KMPETYP,KMPRUMD)=""
S KMPP1=$P(KMPOPT,"***"),KMPP2=$P(KMPOPT,"***",2)
; Event Type - RPC, Protocol, Option
S KMPETYP=$S($E(KMPP1)="`":"RPC",KMPP2'="":"PROTOCOL",1:"OPTION")
; RUM Designation -> EventSource - 1:TaskMan, 2: Menu, 3:RPC Broker, 4:Users, 5:Unknown
I $E(KMPP1)="!"!(KMPP1="$AFTR ZTMS$")!(KMPP1="$STRT ZTMS$") S KMPRUMD="TASKMAN"
I KMPRUMD="" S KMPRUMD=$S($E(KMPP1)="`":"RPC BROKER",$E(KMPP1)="#":"USERS",1:"MENU")
I KMPRUMD="" S KMPRUMD="UNKNOWN"
; EventName
I $$RESERVED(KMPP1) S KMPENAM=KMPP1 ; handle system events
I KMPENAM="","`!#"[$E(KMPP1) S KMPENAM=$E(KMPP1,2,$L(KMPP1)) ; handle non menu events
I KMPENAM="" S KMPENAM=KMPP1 ; remaining need no editing
I KMPP2'="" S KMPPENAM=KMPENAM,KMPENAM=KMPP2 ; IF PROTOCOL SET OPTION AS PARENT EVENT
I (KMPENAM'="")&($E(KMPENAM,1)="`") S KMPENAM=$E(KMPENAM,2,$L(KMPENAM))
S KMPRET=KMPENAM_"|"_KMPPENAM_"|"_KMPETYP_"|"_KMPRUMD
S ^KMPVEVT(KMPOPT)=KMPRET
Q KMPRET
;
CALCPKG(KMPENAME) ;
N KMPIEN,KMPPKGID,KMPPNAM,KMPPRE,KMPRET
; CODE FROM SERVER TO SET KMPPKGID
I $$RESERVED(KMPENAME) Q $$RESPACK(KMPENAME)
S KMPPKGID="",KMPRET="UNKNOWN^UNKNOWN"
S KMPPRE=$E(KMPENAME,1,4) D
.I $D(^DIC(9.4,"C",KMPPRE)) S KMPPKGID=$O(^DIC(9.4,"C",KMPPRE,""))
I KMPPKGID="" S KMPPRE=$E(KMPENAME,1,3) D
.I $D(^DIC(9.4,"C",KMPPRE)) S KMPPKGID=$O(^DIC(9.4,"C",KMPPRE,""))
I KMPPKGID="" S KMPPRE=$E(KMPENAME,1,2) D
.I $D(^DIC(9.4,"C",KMPPRE)) S KMPPKGID=$O(^DIC(9.4,"C",KMPPRE,""))
I KMPPKGID="" Q KMPRET
S KMPIEN=""
; IF 2 ENTRIES NO WAY TO DECIDE WHICH IS CORRECT SO TAKE FIRST - DON'T LOOP - RARE OCCURRENCE
S KMPIEN=$O(^DIC(9.4,"C",KMPPRE,KMPIEN)) Q:KMPIEN="" D
.S KMPPNAM=$P($G(^DIC(9.4,KMPIEN,0)),"^")
.S KMPRET=KMPPRE_"|"_KMPPNAM
.S ^KMPVPKG(KMPENAME)=KMPRET
Q KMPRET
;
RESERVED(KMPENAME) ; Return 1 if system event
I "#USER#^$AFTR ZTMS$^$STRT ZTMS$^$BROKER HANDLER$^$LOGIN$^$VISTALINK HANDLER$^$XQ MENU DRIVER$^EVE^"[KMPENAME Q 1
I "#USER#^$AFTR ZTMS$^$STRT ZTMS$^$BROKER HANDLER$^$LOGIN$^$VISTALINK HANDLER$^$XQ MENU DRIVER$"[$E(KMPENAME,2,$L(KMPENAME)) Q 1
Q 0
;
RESPACK(KMPENAME) ; Return PREFIX^PACKAGE
I "^$AFTR ZTMS$^$STRT ZTMS$^$XQ MENU DRIVER$^$LOGIN$^#USER#^EVE^"[KMPENAME Q "XU|KERNEL"
I "^$BROKER HANDLER$^"[KMPENAME Q "XWB|RPC BROKER"
I "^$VISTALINK HANDLER$^"[KMPENAME Q "XOBV|VISTALINK"
; The following code is to fix null vsmpackage in KMPVBusinessEvent 2-14-2018 SCL
I "^$BROKER HANDLER$^"[$E(KMPENAME,2,$L(KMPENAME)) Q "XWB|RPC BROKER"
I "^$AFTR ZTMS$^$STRT ZTMS$^$XQ MENU DRIVER$^$LOGIN$^#USER#^EVE^"[$E(KMPENAME,2,$L(KMPENAME)) Q "XU|KERNEL"
I "^$VISTALINK HANDLER$^"[$E(KMPENAME,2,$L(KMPENAME)) Q "XOBV|VISTALINK"
Q ""
;
SETCFG(KMPCFG) ; Change VSM configuration via national server change request
N KMPDATA,KMPEARR,KMPENUM,KMPFNAM,KMPFNUM,KMPFUNC,KMPFVAL,KMPI,KMPIEN,KMPMKEY,KMPMSG,KMPMSG2,KMPON,KMPRESP,KMPRT
N KMPRTN,KMPRTO,KMPTEXT,KMPTNUM,KMPVER,FDA
;
S KMPFUNC="SETCFG"
S KMPMKEY=KMPCFG.Monitor
S (KMPMSG,KMPMSG2)=""
;
D STOPMON^KMPVCBG(KMPMKEY,1,1)
;
S KMPVER=$$GETVAL^KMPVCCFG(KMPMKEY,"VERSION",8969)
I KMPCFG.Function'="SetConfig" Q "Incorrect Function Type"
S KMPFVAL("ALLOW TEST SYSTEM")=KMPCFG.AllowTestSystem
S KMPFVAL("APIKEY")=KMPCFG.ApiKey
S KMPFVAL("COLLECTION INTERVAL")=KMPCFG.CollectionInterval
S KMPFVAL("DAYS TO KEEP DATA")=KMPCFG.DaysToKeepData
S KMPFVAL("ENCRYPT")=KMPCFG.Encrypt
S KMPFVAL("HTTP REQUEST MAX LENGTH")=KMPCFG.HttpRequestMaxLength
S KMPFVAL("MONITOR START DELAY")=KMPCFG.MonitorStartDelay
S KMPFVAL("NATIONAL FQDN")=KMPCFG.NationalFqdn
S KMPFVAL("NATIONAL IP ADDRESS")=KMPCFG.NationalIpAddress
S KMPFVAL("NATIONAL PORT")=KMPCFG.NationalPort
S KMPFVAL("NATIONAL SUPPORT EMAIL ADDRESS")=KMPCFG.NationalSupportEmailAddress
S KMPFVAL("ONOFF")=KMPCFG.OnOff
S KMPFVAL("COVER SHEET EXPIRATION")=KMPCFG.CoverSheetExpiration
S KMPFVAL("FUTURE TASK CHECK")=KMPCFG.FutureTaskCheck
;
; verify Monitor Type is valid
I $D(^KMPV(8969,"B",KMPMKEY)) S KMPIEN=$O(^KMPV(8969,"B",KMPMKEY,""))
I $G(KMPIEN)="" Q "Monitor "_KMPMKEY_" not defined. No changes made."
; get field numbers and set FDA array
S KMPFNAM=""
F S KMPFNAM=$O(KMPFVAL(KMPFNAM)) Q:KMPFNAM="" D
.S KMPFNUM=$$FLDNUM^DILFD(8969,KMPFNAM)
.I KMPFNUM>0 S FDA($J,8969,KMPIEN_",",KMPFNUM)=KMPFVAL(KMPFNAM)
.E S KMPEARR(KMPFNAM)=""
;
; If field name does not exist send message and quit
I $D(KMPEARR) D Q "Configuration Update field(s) do not exist in the VSM CONFIGURATION file"
.S KMPTEXT("SUBJECT")="VSM ALERT: Configuration Update field(s) do not exist in the VSM CONFIGURATION file "
.S KMPI=1
.S KMPFNAM="",KMPTEXT(KMPI)=KMPMKEY_" Missing Fields",KMPI=KMPI+1
.F S KMPFNAM=$O(KMPEARR(KMPFNAM)) Q:KMPFNAM="" D
..S KMPTEXT(KMPI)=KMPFNAM,KMPI=KMPI+1
;
; If still good get old values for logging changes
S KMPFNAM=""
F S KMPFNAM=$O(KMPFVAL(KMPFNAM)) Q:KMPFNAM="" D
.S $P(KMPFVAL(KMPFNAM),"^",2)=$$GETVAL^KMPVCCFG(KMPMKEY,KMPFNAM,8969,"I")
; ATTEMPT TO MAKE CHANGES
K KMPEARR
D FILE^DIE("ET","FDA($J)","KMPEARR")
; IF ERRORS SEND MESSAGE WITH ERRORS
S KMPRESP="OK"
S KMPI=1
I $D(KMPEARR) D ; Add filing errors to support message
.S KMPRESP="UPDATE FAILED"
.S KMPTEXT("SUBJECT")="VSM ALERT:"_KMPMKEY_" Configuration Update: WITH ERRORS. "
.S KMPTEXT(KMPI)="Changes NOT applied to VSM CONFIGURATION file. ",KMPI=KMPI+1
.S KMPTEXT(KMPI)="Number of errors: "_+KMPEARR("DIERR"),KMPI=KMPI+1
.S KMPENUM=""
.F S KMPENUM=$O(KMPEARR("DIERR",KMPENUM)) Q:+KMPENUM=0 D
..S KMPTNUM=""
..F S KMPTNUM=$O(KMPEARR("DIERR",KMPENUM,"TEXT",KMPTNUM)) Q:+KMPTNUM=0 D
...S KMPTEXT(KMPI)=KMPEARR("DIERR",KMPENUM,"TEXT",KMPTNUM),KMPI=KMPI+1
.D INFOMSG^KMPUTLW(.KMPTEXT)
; If no FILING errors then list changes in Support Message and Log Changes
I '$D(KMPEARR) D
.S KMPI=1
.S KMPTEXT("SUBJECT")="VSM CONFIGURATION: "_KMPMKEY_" Configuration Update: No Errors. "
.S KMPTEXT(KMPI)="Changes applied to VSM CONFIGURATION file. ",KMPI=KMPI+1
.; list changes in Support Message
.S KMPFNAM="",KMPTEXT(KMPI)="Changed Fields",KMPI=KMPI+1
.F S KMPFNAM=$O(KMPFVAL(KMPFNAM)) Q:KMPFNAM="" D
..S KMPDATA=KMPFVAL(KMPFNAM)
..S KMPTEXT(KMPI)=KMPFNAM_"-"_$P(KMPDATA,"^",2)_" TO "_$P(KMPDATA,"^"),KMPI=KMPI+1
.D INFOMSG^KMPUTLW(.KMPTEXT)
; if end state is 'ON' then start monitor
I $$GETVAL^KMPVCCFG(KMPMKEY,"ONOFF",8969)="ON" D STARTMON^KMPVCBG(KMPMKEY,1,1)
Q KMPRESP
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HKMPUTLW2 6983 printed May 25, 2026@11:45:32 Page 2
KMPUTLW2 ;SP/JML - Manage REST interfaces for VSM Monitors ;7/1/2025
+1 ;;4.0;CAPACITY MANAGEMENT;**1,4,5**;3/1/2018;Build 9
+2 ;
+3 ;
+4 ;
EVTPKG(KMPOPT) ;
+1 ; calculate eventname, parenteventname, eventtype, eventsource
+2 NEW KMPENAME,KMPESTR,KMPPSTR
+3 SET KMPESTR="|||"
SET KMPPSTR="|"
+4 SET KMPESTR=$$CALCEVT(KMPOPT)
+5 SET KMPENAME=$PIECE(KMPESTR,"|")
+6 ;
+7 SET KMPPSTR=$GET(^KMPVPKG(KMPENAME))
+8 IF KMPPSTR=""
Begin DoDot:1
+9 SET KMPPSTR=$$CALCPKG(KMPENAME)
End DoDot:1
+10 QUIT KMPESTR_"|"_KMPPSTR
+11 ;
CALCEVT(KMPOPT) ;
+1 NEW KMPENAM,KMPETYP,KMPP1,KMPP2,KMPPENAM,KMPRUMD
+2 SET (KMPENAM,KMPPENAM,KMPETYP,KMPRUMD)=""
+3 SET KMPP1=$PIECE(KMPOPT,"***")
SET KMPP2=$PIECE(KMPOPT,"***",2)
+4 ; Event Type - RPC, Protocol, Option
+5 SET KMPETYP=$SELECT($EXTRACT(KMPP1)="`":"RPC",KMPP2'="":"PROTOCOL",1:"OPTION")
+6 ; RUM Designation -> EventSource - 1:TaskMan, 2: Menu, 3:RPC Broker, 4:Users, 5:Unknown
+7 IF $EXTRACT(KMPP1)="!"!(KMPP1="$AFTR ZTMS$")!(KMPP1="$STRT ZTMS$")
SET KMPRUMD="TASKMAN"
+8 IF KMPRUMD=""
SET KMPRUMD=$SELECT($EXTRACT(KMPP1)="`":"RPC BROKER",$EXTRACT(KMPP1)="#":"USERS",1:"MENU")
+9 IF KMPRUMD=""
SET KMPRUMD="UNKNOWN"
+10 ; EventName
+11 ; handle system events
IF $$RESERVED(KMPP1)
SET KMPENAM=KMPP1
+12 ; handle non menu events
IF KMPENAM=""
IF "`!#"[$EXTRACT(KMPP1)
SET KMPENAM=$EXTRACT(KMPP1,2,$LENGTH(KMPP1))
+13 ; remaining need no editing
IF KMPENAM=""
SET KMPENAM=KMPP1
+14 ; IF PROTOCOL SET OPTION AS PARENT EVENT
IF KMPP2'=""
SET KMPPENAM=KMPENAM
SET KMPENAM=KMPP2
+15 IF (KMPENAM'="")&($EXTRACT(KMPENAM,1)="`")
SET KMPENAM=$EXTRACT(KMPENAM,2,$LENGTH(KMPENAM))
+16 SET KMPRET=KMPENAM_"|"_KMPPENAM_"|"_KMPETYP_"|"_KMPRUMD
+17 SET ^KMPVEVT(KMPOPT)=KMPRET
+18 QUIT KMPRET
+19 ;
CALCPKG(KMPENAME) ;
+1 NEW KMPIEN,KMPPKGID,KMPPNAM,KMPPRE,KMPRET
+2 ; CODE FROM SERVER TO SET KMPPKGID
+3 IF $$RESERVED(KMPENAME)
QUIT $$RESPACK(KMPENAME)
+4 SET KMPPKGID=""
SET KMPRET="UNKNOWN^UNKNOWN"
+5 SET KMPPRE=$EXTRACT(KMPENAME,1,4)
Begin DoDot:1
+6 IF $DATA(^DIC(9.4,"C",KMPPRE))
SET KMPPKGID=$ORDER(^DIC(9.4,"C",KMPPRE,""))
End DoDot:1
+7 IF KMPPKGID=""
SET KMPPRE=$EXTRACT(KMPENAME,1,3)
Begin DoDot:1
+8 IF $DATA(^DIC(9.4,"C",KMPPRE))
SET KMPPKGID=$ORDER(^DIC(9.4,"C",KMPPRE,""))
End DoDot:1
+9 IF KMPPKGID=""
SET KMPPRE=$EXTRACT(KMPENAME,1,2)
Begin DoDot:1
+10 IF $DATA(^DIC(9.4,"C",KMPPRE))
SET KMPPKGID=$ORDER(^DIC(9.4,"C",KMPPRE,""))
End DoDot:1
+11 IF KMPPKGID=""
QUIT KMPRET
+12 SET KMPIEN=""
+13 ; IF 2 ENTRIES NO WAY TO DECIDE WHICH IS CORRECT SO TAKE FIRST - DON'T LOOP - RARE OCCURRENCE
+14 SET KMPIEN=$ORDER(^DIC(9.4,"C",KMPPRE,KMPIEN))
if KMPIEN=""
QUIT
Begin DoDot:1
+15 SET KMPPNAM=$PIECE($GET(^DIC(9.4,KMPIEN,0)),"^")
+16 SET KMPRET=KMPPRE_"|"_KMPPNAM
+17 SET ^KMPVPKG(KMPENAME)=KMPRET
End DoDot:1
+18 QUIT KMPRET
+19 ;
RESERVED(KMPENAME) ; Return 1 if system event
+1 IF "#USER#^$AFTR ZTMS$^$STRT ZTMS$^$BROKER HANDLER$^$LOGIN$^$VISTALINK HANDLER$^$XQ MENU DRIVER$^EVE^"[KMPENAME
QUIT 1
+2 IF "#USER#^$AFTR ZTMS$^$STRT ZTMS$^$BROKER HANDLER$^$LOGIN$^$VISTALINK HANDLER$^$XQ MENU DRIVER$"[$EXTRACT(KMPENAME,2,$LENGTH(KMPENAME))
QUIT 1
+3 QUIT 0
+4 ;
RESPACK(KMPENAME) ; Return PREFIX^PACKAGE
+1 IF "^$AFTR ZTMS$^$STRT ZTMS$^$XQ MENU DRIVER$^$LOGIN$^#USER#^EVE^"[KMPENAME
QUIT "XU|KERNEL"
+2 IF "^$BROKER HANDLER$^"[KMPENAME
QUIT "XWB|RPC BROKER"
+3 IF "^$VISTALINK HANDLER$^"[KMPENAME
QUIT "XOBV|VISTALINK"
+4 ; The following code is to fix null vsmpackage in KMPVBusinessEvent 2-14-2018 SCL
+5 IF "^$BROKER HANDLER$^"[$EXTRACT(KMPENAME,2,$LENGTH(KMPENAME))
QUIT "XWB|RPC BROKER"
+6 IF "^$AFTR ZTMS$^$STRT ZTMS$^$XQ MENU DRIVER$^$LOGIN$^#USER#^EVE^"[$EXTRACT(KMPENAME,2,$LENGTH(KMPENAME))
QUIT "XU|KERNEL"
+7 IF "^$VISTALINK HANDLER$^"[$EXTRACT(KMPENAME,2,$LENGTH(KMPENAME))
QUIT "XOBV|VISTALINK"
+8 QUIT ""
+9 ;
SETCFG(KMPCFG) ; Change VSM configuration via national server change request
+1 NEW KMPDATA,KMPEARR,KMPENUM,KMPFNAM,KMPFNUM,KMPFUNC,KMPFVAL,KMPI,KMPIEN,KMPMKEY,KMPMSG,KMPMSG2,KMPON,KMPRESP,KMPRT
+2 NEW KMPRTN,KMPRTO,KMPTEXT,KMPTNUM,KMPVER,FDA
+3 ;
+4 SET KMPFUNC="SETCFG"
+5 SET KMPMKEY=KMPCFG.Monitor
+6 SET (KMPMSG,KMPMSG2)=""
+7 ;
+8 DO STOPMON^KMPVCBG(KMPMKEY,1,1)
+9 ;
+10 SET KMPVER=$$GETVAL^KMPVCCFG(KMPMKEY,"VERSION",8969)
+11 IF KMPCFG.Function'="SetConfig"
QUIT "Incorrect Function Type"
+12 SET KMPFVAL("ALLOW TEST SYSTEM")=KMPCFG.AllowTestSystem
+13 SET KMPFVAL("APIKEY")=KMPCFG.ApiKey
+14 SET KMPFVAL("COLLECTION INTERVAL")=KMPCFG.CollectionInterval
+15 SET KMPFVAL("DAYS TO KEEP DATA")=KMPCFG.DaysToKeepData
+16 SET KMPFVAL("ENCRYPT")=KMPCFG.Encrypt
+17 SET KMPFVAL("HTTP REQUEST MAX LENGTH")=KMPCFG.HttpRequestMaxLength
+18 SET KMPFVAL("MONITOR START DELAY")=KMPCFG.MonitorStartDelay
+19 SET KMPFVAL("NATIONAL FQDN")=KMPCFG.NationalFqdn
+20 SET KMPFVAL("NATIONAL IP ADDRESS")=KMPCFG.NationalIpAddress
+21 SET KMPFVAL("NATIONAL PORT")=KMPCFG.NationalPort
+22 SET KMPFVAL("NATIONAL SUPPORT EMAIL ADDRESS")=KMPCFG.NationalSupportEmailAddress
+23 SET KMPFVAL("ONOFF")=KMPCFG.OnOff
+24 SET KMPFVAL("COVER SHEET EXPIRATION")=KMPCFG.CoverSheetExpiration
+25 SET KMPFVAL("FUTURE TASK CHECK")=KMPCFG.FutureTaskCheck
+26 ;
+27 ; verify Monitor Type is valid
+28 IF $DATA(^KMPV(8969,"B",KMPMKEY))
SET KMPIEN=$ORDER(^KMPV(8969,"B",KMPMKEY,""))
+29 IF $GET(KMPIEN)=""
QUIT "Monitor "_KMPMKEY_" not defined. No changes made."
+30 ; get field numbers and set FDA array
+31 SET KMPFNAM=""
+32 FOR
SET KMPFNAM=$ORDER(KMPFVAL(KMPFNAM))
if KMPFNAM=""
QUIT
Begin DoDot:1
+33 SET KMPFNUM=$$FLDNUM^DILFD(8969,KMPFNAM)
+34 IF KMPFNUM>0
SET FDA($JOB,8969,KMPIEN_",",KMPFNUM)=KMPFVAL(KMPFNAM)
+35 IF '$TEST
SET KMPEARR(KMPFNAM)=""
End DoDot:1
+36 ;
+37 ; If field name does not exist send message and quit
+38 IF $DATA(KMPEARR)
Begin DoDot:1
+39 SET KMPTEXT("SUBJECT")="VSM ALERT: Configuration Update field(s) do not exist in the VSM CONFIGURATION file "
+40 SET KMPI=1
+41 SET KMPFNAM=""
SET KMPTEXT(KMPI)=KMPMKEY_" Missing Fields"
SET KMPI=KMPI+1
+42 FOR
SET KMPFNAM=$ORDER(KMPEARR(KMPFNAM))
if KMPFNAM=""
QUIT
Begin DoDot:2
+43 SET KMPTEXT(KMPI)=KMPFNAM
SET KMPI=KMPI+1
End DoDot:2
End DoDot:1
QUIT "Configuration Update field(s) do not exist in the VSM CONFIGURATION file"
+44 ;
+45 ; If still good get old values for logging changes
+46 SET KMPFNAM=""
+47 FOR
SET KMPFNAM=$ORDER(KMPFVAL(KMPFNAM))
if KMPFNAM=""
QUIT
Begin DoDot:1
+48 SET $PIECE(KMPFVAL(KMPFNAM),"^",2)=$$GETVAL^KMPVCCFG(KMPMKEY,KMPFNAM,8969,"I")
End DoDot:1
+49 ; ATTEMPT TO MAKE CHANGES
+50 KILL KMPEARR
+51 DO FILE^DIE("ET","FDA($J)","KMPEARR")
+52 ; IF ERRORS SEND MESSAGE WITH ERRORS
+53 SET KMPRESP="OK"
+54 SET KMPI=1
+55 ; Add filing errors to support message
IF $DATA(KMPEARR)
Begin DoDot:1
+56 SET KMPRESP="UPDATE FAILED"
+57 SET KMPTEXT("SUBJECT")="VSM ALERT:"_KMPMKEY_" Configuration Update: WITH ERRORS. "
+58 SET KMPTEXT(KMPI)="Changes NOT applied to VSM CONFIGURATION file. "
SET KMPI=KMPI+1
+59 SET KMPTEXT(KMPI)="Number of errors: "_+KMPEARR("DIERR")
SET KMPI=KMPI+1
+60 SET KMPENUM=""
+61 FOR
SET KMPENUM=$ORDER(KMPEARR("DIERR",KMPENUM))
if +KMPENUM=0
QUIT
Begin DoDot:2
+62 SET KMPTNUM=""
+63 FOR
SET KMPTNUM=$ORDER(KMPEARR("DIERR",KMPENUM,"TEXT",KMPTNUM))
if +KMPTNUM=0
QUIT
Begin DoDot:3
+64 SET KMPTEXT(KMPI)=KMPEARR("DIERR",KMPENUM,"TEXT",KMPTNUM)
SET KMPI=KMPI+1
End DoDot:3
End DoDot:2
+65 DO INFOMSG^KMPUTLW(.KMPTEXT)
End DoDot:1
+66 ; If no FILING errors then list changes in Support Message and Log Changes
+67 IF '$DATA(KMPEARR)
Begin DoDot:1
+68 SET KMPI=1
+69 SET KMPTEXT("SUBJECT")="VSM CONFIGURATION: "_KMPMKEY_" Configuration Update: No Errors. "
+70 SET KMPTEXT(KMPI)="Changes applied to VSM CONFIGURATION file. "
SET KMPI=KMPI+1
+71 ; list changes in Support Message
+72 SET KMPFNAM=""
SET KMPTEXT(KMPI)="Changed Fields"
SET KMPI=KMPI+1
+73 FOR
SET KMPFNAM=$ORDER(KMPFVAL(KMPFNAM))
if KMPFNAM=""
QUIT
Begin DoDot:2
+74 SET KMPDATA=KMPFVAL(KMPFNAM)
+75 SET KMPTEXT(KMPI)=KMPFNAM_"-"_$PIECE(KMPDATA,"^",2)_" TO "_$PIECE(KMPDATA,"^")
SET KMPI=KMPI+1
End DoDot:2
+76 DO INFOMSG^KMPUTLW(.KMPTEXT)
End DoDot:1
+77 ; if end state is 'ON' then start monitor
+78 IF $$GETVAL^KMPVCCFG(KMPMKEY,"ONOFF",8969)="ON"
DO STARTMON^KMPVCBG(KMPMKEY,1,1)
+79 QUIT KMPRESP