Etapas para criar uma tabela customizada
É possível criar uma tabela customizada.
- para limpar dados de tabelas personalizadas em suas tabelas de histórico correspondentes, caso existam, e
- para lidar com as exclusões das tabelas de histórico personalizadas.
Sobre esta tarefa
Para criar uma tabela customizada:
Procedimento
- Copie o arquivo <runtime_sandbox>/repository/entity/extensions/Extensions.xml.sample como arquivo <runtime_sandbox>/extensions/global/entities/your_custom_filename.xml OU modifique seu arquivo XML de extensão existente Por exemplo, suponha que ABC_CUSTOMER_ORDER_LINE é uma tabela customizada.
- Edite o arquivo your_custom_filename.xml para criar tabelas customizadas, conforme mostrado no exemplo a seguir: Para uma descrição dos atributos XML, consulte a tabela após o exemplo.
<DBSchema> <Entities> <Entity ApiNeeded="Y/N" AuditRequired="Y" Description="" XMLName="OPTIONAL" Name="OPTIONAL" HasHistory="Y/N" Prefix="ABC" TableName="ABC_CUSTOMER_ORDER_LINE" KeyType="Random" > <!-- table columns --> <Attributes> <Attribute ColumnName="CREATETS" DataType="TimeStamp" DefaultValue="sysdate" Description="Create TimeStamp" /> <Attribute ColumnName="MODIFYTS" DataType="TimeStamp" DefaultValue="sysdate" Description="Modify TimeStamp" /> <Attribute ColumnName="CREATEUSERID" DataType="UserId" DefaultValue="' '" Description="Creating User ID" /> <Attribute ColumnName="MODIFYUSERID" DataType="UserId" DefaultValue="' '" Description="Modifying User ID" /> <Attribute ColumnName="CREATEPROGID" DataType="ProgramID" DefaultValue="' '" Description="Creating Program ID" /> <Attribute ColumnName="MODIFYPROGID" DataType="ProgramID" DefaultValue="' '" Description="Modifying Program ID" /> <Attribute ColumnName="LOCKID" DataType="Lockid" DefaultValue="0" Description="Lock ID" /> <Attribute ColumnName="TABLE_KEY" DataType="Key" DefaultValue=" " Description="" Nullable="True/False" XMLName="TableKey" /> . . </Attributes> <!-- PrimaryKey is a mandatory attribute in entity definition. This element can have ONLY ONE attribute element --> <PrimaryKey Name="TABLE_NAME_PK"> <Attribute ColumnName="TABLE_KEY" /> </PrimaryKey> <!-- Indices --> <Indices> <Index Name="INDEX_I1" Unique="True/False"> <Column Name="Attribute2" /> . . </Index> . . </Indices> <!-- Relationship --> <Parent ParentTableName="YFS_ORDER_LINE" XMLName="YFSOrderLine" > <Attribute ColumnName="CUSTOM_ORDER_KEY" ParentColumnName="ORDER_LINE_KEY" /> . . </Parent> <!-- ForeignKeys --> <ForeignKeys> <ForeignKey ParentTableName="PARENT_ORDER_LINE" XMLName="PARENTName1" > <Attribute ColumnName="CUSTOM_ORDER_KEY" ParentColumnName="PARENT_COLUMN_KEY" /> . . </ForeignKey> . . </ForeignKeys> <!-- AuditReferences --> <AuditReferences> <Reference ColumnName="TABLE_KEY" /> . . </AuditReferences> </Entity> </Entities> </DBSchema>Notas:
- Se TableName for especificado usando um conjunto de caracteres não ASCII, os atributos XMLName e Name serão necessários para essa tabela ou entidade.
- Se ColumnName for especificado usando um conjunto de caracteres não ASCII, os atributos XMLName e Name serão necessários para essa coluna ou atributo.
- A tabela a seguir explica os atributos no XML da entidade:
Atributo
Descrição
Entidade
ApiNeeded
Indica se as APIs devem ou não ser geradas. Valores válidos sãoY ou N. Um conjunto de APIs padrão é gerado se Y for passado.
Por exemplo, nas tabelas ABC_CUSTOMER_ORDER_LINE, o aplicativo cria as seguintes APIs quando o arquivo jar da extensão de banco de dados é gerado:- getABCCustomerOrderLine()
- getABCCustomerOrderLineList()
- createABCCustomerOrderLine()
- changeABCCustomerOrderLine()
- deleteABCCustomerOrderLine()
Essas APIs podem ser acessados como serviços usando o Service Definition Framework.
AuditRequired
Se configurado como Y, , um registro de auditoria para essa entidade será criado..
HasHistory
Esse sinalizador indica se a tabela customizada pode ter uma tabela de históricos associada a ela.
O valor padrão é N.
Se o sinalizador estiver configurado paraY, os scripts apropriados para a geração de scripts de banco de dados para a criação e alteração da tabela de históricos são gerados por dbverify.
Para uma tabela customizada, o sinalizador HasHistory deve ser configurado para Y para gerar tabelas de históricos. Porém, se um relacionamento Pai for definido no XML da entidade, esse sinalizador é copiado da definição da tabela-pai, e todas as entidades-filhas não podem substituir esse sinalizador.
Prefixo
O prefixo incluído nas suas tabelas customizadas. É recomendado que você não use um prefixo começando com Y.
TableName
O nome que é dado à sua tabela customizada
KeyType
Opcional. O valor válido é Random. Quando o valor é configurado para Random, a lógica usada para gerar chaves primárias para a tabela resulta na geração de chaves primárias aleatórias e não chaves primárias sequenciais. Isto é, quando KeyType=”Random”, dois dígitos aleatórios são incluídos nas chaves primárias. Por exemplo, o formato das chaves primárias geradas é YYYYMMDDHHRRMM(SS)NNNNNNNN, em que RR representa os dois dígitos aleatórios. Entity/Attributes/Attribute
ColumnName
Os nomes de coluna que compõem a tabela.
DataType
O tipo de dados da coluna. Tipos de dados válidos são fornecidos no arquivo install_dir/repository/datatypes/datatypes.xml.
Nota:- Tipo de dados BLOB não é suportado.
- Não use o tipo de dados Key porque ele cria um índice no esquema SYSIBM que faz com que o processo de autoatendimento do Update OMS Application UCD falhe e force o descarte manual da chave primária para remover o índice. O tipo de dados Key não é necessário, pois o <PrimaryKey> obtém o mesmo resultado sem criar o índice indesejado.
CompressionSupported
Opcional. Atributo usado para indicar se a compactação de dados é ou não suportada para essa coluna. Os valores válidos são True ou False. Se suporte de compactação True estiver ativado.
Nota: Se os dados inseridos em uma coluna tiverem os atributos CompressionSupported e UseCompression configurados para True, esse atributo não deverá ser configurado de volta para False. Fazer isso resultaria na recuperação sem nenhuma descompactação de todos os dados compactados.UseCompression
Opcional. Atributo usado para compactar dados para essa coluna. Os valores válidos são True ou False. Se True, os dados são compactados.
Nota: O valor desse atributo deve ser configurado como True somente se o atributo CompressionSupported for configurado como True.QueryAllowed
Opcional. Atributo usado para ativar uma coluna compactável para ser usada para consultas em uma API de Lista. Os valores válidos são True ou False. Se True, a coluna pode ser usada para consultas nas APIs da Lista.
Nota: Se o valor do atributo CompressionSupported for configurado como true, o valor desse atributo também deverá ser configurado como True.DefaultValue
Valor padrão para a coluna.
Descrição
Uma descrição das colunas que poderiam ser usadas no Javadoc ou no ERD
Anulável
Opcional. Atributo usado para descrever o valor anulável de um campo. O padrão é false. Nullable=true é permitido para todas as colunas, exceto Atributos de Chave Primária e Relacionamentos de Entidade.
XMLName
Opcional. Nome XML do atributo, se for diferente do nome do atributo.
Nota: Se ColumnName for especificado usando um conjunto de caracteres não ASCII, esse atributo será necessário..Escolha um nome que não entre em conflito com a extensão base. É recomendado que você use Extn como um prefixo. Também é fortemente recomendado que você use a mesma convenção para chegar no XMLName como o produto base faz: faça cada letra após o sublinhado no nome da coluna em letra maiúscula, e o restante em letra minúscula. Depois, remova os sublinhados. Assim, Extn_Item_Id deve ser: ExtnItemId.
Nome
Obrigatório. O nome de classe do banco de dados.
Entity/PrimaryKey
Nome
Nome do índice exclusivo criado para a chave primária.
Nota: o nome da chave primária na extensão XML deve terminar com _PK.ColumnName
O nome da coluna da tabela que é identificada como a chave primária.
Entity/Indices/Index
Nome
O nome do índice. Esse valor não pode exceder 18 caracteres.
Exclusivo
Essa chave está presente somente para entidades customizadas. Os valores válidos são True ou False. Se True, um índice exclusivo é criado.
AllowCompressedColumns
Opcional. Se True, o índice tem permissão para conter colunas marcadas com o atributo CompressionSupported configurado para True.
Column/ Name
O nome da coluna da tabela associado com o índice.
Entity/Parent
ParentTableName
Nome da outra tabela com a qual essa entidade tem relacionamento de chave estrangeira.
XMLName
O nome do XML do atributo pai. Ele deve começar com o prefixo mencionado na tabela-pai.
Por padrão, o nome da tabela-pai é assumido.
Parent/Attribute Level
ParentColumnName
O nome da coluna na tabela-pai.
Nota: para criar relacionamentos entre entidades, o tipo de dados da coluna pai deve ser do tipo CHAR ou VARCHAR.
ColumnName
O nome da coluna nessa entidade customizada.
Entity/ForeignKeys/ForeignKey
ParentTableName
O nome da tabela com a qual a entidade tem um relacionamento de chave estrangeira.
XMLName
Representação XML do nome do elemento.
Por padrão, o nome da tabela-pai é assumido.
Entity/ForeignKeys/ForeignKey/Attribute
ParentColumnName
O nome da coluna da tabela-pai.
Nota: para criar chaves estrangeiras entre entidades, o tipo de dados da coluna pai deve ser do tipo CHAR ou VARCHAR.
ColumnName
O nome da coluna nessa entidade customizada.
Entity/AuditReferences/Reference
ColumnName
O nome da Coluna de Referência na tabela de auditoria.
Nota: na definição de entidade, o relacionamento pode ser definido nos elementos Pai e ForeignKey . - O relacionamento definido sob o elemento ForeignKey indica:
- Se a tabela estrangeira for uma tabela de banco de dados do aplicativo,para um registro único na tabela estrangeira, zero ou muitos registros nessa tabela customizada podem existir.
- Esse é um relacionamento somente leitura, assim, a exclusão de um registro da tabela estrangeira não resulta na exclusão de um registro correspondente dessa tabela customizada.
- O relacionamento definido no elemento Parent indica:
- Para um único registro na tabela-pai, diversos registros-filhos podem existir.
- A exclusão de um registro da tabela-pai resulta na exclusão de registros correspondentes da tabela-filha, se houver.
- Estenda os modelos de API correspondentes (por exemplo, getOrderDetails()API) seguindo as instruções em Extending API Templates.Nota: as APIs geradas pelo aplicativo para as tabelas customizadas podem ser chamadas como um serviço e por meio de um componente do wrapper multiAPI
- Construa e implemente as suas extensões.