Os programas do CICS Transaction Server para z/OS podem ser vinculados usando uma estrutura de dados COMMAREA ou de canal como entrada, que retorna a mesma estrutura de dados como saída. O nó CICSRequest suporta interação com o CICS através das estruturas de dados COMMAREA ou de canal.
Se usando uma COMMAREA como estrutura de dados de entrada para comunicação com o CICS, o nó CICSRequest obtém uma parte do Corpo de Entrada, conforme definido nas propriedades de Solicitação do nó CICSRequest e a envia ao CICS como a COMMAREA.
A COMMAREA de retorno então é colocada na árvore de Saída e substitui o corpo existente no local definido nas propriedades de Resultado do nó CICSRequest. A COMMAREA pode, então, ser configurada para análise usando as propriedades Análise da Mensagem de Resposta do nó CICSRequest.
Ao definir uma estrutura de dados COMMAREA como entrada, você deve assegurar que o valor da propriedade Comprimento da Commarea do nó CICSRequest seja grande o suficiente para conter os dados da solicitação de entrada, ou os dados de resposta de saída, mas não exceda o valor máximo de 32767 bytes. Se o valor Comprimento da Commarea não for grande o suficiente para ser utilizado para os dados de resposta ou dados do pedido, ocorrerá uma fuga de memória no CICS. O tamanho da COMMAREA não pode ser alterado pelo programa CICS. Se os dados do pedido serializados forem maiores que o Comprimento da Commarea, os dados serão truncados no Comprimento da Commarea. É possível obter o valor Comprimento da Commarea do administrador ou desenvolvedor do CICS.
O valor padrão para a propriedade básica estrutura de dados do nó CICSRequest é Commarea.
Para obter mais informações sobre o uso de uma estrutura de dados COMMAREA como entrada, consulte Definindo uma Estrutura de Dados do CICS Transaction Server para z/OS, Desenvolvendo um Fluxo de Mensagens com um Nó CICSRequest e Construindo uma Mensagem para o Nó CICSRequest.
Os canais CICS contêm várias estruturas chamadas contêineres. Os contêineres mantêm as informações de negócios que são acessadas pelo programa CICS de destino. Cada contêiner pode conter até 2 GB de dados, enquanto os canais podem ter quantos contêineres for necessário, o que oferece flexibilidade em termos de tamanho e layout de dados. Cada contêiner tem um nome alfanumérico com no máximo 16 caracteres, que é exclusivo no canal, e é usado como mecanismo para recuperar o conteúdo do contêiner do canal.
Ao contrário das estruturas COMMAREA, o tamanho do canal de resposta não precisa ser semelhante à solicitação, enquanto as COMMAREAs devem permitir o tamanho da resposta na solicitação.
Canais e contêineres no CICS
No diagrama de exemplo a seguir, o canal do CICS tem dois contêineres; CustomerName e Order.
01 ORDER_STRUCTURE.
03 QTY COMP-1.
03 ITEM PIC X(10).
03 PRICE PIC S9(9).
O programa
CICS de destino pode recuperar ambos os
contêineres do canal fornecendo o nome do contêiner ao usar a API GET
CONTAINER. Quando os dados são fornecidos ao programa
CICS, o programa processa os dados que ele
escolhe todavia. Por exemplo, o programa pode colocar outros contêineres no canal para
fornecer uma resposta ao contêiner chamada, usando a API PUT CONTAINER.Canais e contêineres no WebSphere Message Broker
No WebSphere Message Broker, um canal CICS é representado como uma estrutura de coleção de mensagens. Uma coleção de mensagens pode conter mensagens filhas, cada uma tratada como um contêiner pelo nó CICSRequest. Uma estrutura de coleção de mensagens é usada como entrada e saída para o nó CICSRequest ao usar uma estrutura de dados de canal. Para obter mais informações sobre coleções de mensagens, consulte Coleta de Mensagens, e para informações sobre a criação de uma coleção de mensagens, consulte Criando uma Coleção de Mensagens Usando ESQL.
O nome da coleção de mensagens é usado para nomear o canal. O nome da mensagem filha na coleção de mensagens é usado como nome do contêiner no canal, e deve ser exclusivo. Se o nome da mensagem filha na coleção de mensagens não for exclusivo, a solicitação será rejeitada no CICS.
CICS | WebSphere Message Broker |
---|---|
Nome do canal | Nome da coleção de mensagens |
Nome do contêiner (deve ser exclusivo para o canal pai) | Nome da mensagem filha (deve ser exclusivo para a coleção de mensagens) |
Atributos de nome/valor
O WebSphere Message Broker suporta a inclusão de atributos de nome/valor em uma coleção de mensagens para criar um contêiner. Uma coleção de mensagens pode ter zero ou mais atributos. O nome de um atributo deve ser exclusivo em uma coleção de mensagens. Um atributo padrão para a coleta de mensagens é um atributo chamado CollectionName.
Você pode incluir atributos de nome/valor em uma coleção de mensagens para criar contêineres CICS. Os atributos de nome/valor na coleção de mensagens, a não ser CollectionName, podem ser usados no lugar de pastas de mensagens completas para dados simples. Por exemplo, um atributo de sequência de nome/valor pode ser configurado na coleção de mensagens e usado diretamente pelo nó CICSRequest sem precisar criar um conjunto de mensagens para o elemento.
Os atributos de nome/valor podem ser produzidos a partir de contêineres na saída, bem como aceitos para entrada. Para obter informações sobre como criar um atributo em vez de uma pasta de mensagem a partir de um contêiner, consulte Nó CICSRequest.
No diagrama de exemplo a seguir, o canal do CICS é representado por uma coleção de mensagens chamada Collection. Collection contém dois contêineres que são representados por mensagens filhas denominadas CustomerName e Order. CollectionName e CustomerName são atributos de nome/valor; entretanto, o atributo CollectionName não é tratado como um contêiner pelo nó CICSRequest; portanto, não é enviado para o CICS.
Se o atributo CustomerName for tratado como um contêiner de caracteres pelo nó CICSRequest, o LocalEnvironment deverá refletir isso.
LocalEnvironment
SET OutputLocalEnvironment.Destination.CICS.RequestChannel.Containers.<myContainerName> = CHARACTER;
Quando uma coleção de mensagens é emitida do nó CICSRequest após a solicitação, o LocalEnvironment contém a informação do tipo retornado para os contêineres. Por exemplo, quando o canal de resposta volta do CICS, o LocalEnvironment mostra os tipos dos contêineres que voltaram no seguinte local: LocalEnvironment.CICS.ResponseChannel.Containers.<myContainerName> = CHARACTER
SET OutputLocalEnvironment.Destination.CICS.RequestChannel.ChannelName = <myNewChannelName>;
SET OutputLocalEnvironment.Destination.CICS.RequestChannel.SingleMessageContainerName = <mySingleMessageContainerName>;
Como uma coleção de mensagens permite que cada contêiner no canal seja modelado como uma mensagem separada, cada mensagem tem sua própria estrutura e opções de análise. Por exemplo, um contêiner pode ser XML e outro poderá ser baseado em um copybook, que pode ser representado usando as mensagens XMLNSC e MRM em uma coleção de mensagens.
Cada mensagem filha na coleção de mensagens contém informações de domínio, conjunto, tipo, formato, CCSID e codificação de mensagem na pasta Propriedades que são associadas à mensagem filha, que é serializada em um fluxo de bytes e enviada ao CICS. Cada pasta de mensagem filha na coleção de mensagens que está sendo enviada para o CICS é serializada no nível do último filho do domínio da propriedade de mensagem. Nem todos os contêineres do CICS exigem um conjunto de mensagens para representá-los.
No exemplo anterior, o contêiner Order pode ser representado como MRM, enquanto um conjunto de mensagens pode ser criado do copybook ORDER_STRUCTURE para representá-lo. O canal de retorno é convertido em uma coleção de mensagens, onde cada mensagem filha na coleção de mensagens representa um contêiner do canal. As mensagens filhas na coleção de mensagens são mapeadas para uma lista de informações de domínio, conjunto, tipo, formato, CCSID e codificação de mensagem usando o nome da mensagem filha; entretanto, as informações de CCSID e codificação são ignoradas para mensagens de caractere. Se um mapeamento não puder ser encontrado na mensagem, um mapeamento padrão poderá ser fornecido.
Como não é possível saber quantos contêineres estão na resposta, uma coleção de mensagens é sempre produzida como saída.
Você pode usar as propriedades de Análise de Mensagem de Resposta do nó CICSRequest para mapear um contêiner de retorno para um domínio, conjunto, tipo, formato, CCSID e codificação de mensagem. Particularmente, a propriedade Local de dados de resultados pode ser usada para reduzir a árvore de resultados para uma única pasta de mensagem ou para um único campo ou subárvore para saída. Para obter informações sobre a propriedade Local dos dados de resultados, consulte Nó CICSRequest.
Como o canal é representado por uma coleção de mensagens no WebSphere Message Broker, é possível criar o nome do canal configurando o nome da coleção de mensagens. Os nomes de coleção de mensagens são configurados usando o atributo CollectionName. Para obter mais informações sobre como criar uma coleção de mensagens e configurar o nome dela, consulte Criando uma Coleção de Mensagens Usando ESQL.
Como um contêiner é representado por uma mensagem filha no WebSphere Message Broker, é possível criar um nome de contêiner configurando o nome da mensagem filha. Para obter mais informações sobre como criar uma coleção de mensagens e configurar o nome da mensagem filha, consulte Criando uma Coleção de Mensagens Usando ESQL.
É fornecida uma amostra que demonstra como chamar um programa CICS baseado em canal criando e preenchendo uma coleção de mensagens para o nó CICSRequest e como processar a coleção após a chamada. Para obter informações adicionais, consulte CICS Transaction Server para z/OS Channel Connectivity.