在来自 COBOL 的 CICS Web 服务调用中通过一个管道处理多个容器

Handling multiple containers over one pipe in CICS web service call from COBOL

我们正在尝试使用 CICS 4.1 将 COBOL 程序与 SOAP 服务集成。一个挑战是响应包含可变数量的 return 代码,这使文案变得复杂。

  1. DFHWS2LS 程序在副本中为响应结构生成两个 01 级别(参见下面的副本片段)。这个第二个01级应该用于连接,还是应该被认为是一个工作存储字段?
  2. 在处理通过管道的单个容器时,CICS 程序需要执行许多活动(参见下面的示例)。当我们有两个容器时,这一切都必须完成两次吗?

我搜索了 Internet 和 IBM 文档,但没有找到如何处理此问题的示例。每当 WSDL 模式中的元素数量可变时,它似乎都会发生。一个 COBOL 示例说明某人如何处理通过同一管道的两个容器将是最有帮助的。

这是抄写本片段(程序中提供了初始01级):

05  ObligationResponse.                                   
    10  ReturnCodes-num            PIC S9(9) COMP-5 SYNC. 
    10  ReturnCodes-cont           PIC X(16).             

(other response structure elements deleted for brevity)

01  pfcsO01-ReturnCodes.                                   
    05  DiscrepancyCode                PIC S9(9) COMP-5 SYNC.
    05  DiscrepancyLevelCode           PIC S9(9) COMP-5 SYNC.

这是我们用来设置第一个容器的代码,我们对如何合并第二个容器感到困惑。

PERFORM 2000-PUT-INPUT-INTO-CONTAINER
    THRU 2000-EXIT.                   
PERFORM 6000-CHECK-CONTAINER-COMMAND 
    THRU 6000-EXIT.                   
PERFORM 3000-INVOKE-WEBSERVICES      
    THRU 3000-EXIT.                   
PERFORM 4000-CHECK-WEBSERVICE-COMMAND
    THRU 4000-EXIT.                   
PERFORM 5000-RECEIVE-RESPONSE        
    THRU 5000-EXIT.                   
PERFORM 6000-CHECK-CONTAINER-COMMAND 
    THRU 6000-EXIT.                   
PERFORM 7000-USER-CODE-TO-FMT-OUTPUT 
    THRU 7000-EXIT.                   
PERFORM 9000-TERMINATE-CICS          
    THRU 9000-EXIT.                   
GOBACK.                              

ReturnCodes-num 告诉您在 ReturnCodes-cont.

中命名的容器中存在多少 pfcsO01-ReturnCodes 实例

pfcsO01-ReturnCodes 映射到一个实例。解决这个问题的一种方法是将 pfcsO01-ReturnCodes 放在您的链接部分,使用 CEEGTSTEXEC CICS GETMAIN 来获取大小为 LENGTH OF pfcsO01-ReturnCodes * ReturnCodes-num 的存储空间,并使用 SET ADDRESS OF pfcsO01-ReturnCodes 来您新获得的存储空间。

如果你喜欢冒险,你可以将pfcsO01-ReturnCodes的长度添加到你重复SET ADDRESS OF pfcsO01-ReturnCodes到递增指针的长度上。或者,如果您更愿意安全地生活,您可以声明一个 pfcsO01-ReturnCodes(带有 Occurs Depending On)的可变数组,并将 ODO 的对象设置为 ReturnCodes-num.