ibm-information-center/dist/eclipse/plugins/i5OS.ic.apis_5.4.0.1/qrcvdtaq.htm

876 lines
26 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Copyright" content="Copyright (c) 2006 by IBM Corporation">
<title>Receive Data Queue (QRCVDTAQ) API</title>
<!-- Begin Header Records ========================================== -->
<!-- All rights reserved. Licensed Materials Property of IBM -->
<!-- US Government Users Restricted Rights -->
<!-- Use, duplication or disclosure restricted by -->
<!-- GSA ADP Schedule Contract with IBM Corp. -->
<!-- GSA ADP Schedule Contract with IBM Corp. -->
<!-- Change History: -->
<!-- YYMMDD USERID Change description -->
<!-- QRCVDTAQ SCRIPT A converted by B2H R4.1 (346) (CMS) by PMHALL at -->
<!-- RCHVMW2 on 7 Oct 1998 at 16:06:14 -->
<!-- Edited by Kersten Jan 02 -->
<!-- End Header Records -->
<!-- End Header Records -->
<link rel="stylesheet" type="text/css" href="../rzahg/ic.css">
</head>
<body>
<a name="Top_Of_Page"></a>
<!-- Java sync-link -->
<script language="Javascript" src="../rzahg/synch.js" type="text/javascript">
</script>
<h2>Receive Data Queue (QRCVDTAQ) API</h2>
<div class="box" style="width: 80%;">
<br>
&nbsp;&nbsp;Required Parameter Group:<br>
<!-- iddvc RMBR -->
<br>
<table width="100%">
<tr>
<td align="center" valign="top" width="10%">1</td>
<td align="left" valign="top" width="50%">Data queue name</td>
<td align="left" valign="top" width="20%">Input</td>
<td align="left" valign="top" width="20%">Char(10)</td>
</tr>
<tr>
<td align="center" valign="top">2</td>
<td align="left" valign="top">Library name</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(10)</td>
</tr>
<tr>
<td align="center" valign="top">3</td>
<td align="left" valign="top">Length of data</td>
<td align="left" valign="top">Output</td>
<td align="left" valign="top">Packed(5,0)</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="left" valign="top">Data</td>
<td align="left" valign="top">Output</td>
<td align="left" valign="top">Char(*)</td>
</tr>
<tr>
<td align="center" valign="top">5</td>
<td align="left" valign="top">Wait time</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Packed(5,0)</td>
</tr>
</table>
<br>
&nbsp;&nbsp;Optional Parameter Group 1:<br>
<!-- iddvc RMBR -->
<br>
<table width="100%">
<tr>
<td align="center" valign="top" width="10%">6</td>
<td align="left" valign="top" width="50%">Key order</td>
<td align="left" valign="top" width="20%">Input</td>
<td align="left" valign="top" width="20%">Char(2)</td>
</tr>
<tr>
<td align="center" valign="top">7</td>
<td align="left" valign="top">Length of key data</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Packed(3,0)</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="left" valign="top">Key data</td>
<td align="left" valign="top">I/O</td>
<td align="left" valign="top">Char(*)</td>
</tr>
<tr>
<td align="center" valign="top">9</td>
<td align="left" valign="top">Length of sender information</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Packed(3,0)</td>
</tr>
<tr>
<td align="center" valign="top">10</td>
<td align="left" valign="top">Sender information</td>
<td align="left" valign="top">Output</td>
<td align="left" valign="top">Char(*)</td>
</tr>
</table>
<br>
&nbsp;&nbsp;Optional Parameter Group 2:<br>
<!-- iddvc RMBR -->
<br>
<table width="100%">
<tr>
<td align="center" valign="top" width="10%">11</td>
<td align="left" valign="top" width="50%">Remove message</td>
<td align="left" valign="top" width="20%">Input</td>
<td align="left" valign="top" width="20%">Char(10)</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="left" valign="top">Size of data receiver</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Packed(5,0)</td>
</tr>
<tr>
<td align="center" valign="top">13</td>
<td align="left" valign="top">Error code</td>
<td align="left" valign="top">I/O</td>
<td align="left" valign="top">Char(*)</td>
</tr>
</table>
<br>
&nbsp;&nbsp;Default Public Authority: *USE<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Threadsafe: Conditional; see <a href="#usage_notes">Usage Notes</a>.<br>
<!-- iddvc RMBR -->
<br>
</div>
<p>The Receive Data Queue (QRCVDTAQ) API receives data from the specified data
queue.</p>
<p>When more than one program has a receive pending on a data queue at one
time, a data entry sent to the data queue is received by only one of the
programs. The program with the highest run priority receives the entry. The
next entry sent to the queue is given to the job with the next highest
priority.</p>
<p>If the data queue was created with the AUTORCL keyword on the Create Data
Queue (CRTDTAQ) command set to *YES, when the queue is empty the storage
allocated to the data queue will be reduced to the storage needed for the
initial number of entries defined for the data queue.</p>
<p>Distributed data management (DDM) data queues are supported using this API.
This means that you can use this API to receive a message from a data queue
that exists on a remote iSeries. However, using this API to receive messages
without removing them from the data queue is not supported for DDM data
queues.</p>
<br>
<h3>Authorities and Locks</h3>
<dl>
<dt><em>Data Queue Authority</em></dt>
<dd>*OBJOPR and *READ</dd>
<dt><em>Data Queue Library Authority</em></dt>
<dd>*EXECUTE</dd>
<dt><em>Data Queue Lock</em></dt>
<dd>*EXCLRD</dd>
</dl>
<br>
<p>Internally, when a job uses API QSNDDTAQ (Send Data Queue), QRCVDTAQ
(Receive Data Queue), QMHQRDQD (Retrieve Data Queue Description), or QMHRDQM
(Retrieve Data Queue Message), a cache is created to allow faster access to the
data queue. An entry in the cache means a user is authorized to the data queue.
An entry is added to the cache when a user calling one of the APIs has the
required authority to the data queue. An entry is also added to the cache when
QSNDDTAQ is called to handle a journal entry for a data queue created with the
sender ID attribute set to *YES, and the user requesting the the send function
has the required authority to the current profile name in the sender ID
information of the journal entry. The data in the cache is used until the job
ends, so if you need to immediately change a user's authority to one of these
objects, you may need to end that user's jobs.</p>
<br>
<h3>Required Parameter Group</h3>
<dl>
<dt><strong>Data queue name</strong></dt>
<dd>INPUT; CHAR(10)
<p>The name of the data queue to receive the data from.</p>
</dd>
<dt><strong>Library name</strong></dt>
<dd>INPUT; CHAR(10)
<p>The name of the library where the data queue resides.</p>
<p>You can use these special values for the library name:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>*LIBL</em></td>
<td align="left" valign="top">The library list</td>
</tr>
<tr>
<td align="left" valign="top"><em>*CURLIB</em></td>
<td align="left" valign="top">The job's current library.</td>
</tr>
</table>
<p><strong>Note:</strong> To improve data queue performance, the data queue
APIs remember addressing information for the last data queues used. This occurs
when a specific (not *LIBL or *CURLIB) value is provided for the library name,
and the data queue is located
in the system auxiliary storage pool (ASP number 1) or a basic user ASP (ASP
numbers 2-32). The addressing information for data queues located in
independent ASPs is not saved.</p>
<p>Because the addressing information is saved, users of this API should be
aware of the following scenarios.</p>
<p><strong>Scenario 1</strong></p>
<p>If, a job references a library-specific data queue, the data queue is moved
using the Move Object (MOVOBJ) command or renamed using the Rename Object
(RNMOBJ) command, and a new data queue is created with the same name and
library as the data queue that was renamed or moved, then, the job continues to
reference the original data queue, not the newly created data queue.</p>
<p><strong>Scenario 2</strong></p>
<p>If, a job references a library-specific distributed data management (DDM)
data queue, the DDM data queue is moved using the Move Object (MOVOBJ) command
or renamed using the Rename Object (RNMOBJ) command, and a new data queue is
created with the same name and library as the DDM data queue that was renamed
or moved, the job continues to reference the original DDM data queue, not the
newly created data queue.</p>
<p><strong>Scenario 3</strong></p>
<p>If, a job references a DDM data queue, which starts a DDM target job (DDM
conversation) on a remote system that references a library-specific data queue,
the data queue on the remote system is moved using the Move Object (MOVOBJ)
command or renamed using the Rename Object (RNMOBJ) command, and on the remote
system, a new data queue is created with the same name and library as the data
queue that was renamed or moved, then, the DDM target job continues to
reference the original data queue on the remote system, not the newly created
data queue, only when the same DDM target job is used for the subsequent data
queue operation. If a new DDM target job is used for the subsequent data queue
operation, then the newly created data queue will be used on the remote
system.</p>
<p><strong>Note:</strong> For more information on creating DDM data queues and
on DDM target jobs, see <a href="../ddm/rbae5kickoff.htm">Distributed Data
Management</a> in the iSeries Information Center.</p>
</dd>
<dt><strong>Length of data</strong></dt>
<dd>OUTPUT; PACKED(5,0)
<p>The number of characters received from the data queue. If a time out occurs
and no data is received from the data queue, this field is set to zero. The
value of this field will never exceed the value specified for the MAXLEN
parameter on the Create Data Queue (CRTDTAQ) command.</p>
<p>If the size of the data receiver variable is specified, the data received
from the data queue will be truncated if the message is longer than the size of
the data receiver variable. The value of this field will be set to the actual
length of the data received before it is truncated.</p>
</dd>
<dt><strong>Data</strong></dt>
<dd>OUTPUT; CHAR(*)
<p>A field of at least the length of the value specified for the MAXLEN
parameter on the Create Data Queue (CRTDTAQ) command. This field contains the
data received from the data queue.</p>
<p><strong>Note:</strong> If the length of this field is larger than the size
of the message received, only the number of characters (beginning from the
left) as defined by the message received from the data queue are changed. If
the length of this field is smaller than the value specified for the MAXLEN
parameter on the Create Data Queue (CRTDTAQ) command, and the actual length of
this field is not specified in the size of data receiver parameter, unexpected
results can occur.</p>
<p>If the length of this field is specified in the size of data receiver
parameter, the data received will be truncated if it is longer than the size
specified.</p>
</dd>
<dt><strong>Wait time</strong></dt>
<dd>INPUT; PACKED(5,0)
<p>The amount of time to wait if no entries exist on the data queue.</p>
<p>When no entries are on the data queue, the wait time parameter (in seconds)
specifies the following:</p>
<table cellpadding="5">
<!-- cols="10 90" -->
<tr>
<td align="left" valign="top"><em>&lt; 0</em></td>
<td align="left" valign="top">Waits forever.</td>
</tr>
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">Continue processing immediately. If no entry
exists, the call completes immediately with the length of data parameter set to
zero.</td>
</tr>
<tr>
<td align="left" valign="top"><em>&gt; 0</em></td>
<td align="left" valign="top">The number of seconds to wait. The maximum is
99999 which allows a wait time of approximately 28 hours.</td>
</tr>
</table>
<p><strong>Notes:</strong> If the wait time value is less than or equal to 2,
the job does not leave the activity level (for 2 seconds). This is described as
a short wait. For more details on activity levels and implementation
applications, see the <a href="../rzaks/rzaks1.htm">Work Management</a> topic.</p>
<p>If a
wait time is specified when receiving an entry from a data queue located in an
independent auxiliary storage pool (ASP), and the independent ASP is varied
off:</p>
<ul>
<li>If *YES is specified or defaulted for the remove message parameter,
QRCVDTAQ will end with an exception, and no data will be returned.</li>
<li>If *NO is specified for the remove message parameter, QRCVDTAQ will wait
for the specified wait time, and no data will be received, even if the
independent ASP is varied on again and a message is sent to the data
queue.</li>
</ul>
</dd>
</dl>
<br>
<h3>Optional Parameter Group 1</h3>
<dl>
<dt><strong>Key order</strong></dt>
<dd>INPUT; CHAR(2)
<p>The comparison criteria between the keys of messages on the data queue and
the key data parameter. When the system searches for the requested key, the
entries are searched in ascending order from the lowest value key to the
highest value key until a match is found. If there are entries with duplicate
keys, the entry that was put on the queue first is received.</p>
<p>Valid values are:</p>
<table cellpadding="5">
<!-- cols="10 90" -->
<tr>
<td align="left" valign="top"><em>GT</em></td>
<td align="left" valign="top">Greater than</td>
</tr>
<tr>
<td align="left" valign="top"><em>LT</em></td>
<td align="left" valign="top">Less than</td>
</tr>
<tr>
<td align="left" valign="top"><em>NE</em></td>
<td align="left" valign="top">Not equal</td>
</tr>
<tr>
<td align="left" valign="top"><em>EQ</em></td>
<td align="left" valign="top">Equal</td>
</tr>
<tr>
<td align="left" valign="top"><em>GE</em></td>
<td align="left" valign="top">Greater than or equal</td>
</tr>
<tr>
<td align="left" valign="top"><em>LE</em></td>
<td align="left" valign="top">Less than or equal</td>
</tr>
</table>
<p>This parameter is ignored if the length of key data is zero. A value of
blanks is recommended if the length of key data is zero.</p>
<p>For example, assume a keyed data queue contains these three entries:</p>
<table border width="50%">
<!-- width="50" -->
<!-- cols="30 70" -->
<tr>
<th align="center" valign="top">Physical Entry</th>
<th align="center" valign="top">3-Character Key</th>
</tr>
<tr>
<td align="center" valign="top" width="30%">1</td>
<td align="center" valign="top" width="70%">GGG</td>
</tr>
<tr>
<td align="center" valign="top">2</td>
<td align="center" valign="top">XXX</td>
</tr>
<tr>
<td align="center" valign="top">3</td>
<td align="center" valign="top">AAA</td>
</tr>
</table>
If a key order of LE is specified with key data of XXX, entry 3 would be
received. If the same values were specified on a subsequent request, entry 1
would be received.<br>
<br>
</dd>
<dt><strong>Length of key data</strong></dt>
<dd>INPUT; PACKED(3,0)
<p>The length of the key data parameter. If this parameter is specified, it
must be zero for nonkeyed data queues. For keyed data queues it must be equal
to the length specified on the KEYLEN parameter on the Create Data Queue
(CRTDTAQ) command.</p>
</dd>
<dt><strong>Key data</strong></dt>
<dd>I/O; CHAR(*)
<p>The data to be used for receiving a message from the data queue. The key of
the received message is also returned in this field. It may be different than
the key specified to search for. For example, if the key data parameter is set
to AA on input with the key order parameter set to GE (greater than or equal
to), the key of the record that is actually received could be AB or anything
else greater than or equal to AA. The key data parameter is set to the actual
key of the received data when the API returns.</p>
</dd>
<dt><strong>Length of sender information</strong></dt>
<dd>INPUT; PACKED(3,0)
<p>The length of the sender identification parameter.</p>
<p>Valid values are:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">No sender information is returned.</td>
</tr>
<tr>
<td align="left" valign="top"><em>8</em></td>
<td align="left" valign="top">Returns only the bytes returned and bytes
available fields of the sender information.</td>
</tr>
<tr>
<td align="left" valign="top"><em>&gt; 8</em></td>
<td align="left" valign="top">Return as much sender information as the length
allows.</td>
</tr>
</table>
<br>
</dd>
<dt><strong>Sender information</strong></dt>
<dd>OUTPUT; CHAR(*)
<p>The sender ID information associated with the received message.</p>
</dd>
</dl>
<br>
<h3>Format of Sender Information</h3>
<p>The format and content of the sender information returned is shown in the
following table. For a detailed description of each field, see <a href=
"#field_descriptions">Field Descriptions</a>.</p>
<p><strong>Note:</strong> On the CRTDTAQ command, the SENDERID parameter
defaults to *NO. To include the sender ID for each data queue entry, the
SENDERID parameter must be *YES when the data queue is created.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">PACKED(7,0)</td>
<td align="left" valign="top" width="60%">Bytes returned</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">PACKED(7,0)</td>
<td align="left" valign="top">Bytes available</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Job name</td>
</tr>
<tr>
<td align="center" valign="top">18</td>
<td align="center" valign="top">12</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">User profile name</td>
</tr>
<tr>
<td align="center" valign="top">28</td>
<td align="center" valign="top">1C</td>
<td align="left" valign="top">CHAR(6)</td>
<td align="left" valign="top">Job number</td>
</tr>
<tr>
<td align="center" valign="top">34</td>
<td align="center" valign="top">22</td>
<td align="left" valign="top">CHAR(10)</td>
<td align="left" valign="top">Senders current user profile name.</td>
</tr>
<tr>
<td align="left" valign="top" colspan="4"><strong>Note:</strong> The last four
fields, together, combine to make up the sender ID.</td>
</tr>
</table>
<br>
<br>
<h3><a name="field_descriptions">Field Descriptions</a></h3>
<p><strong>Bytes available.</strong> The number of bytes of data available to
be returned. All available data is returned if enough space is provided.</p>
<p><strong>Bytes returned.</strong> The number of bytes of data returned.</p>
<p><strong>Job name.</strong> The name of the job that sent the message.</p>
<p><strong>Job number.</strong> The job number of the job that sent the
message.</p>
<p><strong>Senders current user profile name.</strong> The current user profile
name of the job that sent the message.</p>
<p><strong>User profile name.</strong> The user profile name of the job that
sent the message.</p>
<br>
<h3>Optional Parameter Group 2</h3>
<dl>
<dt><strong>Remove message</strong></dt>
<dd>INPUT; CHAR(10)
<p>Whether the message is to be removed from the data queue when it is
received.</p>
<p>Valid values are:</p>
<table cellpadding="5">
<!-- cols="10 90" -->
<tr>
<td align="left" valign="top"><em>*YES</em></td>
<td align="left" valign="top">The message is removed from the data queue. This
is the default value if this parameter is not specified.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*NO</em></td>
<td align="left" valign="top">The message is not removed from the data
queue.</td>
</tr>
</table>
<br>
</dd>
<dt><strong>Size of data receiver</strong></dt>
<dd>INPUT; PACKED(5,0)
<p>The size of the area to contain the data received from the data queue. If a
value of 0 is specified for this parameter, no data will be returned. If a size
greater than 0 is specified, the data will be copied into the receiver up to
the specified length. If the available data is longer than the length
specified, it will be truncated.</p>
<p>If this parameter is not specified, the entire message will be copied into
the receiver variable.</p>
</dd>
<dt><strong>Error code</strong></dt>
<dd>I/O; CHAR(*)
<p>The structure in which to return error information. For the format of the
structure, see <a href="../apiref/error.htm#hdrerrcod">Error Code Parameter</a>.</p>
</dd>
</dl>
<br>
<h3><a name="usage_notes">Usage Notes</a></h3>
<p>This API can be used in a multithreaded job to receive messages from a local
data queue. It cannot be used in a job that allows multiple threads to receive
messages from a DDM data queue.</p>
<p>Application queueing time and resource usage time for data queue usage are
recorded only for messages that are received in the initial thread of a
job.</p>
<br>
<h3>Error Messages</h3>
<table width="100%" cellpadding="5">
<!-- cols="15 85" -->
<tr>
<th align="left" valign="top">Message ID</th>
<th align="left" valign="top">Error Message Text</th>
</tr>
<tr>
<td width="15%" valign="top">CPF2207 E</td>
<td width="85%" valign="top">Not authorized to use object &amp;1 in library
&amp;3 type *&amp;2.</td>
</tr>
<tr>
<td align="left" valign="top">CPF24B4 E</td>
<td align="left" valign="top">Severe error while addressing parameter
list.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2472 E</td>
<td align="left" valign="top">Invalid wait time specified.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3C36 E</td>
<td align="left" valign="top">Number of parameters, &amp;1, entered for this
API was not valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3C90 E</td>
<td align="left" valign="top">Literal value cannot be changed.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9501 E</td>
<td align="left" valign="top">Data queue &amp;1 in &amp;2 requires a key
value.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9502 E</td>
<td align="left" valign="top">Key length must be zero for data queue &amp;1 in
&amp;2.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9503 E</td>
<td align="left" valign="top">Cannot lock data queue &amp;1 in &amp;2.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9504 E</td>
<td align="left" valign="top">An invalid search order was specified.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9505 E</td>
<td align="left" valign="top">Sender ID length value is not valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9506 E</td>
<td align="left" valign="top">Key length must be &amp;3 for data queue &amp;1
in &amp;2.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9507 E</td>
<td align="left" valign="top">Invalid key length specified.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9508 E</td>
<td align="left" valign="top">Invalid sender ID length specified.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9509 E</td>
<td align="left" valign="top">Space access error.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9510 E</td>
<td align="left" valign="top">Operation on DDM data queue &amp;1 in &amp;2
failed.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9511 E</td>
<td align="left" valign="top">Function not supported for DDM data queue
&amp;1.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9514 E</td>
<td align="left" valign="top">Value for data length parameter not valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9515 E</td>
<td align="left" valign="top">Value for remove message parameter not
valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9523 E</td>
<td align="left" valign="top">Data queue function not successful.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9801 E</td>
<td align="left" valign="top">Object &amp;2 in library &amp;3 not found.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9802 E</td>
<td align="left" valign="top">Not authorized to object &amp;2 in &amp;3.</td>
</tr>
<tr><!-- CPF9803 is sent as a diagnostic when PEX is being used and -->
<!-- another job has the dtaq allocated. This only indicates that -->
<!-- the queue depth is not correct; the message will still be -->
<!-- received. -->
<td align="left" valign="top">CPF9803 D</td>
<td align="left" valign="top">Cannot allocate object &amp;2 in library &amp;3.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9805 E</td>
<td align="left" valign="top">Object &amp;2 in library &amp;3 destroyed.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9807 E</td>
<td align="left" valign="top">One or more libraries in library list
deleted.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9808 E</td>
<td align="left" valign="top">Cannot allocate one or more libraries on library
list.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9810 E</td>
<td align="left" valign="top">Library &amp;1 not found.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9820 E</td>
<td align="left" valign="top">Not authorized to use library &amp;1.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9830 E</td>
<td align="left" valign="top">Cannot assign library &amp;1.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9872 E</td>
<td align="left" valign="top">Program or service program &amp;1 in library
&amp;2 ended. Reason code &amp;3.</td>
</tr>
</table>
<br>
<hr>
API introduced: V1R1
<hr>
<table cellpadding="2" cellspacing="2" align="center">
<tr align="center">
<td valign="middle" align="center"><a href="#Top_Of_Page">Top</a> | <a href=
"obj1.htm">Object API categories</a> | <a href="aplist.htm">API by
category</a></td>
</tr>
</table>
</body>
</html>