1 | SCMCUT ;ALB/JLU;General utility routine;8/17/99@1515
|
---|
2 | ;;5.3;Scheduling;**177,205,204**;AUG 13, 1993
|
---|
3 | ;
|
---|
4 | ;This is a general utility routine for the PCMM application. Any
|
---|
5 | ;general purpose utility should be placed in this routine.
|
---|
6 | ;
|
---|
7 | ;
|
---|
8 | CLNLST(SER,ARY,ACT) ;
|
---|
9 | ;This API is a function that returns the list of clients that
|
---|
10 | ;can run with the server that is passed in.
|
---|
11 | ;
|
---|
12 | ;INPUTs: SER --- This is the server to check for. It needs to be in
|
---|
13 | ; a patch format Ex. SD*5.3*177
|
---|
14 | ; ARY --- This is the array root the list will be returned in.
|
---|
15 | ; If nothing is passed in a default will be used. This
|
---|
16 | ; array must be clean before it is passed to this API.
|
---|
17 | ; No kills will be issued.
|
---|
18 | ; Ex. ^TMP("PCMM CLIENT LIST",$J,"1.2.0.0")=effective dt
|
---|
19 | ; ^TMP("PCMM CLIENT LIST",$J,"1.3.0.0")=effective dt
|
---|
20 | ; ACT --- This variable indicates whether to:
|
---|
21 | ; 1 - return only active clients (default)
|
---|
22 | ; 0 - return all clients
|
---|
23 | ;
|
---|
24 | ;OUTPUTS --- The output of this function call is the data in the array
|
---|
25 | ; variable but also the function itself. It will either be
|
---|
26 | ; 1 for a success or -1 with an error message.
|
---|
27 | ; Ex. "-1^not a valid server name"
|
---|
28 | ; "1"
|
---|
29 | ;
|
---|
30 | N RESULTS
|
---|
31 | ;
|
---|
32 | ;checking input parameters
|
---|
33 | S SER=$G(SER)
|
---|
34 | I SER']"" S RESULTS="-1^Server variable not defined." G CLNLSTQ
|
---|
35 | S ARY=$G(ARY)
|
---|
36 | I ARY']"" S ARY=$NA(^TMP("PCMM CLIENT LIST",$J))
|
---|
37 | S ACT=$G(ACT,1)
|
---|
38 | ;
|
---|
39 | ;checking existance of server in PCMM SERVER PATCH file.
|
---|
40 | I '$D(^SCTM(404.45,"B",SER)) S RESULTS="-1^This server is not in the PCMM SERVER PATCH file." G CLNLSTQ
|
---|
41 | ;
|
---|
42 | ;if ACT, checking if server is active
|
---|
43 | I ACT,'$$ACTSER(SER) S RESULTS="-1^This server is not active." G CLNLSTQ
|
---|
44 | ;
|
---|
45 | ;loop through the server patches and build the list of clients.
|
---|
46 | N CLT,SERIEN
|
---|
47 | S CLT="",RESULTS="-1^No clients found for this Server."
|
---|
48 | ;
|
---|
49 | F S CLT=$O(^SCTM(404.45,"ASER",SER,CLT)) Q:CLT="" S SERIEN=$O(^SCTM(404.45,"ASER",SER,CLT,"")) Q:SERIEN="" DO
|
---|
50 | .N NOD5,NOD6
|
---|
51 | .S NOD5=$G(^SCTM(404.45,SERIEN,0))
|
---|
52 | .Q:NOD5=""
|
---|
53 | .S NOD6=$G(^SCTM(404.46,$P(NOD5,U,2),0))
|
---|
54 | .Q:NOD6=""
|
---|
55 | .I ACT,$P(NOD6,U,2),$D(^SCTM(404.45,"ACT",SER,SERIEN)) S @ARY@($P(NOD6,U,1))=$P(NOD6,U,2,3),RESULTS=1
|
---|
56 | .I 'ACT S @ARY@($P(NOD6,U,1))=$P(NOD6,U,2,3),RESULTS=1
|
---|
57 | .Q
|
---|
58 | ;
|
---|
59 | CLNLSTQ Q RESULTS
|
---|
60 | ;
|
---|
61 | ;
|
---|
62 | ACTCLT(CLT) ;Is this client active?
|
---|
63 | ;This function call returns whether the client passed in is active or
|
---|
64 | ;not . It just tells the status of the client per its entry in PCMM
|
---|
65 | ;CLIENT PATCH file. It does not relate in anyway to the PCMM SERVER
|
---|
66 | ;PATCH file.
|
---|
67 | ;
|
---|
68 | ;INPUT: CLT - This is the External Client version number
|
---|
69 | ;
|
---|
70 | ;OUTPUT: 1 - ACTIVE
|
---|
71 | ; 0 - NOT ACTIVE
|
---|
72 | ; -1^ERROR DESCRIPTION
|
---|
73 | ;
|
---|
74 | N RESULTS
|
---|
75 | S CLT=$G(CLT)
|
---|
76 | I CLT']"" S RESULTS="-1^Client variable not defined." G ACTCLTQ
|
---|
77 | ;
|
---|
78 | N CLTIEN,ACT
|
---|
79 | S CLTIEN=$O(^SCTM(404.46,"B",CLT,0))
|
---|
80 | I CLTIEN="" S RESULTS="-1^Client not defined in PCMM CLIENT PATCH file." G ACTCLTQ
|
---|
81 | S ACT=$P(^SCTM(404.46,CLTIEN,0),U,2)
|
---|
82 | S RESULTS=$S(ACT:ACT,1:0) ;This was done so that a null would be zero
|
---|
83 | ;
|
---|
84 | ACTCLTQ Q RESULTS
|
---|
85 | ;
|
---|
86 | ;
|
---|
87 | ACTSER(SER,ARY) ;
|
---|
88 | ; This function call is used to return the status of a server
|
---|
89 | ; or a list of active servers at the sight.
|
---|
90 | ; It does not return the IENs or multiples of
|
---|
91 | ; the same server value.
|
---|
92 | ;
|
---|
93 | ;INPUTS SER - [optional]: Test for a specific server version
|
---|
94 | ; ARY - [optional]: This is the array root that the list
|
---|
95 | ; is to be stored in, if SER is undefined.
|
---|
96 | ; If nothing is passed then the default will be used.
|
---|
97 | ; ^TMP("PCMM ACTIVE SERVERS",$J,SERVER NUMBER)=EFFECTIVE DT
|
---|
98 | ;
|
---|
99 | ;OUTPUTS 1 - a success
|
---|
100 | ; 0 - none found.
|
---|
101 | ;
|
---|
102 | N RESULTS,LP,IEN
|
---|
103 | S SER=$G(SER,"")
|
---|
104 | I SER]"" S RESULTS=$D(^SCTM(404.45,"ACT",SER))>0 G ACTSERQ
|
---|
105 | S ARY=$G(ARY,"^TMP(""PCMM ACTIVE SERVERS"",$J)")
|
---|
106 | S RESULTS=0,LP=""
|
---|
107 | ;
|
---|
108 | I $O(^SCTM(404.45,"ACT",""))']"" G ACTSERQ
|
---|
109 | ;
|
---|
110 | F S LP=$O(^SCTM(404.45,"ACT",LP)) Q:LP="" S IEN=$O(^SCTM(404.45,"ACT",LP,"")) Q:IEN="" DO
|
---|
111 | .S IEN=$G(^SCTM(404.45,IEN,0))
|
---|
112 | .Q:IEN=""
|
---|
113 | .S @ARY@(LP)=$P(IEN,U,3)
|
---|
114 | .S RESULTS=1
|
---|
115 | .Q
|
---|
116 | I SER]"" S RESULTS=$D(@ARY@(SER))
|
---|
117 | ;
|
---|
118 | ACTSERQ Q RESULTS
|
---|
119 | ;
|
---|
120 | ;
|
---|
121 | DISCLNTS() ;This function call is used to determine if all clients should
|
---|
122 | ;be disabled.
|
---|
123 | ;
|
---|
124 | ;INPUTS -- NONE
|
---|
125 | ;OUTPUTS -- 1 means YES disable all clients
|
---|
126 | ; 0 means NO
|
---|
127 | ;
|
---|
128 | N IEN,RESULTS
|
---|
129 | S RESULTS=0
|
---|
130 | ;
|
---|
131 | S IEN=+$O(^SCTM(404.44,0))
|
---|
132 | I 'IEN G DISQ
|
---|
133 | S IEN=$G(^SCTM(404.44,IEN,1))
|
---|
134 | S RESULTS=$S('$P(IEN,U,2):0,1:1)
|
---|
135 | ;
|
---|
136 | DISQ Q RESULTS
|
---|
137 | ;
|
---|
138 | UPCLNLST(SCX) ;update 404.46/404.45 with new client/server pair (if enabled)
|
---|
139 | ; input := SCX p1[required] : ServerPatch
|
---|
140 | ; p2[required] : ^ClientVersion
|
---|
141 | ; p3[optional] : ^EnabledOverride(1=bypass,0=no[default])
|
---|
142 | ; p4[optional] : ^ActiveServer(1=yes[default],0=no)
|
---|
143 | ; p5[optional] : ^ActiveClient(1=yes[default],0=no)
|
---|
144 | ; output := SCRESULT : 1 = success
|
---|
145 | ; : 0 = failure/not allowed
|
---|
146 | ;
|
---|
147 | N SCRESULT,SCSER,SCCLI,SCASER,SCACLI,SCBYPASS,SCIEN
|
---|
148 | S SCRESULT=0
|
---|
149 | ;
|
---|
150 | ; parse
|
---|
151 | S SCSER=$P(SCX,U)
|
---|
152 | I SCSER']"" G UPCLNQ
|
---|
153 | S SCCLI=$P(SCX,U,2)
|
---|
154 | I SCCLI']"" G UPCLNQ
|
---|
155 | S SCBYPASS=$P(SCX,U,3)
|
---|
156 | S SCBYPASS=$S(SCBYPASS=1:1,1:0)
|
---|
157 | S SCIEN=+$O(^SCTM(404.44,0))
|
---|
158 | I 'SCIEN G UPCLNQ
|
---|
159 | I 'SCBYPASS,$P($G(^SCTM(404.44,SCIEN,1)),U,3)=1 G UPCLNQ
|
---|
160 | S SCASER=$P(SCX,U,4)
|
---|
161 | S SCASER=$S(SCASER=0:0,1:1)
|
---|
162 | S SCACLI=$P(SCX,U,5)
|
---|
163 | S SCACLI=$S(SCACLI=0:0,1:1)
|
---|
164 | ;
|
---|
165 | ;update client file
|
---|
166 | N SC1,SC1IEN,SC1ERR
|
---|
167 | S SC1(1,404.46,"?+1,",.01)=SCCLI ;client version
|
---|
168 | S SC1(1,404.46,"?+1,",.02)=SCACLI ;active?
|
---|
169 | S SC1(1,404.46,"?+1,",.03)=DT ;today
|
---|
170 | D UPDATE^DIE("","SC1(1)","SC1IEN","SC1ERR")
|
---|
171 | I $D(SC1ERR)!(+$G(SC1IEN(1))<0) G UPCLNQ
|
---|
172 | ;
|
---|
173 | ;update server file
|
---|
174 | N SC2,SC2IEN,SC2ERR
|
---|
175 | S SC2(1,404.45,"?+1,",.01)=SCSER ;server version
|
---|
176 | S SC2(1,404.45,"?+1,",.02)=SC1IEN(1) ;ptr - client version
|
---|
177 | S SC2(1,404.45,"?+1,",.03)=DT ;today
|
---|
178 | S SC2(1,404.45,"?+1,",.04)=SCASER ;active?
|
---|
179 | D UPDATE^DIE("","SC2(1)","SC2IEN","SC2ERR")
|
---|
180 | I $D(SC2ERR)!(+$G(SC2IEN(1))<0) G UPCLNQ
|
---|
181 | S SCRESULT=1
|
---|
182 | ;
|
---|
183 | UPCLNQ Q SCRESULT
|
---|
184 | ;
|
---|