1 &ANALYZE-SUSPEND _VERSION-NUMBER UIB_v8r12
3 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS Procedure
4 /*--------------------------------------------------------------------------
5 File
: process
/loadusrs.p
6 Purpose
: Reload local user files after a copy from another site
7 ------------------------------------------------------------------------*/
9 DEF VAR file-list
AS CHAR NO-UNDO.
10 file-list
= "usr.d,usrgrpmm.d".
12 DEF VAR this-office
AS CHAR NO-UNDO INITIAL "".
13 DEF VAR prefix
AS CHAR NO-UNDO INITIAL "".
14 DEF VAR cur-printer
AS CHAR NO-UNDO INITIAL "".
15 DEF VAR cur-port
AS CHAR NO-UNDO INITIAL "".
16 DEF VAR collision-detect
AS LOGI
NO-UNDO INITIAL No.
17 DEF VAR override-rules
AS LOGI
NO-UNDO INITIAL No.
18 DEF VAR batch-mode
AS LOGICAL NO-UNDO.
19 DEF VAR debug-mode
AS LOGICAL NO-UNDO INITIAL Yes.
22 DEF VAR old-office-code
AS CHAR NO-UNDO.
23 old-office-code
= Office.OfficeCode.
27 DEFINE STREAM debug-stream.
29 /* _UIB-CODE-BLOCK-END
*/
33 &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK
35 /* ******************** Preprocessor Definitions
******************** */
37 &Scoped-define PROCEDURE-TYPE Procedure
38 &Scoped-define DB-AWARE no
42 /* _UIB-PREPROCESSOR-BLOCK-END
*/
46 /* ************************ Function Prototypes
********************** */
48 &IF DEFINED(EXCLUDE-debug-event) = 0 &THEN
50 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD debug-event Procedure
51 FUNCTION debug-event
RETURNS CHARACTER
52 ( INPUT event-text
AS CHAR ) FORWARD.
54 /* _UIB-CODE-BLOCK-END
*/
60 /* *********************** Procedure Settings
************************ */
62 &ANALYZE-SUSPEND _PROCEDURE-SETTINGS
63 /* Settings for
THIS-PROCEDURE
67 Add Fields to
: Neither
68 Other Settings
: CODE-ONLY
COMPILE
70 &ANALYZE-RESUME _END-PROCEDURE-SETTINGS
72 /* ************************* Create Window
************************** */
74 &ANALYZE-SUSPEND _CREATE-WINDOW
75 /* DESIGN Window definition
(used by the UIB
)
76 CREATE WINDOW Procedure
ASSIGN
79 /* END WINDOW DEFINITION
*/
86 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Procedure
89 /* *************************** Main Block
*************************** */
91 debug-event
("Starting").
98 debug-event
("Finished").
100 /* _UIB-CODE-BLOCK-END
*/
104 /* ********************** Internal Procedures
*********************** */
106 &IF DEFINED(EXCLUDE-copy-office) = 0 &THEN
108 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE copy-office Procedure
109 PROCEDURE copy-office
:
110 /*------------------------------------------------------------------------------
112 ------------------------------------------------------------------------------*/
113 IF this-office
= "" THEN RETURN.
115 DEF BUFFER old-office
FOR Office.
116 DEF BUFFER old-setting
FOR OfficeSetting.
117 DEF BUFFER old-control
FOR OfficeControlAccount.
119 FIND old-office
WHERE old-office.OfficeCode
= old-office-code
NO-LOCK NO-ERROR.
120 FIND Office
WHERE Office.OfficeCode
= this-office
NO-ERROR.
121 IF NOT AVAILABLE(Office
) THEN DO:
123 BUFFER-COPY old-office
EXCEPT old-office.ThisOffice
TO Office
124 ASSIGN Office.OfficeCode
= this-office.
127 FOR EACH old-setting
OF old-office
NO-LOCK:
128 FIND OfficeSetting
OF Office
WHERE OfficeSetting.SetName
= old-setting.SetName
NO-ERROR.
129 IF NOT AVAILABLE(OfficeSetting
) THEN DO:
130 CREATE OfficeSetting.
131 OfficeSetting.OfficeCode
= this-office.
132 OfficeSetting.SetName
= old-setting.SetName.
134 BUFFER-COPY old-setting
EXCEPT old-setting.OfficeCode
TO OfficeSetting.
137 FOR EACH old-control
OF old-office
NO-LOCK:
138 FIND OfficeControlAccount
OF Office
WHERE OfficeControlAccount.Name
= old-control.Name
NO-ERROR.
139 IF NOT AVAILABLE(OfficeControlAccount
) THEN DO:
140 CREATE OfficeControlAccount.
141 OfficeControlAccount.OfficeCode
= this-office.
142 OfficeControlAccount.Name
= old-control.Name.
144 BUFFER-COPY old-control
EXCEPT old-control.OfficeCode
TO OfficeControlAccount.
147 Office.ThisOffice
= Yes.
148 debug-event
( "Office settings copied").
150 FIND OfficeSetting
OF Office
WHERE OfficeSetting.SetName
= "WindowTitlePrefix" NO-ERROR.
151 IF NOT AVAILABLE(OfficeSetting
) THEN DO:
152 CREATE OfficeSetting.
153 OfficeSetting.OfficeCode
= this-office.
154 OfficeSetting.SetName
= "WindowTitlePrefix".
156 OfficeSetting.SetValue
= prefix.
157 debug-event
( 'Prefix set to
"' + prefix + '"'
).
161 /* _UIB-CODE-BLOCK-END
*/
166 &IF DEFINED(EXCLUDE-delete-current-users) = 0 &THEN
168 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE delete-current-users Procedure
169 PROCEDURE delete-current-users
:
170 /*------------------------------------------------------------------------------
172 ------------------------------------------------------------------------------*/
174 debug-event
( 'Deleting existing user records.'
).
175 ON DELETE OF Usr
OVERRIDE DO: END.
176 FOR EACH Usr
EXCLUSIVE-LOCK TRANSACTION:
180 debug-event
( 'Deleting existing usergroup membership records.'
).
181 ON DELETE OF UsrGroupMember
OVERRIDE DO: END.
182 FOR EACH UsrGroupMember
TRANSACTION:
183 DELETE UsrGroupMember.
186 debug-event
( 'Existing user records deleted.'
).
190 /* _UIB-CODE-BLOCK-END
*/
195 &IF DEFINED(EXCLUDE-load-local-users) = 0 &THEN
197 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE load-local-users Procedure
198 PROCEDURE load-local-users
:
199 /*------------------------------------------------------------------------------
200 Purpose
: Reload users local to the current site from the 'lnk' directory
201 ------------------------------------------------------------------------------*/
203 IF NOT batch-mode
THEN DO:
204 MESSAGE "Are you sure you want to load the users in?" SKIP
205 "All current user information will be lost!"
206 VIEW-AS ALERT-BOX QUESTION BUTTONS YES-NO
207 TITLE "Confirm Reload" UPDATE reload-it
AS LOGI.
209 IF NOT reload-it
THEN RETURN.
213 IF RETURN-VALUE = "FAIL" THEN RETURN.
215 RUN delete-current-users.
217 DEF VAR i
AS INT NO-UNDO.
219 ON WRITE OF Usr
OVERRIDE DO: END.
224 debug-event
("Added user '" + Usr.UserName
+ "'" ).
229 /* There's a bit of mucking around here because when a usr record is created
230 * some memberships may also be created automatically
232 ON WRITE OF UsrGroupMember
OVERRIDE DO: END.
233 INPUT FROM usrgrpmm.d .
234 REPEAT ON ERROR UNDO,NEXT TRANSACTION:
235 CREATE UsrGroupMember.
236 IMPORT UsrGroupMember.
237 debug-event
("Added user group member '" + UsrGroupMember.UserName
+ "' of '" + UsrGroupMember.GroupName
+ "'" ).
241 debug-event
( 'Local users loaded'
).
245 /* _UIB-CODE-BLOCK-END
*/
250 &IF DEFINED(EXCLUDE-parse-parameters) = 0 &THEN
252 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE parse-parameters Procedure
253 PROCEDURE parse-parameters
:
254 /*------------------------------------------------------------------------------
258 ------------------------------------------------------------------------------*/
259 DEF VAR token
AS CHAR NO-UNDO.
260 DEF VAR i
AS INT NO-UNDO.
261 DEF VAR process-options
AS CHAR NO-UNDO.
263 process-options
= SESSION:PARAMETER .
264 DO i
= 1 TO NUM-ENTRIES( process-options
, "|" ):
265 token
= ENTRY( i
, process-options
, "|" ).
266 debug-event
("Found token: " + token
).
268 CASE ENTRY( 1, token
):
269 WHEN "Office" THEN this-office
= ENTRY(2,token
).
270 WHEN "FromOffice" THEN old-office-code
= ENTRY(2,token
).
271 WHEN "Prefix" THEN prefix
= ENTRY(2,token
).
272 WHEN "Printer" THEN ASSIGN
273 cur-printer
= ENTRY(2,token
)
274 cur-port
= ENTRY(3,token
).
275 WHEN "CollisionDetect" THEN collision-detect
= Yes.
276 WHEN "OverrideRules" THEN override-rules
= Yes.
281 IF prefix
= "" AND this-office
<> "" THEN prefix
= TRIM(this-office
) + ":".
282 batch-mode
= SESSION:BATCH-MODE .
283 debug-mode
= batch-mode
OR debug-mode.
287 /* _UIB-CODE-BLOCK-END
*/
292 &IF DEFINED(EXCLUDE-reset-printers) = 0 &THEN
294 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE reset-printers Procedure
295 PROCEDURE reset-printers
:
296 /*------------------------------------------------------------------------------
298 ------------------------------------------------------------------------------*/
300 IF cur-printer
= "" THEN RETURN.
301 FOR EACH RP
WHERE RP.ReportID
= "Current Printer":
302 RP.Char1
= cur-printer.
308 /* _UIB-CODE-BLOCK-END
*/
313 &IF DEFINED(EXCLUDE-set-replication) = 0 &THEN
315 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE set-replication Procedure
316 PROCEDURE set-replication
:
317 /*------------------------------------------------------------------------------
319 ------------------------------------------------------------------------------*/
320 DEF VAR no-delete-tables
AS CHAR NO-UNDO INITIAL "" /*"NewAcctTrans,NewBatch,NewDocument" */.
321 DEF VAR activity
AS CHAR NO-UNDO.
323 IF this-office
= "" THEN RETURN.
325 FOR EACH ReplTrigger
NO-LOCK TRANSACTION:
326 FIND ReplLoadRule
WHERE ReplLoadRule.SourceSystem
= old-office-code
327 AND ReplLoadRule.TableToLoad
= ReplTrigger.TableToRepl
328 EXCLUSIVE-LOCK NO-ERROR.
330 activity
= ReplTrigger.Activity.
331 IF LOOKUP(ReplTrigger.TableToRepl
, no-delete-tables
) > 0 THEN
332 activity
= REPLACE( activity
, "D", "").
334 IF NOT AVAILABLE(ReplLoadRule
) THEN DO:
336 ASSIGN ReplLoadRule.TableToLoad
= ReplTrigger.TableToRepl
337 ReplLoadRule.Activity
= activity
338 ReplLoadRule.SourceSystem
= old-office-code
339 ReplLoadRule.CollisionDetect
= collision-detect.
341 ELSE IF override-rules
THEN DO:
342 ASSIGN ReplLoadRule.TableToLoad
= ReplTrigger.TableToRepl
343 ReplLoadRule.SourceSystem
= old-office-code
344 ReplLoadRule.Activity
= activity
345 ReplLoadRule.CollisionDetect
= collision-detect.
348 debug-event
( 'Replication rules set.'
).
350 FOR EACH ReplLog
TRANSACTION:
354 debug-event
( 'Replication log cleared.'
).
357 FIND RP
WHERE RP.UserName
= "Replication-" + old-office-code
358 AND RP.ReportID
= "Last Replication File" EXCLUSIVE-LOCK NO-ERROR.
359 IF AVAILABLE(RP
) THEN DELETE RP.
361 debug-event
( 'Last successful replication record deleted'
).
365 /* _UIB-CODE-BLOCK-END
*/
370 &IF DEFINED(EXCLUDE-verify-files) = 0 &THEN
372 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE verify-files Procedure
373 PROCEDURE verify-files
:
374 /*------------------------------------------------------------------------------
376 ------------------------------------------------------------------------------*/
377 DEF VAR all-found
AS LOGI
NO-UNDO INIT Yes.
378 DEF VAR i
AS INT NO-UNDO.
380 debug-event
("Verifying existence of usr files").
381 DO i
= 1 TO NUM-ENTRIES( file-list
):
382 all-found
= all-found
AND SEARCH( ENTRY( i
, file-list
) ) <> ?.
385 IF NOT all-found
THEN DO:
386 debug-event
("Files are missing").
387 MESSAGE "At least one of the following files could not be found:" SKIP(1)
389 VIEW-AS ALERT-BOX ERROR
390 TITLE "Import files missing".
396 /* _UIB-CODE-BLOCK-END
*/
401 /* ************************ Function Implementations
***************** */
403 &IF DEFINED(EXCLUDE-debug-event) = 0 &THEN
405 &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION debug-event Procedure
406 FUNCTION debug-event
RETURNS CHARACTER
407 ( INPUT event-text
AS CHAR ) :
408 /*------------------------------------------------------------------------------
411 ------------------------------------------------------------------------------*/
412 IF NOT debug-mode
THEN RETURN event-text.
414 DEF VAR time-text
AS CHAR NO-UNDO.
416 time-text
= STRING( TODAY, "99/99/9999") + " " + STRING( TIME, "HH:MM:SS") + ": ".
418 OUTPUT STREAM debug-stream
TO loadusrs.log
PAGE-SIZE 0 KEEP-MESSAGES APPEND.
419 PUT STREAM debug-stream
UNFORMATTED time-text event-text
SKIP.
420 OUTPUT STREAM debug-stream
CLOSE.
422 RETURN time-text
+ event-text.
426 /* _UIB-CODE-BLOCK-END
*/