Model
204 Year 2000
Redevelopment
Option
Case Study at the County of Ventura, California
By Kim Collins
When the County of
Ventura, California, reviewed all their systems for Year 2000 compliance,
they decided that most could be remediated by changing date formats and
amending the applications. They have changed most of their Model 204 systems
themselves, and some have been changed for them by CCAs Year 2000
team.
The County concluded
that one business-critical application, written primarily in COBOL and Assembler,
was going to present a major challenge to change. They decided that a rewrite
to modern standards under Model 204 was a much better investment than remediating
the old code.
The work was undertaken
jointly by the County of Ventura and CCAs Consulting Group. A Project
Manager and a Business Analyst from Ventura, both very knowledgeable of
the system, were appointed. CCA set up a development team with expertise
in Model 204 analysis, design, documentation, programming, and testing.
Planning
phase
The
initial phase of the project established the detailed business requirements
and the system design. It became clear that although the fundamental objective
was to replace the older system with one that was Year 2000 compliant, there
were many needs for improved ease of use and better management information.
There were also many manual processes involved in the previous system, which
needed to be automated. The new system was designed to meet all these objectives.
The development standards were defined, and a software infrastructure built
to comply with these standards. The system was designed to be driven as
far as possible by rules and tables, isolating the most complex parts of
the application into a small set of modules.
Development
phase
The
time spent working on the design and the infrastructure really paid dividends
once the application coding began. As readers of CCAprint well know,
there is nothing as fast as Model 204 for developing large business systems,
and the team of three programmers rapidly turned over functional areas of
the system ready for testing.
As
the development phase neared its end, and customer acceptance testing picked
up speed, the pressure increased further. Maybe there were areas of functionality
that we had not looked at in sufficient detail right at the start of the
project, though it is always hard for users to be sure exactly what they
want until they see the new system taking shape.
Production
phase
The
nature of the application meant that we were able to release the software
into production use in phases, so that the end users became familiar with
one part of the system before starting with the next. Comprehensive documentation,
both on screen and as user manuals, was a key requirement for Ventura, and
this made the whole process of training users in the new system much easier.
Lessons
learned
With
the project now successfully complete, what lessons are there for development
projects generally?
- Make
sure you get a good understanding of the business requirements and the
underlying data right at the start of the project. It is well worth spending
those extra few weeks at the start of the project to save much time later.
- Work
on your data conversion as soon as you have done your data design
this gives time to resolve any data integrity problems, and gives you
full volumes for testing.
- Put
testing at the heart of your strategy. Make sure you have an independent
tester on your team from the time that code starts to get delivered.
- Write
your documentation as you go, otherwise it wont be ready when your
customers need it.
- You
dont need to have everyone working in one place to get development
done quickly. In particular, coding can be done very well by people working
remotely from their homes, and you can make time zones work in your favor.
- And,
of course, make sure that you have good relations with your end-users.
Never forget that, once the development phase is over, it is their system,
not yours.
Not
too late
Now
that May 1999 has arrived, is it too late to replace non-Y2K compliant systems
with a new one on Model 204? Theres probably still time for many systems.
You might be forced to make compromises on quite how much functionality
you are going to deliver in the initial phase, and you certainly need a
fully activated team with a set of standards and infrastructure software
already in place.
With
the right set of people, the right tools, and the right methodology, you
can still escape from Y2K nightmares by building a replacement system in
Model 204.
Education
Schedule
May
June 1999
| Course
|
Dates
|
Location |
|
Model
204
|
Introduction
to User
Language (UL150) |
5/19-21 |
Framingham,
MA |
| User
Language Performance & Tuning (UL350) |
5/24-26 |
McLean,
VA |
| Introduction
to System Management (SM100) |
6/16-18 |
McLean,
VA |
| Programmers
User Language (UL200) |
6/21-25 |
McLean,
VA |
| File
Design & Management (FM100) |
6/28-30 |
McLean,
VA |
|
System
1032
|
| DBMS
Fundamentals (F1032) |
6/21-22 |
Framingham,
MA |
| Essential
PL1032 (P1032) |
6/23-25 |
Framingham,
MA |
System
1032
Converting
Special Characters to and from HTML
by
Tym Stegner
A user
recently asked if System 1032 had any new functions for converting hex values
to characters. The user is processing HTML forms, and wants to be able to
have System 1032 translate the "%hh" HTML construct back into
the appropriate character. HTML encodes nonalphanumeric characters in this
way to ensure accurate data transmission.
Although
System 1032 does not currently have such a function, it is possible to arrive
at these conversions using existing commands.
A hexadecimal
value, if prefixed with the hexadecimal constant specifier, is treated as
an integer by System 1032, and, thus, $CHAR can be used to determine the
equivalent character. Since $CHAR takes only integer values, however, the
$CHAR assignment must be done using an EXECUTE command.
Converting
from hex to characters
The
procedure DEHEX (on page 3) locates a hex- encoded character, builds the
appropriate LET command, processes it, then uses the resulting character
in a global replace within the text to be converted. This process repeats
until no more hex-encoded characters are located.
Converting
characters to hex
A similar
procedure, HEX (on page 3), scans a list of printable, nonalphanumeric characters
to be located in the conversion string. For any qualifying character found,
$ICHAR returns the ASCII integer for that character. The procedure next
uses $TEXT to convert this integer into a 2-character hexadecimal. The actual
conversion looks like:
"%"&$TEXT($ICHAR("?"),H2)
Similar
to DEHEX, the procedure uses the $REPALL function to make the global changes
in the text value, repeating the process until the list of characters ends.
Procedures
DEHEX and HEX
$ TYPE
HEXING.DMC
Variable HDX text 1 !Needed for EXECUTE statement
Procedure DEHEX( otx : output text, inx : text varying)
Variable fx,px integer initially 1
Variable mx text 33 initially "[0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F]"
Variable hx text 3
Let otx = $Trim(inx)
Repeat
Let px = $Find("%",otx,fx,1)
If px gt 0 then
Let hx = otx[px:px+2] !Ensure %hh
If hx[2:2] matches mx and hx[3:3] matches mx then
Execute "let hdx = $Char(#X" & hx[2:3] & ");"
!! Write hx hdx format("Converting " a3 " to <" a1
">...")
Let otx = $Repall(hx,hdx,otx), !Replace all occurances
fx = 1
Else !Otherwise, skip this one
Let fx=px+1
End_if
End_if
Until px eq 0
End_Procedure
Procedure HEX( otx : output text, inx : text varying)
Variable cx text 33 initially "%<HT>!^"#$&'()*+,-./:;<=>?@[\]^^_`{|}~"
Variable i integer !List of chars to convert
Let otx = $Trim(inx)
For i from 1 to 33 do !Scan the list
If $Find(cx[i:i],otx,1,1) ne 0 then
!! Write cx[i:i] format("Converting <" a1 ">...")
Let otx = $Repall(cx[i:i],"%"&$text($ichar(cx[i:i]),H2),otx)
End_if
End_for
End_Procedure
Sample
run for HEX and DEHEX
$ s1032
Computer Corporation of America System 1032 Version V9.70-0
Copyright 1997, Computer Corporation of America
1032> Use HEXING
1032> Variable t1,t2,t3 text varying
1032> Let t1 "This 3 $0.0 (*?) of [1:3] ^M>%; {hi} "
1032> Call HEX(t2,t1)
1032> Call DEHEX(t3,t2)
1032> Write t1 t2 t3 format(/ "org: " a / "hex: "
a / "bck: " a )
org: This 3 $0.0 (*?) of [1:3] M>%; {hi}
hex: This 3 %240%2E0 %28%2A%3F%29 of %5B1%3A3%5D M%3E%25%3B %7Bhi%7D
bck: This 3 $0.0 (*?) of [1:3] M>%; {hi}
1032>