2015-12-03 2 views
1

Мы пытаемся интегрировать программу COBOL с помощью службы SOAP с использованием CICS 4.1. Одна из проблем заключается в том, что ответ содержит переменное количество кодов возврата, что усложняет книгу.Обработка нескольких контейнеров по одной трубке в CICS-сервисе вызова из COBOL

  1. Программа DFHWS2LS генерирует два 01 уровней в прописи для структуры ответа (см тетрадной фрагмент ниже). Должен ли этот второй уровень 01 использоваться в связке или он должен рассматриваться как область рабочего хранения?
  2. При работе с одним единственным контейнером, проходящим через трубу, необходимо выполнить ряд действий, которые должна выполнять программа CICS (см. Пример ниже). Когда у нас есть два контейнера, все это нужно сделать дважды?

Я искал документацию в Интернете и 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.        

ответ

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-ReturnCodesOccurs Depending On) и установить объект ODO на ReturnCodes-num.

+0

Очень хороший ответ, спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^