Dia 4: Desenvolvendo com InterSystems Objects e SQL
- Todos os dados são armazenados em Globais e nomes Globais começam com ^. Exemplo de global: ^animal. A Global pode ter múltiplos locais de dados(“sub dado”). Exemplo: ^animal(1).
- ^%* globais são acessíveis de qualquer sistema (de qualquer namespace).
- Globais permite que o IRIS ofereça suporte a dados multimodelos (objeto, relacional, documento, multidimensional, etc.).
- Para ver Globais vá até Portal de Gerenciamento > Explorer > Globais > Selecione Globais > Exibir ou em Terminal digite ^%G ou zwrite ^global.
- Há uma correspondência automática entre classes persistentes e Tabelas SQL:
- Pacote é SQL Schema;
- Classe é uma Tabela;
- Propriedade é uma Coluna;
- Método é um procedure de armazenamento; (quando sqlProc);
- Relacionamento entre classes é uma Chave Estrangeira SQL constraint (deve ser bidirecional);
- Obejeto é uma linha.
- Uma tabela pode corresponder a várias classes, mas a classe serial faz parte da tabela da classe persistente (não tem uma tabela específica).
- Uma classe pode corresponder a várias tabelas.
- Temos alguns tipos de classes:
- Não registrada: não é um objeto de classes (container apenas para métodos);
- Registrada: objetos transitórios;
- Persistente: persistências SQL em tabelas;
- Serial: persistência SQL na tabela principal (serial é embutido);
- Tipos de dados: não objeto de classe é usado para fazer novas validações e conversões para tipos de dados de base.
- Classes podem ser compostas por:
- Propriedades;
- Métodos;
- Consulta de classes: SQL Selecione as declarações;
- Parâmetros: constante do usuário ou constante do sistema para configurar o comportamento da classe;
- Chaves estrangeiras: para integridade referencial;
- Índices: para melhorar o desempenho e faz valores únicos;
- Gatilhos: chamada de métodos associados a eventos de persistência;
- XData: XML ou JSON definições associadas à classe;
- Armazenamento: descrição do armazenamento de dados.
- Classes por convenção tem a primeira letra da palavra em maiúscula. Exemplo: CountryOrigin. Parâmetros são todos maiúsculo. Exemplo: COLORNUMBER.
- Atributos de classe qualificam/configuram uma classe. Exemplo: [SqlTableName = Animal] definir o nome da tabela para uma classe. [Final] não permitem herança. [Private] não permite chamar métodos ou usar propriedades para não subclasses.
- Internamente, o IRIS gera as propriedades Get e Set, e não são visíveis mas podem ser declaradas para alterar o comportamento.
- É possível sobrescrever um método da superclasses, para fazer isso, repita o nome da classe, os argumentos. É possível aumentar o número de argumentos, não diminuir.
- Use ##super() para chamar o método da classe base.
- Para criar uma classe abstrata use [Abstract] e evite a instanciação.
- É possível estender várias classes. Exemplo Class Person extends (%Persistent, %Animal). (Persistente deve ser o primeiro nas extensões, veja a dica do joel nos comentários)
- REST é transferência de estado representacional. É baseado no protocolo HTTP. Use verbos HTTP: GET (select), POST (insert), PUT (update) e DELETE (delete).
- Para expor sua classe como recurso REST estendido %CSP.REST.
- Use URLMap dentro do bloco XData para configurar as rotas do seu serviço REST. Usando o Portal, crie uma Aplicação Web, habilite REST e especifique a classe Dispatch.
- %JSONAdaptor fornece conversão entre objetos e JSON. Use obj.%JSONImport(jsonObj) para atribuir DynamicObject a um objeto. Use obj.%JSONExportToString(.jsonString) para gravar uma String JSON em um objeto.
- %JSON.Formatter formata uma String JSON para facilitar a leitura humana.