LINK

链接到期望收到返回内容的另一程序。

语法

LINK

读取语法图跳过可视语法图LINKPROGRAM( 名称)COMMAREA( data-area)LENGTH( data-value)DATALENGTH( data-value)CHANNEL( 名称)INPUTMSG( data-area)INPUTMSGLEN( data-value)SYSID( 系统名称)SYNCONRETURNTRANSID( 名称)

条件: CHANNELERR , INVREQ , ENGERR , NOTAUTH , PGMIDERR , RESUNAVAIL , ROLLEDBACK , SYSIDERR 和 TERMERR

当此命令用于通过 IPIC 连接链接到本地 CICS® 区域或远程 CICS 区域中的程序时,此命令是线程安全的。 当它用于通过其他类型的连接链接到远程 CICS 区域中的程序时,它是非线程安全的。

NOHANDLERESPRESP2是常用选项,可添加到所有 EXEC CICS 命令中以处理错误条件。 命令语法图和选项说明中没有明确包含这些选项。 有关这些常用选项和 EXEC CICS 命令语法的信息,请参阅 EXEC CICS 命令格式和编程注意事项.

描述

LINK 将控制从一个逻辑级别的应用程序传递到下一个较低逻辑级别的应用程序。

如果未向 CICS定义请求的程序,并且 AUTOINSTALL 处于活动状态,那么 CICS 将提供该程序的定义。 如果此定义是本地定义,并且链接至程序尚未位于主存储器中,那么 CICS 会将其装入。

在某些情况下,链接到的程序可能位于另一个 CICS 区域中; 请参阅 分布式程序链接

此命令在当前应用程序上下文中运行。 如果该命令由在平台上部署的应用程序的任务下运行的程序发出,那么 CICS 首先在应用程序的专用程序目录中搜索指定的程序。 如果在其中找不到指定的程序,那么 CICS 将搜索公共程序目录。

当 RETURN 命令在链接至程序中运行时,控制权将在下一个顺序可执行指令中返回到启动链接的程序。

外部 CICS 接口 (EXCI) 提供 LINK 命令,该命令在一次调用中执行该接口的所有六个命令。 有关 EXCI 的信息,请参阅 EXCI CALL 接口

链接至程序独立于发出 LINK 命令的程序运行,该命令涉及处理条件,注意标识,异常终止和执行键。 例如,链接程序中 HANDLE CONDITION 命令的效果不是由链接到程序继承的,而是在返回到链接程序时恢复原始 HANDLE CONDITION 命令。 有关逻辑级别概念的更多信息和说明,请参阅 使用 HANDLE CONDITION 命令

您可以使用 HANDLE ABEND 命令来处理其他链路级别的异常终止。 有关 LINKHANDLE ABEND之间的关系的更多详细信息,请参阅 使用 HANDLE CONDITION 命令

分布式程序链接

在下列任何情况下,该链接是 分布式程序链接 (DPL):
  • 您可以在 SYSID 选项上指定远程区域名称,其中包含或不包含关联的 TRANSID 和 SYNCONRETURN 选项。
  • 已安装的 PROGRAM 定义上的 REMOTESYSTEM 选项指定远程区域的名称。
  • 已安装的程序定义指定 DYNAMIC (YES) ,或者没有已安装的程序定义,动态路由程序将链接请求路由到远程区域。

作为对分布式程序链接的响应,本地 CICS 区域 ( 客户机区域) 将链接请求传递到远程区域 ( 服务器区域)。 服务器区域代表发出链接请求的程序 (客户机程序) 运行链接至程序 (服务器程序)。

SYSID 和 INPUTMSG 选项互斥。 如果在 LINK 命令上同时指定这两个选项,那么转换程序将发出错误消息 DFH7230E ,指示有冲突的选项。

在服务器区域中运行的服务器程序仅限于 CICS API 的 DPL 子集。 总之,服务器程序不能发出以下命令:
  • 引用主体设施的终端控制命令
  • 返回终端属性的 ASSIGN 选项
  • BMS 命令
  • 注册和注销命令
  • 批处理数据交换命令
  • 用于寻址 TCTUA 的命令
有关 API 的受限 DPL 子集的详细信息,请参阅 LINK 命令的异常条件

如果服务器程序异常终止,那么会将异常终止代码返回到客户机程序。 如果未写入客户机程序来处理服务器程序返回的异常终止,那么客户机程序将与服务器程序返回的相同异常终止代码一起异常终止。

不能使用 DPL 来链接到 CICS 主终端程序 DFHEMTA 或 RDO 程序 DFHEDAP。 作为参数传递到 DFHEMTA 和 DFHEDAP 的地址仅在发出 EXEC CICS LINK 命令的区域中有效,这意味着不能将 DFHEMTA 或 DFHEDAP 请求路由到远程 CICS。

重要信息: 有关在链接的程序是远程程序时使用 LINK 命令的示例,请参阅 分布式程序链接 (DPL)。 有关编写动态路由程序的信息,请参阅 动态路由 DPL 请求

选项

CHANNEL (名称)
指定要提供给被调用程序的通道的名称 (1-16 个字符)。 可接受的字符为 A - Z a - z 0 - 9 $ @ # / % &?!:| " = ¬,; < >. - 和 _。不允许使用前导字符和内嵌空白字符。 如果提供的名称少于 16 个字符,那么将使用最多 16 个字符的尾部空格来填充该名称。 如果通道不存在,那么将创建该通道。 此新通道将保留在作用域中,直到链接级别发生更改为止。 有关通道作用域的更多信息,请参阅 通道作用域

通道名称始终采用 EBCDIC。 前面列出的通道名称所允许的字符集包含在所有 EBCDIC 代码页中不具有相同表示法的一些字符。 因此,如果要在不同地区之间运输通道,最好将命名通道的字符限制为 A-Z a-z 0-9 & : =,; < >. - 和 _。

如果指定通道名称 DFHTRANSACTION ,那么将创建一个尚不存在的事务通道。 事务通道将对当前任务中的所有程序可见。 此外,事务通道将作为当前通道传递到被调用程序。 有关更多信息,请参阅 通道和容器

发出 LINK 命令的程序可以执行下列其中一项操作:
  • 已使用一个或多个 PUT CONTAINER CHANNELPUT64 CONTAINER 命令创建通道。
  • 按名称指定其当前通道。
  • 命名当前不存在的通道。 将创建新的空通道。
COMMAREA (数据区)
指定要提供给被调用程序的通信区域。 在此选项中,将传递数据区,并且必须在接收程序中为其指定名称 DFHCOMMAREA。 COMMAREA 的长度不应超过 24KB。

使用 @CICSProgram 注释定义的 Java™ 程序不支持 COMMAREA 选项,并向启动链接的程序返回 INVREQ 响应。

有关向其他程序传递数据的更多信息,请参阅向其他程序传递数据

DATALENGTH (data-value)
指定一个半字二进制值,该值是从 COMMAREA 开始要传递到被调用程序的连续存储区域的长度。 对于远程 LINK 请求,如果在 COMMAREA 中传递的数据量很小,但 COMMAREA 本身很大,因此链接到程序可以返回所请求的数据,请指定 DATALENGTH 以提高性能。

仅当 LINK 请求为远程或动态时,才会检查 DATALENGTH 的值。 不检查是否存在静态本地链接。

DATALENGTH 不能与 INPUTMSG 同时使用。

INPUTMSG (数据区)
指定当被调用程序首次发出 RECEIVE 命令时要提供给该程序的数据。 此数据一直可用,直到执行 RECEIVE 或 RETURN 命令为止。 一个被调用的程序可以调用另一个程序等等,创建一个链接的程序链。 如果存在链接到链,那么 CICS 会将 INPUTMSG 数据提供给链中运行的第一个 RECEIVE 命令。 如果控制权返回给在 RECEIVE 命令接受 INPUTMSG 数据之前使用 INPUTMSG 发出 LINK 的程序,那么 CICS 假定已发出 RECEIVE 命令。 在这种情况下,原始 INPUTMSG 数据不再可用。

使用 @CICSProgram 注解定义的 Java 程序不支持 INPUTMSG 选项,会向启动链接的程序返回 INVREQ 响应。

有关 INPUTMSG 选项的更多信息,请参阅 INPUTMSG

INPUTMSGLEN (data-value)
指定要与 INPUTMSG 配合使用的半字二进制值。
LENGTH (data-value)
指定半字二进制值,该值是 COMMAREA (通信区域) 的长度 (以字节计)。

如果请求是针对 CICS TS V5.5 或更低版本级别的区域的 DPL ,或者通过 ISC 连接的 DPL ,那么此值不应超过 24 KB。 此限制允许 COMMAREA 和头的空间。

确保您指定的值与在 COMMAREA 中传递的数据的长度相匹配。 请勿为 LENGTH 指定 0 (零) ,因为生成的行为不可预测,并且 EXEC CICS LINK 命令可能会失败。

使用 COMMAREA 传递数据时,链接到的程序必须验证任务的 EIB 中的 EIBCALEN 字段是否与程序期望的匹配。 差异可能导致存储器违例或系统故障。 有关更多信息,请参阅 COMMAREA

PROGRAM (名称)
指定要无条件地将控制权传递给的程序的标识 (1-8 个字符)。
在下列任何情况下,链接至程序是远程区域中的服务器程序:
  • SYSID 选项指定远程区域。
  • 已安装的 PROGRAM 定义上的 REMOTESYSTEM 选项指定远程区域的名称。
  • 已安装的程序定义指定 DYNAMIC (YES) ,或者没有已安装的程序定义,动态路由程序将链接请求路由到远程区域。
请注意使用引号:
EXEC CICS LINK PROGRAM('PROGX')
PROGX 括在引号中,因为它是程序名。
EXEC CICS LINK PROGRAM(DAREA)
DAREA 未包含在引号中,因为它是包含实际程序名的数据区的名称。 数据区用于包含程序名,此数据区必须定义为工作存储器中的 8 字节字段。
注: 当链接到要在 Link3270 网桥机制下运行的 CICS 3270 程序时, PROGRAM 名称必须是 DFHL3270,而不是目标 3270 程序的名称。
SYNCONRETURN
指定 SYSID 选项上指定的服务器区域将在服务器程序成功完成时采用同步点。
服务器程序对可恢复资源所作的更改将被落实或回滚,而不与发出 LINK 请求的客户机程序对可恢复资源所作的更改或服务器在任何后续 LINK 中所作的更改无关。
  • 如果在从服务器程序返回之前落实了对可恢复资源的更改,那么将返回 NORMAL 条件。
  • 如果在从服务器程序返回之前回滚对可恢复资源的更改,那么将返回 ROLLEDBACK 条件。
  • 在通信链路或运行服务器程序的系统发生故障后,将产生 TERMERR 条件。 客户机程序处理该条件并确保恢复数据一致性。

SYNCONRETURN 仅适用于远程链路,如果链路是本地链路,那么将忽略该 SYNCONRETURN。

SYSID (systemname)
指定要将程序链接请求路由到的 CICS 服务器区域的系统名称。

如果未在 SYSID 选项中指定远程系统名称或省略 SYSID 选项,那么 CICS 将使用已安装的 PROGRAM 定义中定义的 REMOTESYSTEM 属性。 如果在 SYSID 选项或 REMOTESYSTEM 属性中指定本地系统名称,那么 CICS 将忽略该名称。

SYSID 选项上指定的远程系统名称优先于 PROGRAM 资源定义上指定的任何远程系统名称或动态路由程序返回的

TRANSID (名称)
指定远程区域要连接并在其下运行服务器程序的镜像事务的名称。

在 LINK 命令上指定的事务名称优先于在程序资源定义上指定的任何事务。 虽然您可以为 DPL 请求启动的镜像事务指定自己的名称,但必须在服务器区域中定义该事务,并且事务定义必须指定镜像程序 DFHMIRS。

如果省略 TRANSID 选项,那么当已安装的 PROGRAM 定义指定远程属性 DYNAMIC (YES) 时,将引用本地保存的 PROGRAM 资源定义。 否则,缺省情况下,服务器区域会连接 CSMI , CPMI 或 CVMI。

使用空白事务名称指定 TRANSID 选项无效。 在这种情况下,错误响应取决于链接请求的处理方式:
  • 如果在本地定义了链接至程序,那么在此情况下链接请求将成功。
  • 如果请求以静态方式路由到远程区域,那么会将 INVREQ 响应返回到启动链路的程序。
  • 如果将请求动态路由到远程区域,那么将返回有效的连接标识,但在检查 TRANSID 之后, CICS 会在将参数 DYRFUNC 设置为 1 且将参数 DYRERROR 设置为 8 的情况下再次调用动态路由程序。 如果动态路由程序通过在本地运行程序进行响应,那么链接请求成功。 如果动态路由程序通过重试而未成功进行响应,那么将拒绝链接请求,并将 PGMIDERR 响应返回给启动该链接的程序。

条件

122 CHANNELERR
RESP2 值:
1
CHANNEL 选项上指定的名称包含非法字符或字符组合。
16 INVREQ
RESP2 值:
8
对未与终端关联的程序或与 APPC 逻辑单元或 IRC 会话关联的程序发出带有 INPUTMSG 选项的 LINK 命令。
14
指定了 SYNCONRETURN 选项,但发出链接请求的程序 (客户机程序) 已在与 SYSID 选项上指定的远程区域中的镜像任务进行对话。 即,工作单元 (UOW) 正在进行中,或者在客户机区域中指定了系统初始化参数 MROFSE=YES或在远程区域中将 MIRRORLIFE IPCONN 设置指定为任务或 UOW。 在这种情况下,客户机程序处于不正确的状态以支持 SYNCONRETURN 选项。
15
发出链接请求的程序已与镜像任务进行对话,并且指定的 TRANSID 与活动镜像的事务标识不同。
16
指定的 TRANSID 全部为空白。
17 日
动态路由程序提供的 TRANSID 全部为空白。
19
将对作为 DPL 请求主体的程序发出带有 INPUTMSG 选项的 LINK 命令; 即,还指定了 SYSID。
30
尚未初始化程序管理器域,可能是因为在第一阶段 PLT 中发出了链接请求。
48
已尝试链接 Java 程序,但无法找到用户类。
51
已尝试对 Java 程序执行 LINK ,但找不到 JVMSERVER 资源。
52
已尝试对 Java 程序执行 LINK ,但未启用 JVMSERVER 资源。
53
已尝试对 Liberty JVM 服务器中的应用程序执行 LINK ,但 LINK 侦听器进程不可用。 此错误的最可能原因是未启用功能部件 cicsts:link-1.0 。 要解决此问题,请将此功能部件添加到 server.xml
54
虽然指定了 COMMAREA 选项,但在链接到使用 @CICSProgram 注解定义的 Java 程序时,该选项无效。
55
虽然指定了 INPUTMSG 选项,但在链接到使用 @CICSProgram 注解定义的 Java 程序时,该选项无效。
200
在从未指定 SYNCONRETURN 选项的远程系统链接到的程序中发出了该命令,或者如果该命令已在本地链接到并且使用 EXECUTE = DPLSUBSET 进行定义。

缺省操作: 异常结束任务。

注: 对于在 DPL 服务器程序中发生的情况,不会向客户机返回 RESP2 值。
22 LENGERR
RESP2 值:
11
COMMAREA 长度小于 0 或大于允许的长度。
12
在 DATALENGTH 选项上指定的长度为负值。
13
DATALENGTH 选项上指定的长度大于 LENGTH 选项上指定的长度。
26 日
COMMAREA 地址为零,但 COMMAREA 长度为非零。
27
INPUTMSG 长度小于 0 或大于 32767。
在下列任何情况下也会发生 (未设置RESP2 ):
  • LENGTH 选项上指定的长度大于 COMMAREA 选项中指定的数据区的长度,并且在复制该数据时,由于长度不正确而发生了破坏性重叠。

缺省操作: 异常结束任务。

注: 对于在 DPL 服务器程序中发生的情况,不会向客户机返回 RESP2 值。
70 NOTAUTH
RESP2 值:
101
在 PROGRAM (name) 上进行资源安全性检查失败。

缺省操作: 异常结束任务。

27 PGMIDERR
RESP2 值:
1
程序没有已安装的资源定义,并且程序自动安装已关闭,或者程序自动安装控制程序指示不应该自动安装该程序。
如果程序是应用程序的专用程序 (未定义为入口点) ,并且当前应用程序上下文中的任务不允许调用该应用程序,那么也会发生此 RESP2 。
2
已禁用程序。
3
未装入程序,因为
  • 程序的此装入是第一个装入,而程序装入失败,通常因为找不到装入模块。
  • 程序的此装入是后续装入,但第一次装入失败。

要重置装入状态,装入模块必须位于 DFHRPL 并置中,并且需要 SET PROGRAM NEWCOPY。

21
程序自动安装控制程序失败,因为程序自动安装控制程序不正确,未正确定义,或由于程序自动安装控制程序中的异常终止。 已禁用程序自动安装,并将消息 DFHPG0202 或 DFHPG0203 写入 CSPL。
22
程序自动安装控制程序返回的模型未定义到 CICS 或未启用。
23
程序自动安装控制程序返回了无效数据。
24
由于自动安装返回了无效的程序名或定义,因此为程序定义失败。
25
动态路由程序拒绝了链接请求。
26 日

已尝试对 Liberty JVM 服务器中的应用程序执行 LINK 操作,但请求失败,并且未调用目标应用程序。 消息 DFHSJ1207 提供了有关无法调用应用程序的原因的更多详细信息。

27
已尝试对 Liberty JVM 服务器中的应用程序执行 LINK ,但请求已超时,并且未调用目标应用程序。 有关更多信息,请参阅 对 Liberty JVM 服务器和 Java Web 应用程序进行故障诊断

缺省操作: 异常结束任务。

注: 对于在 DPL 服务器程序中发生的情况,不会向客户机返回 RESP2 值。
121 RESUNAVAIL
RESP2 值:
0
链接至程序所需的资源在目标区域上不可用。 RESUNAVAIL 条件适用于动态路由的分布式程序链接 (DPL) 请求。

如果 XPCERES 全局用户出口程序指示目标区域上的必需资源不可用,那么将在 EXEC CICS LINK 命令 由目标区域中的镜像执行上返回 RESUNAVAIL。 不会将其返回到应用程序。

缺省操作: 再次调用动态路由程序以进行路由选择失败。

82 ROLLEDBACK
RESP2 值:
29 日
指定了 SYNCONRETURN 选项,服务器程序无法成功获取同步点。 服务器程序已执行回滚,并且将回退当前工作单元中对远程区域中的可恢复资源所作的所有更改。

缺省操作: 异常结束任务。

53 个 SYSIDERR
RESP2 值:
18
在系统间表中找不到指定的 SYSID。
20
SYSID 指定的远程系统是 LUTYPE6.1-connected 系统。 在 LUTYPE6.1 连接上不支持分布式程序链接请求。
注:
  1. 如果发生 SYSIDERR ,那么不会进行本地排队。
  2. 对于发生在 DPL 请求上的条件,不会返回 RESP2 值。
21
使用了 CHANNEL 选项,并且已将 LINK 请求交付或路由到不支持该请求的远程系统。 (IPIC 和 MRO 连接。)
28 日
SYSID 指定的远程系统未在服务中。 此响应还可以指示尚未在远程系统上定义事务。
29 日
SYSID 指定的远程系统正在服务中,但没有可用的会话,并且动态路由程序已选择不将链接请求排队。
31 日
已拒绝向远程系统分配会话的请求。
32
由于会话分配队列已满或已清除,因此针对远程系统的会话的分配请求队列失败。

缺省操作: 异常结束任务。

81 个 TERMERR
RESP2 值:
17 日
在与镜像的对话期间发生不可恢复错误; 例如,如果会话失败或服务器区域失败。

缺省操作: 异常结束任务。

如果未在 LINK 上指定 SYNCONRETURN 选项,那么客户机程序必须在收到此条件时决定是异常终止还是回滚。

注: 对于在 DPL 服务器程序中发生的情况,不会向客户机返回 RESP2 值。

示例

以下示例显示如何请求指向名为 PROGNAME 的应用程序的链接:
EXEC CICS LINK PROGRAM(PROGNAME)
               COMMAREA(COMA) LENGTH(LENA)
               DATALENGTH(LENI) SYSID('CONX')