O importador COBOL utiliza um conjunto de valores padrão e comportamentos ao mapear tipos de dados COBOL para elementos do modelo de mensagem.
A tabela a seguir mostra como as definições COBOL influenciam as configurações do Esquema XML no modelo de mensagem.
Cláusula COBOL | Tipo de dados do Esquema XML | Notas |
---|---|---|
PIC A | xsd:string | |
PIC G | xsd:string | Configure o nome do código do idioma do tempo de compilação como ja_JP em | para processar isto.
PIC N | xsd:string | Configure o nome do código do idioma do tempo de compilação como ja_JP em | para processar isto.
PIC X | xsd:string | |
PIC 9(n) n = 1-4 | xsd:short | DISPLAY, COMP ou COMP-3 |
PIC 9(n) n = 5-9 | xsd:int | DISPLAY, COMP ou COMP-3 |
PIC 9(n) n = 10-18 | xsd:long | DISPLAY, COMP ou COMP-3 |
PIC 9(n) n = 19-31 | xsd:integer | DISPLAY, COMP ou COMP-3 |
PIC 9(n)V9(m) | xsd:decimal | Qualquer valor de ponto decimal virtual DISPLAY, COMP ou COMP-3 |
COMP-1 | xsd:float | |
COMP-2 | xsd:double | |
Qualquer cadeia editada | xsd:string | |
Qualquer número editado | xsd:string | Por exemplo, uma cláusula COBOL PICTURE que contém qualquer um dos
seguintes caracteres:
Se desejar que o tipo lógico do intermediário seja um tipo numérico, certifique-se de que a cláusula COBOL PICTURE não contenha nenhum destes caracteres. |
VALUE | Todos | As cláusulas VALUE de Nível Não-88 podem ser importadas como valores padrão de esquema (opção no assistente de importação). |
A tabela a seguir mostra como as definições de COBOL influenciam as características físicas de MRM CWF dos elementos gerados no modelo de mensagem.
Cláusula COBOL | Tipo Físico de CWF | Características de Comprimento de CWF | Outras Características de CWF |
---|---|---|---|
PIC X(n) PIC A(n) |
Cadeia de Comprimento Fixo | Comprimento = n Unidades de Comprimento = Bytes |
Justificação = Alinhar à Esquerda Padding Character = SPACE |
PIC G(n) PIC N(n) |
Cadeia de Comprimento Fixo | Comprimento = n Unidades de Comprimento = Caracteres |
Justificação = Alinhar à Esquerda Padding Character = SPACE |
PIC 9(n) DISPLAY n=1-31 | Decimal Externo | Comprimento = n Unidades de Comprimento = Bytes |
Justificação = Alinhar à Direita Caractere de Preenchimento = '0' Assinado = Desmarcado Orientação de Sinal= Rastreando |
PIC 9(n) COMP, COMP-4, COMP-5 ou BINARY | Inteiro | Comprimento = 2, 4 ou 8 com base em n Unidades de Comprimento = Bytes |
Assinado = Desmarcado Orientação de Sinal= Em Branco |
PIC 9(n) COMP-3 n=1-18 | Decimal Compactado | Comprimento = CEILING((n+1)/2) Unidades de Comprimento = Bytes |
Assinado = Desmarcado Orientação de Sinal= Em Branco |
PIC S9(n) DISPLAY n=1-31 | Decimal Externo | Comprimento = n Unidades de Comprimento = Bytes |
Assinado = Marcado Orientação de Sinal= Rastreando *Consulte a Nota 1 |
PIC S9(n) COMP ou COMP-3 n=1-18 |
Inteiro ou Decimal Compactado | Comprimento = Consulte as definições de COMP e COMP-3 acima Unidades de Comprimento = Bytes |
Assinado = Marcado Orientação de Sinal= Em Branco |
PIC 9(m)V9(n) DISPLAY n=1-31 | Decimal Externo | Comprimento = n+m Unidades de Comprimento = Bytes |
Assinado = Desmarcado Orientação de Sinal= Rastreando Ponto Decimal Virtual = n |
PIC 9(m)V9(n) COMP ou COMP-3 | Inteiro ou Decimal Compactado | Comprimento = CEILING((n+m+1)/2) para COMP-3 Comprimento = 2, 4 ou 8 para COMP Unidades de Comprimento = Bytes |
Assinado = Desmarcado Orientação de Sinal= Em Branco Ponto Decimal Virtual = n |
COMP-1 | Float | Comprimento = 4 Unidades de Comprimento = Bytes |
Assinado = Marcado Orientação de Sinal= Em Branco |
COMP-2 | Float | Comprimento = 8 Unidades de Comprimento = Bytes |
Assinado = Marcado Orientação de Sinal= Em Branco |
SYNC | Flutuante, Inteiro ou Decimal Compactado | Ignorar Contagem Inicial conforme apropriado Ignorar Contagem Final conforme apropriado Alinhamento de bytes conforme apropriado *Consulte a nota 2 |
|
Ignorar Contagem Inicial e Ignorar Contagem Final são calculados pelo importador de cada um dos elementos importados pelo importador, independentemente da cláusula SYNC. Eles têm valores diferentes de zero quando a cláusula SYNC está presente.
Onde houver um elemento de repetição, Ignorar Contagem Inicial e Ignorar Contagem Final serão utilizados para a primeira ocorrência do elemento de repetição; para ocorrências subsequentes, apenas Ignorar Contagem Final será utilizado.
Consulte o material de referência de COBOL para obter detalhes dos campos que requerem alinhamento de bytes.
Os componentes Custom Wire Format (CWF) e TDS MRM do WebSphere Message Broker suportam o formato de dados Decimal Externo (também conhecido como Decimal por Zona) para dados numéricos. Neste formato, os dados numéricos são armazenados internamente como dados de caractere decimais. Por exemplo, em um sistema que utiliza o código EBCDIC, o número 1234 armazenado em um campo decimal externo de 4 bytes é armazenado como uma cadeia de caracteres '1234', e sua representação hexadecimal interna real é 'F1F2F3F4'.
Com os números decimais externos sinalizados, o sinal pode ser incorporado nos dados reais, modificando a primeira metade do primeiro ou do último byte (dependendo se você está utilizando uma representação com sinal no início ou no fim). Geralmente, '0xC' é utilizado para representar um número positivo, '0xD' é utilizado para representar um número negativo e '0xF' é utilizado para representar um número sem sinal.
Em máquinas ASCII, existem vários mecanismos para a representação interna de dados decimais externos. Uma representação ('Sign ASCII') empregada por máquinas pSeries da IBM usa os códigos ASCII normais ('0' [hex 30] a '9' [hex 39]) para o primeiro ou último dígito de números não sinalizados e positivos e os caracteres 'p' [hex 70] a 'y' [hex 79] para números negativos.
Um método alternativo (Sign EBCDIC Custom) é utilizado em algumas outras máquinas com base em ASCII. Este método utiliza os mesmos caracteres que uma máquina baseada em EBCDIC, mesmo que as representações hexadecimais internas deles sejam diferentes. Se usar esta técnica, a cadeia de caracteres para as plataformas EBCDIC e ASCII será idêntica. Provavelmente, você poderia receber uma mensagem de uma plataforma EBCDIC (criada a partir de um copybook COBOL que contém tais entradas como PIC XXX e PIC S999) e converter a mensagem inteira para ASCII ou outra maneira apropriada. A cadeia de caracteres que representa o campo decimal externo na mensagem (após a conversão de ASCII em EBCDIC, ou de EBCDIC em ASCII) é mapeada para o ponto de código que representa o sinal correto para o decimal.
Este método inclui a limitação de que as chaves são variantes (elas possuem pontos de código diferentes em diferentes páginas de códigos EBCDIC). Este mecanismo funciona apenas para as páginas de códigos EBCDIC nas quais as chaves '{' e '}' (que são utilizadas para representar o 0 com sinal) têm exatamente os pontos de código X'C0' e X'D0'. Por exemplo, funciona para a página de códigos 500 mas não para a página de códigos 871, na qual as chaves possuem os pontos de código X'8E' e X'9C.
Em um ambiente ASCII (determinado pela propriedade CCSID no tempo de execução), o padrão para entrada e saída é a representação 'Sign ASCII'. É possível especificar a representação aplicável na camada física CWF para os atributos locais e elementos locais dos tipos decimal, float e integer.
A tabela a seguir mostra a representação interna (caractere e valor hexadecimal real) do primeiro ou último dígito para números decimais externos com um sinal (integrado) inicial ou final incluído, respectivamente. (A tabela não especifica a representação para valores sem sinal, que são 0x30-0x39 para ASCII e 0xF0-0xF9 para EBCDIC.)
Ambiente ASCII | Ambiente EBCDIC | Ambiente ASCII | Ambiente EBCDIC | ||||
---|---|---|---|---|---|---|---|
Valores com sinal positivo | Valores com sinal negativo | ||||||
Digito | Sinal ASCII | Sinal EBCDIC Personalizado | Sinal ASCII | Sinal EBCDIC Personalizado | |||
0 | 0(30) | {(7B) | {(C0) | p(70) | }(7D) | }(D0) | |
1 | 1(31) | A(41) | A(C1) | q(71) | J(4A) | J(D1) | |
2 | 2(32) | B(42) | B(C2) | r(72) | K(4B) | K(D2) | |
3 | 3(33) | C(43) | C(C3) | s(73) | L(4C) | L(D3) | |
4 | 4(34) | D(44) | D(C4) | t(74) | M(4D) | M(D4) | |
5 | 5(35) | E(45) | E(C5) | u(75) | N(4E) | N(D5) | |
6 | 6(36) | F(46) | F(C6) | v(76) | O(4F) | O(D6) | |
7 | 7(37) | G(47) | G(C7) | w(77) | P(50) | P(D7) | |
8 | 8(38) | H(48) | H(C8) | x(78) | Q(51) | Q(D8) | |
9 | 9(39) | I(49) | I(C9) | y(79) | R(52) | R(D9) |
A tabela a seguir fornece alguns exemplos para um intervalo de números simples que são representativos do que pode ser transmitido ou recebido utilizando estas abordagens.
Sinal inicial | Sinal final | |||||
---|---|---|---|---|---|---|
Ambiente ASCII | Ambiente EBCDIC | Ambiente ASCII | Ambiente EBCDIC | |||
Valor decimal | Sinal ASCII | Sinal EBCDIC Personalizado | Sinal ASCII | Sinal EBCDIC Personalizado | ||
1234 | 31 32 33 34 |
31 32 33 34 |
F1 F2 F3 F4 |
31 32 33 34 |
31 32 33 34 |
F1 F2 F3 F4 |
+1234 | 31 32 33 34 |
41 32 33 34 |
C1 F2 F3 F4 |
31 32 33 34 |
31 32 33 44 |
F1 F2 F3 C4 |
-1234 | 71 32 33 34 |
4A 32 33 34 |
D1 F2 F3 F4 |
31 32 33 74 |
31 32 33 4D |
F1 F2 F3 D4 |
7890 | 37 38 39 30 |
37 38 39 30 |
F7 F8 F9 F0 |
37 38 39 30 |
37 38 39 30 |
F7 F8 F9 F0 |
+7890 | 37 38 39 30 |
47 38 39 30 |
C7 F8 F9 F0 |
37 38 39 30 |
37 38 39 7B |
F7 F8 F9 C0 |
-7890 | 77 38 39 30 |
50 38 39 30 |
D7 F8 F9 F0 |
37 38 39 70 |
37 38 39 7D |
F7 F8 F9 D0 |