我们正在尝试使用CICS 4.1将COBOL程序与SOAP服务集成。一个挑战是响应包含可变数量的返回码,这使副本变得复杂。
DFHWS2LS
程序在副本中为响应结构生成两个01级别(请参阅下面的copybook摘录)。第二个01级应该用于联动,还是应该被视为工作存储领域?我搜索了Internet和IBM文档,但还没有找到如何处理这个问题的示例。它似乎发生在WSDL架构中存在可变数量的元素的任何时候。 COBOL示例说明某人如何处理两个容器通过同一个管道将是最有帮助的。
这是copybook片段(程序中提供了初始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.
答案 0 :(得分:4)
ReturnCodes-num
告诉您在pfcsO01-ReturnCodes
中命名的容器中有多少ReturnCodes-cont
个实例。
pfcsO01-ReturnCodes
映射到一个实例。解决此问题的一种方法是将pfcsO01-ReturnCodes
放入您的关联部分,使用CEEGTST
或EXEC 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
数组(ReturnCodes-num
),并将ODO的对象设置为{ "status": "idle" }
。