在COBOL

时间:2015-12-03 14:58:18

标签: soap cobol cics

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

  1. DFHWS2LS程序在副本中为响应结构生成两个01级别(请参阅下面的copybook摘录)。第二个01级应该用于联动,还是应该被视为工作存储领域?
  2. 当处理通过管道的单个单个容器时,CICS程序需要执行许多活动(请参阅下面的示例)。当我们有两个容器时,这一切都必须完成两次吗?
  3. 我搜索了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.                              
    

1 个答案:

答案 0 :(得分:4)

ReturnCodes-num告诉您在pfcsO01-ReturnCodes中命名的容器中有多少ReturnCodes-cont个实例。

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数组(ReturnCodes-num),并将ODO的对象设置为{ "status": "idle" }