|
I am covered up in work during the week (currently tracking down a variety
of dirty data, and scenarios where different reports that are supposed to
have the same totals, do not, so I have to figure out which one is
correct) so late in replying.
You are describing something very similar to current 400 capabilities.
A program, written in COBOL or RPG, performs a series of application
program actions, in which if there is an error in the data requiring
operator intervention, the program, which can be running in batch, can
halt & send a message to the operator message queue, with a list of
alternatives. Operator response to this, directs the main program, how to
react.
Ideally your data processing design tries to resolve things with a minimum
of opportunities for an operator to respond inappropriately to some error
message. Once upon a time we had a real bad problem with this. The
bosses had me spend almost a year figuring out how to have the software
itself make best choices based on the available info associated with each
known error condition. The result was that our volume of errors went down
to a microscopic fraction of what they were earlier. Typically no one
human is an expert on all aspects of company data & you need everyone to
be that way to avoid a lot of human error, when responding to error
conditions, let alone "oops, that is not the response I intended to make,
now what?"
You can use a message architecture with standard responses, where several
different programs can use same error message choices.
Messages can come from main COBOL RPG etc. programs, can also come from
the CL that they are typically within. A program can call another
program.
You can have one CL that has embedded within it, a string of tothers I
don't do this very often, usually for specialized things like ... let's
reorganize a bunch of files, then do a backup, then initiate an IPL. Or
perhaps there is some task that needs to be run one facility at a time.
Task-1 in facility 20, task-2 in facility 20, repeat that for facilities
30 40 50 60, now task-3 in facility 20, etc. where the prompt parameters
were same for all facilities, and there may have been a list of facilities
with Yes/No check marks to do th nitely stuff on which ones.
Task-1 2 etc. can be developed with simple to maintain parameters fed to
it by the main CL. By using an outer Cl that has a list of tasks to be
performed, it is then simple to later add a new task between 1 and 2,
where that task also has its own CL driven whatever. In my experience we
are better off having small focused programs, because they are easier to
maintain, more efficient use of 400 resources, easier to troubleshoot ...
I have a message queue associated with the progress made, that basically
is given an informational message "This step completed & incidentally here
are the parameters it was using. Later if suspicion of something went
wrong, we can then see that the steps ran in the right sequence, and had
the right parameters, by looking at what is in this special message queue.
I have inherited software I need to maintain, where the program is HUGE
(like a million lines of code, and it calls at least 10 other programs of
similar size, and they in turn call ... but I am only interested in fixing
a tiny thread of logic that is a nightmare to find. Using modularized
code means you do not pass this kind of nightmare on to whoever is to
maintain it later.
Typically the main program is inside of a CL, controlling file overrides,
and also a prompt screen in front.
I use DDS to design the prompt screen.
The operator will have keyed parameters into the prompt screen, such as
date range, other ranges, various criteria, then within the CL there was
checking to see that the parameters were A-Ok, then launch the software to
run off of a Job Queue. On the 400 you can have a variety of special
purpose Job Queues which are single or multi-threaded. All of ours are
single threaded due to limitations with our main ERP package.
In the absence of operator intervention, and when using a single threaded
JOBQ, the programs escape to execute & as each one completes, another one
is released. The operator can rearrange the waiting jobs, move some to
another JOBQ, before it starts executing.
We have software steps that typically complete in a matter of seconds, and
we have others that take like an hour to run. So we have one JOBQ for the
quickies, and another for the long running. There are some, which due to
some design constraints, we can't be having other people doing same kind
of stuff at same time, so no matter who runs this, it had better be in
same JOBQ. Depending on your 400's overall resources, there may be some
limit on how many JOBQ you got active at same time.
My experience does not involve moving jobs after they have started
executing, other than to allocate 400 resources, to give one task more CPU
priority for example.
I do know that if a running job needs to be cancelled, that we first need
to check what is about to go into execution right after it ends. Perhaps
it is related to the job we aborting.
I am also not experienced in the notion of moving stuff between different
partitions, other than resources such as disk space.
These many tasks for an operator to do, can be on a menu, that arranges
them pretty much in the sequence they are to be done.
I have many such menus I have created for myself, that have banner
headlines ...
* this stuff to be run after the labor input backflushing is completed
(the people who are doing that input can get completed for the day
anywhere between 3 and 6 pm)
* actions to be taken after all shipping for day is done (can be
anywhere from 3.30 to 7 pm) ... mainly reports associated with billing
* actions to be taken after invoice billing has successfully cleared the
JOBQ
* these options to be run after everyone is done for the evening doing
input that ends up in the General Ledger
* these options to be run after everyone done for the evening with input
that affects the MRP (which includes actions that have no effect on
General Ledger)
I also have menus of actions only taken on FRI nite, end of week, end of
month
Scheduling software is available for the 400 such as ROBOT from HELP
systems, and some stuff from IBM. The simpler scheduling software merly
launches a standard job (that requires no operator involvement) to the
JOBQ at a certain time, day of week, etc. More advanced versions can
respond to error messages, control which jobs to be launched based on
which successfully or unsuccessfully completed.
List,
I am trying to get a feel for how best to duplicate some our nightly
batch
job runs on the iSeries that run on our VSE system. I am open to ideas
and
suggestions. We would of course want the same basic results and control
but
realize things may have to be handled differently simply due to the
differences between the two operating systems.
Here is a "brief" description of our current process....
The nightly batch run consists of many "jobs". They are, for the most
part,
single-threaded. We do not currently have scheduling software on VSE, so
this is operator-controlled. Each "job" will have one or more "steps". A
"step" is an execution of an application program. After the jobs are
submitted, each with any required parameters, the jobs run in sequence
with
virtually no operator intervention required.
If a job fails, it requires an operator response which prevents the jobs
behind it from running. Depending on the nature of the problem, the
operator
can release a "PAUSE" in that batch partition to keep the rest of the
jobs
from executing while the failing job is re-run in a different partition.
Then the "PAUSE" is release and the rest of the jobs continue on their
merry
way.
What is the best way to duplicate this batch process on the iSeries?
Will we need scheduling software to accomplish this?
Are the built-in iSeries scheduling capabilities sufficient?
TIA for any advice and/or ideas!
--
Regards,
Michael Rosinger
Systems Programmer / DBA
Computer Credit, Inc.
640 West Fourth Street
Winston-Salem, NC 27101
336-761-1524
m rosinger at cciws dot com
--
This is the Midrange Systems Technical Discussion (MIDRANGE-L) mailing
list
To post a message email: MIDRANGE-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/midrange-l
or email: MIDRANGE-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/midrange-l.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.