On 25 Apr 2012 09:04, Stone, Joel wrote:
Is it safe to CALL QLICKOBJ as described in the CHKOBJ command info
Note that the "State used to call program" is *SYSTEM. Presumable
even if you were granted authority, e.g. *PUBLIC having *USE, then the
CALL should fail anyway, with MCH6801 "Object domain or storage
protection error" because your user program does not run in System
State. That is, DSPPGM YourPgm would show in "Program Statistics" that
the program has "Program state: *USER" and "Program domain: *USER",
but DSPPGM QSYS/QLICKOBJ would show both of those same attributes as
Or could IBM change the pgm name or parms called by CHKOBJ command
in future releases?
Any program not documented as an API could change to no longer be
available to the user domain or change parameters; definition and\or
number, in any release or even a PTF.
If I try "CALL QLICKOBJ", I find that I don't have authority to call
And unless the system QSECURITY level is less than 40, the CALL will
fail with the lic exception 4401.
How can I use CHKOBJ to call QLICKOBJ, but don't have authority to
call it directly? What allows me to run QLICKOBJ only when going
thru CHKOBJ command?
Because the *CMD processing is implemented by the OS. The Command
Prompter (PT) or Command Analyzer (CA) component knows how to invoke the
QLICKOBJ either via the System Entry Point Table (SEPT) by an address
with the stored authority [or improbably more explicitly via its adopted
authority from QSYS].
Is there a better method for checking if object exists?
Normally the attempt to use a missing object is the best way. If any
proactive attempt is made, then concurrency means the presumed-failure
style of proactive checking could make an improper decision; i.e. had
the programming style been presumed-success and just attempted to use
the object and found the object to have been created by then, the code
could have continued without error or ever knowing the object may have
been missing even just a microsecond before.
If one must insist on using the very less desirable pre-check, then
like someone already stated in the previous thread, why not just use the
Retrieve Object Description (QUSROBJD) API for which one possible
outcome is "CPF9801 E Object &2 in library &3 not found." just like
CHKOBJ and RTVOBJD:
"The Retrieve Object Description (QUSROBJD) API lets you retrieve object
information about a specific object. This information is similar to the
information returned using the Display Object Description (DSPOBJD)
command or Retrieve Object Description (RTVOBJD) command. ..."
There are also options for invocations of the CL command CHKOBJ from
a program; e.g. QCAPCMD, QCMDEXC, or invoking a CLP\CLLE which codes the
"CHKOBJ &parm1/&parm2...", etc.
<ed:> DSPOBJAUTQSYS/QLICKOBJ *PGM shows public aut *EXCLUDE
<ed:> DSPCMD QSYS/CHKOBJ shows CCP=QSYS/QLICKOBJ
called with *SYSTEM state; allowed in all modes\environments