Modelo de Tarefa
Referenciado por: Dicas Técnicas | Predefinição:Guia de Programação Banco de Dados | Guia para Atualização de Metadados do Totali Commerce | Guia para Exportação para Checkout do Totali Commerce | Guia para Manutenção de Functions e Procedures do Totali Commerce | Guia para Manutenção de Packages do Totali Commerce | Guia para Manutenção de Triggers do Totali Commerce | Guia para Manutenção de Views do Totali Commerce | Introdução a Programação de Banco do Totali Commerce | Layout de Importação para o Totali Commerce |
| Guia de programação para linguagem de banco | |
| Introdução | |
| Padrões Gerais | |
| Estrutura | |
| Exportação para Checkout | |
| Metadados | |
| Views | |
| Functions | |
| Triggers | |
| Packages |
Esse artigo reúne conhecimentos relacionados a manutenção da estrutura do Totali Commerce.
Visão Geral
As modificações de estrutura (criação de tabela, coluna, FK, etc.) são feitas através de passos de migração. O passo é um arquivo que contém comandos que modificam a estrutura de dados do cliente. São comandos sequenciais, escritos na linguagem macro, de maneira que após serem compilados, possam ser executados em Oracle e PostgreSQL.

Arquivos na pasta upgrade

Conteúdo de 3 passos

Resultado da compilação dos 3 passos em Oracle

Resultado da compilação dos 3 passos em PostgreSQL
Ao integrar as tarefas os arquivos serão compilados pelo Compilador do Totali Commerce e transformados no arquivo UPGRADE interpretado pelo Totali Wizard na migração do banco.
Além da criação dos passos, a alteração da estrutura pode contemplar mudanças na carga para o Checkout, alterações de metadados, modificação de views, de funções e criação de triggers.
Tutoriais
Passo para Criar Coluna em Tabela
Para criar uma coluna em uma tabela de dados do Commerce [TT_] é necessário seguir as seguintes etapas.
1. Criar passo de migração contendo os seguintes comandos:
a) Adicionar coluna na tabela utilizando a macro ADDCOLUMN.
Se for o caso, pode definir um valor padrão.
Criando a coluna passando DEFAULT na macro ADDCOLUMN faz com que todos os registros da tabela recebam aquele valor.
b) Se houver necessidade pode ser criada uma constraint para definir alguma regra da nova coluna.
O padrão de nomenclatura é "CK_<sufixo da tabela>_<coluna>".
c) Se a coluna for NOT NULL deverá ser criada constraint de NOT NULL.
O padrão de nomenclatura é "NN_<sufixo da tabela>_<coluna>".
2. Documentar coluna no metadados.
Veja mais detalhes em Guia para Atualização de Metadados do Totali Commerce.
3. Se for necessário, exportar coluna para Checkout na carga.
Veja mais detalhes em Guia para Exportação para Checkout do Totali Commerce.
4. Se for necessário, registrar alterações na coluna em log.
O padrão é que os registro dos logs seja feito na trigger AFTER da tabela que possui a coluna em questão.
Utilizar o padrão de programação das demais colunas da trigger.
5. Tratar as views solicitadas na tarefa.
Passo para Criar Coluna em Tabela de Configuração
Para criar uma coluna de configuração [TT_CFG] é necessário seguir as seguintes etapas.
1. Criar passo de migração contendo os seguintes comandos:
a) Adicionar coluna na tabela utilizando a macro ADDCOLUMN.
Se for o caso, pode definir um valor padrão.
b) Se houver necessidade pode ser criada uma constraint para definir alguma regra da nova coluna.
c) Se a coluna for NOT NULL deverá ser criada constraint de NOT NULL.
d) Criar coluna na tabela temporária [TW_CFG].
Criar valor default, mas não criar as constraints.
2. Atualizar a função UPDATCFG colocando a nova coluna.
3. Documentar coluna no metadados.
Veja mais detalhes em Guia para Atualização de Metadados do Totali Commerce.
4. Se for o caso, exportar coluna para Checkout na carga da forma mais apropriada.
Veja mais detalhes em Guia para Exportação para Checkout do Totali Commerce.
*Nota: Para essa tabela as triggers de log são geradas automaticamente pelo totali2000geratrigger a cada compilação.
*Mas para isso é necessário que a base COMPI esteja atualiza com essa coluna.
Passo para Criar Coluna em Tabela de Domínio
Para criar uma coluna em uma tabela de domínio do Commerce [TD_] é necessário seguir as seguintes etapas.
1. Criar passo de migração contendo os seguintes comandos:
a) Adicionar coluna na tabela utilizando a macro ADDCOLUMN.
Se for o caso, pode definir um valor padrão.
Criando a coluna passando DEFAULT na macro ADDCOLUMN faz com que todos os registros da tabela recebam aquele valor.
b) Se houver necessidade pode ser criada uma constraint para definir alguma regra da nova coluna.
c) Se a coluna for NOT NULL deverá ser criada constraint de NOT NULL.
d) Criar coluna na TW_TAB.
Usar a mesma precisão e mesmo default, mas não tratar dados já existentes e nem criar constraints (not null ou qualquer outra regra).
2. Incluir coluna na TV_TAB_??? (onde ??? deve ser a que possui a TD que está sendo incluída a coluna).
3. Alterar a função CargaConfig() adcionando a nova coluna.
4. Documentar coluna no metadados.
Veja mais detalhes em Guia para Atualização de Metadados do Totali Commerce.
5. Se for o caso, exportar coluna para Checkout na carga da forma mais apropriada.
Veja mais detalhes em Guia para Exportação para Checkout do Totali Commerce.
*Nota: Para essa tabela as triggers de log são geradas automaticamente pelo totali2000geratrigger a cada compilação.
*Mas para isso é necessário que a base COMPI esteja atualiza com essa coluna.
Passo para Criar Coluna em Tabela de Filiais
Para criar uma coluna em uma tabela de filiais do Commerce [TD_FIL] é necessário seguir as seguintes etapas.
1. Criar passo de migração contendo os seguintes comandos:
a) Adicionar coluna na tabela utilizando a macro ADDCOLUMN.
Se for o caso, pode definir um valor padrão.
Criando a coluna passando DEFAULT na macro ADDCOLUMN faz com que todos os registros da tabela recebam aquele valor.
b) Se houver necessidade pode ser criada uma constraint para definir alguma regra da nova coluna.
c) Se a coluna for NOT NULL deverá ser criada constraint de NOT NULL.
2. Documentar coluna no metadados.
Veja mais detalhes em Guia para Atualização de Metadados do Totali Commerce.
3. Exportar coluna para Checkout na carga completa da "FIL".
Veja mais detalhes em Guia para Exportação para Checkout do Totali Commerce.
*Nota: Para essa tabela as triggers de log são geradas automaticamente pelo totali2000geratrigger a cada compilação.
*Mas para isso é necessário que a base COMPI esteja atualiza com essa coluna.
Passo para Criar Nova FK
Criar criar uma nova foreign key [FK] no sistema é necessário:
1. Criar passo de migração contendo os seguintes comandos:
a) Criar na tabela de origem a constraint.
O nome da FK deve ser composto de "FK_" + "Abrev. tabela origem" + "Abrev. tabela destino".
/*-- SEQ 0001 --*/ -- Tarefa 80000 -- ALTER TABLE TT_IVE ADD CONSTRAINT FK_IVE_VEN FOREIGN KEY (CODFIL,SEQUEN) REFERENCES TT_VEN (CODFIL, SEQUEN);
b) Criar índice para a FK:
/*-- SEQ 0001 --*/ -- Tarefa 80000 -- CREATE INDEX I_FK_IVE_VEN ON TT_IVE (CODFIL, SEQUEN) TABLESPACE TOTALI_INDEX;
2. Documentar relacionamento ou lista variável no metadados.
Veja mais detalhes em Guia para Atualização de Metadados do Totali Commerce.
Passo para Criar Tabela (com filial)
Para criar uma tabela de dados do Commerce [TT_] é necessário seguir as seguintes etapas. Esse padrão é para tabelas que tenham a Primary Key composta por CODFIL e SEQUEN.
1. Criar passo de migração contendo os seguintes comandos:
a) Criação da tabela.
Não se esquecer de informar TABLESPACE.
b) Criação da chave primária (PK).
c) Opcionalmente, esse passo poderá ter:
- chave estrangeira (FK).
- índice de chave estrangeira (I_FK).
É obrigatório que toda FK tenha índice de FK.
Não se esquecer de informar TABLESPACE.
- outros índices de localização (I_LC).
Não se esquecer de informar TABLESPACE.
- outras constraints (CK).
- definição de NOT NULL.
- definição de DEFAULT.
- sequenciador de banco.
O padrão de nomenclatura é "SQ<sufixo da tabela>".
2. Se a tabela tiver um sequenciador, incluí-lo na função de banco ProximoCodigo().
3. Se a tabela tiver coluna SEQUEN, DATINC ou ATU_EM, criar trigger BEFORE para alimentá-los.
- SEQUEN recebe resultado de ProximoCodigo() na inclusão.
- DATINC recebe resultado da função Agora() na inclusão.
- ATU_EM recebe resultado da função Agora() na inclusão e alteração.
Utilize o modelo de trigger definido em Guia para Manutenção de Triggers do Totali Commerce, item Modelo de trigger para tabela de dados do Commerce [TT_] com filial.
4. Se a tabela não permitir exclusão, colocar essa regra na trigger BEFORE.
5. Gerar grants para tabela.
6. Documentar tabela no metadados.
Veja mais detalhes em Guia para Atualização de Metadados do Totali Commerce.
Passo para Criar Tabela (sem filial)
Para criar uma tabela de dados do Commerce [TT_] é necessário seguir as seguintes etapas. Esse padrão é para tabelas que tenham a Primary Key simples com ID_TAB.
1. Criar passo de migração contendo os seguintes comandos:
a) Criação da tabela.
Não se esquecer de informar TABLESPACE.
b) Criação da chave primária (PK).
c) Opcionalmente, esse passo poderá ter:
- chave estrangeira (FK).
- índice de chave estrangeira (I_FK).
É obrigatório que toda FK tenha índice de FK.
Não se esquecer de informar TABLESPACE.
- outros índices de localização (I_LC).
Não se esquecer de informar TABLESPACE.
- outras constraints (CK).
- definição de NOT NULL.
- definição de DEFAULT.
- sequenciador de banco.
O padrão de nomenclatura é "SQ<sufixo da tabela>".
2. Criar trigger BEFORE para alimentar ID_TAB, e caso tenha, DATINC ou ATU_EM.
- ID_TAB recebe resultado diretamente do sequenciador na inclusão. Não utilizaremos ProximoCodigo() porque seria muito perigoso em relação à formatação do retorno.
- DATINC recebe resultado da função Agora() na inclusão.
- ATU_EM recebe resultado da função Agora() na inclusão e alteração.
Utilize o modelo de trigger definido em Guia para Manutenção de Triggers do Totali Commerce, item Modelo de trigger para tabela de dados do Commerce [TT_] sem filial.
3. Se a tabela não permitir exclusão, colocar essa regra na trigger BEFORE.
4. Gerar grants para tabela.
5. Documentar tabela no metadados.
Veja mais detalhes em Guia para Atualização de Metadados do Totali Commerce.
Passo para Criar Tabela de Domínio
Para criar uma tabela de domínio do Commerce [TD_] é necessário seguir as seguintes etapas.
1. Criar passo de migração contendo os seguintes comandos:
a) Criação da tabela.
Não se esquecer de informar TABLESPACE.
O Config requer que as colunas que indicam a descrição e se o registro está ativo tenham nomes específicos.
É utilizado DES<abreviatura da tabela> e <abreviatura da tabela>ATI, respectivamente.
Ex.: a tabela TD_CAM terá as colunas DESCAM e CAMATI.
b) Criação da chave primária (PK).
c) Opcionalmente, esse passo poderá ter:
- chave estrangeira (FK).
- índice de chave estrangeira (I_FK).
É obrigatório que toda FK tenha índice de FK.
Não se esquecer de informar TABLESPACE.
- outros índices de localização (I_LC).
Não se esquecer de informar TABLESPACE.
- outras constraints (CK).
- definição de NOT NULL.
- definição de DEFAULT.
d) Criar colunas na TW_TAB.
2. Relacionar nova TD na TV_TAB_003 expondo as colunas.
3. Alterar a função CargaConfig() adicionando as novas colunas.
4. Criar trigger para impedir exclusão e modificação do registro CODTAB=0.
Trigger deve atualizar TD_IND também.
Utilize o modelo de trigger definido em Modelo de trigger de TD.
5. Gerar grant de SELECT para TOTALI_BASICO e de INSERT, UPDATE e DELETE para TOTALI_USUARIO_CONFIG.
6. Documentar tabela no metadados.
Veja mais detalhes em Guia para Atualização de Metadados do Totali Commerce.
7. Opcionalmente, pode ser necessário exportar para o Checkout.
Mais informações em Como exportar tabela para Checkout.
Passo para Criar Tabela de Log
Para criar uma tabela de log do Commerce [TL_] é necessário seguir as seguintes etapas.
1. Criar passo de migração contendo os seguintes comandos:
a) Criação da tabela.
Não se esquecer de informar TABLESPACE.
b) Criação da chave primária (PK).
c) Opcionalmente, esse passo poderá ter:
- chave estrangeira (FK).
- índice de chave estrangeira (I_FK).
É obrigatório que toda FK tenha índice de FK.
Não se esquecer de informar TABLESPACE.
- outros índices de localização (I_LC).
Não se esquecer de informar TABLESPACE.
- outras constraints (CK).
- definição de NOT NULL.
- definição de DEFAULT.
- sequenciador de banco.
O padrão de nomenclatura é "SQ<sufixo da tabela>".
2. Se a tabela tiver um sequenciador, incluí-lo na função de banco ProximoCodigo().
3. Tratar colunas CODTAB e DATOPE na trigger BEFORE para alimentá-los.
- SEQUEN recebe resultado de ProximoCodigo() na inclusão.
- DATOPE recebe resultado da função Agora() na inclusão.
4. Impedir alteração e exclusão na trigger BEFORE.
5. Gerar grants para tabela.
6. Documentar tabela no metadados.
Veja mais detalhes em Guia para Atualização de Metadados do Totali Commerce.
7. Criar trigger na tabela que se quer registrar alterações incluindo os registros de log.
Veja mais detalhes em Guia para Manutenção de Triggers do Totali Commerce.
Passo para Criar Tabela de Importação
Para criar uma tabela de dados do Commerce [TI_] é necessário seguir as seguintes etapas.
1. Criar passo de migração contendo os seguintes comandos:
a) Criação da tabela.
Não se esquecer de informar TABLESPACE.
b) Criação da chave primária (PK).
- ID_<sufixo da tabela>
c) Criação de restrições para regras de importação
- definição de NOT NULL para colunas:
- DATINC, ATU_EM, DATCRI e STATUS.
- constraints (CK) para não permitir que seja informado a data de importação com status a ser processado:
- "ALTER TABLE TI_*** ADD CONSTRAINT CK_I***_DATIMP CHECK (((DATIMP IS NOT NULL) AND (STATUS <> 0)) OR ((DATIMP IS NULL) AND (STATUS = 0)));"
- Index de localização (I_LC):
- "CREATE INDEX I_LC_I***_STATUS ON TI_*** (STATUS, DATCRI) TABLESPACE TOTALI_INDEX;"
d) Opcionalmente, esse passo poderá ter:
- outros índices de localização (I_LC).
Não se esquecer de informar TABLESPACE.
- outras constraints (CK).
- definição de NOT NULL.
- definição de DEFAULT.
- sequenciador de banco.
O padrão de nomenclatura é "SQ<sufixo da tabela>".
2. Criar trigger BEFORE para alimentar ID_<sufixo da tabela>. ID_<sufixo da tabela> recebe resultado diretamente do sequenciador na inclusão. Não utilizaremos ProximoCodigo() porque seria muito perigoso em relação à formatação do retorno.
Utilize o modelo de trigger definido em Guia para Manutenção de Triggers do Totali Commerce, item Modelo de trigger para tabela de importação do Commerce [TI_].
3. Criar trigger BEFORE para alimentar DATINC, ATU_EM, DATCRI e STATUS.
- STATUS recebe zero.
- DATINC e DATCRI recebe resultado da função Agora() na inclusão.
- ATU_EM recebe resultado da função Agora() na inclusão/alteração.
Utilize o modelo de trigger definido em Guia para Manutenção de Triggers do Totali Commerce, item Modelo de trigger para tabela de importação do Commerce [TI_].
4. Gerar grants para tabela.
5. Documentar tabela no metadados.
Veja mais detalhes em Guia para Atualização de Metadados do Totali Commerce.
6. Documentar tabela no Layout de Importação para o Totali Commerce.
Modelos
Passo com principais comandos:
SVN://totalicommerce/modelos/upgrade/PASSO001.MAC
Passo para criar conta financeira:
SVN://totalicommerce/modelos/upgrade/PASSO_CriaContaFinanceira.MAC
Passo para criar coluna:
SVN://totalicommerce/modelos/upgrade/PASSO_CriarColuna.MAC
Passo para criar coluna em tabela de configuração:
SVN://totalicommerce/modelos/upgrade/PASSO_CriarColunaCFG.MAC
Passo para criar coluna em tabela de filiais:
SVN://totalicommerce/modelos/upgrade/PASSO_CriarColunaFIL.MAC
Passo para criar coluna em tabela de domínio:
SVN://totalicommerce/modelos/upgrade/PASSO_CriarColunaTD.MAC
Passo para criar criar tabela:
SVN://totalicommerce/modelos/upgrade/PASSO_CriarTabela.MAC
Passo para criar criar tabela de domínio:
SVN://totalicommerce/modelos/upgrade/PASSO_CriarTabelaTD.MAC
Passo para criar criar tabela de log:
SVN://totalicommerce/modelos/upgrade/PASSO_CriarTabelaTL.MAC
Passo para eliminar coluna de configuração:
SVN://totalicommerce/modelos/upgrade/PASSO_EliminarColunaCFG.MAC
Passo com atualização de sequenciador:
SVN://totalicommerce/modelos/upgrade/PASSO_AtualizarSequenciador.mac
Passo para inserir Parâmetro de Configuração de Sistema:
SVN://totalicommerce/modelos/upgrade/PASSO_InserirParametro.mac
Padrões
Seguir os padrões gerais definidos em Padrões Gerais para Programação de Banco do Totali Commerce e os específicos definidos neste artigo.
Passos de Migração
Criar arquivo na pasta upgrade
Arquivo deve se chamar PASSO<número>.mac.
Número inicia em 1 e tem 3 dígitos. Deve respeitar a sequência numérica sem pulos.
A extensão ".mac" deve ser em minúsculo para que duas pessoas não devolvam passos com o mesmo número.
Cabeçalho
Incluir todos os comandos necessários no passo. Cada comando deve ter o cabeçalho abaixo, sendo que o sequenciador deve ser sempre 0001 porque o compilador é que definirá a numeração posteriormente.
/*-- SEQ 0001 --*/ -- Tarefa 00000 --
Ignore Erro
Caso seja previsto que o comando vá gerar erro na sua execução, pode-se acrescentar no cabeçalho a expressão ignore erro, conforme o exemplo abaixo. Sendo que deve ser usado só em casos específicos, já que precisamos ter certeza de que os comandos rodem sem erros nos clientes.
/*-- SEQ 0001 --*/ /*-- IGNORE ERRO --*/ -- Tarefa 00000 --
Desabilitar Triggers ao Alterar Dados
É uma regra muito importante que antes de qualquer comando feito no passo que altere dados em uma tabela seja feito um comando para desabilitar triggers.
Replicar Passo em Versões Seguintes
Caso o passo seja desenvolvido em uma versão anterior a beta, esse deve ser replicado para todas as versões prevendo a situação de poder executar mais de uma vez.
Nunca Alterar Sequência dos Comandos
Caso seja necessário fazer um ajuste em um passo já desenvolvido, jamais modifique a sequência dos comandos. Crie um novo passo. Se for necessário retirar um comando errado, substitua cada comando por:
/*-- SEQ 0001 --*/ /*-- IGNORE ERRO --*/ -- Tarefa 00000 -- SELECT * FROM NADA;
DICAAtenção para comandos das macros. Se a macro em determinado banco gerar mais de um comando, deve-se tratar para manter o mesmo número de comandos.
Colunas de Banco
Nome da Coluna
O padrão é que seja 6 caracteres e normalmente usamos 3 letras por palavras.
Dar preferência a nomes mais legíveis.
Ex.: para uma configuração de seguro de vida para pessoa física, é melhor SEGVID do que SEVIPF.
Para a tabela de configurações [TT_CFG], normalmente utilizamos nomes mais claros para que se entenda mais facilmente o que representa a configuração.
Mas deve-se evitar nomes maiores do que 10 posições, porque a carga para o Checkout corta os nomes.
Seguem abaixo algumas regras de nomenclatura úteis para criação de colunas.
Essas regras permitem que se escreva mais com menos letras.
Prefixos
Nomes que devem ser utilizados no início da coluna para designar uma função especial para ela.
| Prefixo | Significado | Tipo Padrão |
| Configuração de Checkout. Padrão foi descontinuiado. | ||
| PER | Percentual | NUMBER(5,2) |
| BAS | Base de Cálculo | NUMBER(12,2) |
| VLR | Valor decimal | NUMBER(12,2) |
| NUM | Numérico inteiro | NUMBER(5) |
| FLG | Para controlar situações diversas (ver exemplo do FLGEST). | CHAR(1) |
| Padrão foi descontinuado. | ||
| Padrão foi descontinuado. | ||
| USA | Indica se usa ou não a configuração. "T" - Usa / "F" - Não usa" | VARCHAR2(1) |
| Padrão foi descontinuado. |
Sufixos
Nomes que devem ser utilizados no final da coluna para designar uma função especial para ela.
| Sufixo | Significado | Tipo Padrão |
| ATI | Campo indica se registro está ativado ou desativado | VARCHAR2(1) |
Nomes
Nomes de coluna para designar uma função especial para ela.
| Nome | Significado | Tipo padrão |
| SIGNAT | "Coluna que controla edição do registro na sessão do usuário Se for >= 0 o registro está ativado, senão está desativado." | NUMBER(5) |
| FLGEST | "Usado com domínios para indicar a situação do registro. Tipicamente: | CHAR(1) |
| CODEXT | "Código da chave única que representa o registro em um sistema de fora do Totali Commerce. | VARCHAR(20) |
| ATU_EM | "Data da última modificação do registro. Deve ser alimentada por trigger em qualquer circunstância. Possui data e hora." | DATE |
| DATINC | Data da inclusão do registro. Possui data e hora. | DATE |
| DATOPE | Data que se realizou a operação. Data que pode possuir ou não hora. | DATE |
Tipo/Precisão
Os tipos mais usados são:
| Oracle | PostgreSQL | Finalidade |
| NUMBER | NUMERIC | Inteiros e reais |
| VARCHAR2 | VARCHAR | Texto de tamanho variável com até 4000 e boolean com "T"/"F". |
| CHAR | CHAR | Texto com tamanho fixo utilizado em flags e chaves |
| LONG | TEXT | Textos infinitos |
| DATE | DATE | Data e hora |
Boolean
Para verdadeiro/falso a coluna precisa ser VARCHAR(1) NOT NULL com DEFAULT.
Numéricos
Uma coluna definida com NUMBER(5,2) recebe valores de -999,99 até 999,99.
Textos extensos
O Oracle só aceita uma coluna LONG por tabela.
E não é possível utilizar essa coluna em condição de WHERE.
Date
Para data sem hora, utilizar um TRUNC na constraint:
data = TRUNC(data)
Default
O default é atribuído somente se a instrução de INSERT ou UPDATE omitir a coluna.
Not null
Se a tabela tiver muitos registros, uma coluna NOT NULL pode deixá-la muito grande.
Se a coluna for utilizada em cálculos e não for NOT NULL, será necessário utilizar COALESCE em todos os lugares, porque no PostgreSQL valor com nulo dá nulo.
Valor + nulo = nulo
Constraints
Evitar regras muito complexas porque são muito difíceis para entendê-las depois. É mais aconselhável colocar regras complexas em triggers.
O PostgreSQL remove os parênteses das constraints, fazendo com que seja necessário entender a ordem de precedência dos operadores, que é primeiro AND e depois OR.
O PostgreSQL converte os comandos LIKE e ILIKE para uma sintaxe própria nas CKs. Veja a tabela abaixo.
| Operador | Sintaxe no PostgreSQL |
|---|---|
| LIKE | ~~ |
| ILIKE | ~~* |
| NOT LIKE | !~~ |
| NOT ILIKE | !~~* |
Uso das Colunas
É importante verificar como se dará a utilização das novas colunas.
Muitas telas, relatórios e integrações, ao invés de utilizar diretamente a tabela, utilizamos views.
Nesse caso, ao gerar uma tarefa para criar uma coluna em tabela, é necessário também
solicitar que se crie a coluna nas views.
Ao alterar uma das tabelas abaixo é obrigatório criar a coluna nas respectivas views.
Mas é interessante considerar colocar as colunas em outras views também.
| Tabela | Views |
| TT_COM | TV_CMP |
| TT_COM | TV_COM |
| TT_DOP | TV_DOP |
| TT_DOP | TV_DPG |
| TT_PAG | TV_PGT |
| TT_GRA | TV_IPR,TV_IPR_FAST |
| TT_PRO | TV_IPR,TV_IPR_FAST |
| TT_VEN | TV_VEN |
Views que temos que atualizar ao criar uma coluna
Índices de Foreign Key
O padrão é para toda FK é necessário um índice de FK.
Caso uma FK não tenha índice o sistema pode ficar lento e em Oracle pode ocorrer erros de Lock.
Tabelas de Banco
Tipos
| Tipo | Definição |
|---|---|
| TT_ | Tabela padrão de dados |
| TD_ | Tabela de domínios (opções personalizadas) |
| TL_ | Tabela de logs de alteração |
| TR_ | Tabela de dados resumidos |
| DW_ | Tabela com dados sumarizados para data warehouse (views materializadas) |
| TW_ | Tabela de dados temporários |
| TM_ | Tabela de dados transitórios (esperando para serem processados) |
| TI_ | Tabela de dados para importação |
| TE_ | Tabela de dados para exportação (pouco utilizada, normalmente se cria views TV_E) |
| TP_ | Tabela personalizada (colunas definidas no sistema pelo usuário) |
| GX_ | Tabela de configurações para aplicações Web |
Chave primária
Existem 4 principais tipos de chave primária no Commerce.
- Chave composta com CODFIL SEQUEN.
- Chave ID com nome ID_ + "apelido da tabela".
- Chave simples para tabelas de domínio CODTAB.
- Chave composta para tabelas com filhos.
Chave composta com CODFIL SEQUEN: é utilizada para a maioria das tabelas TT_.
Ela é recomendada quando é possível utilizar sequenciador de banco para controlar a chave primária.
O tipo dela é CHAR(10) com os dados alinhados a direita e com espaços a esquerda.
Chave ID com nome ID_ + "apelido da tabela". Deve ser usada em tabelas que não devam ser controladas por filial, tendo um sequenciador único para toda a empresa independente de se usar banco distribuído. Utilizar o tipo NUMERIC(14).
Chave simples para tabelas de domínio CODTAB: é utilizada para quase todas as TDs.
Tipo dela é NUMBER(5).
Sequenciador é controlado pelo próprio Config.
Chave composta para tabelas com filhos: é utilizada quando é necessário inserir registros com o mesmo sequenciador em uma tabela filha.
O tamanho pode variar, mas normalmente se utiliza numérico a direita com espaços a esquerda.
Ex.: TT_CLI com a TT_END, TT_ORC com a TT_IOR, TT_COM com a TT_ICO.
Utilizar sufixo do nome da tabela definir as colunas. Ex.: Na TT_CLI a chave é FILCLI e CODCLI.
Estrutura básica de tabela de domínio (TDs)
Para que a tabela possa ser utilizada corretamente no Config, é necessário que ela tenha as colunas:
CODTAB NUMBER(5) NOT NULL PK DES??? NOT NULL VARCHAR(100) ???ATI VARCHAR(1) NOT NULL DEFAULT 'T' - Ativo? (Boolean Yes/No)
Por haver necessidade de incluir a coluna na TW_TAB, com exceção de CODTAB, as colunas de uma TD não podem se repetir com as colunas das outras TDs.
ROLEs
No sistema existem vários papéis (ROLEs) de usuários de banco.
Esses papéis definem permissões de SELECT, INSERT, UPDATE e DELETE para todas as tabelas e views do sistema.
O papel que todo usuário do sistema possui é o TOTALI_BASICO.
Então, se a tabela não requer um cuidado de segurança é possível conceder as permissões para quem tiver esse papel.
Isso é feito utilizando-se da macro GRANTROLE no arquivo de GRANTS.
T:\totalicommerce\beta\ansi\instalacao\grants.mac
/*-- SEQ 0001 --*/ /*--IGNORE ERRO--*/ %%<GRANTROLE('SELECT,INSERT,UPDATE,DELETE','TD_ENT','TOTALI_BASICO')>%%
Documentação no Metadados
Por padrão todas as tabelas TTs, TDs e TRs e suas respectivas colunas são documentadas no metadados.
As TTs e TRs são globais e as TDs não.
Definir regra diferente disso se houver necessidade.
Não é comum uma tabela deixar de ser documentada, mas é comum que determinada coluna de controle não deva aparecer para o usuário final no relatório.
Para isso, indicar que a coluna não deva aparecer, omitindo seu nome no metadados.
Veja mais detalhes em como documentar no metadados.
Melhores Práticas
Incluir Objetos Dependentes no Passo
Os passos são executados antes da aplicação das funções e views. Por tanto, se um passo depende de um desses objetos pode ser necessário incluir sua criação no passo.