Traditional R83 | R83 Example | jBASE |
---|---|---|
MACHINE | The actual hardware | \jbase_data |
SYSTEM FILE | SYSTEM | \jbase_data\SYSTEM |
ACCOUNTS | ORDER-ENTRY | \jbase_data\ORDER-ENTRY |
MD | MD | \jbase_data\ORDER-ENTRY\MD |
DICTFILE | DICT ORDERS | \jbase_data\ORDER-ENTRY\ORDERS]D |
DATAFILE | ORDERS | \jbase_data\ORDER-ENTRY\ORDERS |
USERS | Not implemented | Uses traditional windows users. Can either be specific for each person or have 1 called jbase that everyone uses. |
As you can see, jBASE can be setup to look nearly identical to an existing Traditional R83 system. The obvious initial bonus is the fact that multiple “MACHINES” or independent databases (jbase_data1,jbase_data2, etc.) can reside on one piece of hardware.
Windows USERS and how they relate to your migrated system
The first difference to note is that R83 did not have users and therefore this is a new concept to some who are migrating to jBASE or any Windows server based application. In R83 the “USER” was simply the fact that you sat at a terminal connected to a specific machine. Probably the easiest way for R83 migrators to look at “USER” is to consider the original login and password to be a virtual A/B switch which determines which “MACHINE” you will be running. Therefore, there are many ways to setup the users which could include: 1 user per jbase_data (“MACHINE”), 1 user per application (“MACHINE” and “ACCOUNT”), 1 user for all jBASE and prompt for jbase_data “MACHINE” and “ACCOUNT” or endless other combinations. For the purpose of this document we will assume we are migrating 1 R83 machine with multiple accounts to 1 jBASE machine and will therefore create individual “USERS” for each “ACCOUNT” as boldfaced above.
Assumptions used in this procedure
For the purpose of this information we are assuming the following:
The migration is from R83 to jBASE version 4 for Windows
The “ACCOUNT” structure is such that each “ACCOUNT” has a BP and PROC file.
You are familiar with printer setup and sharing in Windows.
You will be restoring from a pseudo-floppy (hard disk image)
jBASE Advantages and Differences
PATH for programs and JBCOBJECTLIST for subroutines
Traditional R83 implementations must either have the program exist in the MD or be referred to by a RUN statement that includes the file and item name. On jBASE, programs can be located using the MD, but may also be located anywhere else on the system referred to by the PATH and JBCOBJECTLIST environment variables. All programs on jBASE must be CATALOGed. These programs/subroutines then become verbs on Windows that exist somewhere in the PATH. This concept is different than the traditional R83, but with some up front planning, the advantages are immense. Programs become immediately available to any user having it in their PATH. There is no need to CATALOG a utility in all your “ACCOUNT” MDs as was needed in R83. Simply add your utility programs bin (short for binary) directory to the PATH environment variable for all users. i.e. PATH = C:\jbase_acct\UTILACCT\bin;C:\jbase_acct\AP\bin;C:\jbase_acct\AR\bin;etc… Some planning needs to be taken into account since these three (3) command lines are synonymous:
MAIN will run the first MAIN program in the PATH
RUN AP MAIN will run the first MAIN program in the PATH
RUN AR MAIN will run the first MAIN program in the PATH
But, with a little upfront design you can migrate any R83 structure and usually take advantage of the PATH/JBCOBJECTLIST environment variables. That is why they say on jBASE the MD is optional.
Traditional Q-point, D-point and JEDIFILEPATH
All files are located using the MD and/or JEDIFILEPATH. In traditional R83 you can access files in the MD that are either D-points or Q-Points. In jBASE they can be there, but they also can be accessed directly by their native path name i.e. C:\temp or follow a path set in the environment variable JEDIFILEPATH.
Example:
With the environment variable set:
JEDIFILEPATH = .;c:\jbase_data\AR1;c:\jbase_data\AR2;c:\jbase_data\AR3
LIST CUSTOMERS
This would list the first CUSTOMERS it finds. First checking the MD then subsequently checking the AR1 “ACCOUNT”, AR2 “ACCOUNT” and then AR3 “ACCOUNT” by following the JEDIFILEPATH and this could be accomplished without an MD. That is why they say on jBASE the MD is optional. With a little planning you can easily eliminate the need for Q-Points.
Planning your migration
Things to do on your existing system
- What are the valid data accounts and what are system and/or old unused accounts
Account | Convert? | Note |
---|---|---|
DM | No | System account on old computer |
MAINLINK | No | Not used anymore |
AP | Yes | |
OE | Yes | |
PR | Yes | Be sure to DX PR.HIST.OLD |
UTIL.ACCT | Yes | Various utilities used by all accounts. Need to eliminate SYSTEM specific utilities |
etc… |
- Do you use PATHing for your native system
D3 – Q ^ ACCT,DICTFILE,{DATAFILE}
U2 – F-points, D-Points
Others??Best to convert these to valid Q-Point structure or include them in the JEDIFILEPATH.
Are they Q-POINTS to Q-POINTS? You will probably want to clean this up. - Do you use the RUN command to execute two or more separate programs with the same name in the same “ACCOUNT”? (See jBASE advantages and differences)
You will need to rename the programs to have unique names. - Plan your PATH and JBCOBJECTLIST environment variables for each “ACCOUNT”
Account | PATH / JBCOBJECTLIST | Notes |
---|---|---|
AP – Accounts Payable | .\bin;c:\jbase_data\UTIL\bin
.\lib;c:\jbase_data\UTIL\lib |
|
OE – Order Entry | .\bin;c:\jbase_data\PR\bin;c:\jbase_data\UTIL\bin
.\lib;c:\jbase_data\PR\lib;c:\jbase_data\UTIL\lib |
Put PR\bin and PR\lib in because of timeclock programs |
PR | .\bin;c:\jbase_data\UTIL\bin
.\lib;c:\jbase_data\UTIL\lib |
|
UTIL | .\bin
.\lib |
|
etc… |
- Do you have source code for all your programs.
Best to recompile on your existing platform and be sure all programs compile. - Be sure all programs compile. Don’t want to chase your tail on converted programs and find out they didn’t compile on the machine you migrated from.
Executing your migration
1. Download and install jBASE 4.1 from our website https://www.jbase.com/products/demo
2. RUN C:\download directory\jbase4_4.1.4.2_win32.exe
3. Create the “MACHINE”
MKDIR C:\jbase_data or use the windows explorer and “New Folder” and name it jbase_data
4. Change the HOME variable for your console user to reflect the new “MACHINE”.
Start >> Settings >> Control Panel >> System >> [Advanced] >> [Environment Variables…]
Highlight HOME and click EDIT or if it doesn’t exist add NEW and make Variable Value C:\jbase_data
5. Change the JEDIFILENAME_SYSTEM variable for your console user to reflect the new “SYSTEM”.
Start >> Settings >> Control Panel >> System >> [Advanced] >> [Environment Variables…]
click NEW and add JEDIFILENAME_SYSTEM with Variable Value C:\jbase_data\SYSTEM
6. Run jsh (jBASE Shell) from the jBASE program group in windows and check that HOME is correct
jsh Username ~ –>pwd <Enter> C:\jbase_data jsh Username ~ –> 7. Create the SYSTEM file to be used on your new “MACHINE”
jsh Username ~ –>CREATE-FILE DICT SYSTEM 29 [ 417 ] File SYSTEM]D created , type = J4 8. Attach the tape drive (see TAPE section for details)
In this example we are restoring a pseudo-tape from a D3 machine T-ATT FLOPPY0 DEVICE=C:\temp\pflop1 label=R83,500 9. Restore the accounts from the filesave tape attached
sysrestore -C Enter home directory of restored account or account name : <Enter> sysrestore -C sysrestore -C 10. Check that all your “ACCOUNTS” are on your “MACHINE”
LIST . # “SYSTEM]”
11. Create the SYSTEM item for your “ACCOUNTS”.
jsh Username ~ –>MAKE.SYSTEM<Enter> <Enter> = C:\jbase_data, EX = exit Database path where accounts are located. : <Enter>
nn accounts to process (where nn should be the number of accounts you restored) Continue? (Y/N) : Y <Enter> 12. Run UpdateMD
LOGTO “ACCOUNT” CREATE-FILE MD.ORIG 3 7 COPY MD TO:(MD.ORIG UpdateMD 13. Convert programs and compile them
COPY BP
TO: (BP.ORIG
PortBas BP (KOVS
BASIC BP *
CATALOG BP *
14. Create a windows user for the “ACCOUNT”
Right Click on My Computer > Manage > Local Users and Groups Right Click on Users > New User…
Put in User Name (“ACCOUNT”) and Password and Confirm Password. You may want to uncheck “User must change password at logon” which will allow you to check any of the other password pertinent boxes. Click Create then Close.
Double click on the new user in the right pane and you can add the user to groups and you must click on the Profile tab and put a the account PATH (“C:\jbase_data\”ACCOUNT”) under Home Folder
15. Convert the windows “USER” to a jBASE user
IJU<Enter> take the defaults Do you wish to use the jsh [Y/N] : Y <Enter> Do you wish to start up your Login proc automatically [Y/N] : Y<Enter> 16. EDIT . REMOTE.CMD and add LOGTO “ACCOUNT”
Add this line to end the line before “%JBCRELEASEDIR%\bin\jsh -s jsh -” LOGTO “ACCOUNT” 17. REPEAT steps 12-16 for all accounts. 18. Setup spooler and printers
SP-NEWTAB
SP-CREATE F1 NT -d\\server\printer SP-CREATE F2 NT -d\\server\printer etc…
MAKE. SYSTEM source code
MAKE.SYSTEM source code
MAKE.SYSTEM
001 PROMPT ”
002 JEDIFILENAME.SYSTEM=GETENV(‘JEDIFILENAME_SYSTEM’)
003 OPEN ”,JEDIFILENAME.SYSTEM TO F.SYSTEM ELSE
004 CRT ‘Cannot access ‘:JEDIFILENAME.SYSTEM
005 STOP
006 END
007 LAST.SLASH = COUNT(JEDIFILENAME.SYSTEM,’\’)
008 DATABASE.PATH = OCONV(JEDIFILENAME.SYSTEM,’G0\’:LAST.SLASH)
009 *
010 *** Prompt for database PATH
011 *
012 CRT
013 CRT ‘<Enter> = ‘:DATABASE.PATH:’, EX = exit’
014 CRT ‘Database path where accounts are located. : ‘:
015 INPUT DB.PATH
016 IF DB.PATH = ” THEN DB.PATH = DATABASE.PATH
017 IF DB.PATH = ‘EX’ THEN STOP
018 *
019 *** select items in PATH that are potential Accounts
020 *
021 EXECUTE ‘SSELECT ‘:DB.PATH:’ # “SYSTEM””SYSTEM]D”‘ CAPTURING OP
022 R.SYSTEM = ‘D’
023 ACCTS = ” ; ACCT.CNT = 0
024 DONE = 0
025 LOOP
026 UNTIL DONE DO
027 READNEXT ACCT THEN
028 ACCT.PATH = DB.PATH:’\’:ACCT
029 ACCTMD = ACCT.PATH:’\MD’
030 OPEN ”,ACCTMD TO ACCTMD THEN
031 READ R.EXISTS FROM F.SYSTEM,ACCT ELSE
032 ACCT.CNT = ACCT.CNT + 1
033 ACCTS<ACCT.CNT> = ACCT
034 END
035 END
036 END ELSE
037 DONE = 1
038 END
039 REPEAT
040 CRT
041 CRT ACCT.CNT:’ accounts to be processed’
042 YORN = ”
043 LOOP
044 UNTIL YORN = ‘Y’ OR YORN = ‘N’ DO
045 CRT ‘Continue? (Y/N) : ‘:
046 INPUT YORN
047 REPEAT
048 IF YORN = ‘N’ THEN STOP
049 *
050 *** Assign common values to R.SYSTEM
051 *
052 R.SYSTEM = ‘D’
053 R.SYSTEM<20> = ‘ESYSTEM_START’
054 R.SYSTEM<21> = ‘JBASE’ ;* JBCEMULATE
055 R.SYSTEM<22> = ” ;* HOME
056 R.SYSTEM<23> = ” ;* JBCDEV_BIN
057 R.SYSTEM<24> = ” ;* JBCDEV_LIB
058 R.SYSTEM<25> = ” ;* PATH
059 R.SYSTEM<26> = ” ;* JBCOBJECTLIST
060 R.SYSTEM<27> = ” ;* JEDIFILEPATH
061 R.SYSTEM<28> = ” ;* JEDIFILENAME_MD
062 R.SYSTEM<29> = ” ;* JBC_TCLRESTART
063 R.SYSTEM<30> = ” ;* JBC_ENDRESTART
064 R.SYSTEM<31> = ” ;* JBCRESTARTPROG
065 R.SYSTEM<32> = ” ;* JBCLOGINPROG
066 R.SYSTEM<33> = ” ;* JBCLOGNAME
067 R.SYSTEM<34> = ‘false’ ;* JBASE_I18N (INTERNATIONAL MODE)
068 R.SYSTEM<35> = ‘1’:@VM:’999999′ ;* JBCPORTNO (MULTI-VALUE RANGE)
069 R.SYSTEM<36> = ” ;* OTHER ENVIRONMENT VARIABLES (MV)
070 R.SYSTEM<37> = ‘ESYSTEM_END’
071 *
072 *** Create SYSTEM items for ACCTS
073 *
074 FOR ACNT = 1 TO ACCT.CNT
075 ACCT = ACCTS<ACNT>
076 READ R.EXISTS FROM F.SYSTEM,ACCT THEN
077 CRT ACCT:’ skipped. Already exists’
078 END ELSE
079 *
080 *** Assign specific values to R.SYSTEM for this ACCT
081 *
082 R.SYSTEM<2> = DB.PATH:’\’:ACCT
083 R.SYSTEM<22> = DB.PATH:’\’:ACCT
084 R.SYSTEM<23> = DB.PATH:’\’:ACCT:’\bin’
085 R.SYSTEM<24> = DB.PATH:’\’:ACCT:’\lib’
086 R.SYSTEM<25> = DB.PATH:’\’:ACCT:’\bin’
087 R.SYSTEM<26> = DB.PATH:’\’:ACCT:’\lib’
088 R.SYSTEM<27> = DB.PATH:’\’:ACCT
089 R.SYSTEM<28> = DB.PATH:’\’:ACCT:’\MD]D’
090 *
091 ***
092 *
093 WRITE R.SYSTEM ON F.SYSTEM,ACCT
094 END
095 NEXT ACNT