Join The Works program to have access to the most current content, and to be able to ask questions and get answers from Revelation staff and the Revelation community

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 _NEW
  SWAP "_NEW" WITH "" IN DFN
  DFLAG=0
  IF SFN1,5=DICT.' THEN DFLAG=1        ;* DICTIONARY FLAG
  OPEN SFN TO FILE.IN ELSE
       MSG('ERROR OPENING SOURCE FILE: ':SFN)
       GOTO NEXTI
  END
  • FIRST DO LIVE FILE
  • THERE ARE "LIVE" FILES AND TUTORIAL FILES
  EXECUTE 'ATTACH \OIDATA\SPT ':DFN
  OPEN DFN TO FILE.OUT ELSE
  • NOT THERE .. CREATE IT
       EXECUTE 'MAKETABLE \OIDATA\SPT ':DFN:' (S)'
       OPEN DFN TO FILE.OUT ELSE
            MSG('ERROR CREATING DESTINATION TABLE: ':DFN)
            GOTO NEXTI
       END
  END
  IF DFLAG=1 THEN
       STATUP(SINGLE$,3,'Working On ':DFN)
       PERFORM 'SELECT ':SFN:' WITH TYPE=F""G""S" AND WITH INDEXED=0'  ;* don't overwrite index items
       IF TESTING=0 THEN PERFORM 'COPY ':SFN:' (O) TO:(':DFN
  • do the tutorial file
       EXECUTE 'ATTACH \OIDATA\SPT_TUTO ':DFN
       OPEN DFN TO FILE.OUT ELSE
  • NOT THERE .. CREATE IT
            EXECUTE 'MAKETABLE \OIDATA\SPT_TUTO ':DFN:' (S)'
            OPEN DFN TO FILE.OUT ELSE
                 MSG('ERROR CREATING DESTINATION TABLE: ':DFN)
                 GOTO NEXTI
            END
       END
       PERFORM 'SELECT ':SFN:' WITH TYPE=F""G""S" AND WITH INDEXED=0'
       IF TESTING=0 THEN PERFORM 'COPY ':SFN:' (O) TO:(':DFN
  END ELSE
  • NOT A DICTIONARY - COPY THE TABLE RECORDS IN
       STATUP(SINGLE$,3,'Working On ':DFN)
       IF TESTING=0 THEN
            EXECUTE 'ATTACH \OIDATA\SPT ':DFN
            OPEN DFN TO FILE.OUT ELSE
                 EXECUTE 'MAKETABLE \OIDATA\SPT ':DFN:' (S)'
                 OPEN DFN TO FILE.OUT ELSE
                      MSG('ERROR CREATING DESTINATION TABLE ':DFN)
                      GOTO NEXTI
                 END
            END
            EXECUTE 'COPY ':SFN:' * (O) TO:(':DFN
  • do the tutorial
            EXECUTE 'ATTACH \OIDATA\SPT_TUTO ':DFN
            OPEN DFN TO FILE.OUT ELSE
  • NOT THERE .. CREATE IT
                 EXECUTE 'MAKETABLE \OIDATA\SPT_TUTO ':DFN:' (S)'
                 OPEN DFN TO FILE.OUT ELSE
                      MSG('ERROR CREATING TABLE: ':DFN)
                      GOTO NEXTI
                 END
            END
            EXECUTE 'COPY ':SFN:' * (O) TO:(':DFN
       END
  END

NEXTI:

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

SRP Computer Solutions, Inc.

View this thread on the Works forum...

  • third_party_content/community/commentary/forums_works/78de6361308df7db85256caa0066421e.txt
  • Last modified: 2023/12/30 11:57
  • by 127.0.0.1