How to deploy a large # of Dict Changes (OpenInsight 16-Bit)
At 10 JAN 2003 01:36:55PM Don Miller - C3 Inc. wrote:
I need to deploy a fair number of dictionary changes to a number of Runtimes (16/32 Bit). I have a program written in AREV 3.12 which will do this, but it isn't useful in a general sense.
Here is the code I use. Questions:
1. I know I can convert this to a stored procedure which presumably can be deployed.
2. How can I get it to deploy and then execute during the installation of an upgrade.
*Source Code Follows
*PROGRAM: UP_DICT *COPYRIGHT 2000 2001, 2002 * C3 INC. * 3 BARNARD LANE * BLOOMFIELD, CT 06002 * (800) 243-9583 * * PURPOSE: INSTALL DICTIONARY CHANGES INTO SP&T * WINDOWS OR MS-DOS NORMAL FILES AND TUTORIAL FILES *
* MUST BE COMPILED TO DOS \OIDATA\CONVERT\UP_DICT WITH THE (CL) OPTION
DECLARE SUBROUTINE MSG
$INSERT SYSINCLUDE,STATUS.CONSTANTS
MSG('Type YES to Update All Dictionaries/Data Files','RECE',RESP)
IF RESP NE 'YES' THEN STOP
BUF='
STATUP(PUSH$,
,BUF) ;* SAVE THE STATUS LINE PERFORM "ATTACH \OIDATA\CONVERT" FILE.LIST=' OPEN 'FILES' TO FILES THEN PERFORM 'SELECT FILES WITH F1=\OIDATA\CONVERT" BY @ID (S)' IF @RECCOUNT =\OIDATA\CONVERT' THEN FILE.LIST=REC END END GOTO L0: END END MSG.TXT=Files / Dictionaries to be installed OR upgraded:|':FILE.LIST MSG.TXT:=||To halt this process press + now …' MSG.TXT:=|When you get to the Debugger, type END' MAP=' MAP=M' MAP=C' MSG(MSG.TXT,MAP,
,) * IF RESP=CHAR(27) THEN STOP FILE.COUNT=COUNT(FILE.LIST,@FM)+1 IMAGE=' MSG('Installing Dictionary/File Changes|Please Wait..','UB',IMAGE,
)EQU TESTING TO 0 ;* set to 1 to test
IF TESTING=1 THEN DEBUG
FOR I=1 TO FILE.COUNT
SFN=FILE.LIST[i]DFN=SFN
replacements end in the tag _NEWSWAP "_NEW" WITH "" IN DFNDFLAG=0IF SFN1,5=DICT.' THEN DFLAG=1 ;* DICTIONARY FLAGOPEN SFN TO FILE.IN ELSEMSG('ERROR OPENING SOURCE FILE: ':SFN)GOTO NEXTIEND
FIRST DO LIVE FILE
THERE ARE "LIVE" FILES AND TUTORIAL FILESEXECUTE 'ATTACH \OIDATA\SPT ':DFNOPEN DFN TO FILE.OUT ELSE
NOT THERE .. CREATE ITEXECUTE 'MAKETABLE \OIDATA\SPT ':DFN:' (S)'OPEN DFN TO FILE.OUT ELSEMSG('ERROR CREATING DESTINATION TABLE: ':DFN)GOTO NEXTIENDENDIF DFLAG=1 THENSTATUP(SINGLE$,3,'Working On ':DFN)PERFORM 'SELECT ':SFN:' WITH TYPE=F""G""S" AND WITH INDEXED=0' ;* don't overwrite index itemsIF TESTING=0 THEN PERFORM 'COPY ':SFN:' (O) TO:(':DFN
do the tutorial fileEXECUTE 'ATTACH \OIDATA\SPT_TUTO ':DFNOPEN DFN TO FILE.OUT ELSE
NOT THERE .. CREATE ITEXECUTE 'MAKETABLE \OIDATA\SPT_TUTO ':DFN:' (S)'OPEN DFN TO FILE.OUT ELSEMSG('ERROR CREATING DESTINATION TABLE: ':DFN)GOTO NEXTIENDENDPERFORM 'SELECT ':SFN:' WITH TYPE=F""G""S" AND WITH INDEXED=0'IF TESTING=0 THEN PERFORM 'COPY ':SFN:' (O) TO:(':DFNEND ELSE
NOT A DICTIONARY - COPY THE TABLE RECORDS INSTATUP(SINGLE$,3,'Working On ':DFN)IF TESTING=0 THENEXECUTE 'ATTACH \OIDATA\SPT ':DFNOPEN DFN TO FILE.OUT ELSEEXECUTE 'MAKETABLE \OIDATA\SPT ':DFN:' (S)'OPEN DFN TO FILE.OUT ELSEMSG('ERROR CREATING DESTINATION TABLE ':DFN)GOTO NEXTIENDENDEXECUTE 'COPY ':SFN:' * (O) TO:(':DFN
do the tutorialEXECUTE 'ATTACH \OIDATA\SPT_TUTO ':DFNOPEN DFN TO FILE.OUT ELSE
NOT THERE .. CREATE ITEXECUTE 'MAKETABLE \OIDATA\SPT_TUTO ':DFN:' (S)'OPEN DFN TO FILE.OUT ELSEMSG('ERROR CREATING TABLE: ':DFN)GOTO NEXTIENDENDEXECUTE 'COPY ':SFN:' * (O) TO:(':DFNENDENDNEXTI:
STATUP(SINGLE$,3,
) NEXT I STATUP(POP$,
,BUF)MSG('','DB',IMAGE,)
STOP
Thanks in advance for any help ..
Don Miller
C3 Inc.
At 10 JAN 2003 03:20PM Oystein Reigem wrote:
Don,
2. How can I get it to deploy and then execute during the installation of an upgrade.
If I get you right this is the kind of stuff I need to know soon myself.
But if I get you right this is also the kind of stuff I thought you knew. I read some earlier posting of yours which indicated you did.
My first thought was that the execution of the procedure should be possible to do in the %PROCESS% part of the installation. I haven't got the RDK manual with me here now, but by looking in the online help I found out it's RDKModuleInstall that does the relevant procesing. RDKModuleInstall is unfortunately not docced in the online help, but OI contains the source. RDKModuleInstall uses an insert RDKDeploy_Equates which lists a bunch of "sections" with a promising EXECUTE PROCEDURES among them.
My assumption was that the %PROCESS% stuff runs last, after all the normally deployed rows have been copied in, your procedure among them. But according to this posting by Aaron Kaplan %PROCESS% runs first: . This means you must copy your procedure in %PROCESS%, before executing it. I assume a suitable UPDATE ROWS section could manage that.
(If that is impossible for some reason I would suggest a workaround with two deployments - one for copying in the procedure and one for running it. Both deployments could be wrapped in one InstallShield installation.)
- Oystein -
At 10 JAN 2003 03:24PM Revelation Software Technical Support wrote:
Don-
Emulate the RDK procedures.
Make a sysupgrade table.
In the %process% record, put the list entries in the format of (filename/recordname)- ie
UPDATE ROWS
DICT.SYSAPPS/UTF8_ENABLED
DICT.SYSREPOSLANGUAGE/APP_ID
DICT.SYSREPOSLANGUAGE/CONTROL_NAMES
DICT.SYSREPOSLANGUAGE/ENGLISH_TEXT
DICT.SYSREPOSLANGUAGE/ENTITY_ID
Copy the dictionary record into the sysupgrade file with a key of filename/recordname.
Send out the file to client.
Client runs RDKINSTALL 'dir_where_file_is'
Simple as that.
At 10 JAN 2003 06:20PM Richard Bright wrote:
Oystein,
I have used the general method (as outlined by the RevSoft Tech Support) for yonks. This doesnt have to be a Dict only RDKInstall, use it whenever Dict items need to be refreshed as part of periodic updates.
Stored Proceedures: Using the RDKInstall its possible to deploy a stored proceedure, call it to carry out a process and then later on remove the stored proceedure - all as part of the RDKInstall process. That is the RDKInstall is very flexable.
At 11 JAN 2003 06:31AM Oystein Reigem wrote:
Richard, RevSoftTechSupp,
Thanks. I'll need both methods.
Hope Don got the help he needed too.
- Oystein -
At 11 JAN 2003 06:45AM Don Miller - C3 Inc. wrote:
At 11 JAN 2003 06:58AM Don Miller - C3 Inc. wrote:
Oystein, et. al.
Sorry for the blank post, the key got me.
I know how to copy a small # of dict elements. They problem with this upgrade is that I need to copy several hundred Dict items and, possibly create new tables along the way. In addition, the needed table(s) may not be attached AND I need to swap tables on the fly. For example, I have a table named PATIENT (which contains live user data) which is located in \OIDATA\SPT). I also have a table with the same name in \OIDATA\SPT_TUTO which contains sample information for tutorial exercises. When running the app, the user can switch to the tutorial exercises for refresher training or to check whether a particular task will work for them.
The process that I can run from an AREV runtime can do this easily by simply starting AREV and running RUN DOS \OIDATA\UP_DICT from a TCL. However, I want to stop having to install a runtime single-user AREV system as part of my app and secondly it is essentially non-productive to have to run 2 upgrades. I try not to deploy dictionary chages as part of an RDK because I have found that deploying table changes by including DICT items by including them has usually been error prone. The changes seem to get installed into the production system but invariably don't get installed in the tutorial unless the user re-starts the app in the tutorial account and then re-runs the RDKINSTALL again.
It seems that the RDKMODULEINSTALL only processes the DICT item once and it can't be included twice. However, If I could be sure that the stored procedure would be copied first and then run AFTER the other changes have been installed, I think it would work properly. Hence, my post.
Don Miller
C3 Inc.
At 11 JAN 2003 12:19PM Donald Bakke wrote:
Don,
Have you tried to create multiple UPDATE ROWS sections separated by the necessary DETACH TABLES and ATTACH TABLES sections? Like this:
UPDATE ROWS
* Dictionary changes here
DETACH TABLES
PATIENT
ATTACH TABLES
\OIDATA\SPT_TUTO/PATIENT/SPT
UPDATE ROWS
* Dictionary changes here
If you absolutely must call a stored procedure then you'll probably have to embed another UPDATE ROWS followed by an EXECUTE PROCEDURES section to make sure it executes when you need it. The entries created with the RDK UI get copied over after the %PROCESS% items do.
dbakke@srpcs.com