Разница между передачей управления другой программе с помощью return() и вызовом программы с использованием xctl
Если у меня есть, скажем, 2 экрана. Первый - это экран подсказки, который запрашивает, скажем, какой-нибудь ключ записи, а на следующем экране отображается информация о записи. Теперь, когда я хочу перенести элемент управления на второй экран (после выполнения работы с первым экраном), я могу сделать это следующим образом:
exec cics
return(trans-id)
commarea(ws-commarea)
end exec.
где trans-id - это то, что на втором экране.
Тогда что нужно для использования вызывающей функции, такой как xctl, когда у нас уже есть функция return(), доступная в cics?
2 ответа
Использование XCTL или LINK или динамических CALLs ограничивает вашу обработку одной транзакцией CICS.
При желании вы можете спроектировать свое приложение для распределения различных бизнес-функций по нескольким транзакциям, передавая данные через запятую.
Исторически это не было сделано по ряду причин. Тридцать лет назад некоторые программисты CICS Systems считали идентификаторы транзакций ограниченным ресурсом и рекомендовали разработчикам приложений поддерживать обработку до минимально возможного количества транзакций.
Безопасность в CICS обрабатывается на уровне транзакций, поэтому у вашего пользователя должны быть полномочия для выполнения всех транзакций, которые составляют бизнес-функцию, которую он должен выполнять.
Ресурсы, такие как очереди временного хранения, часто именуются частично с использованием идентификатора транзакции, чтобы различать и хранить их отдельно.
До версии CICS TS 2 (я думаю) данные, которые должны были быть разделены между этими транзакциями, были ограничены размером запятой (32 КБ). Все поддерживаемые версии CICS теперь имеют каналы и контейнеры, что позволяет передавать значительно большие объемы данных.
Мой опыт показывает, что проще кодировать и легче поддерживать псевдоговорящие транзакции с экранными взаимодействиями, если код находится в одной транзакции. Вы действительно хотите, чтобы ваши транзакции были псевдоговорящими или не диалоговыми. Я считаю, что это основная причина, по которой вы видите транзакции, предназначенные для использования XCTL, LINK или динамических вызовов.
XCTL также не разрешает динамическую маршрутизацию (вы всегда остаетесь в одном и том же регионе CICS) и является только односторонним. Псевдо-разговорный возврат, как указано выше, позволит пользователю обновить экран, и только при нажатии на Идентификатор внимания (например, Enter) будет запущена следующая программа. XCTL запустится немедленно.