Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Observação
Os grupos de interesse da comunidade passaram do Yammer para o Microsoft Viva Engage. Para participar de uma comunidade Viva Engage e participar das últimas discussões, preencha o formulário Solicitar acesso ao Finance and Operations Viva Engage Community e escolha a comunidade à qual deseja participar.
Este artigo descreve a biblioteca de classes no X++.
Existem dois tipos de classes: classes de aplicativo e classes de sistema.
- Classes de aplicativo – Essas classes são implementadas em X++. Eles estão disponíveis no nó Classes de código > no Application Explorer.
- Classes de sistema – Estas classes são por vezes conhecidas como classes kernel. Eles estão listados no nó Classes de documentação > do sistema no Application Explorer. O código-fonte para essas classes não está disponível. Para obter uma lista das classes do sistema, consulte API, classe e referência de tabela.
Estrutura típica de uma classe de aplicativo
Os seguintes tipos de bloco de código são padrão para classes de aplicativo:
- declarações de classe e variável: A declaração de classe contém modificadores, como public, private e extends.
- declarações de variáveis: Estes são os membros de campo para objetos que são construídos a partir da classe. Quando você digita a palavra-chave this em uma variável de instância de classe, o IntelliSense pode mostrar uma lista dos membros.
- novo método: Este método cria uma instância da classe. O construtor pode ser chamado somente usando a nova palavra-chave. As classes derivadas podem chamar o novo método de seu construtor chamando a referência de supermétodo . Para obter mais informações, consulte Herança X++.
- método finalize : Este método finaliza uma instância da classe. Este método é o método destruidor. No entanto, é um destruidor apenas por convenção. O sistema não chama automaticamente o método finalize durante a coleta de lixo.
Os métodos adicionais para uma classe têm os seguintes tipos:
- Métodos de instância
- Métodos estáticos
- Principais métodos
Os métodos podem ser criados em muitos tipos de itens. Eis alguns exemplos:
- Aulas
- Maps
- Views
- Conjuntos de dados
- Forms
- Queries
Substituindo classes de aplicativo por classes de sistema
Você deve usar as classes de aplicativo substituto em vez das classes de sistema que elas estendem.
No Application Explorer, em Classes de Documentação > do Sistema, várias classes do kernel ou do sistema têm nomes que começam com um x minúsculo. Essas classes são conhecidas como classes x-system. Exemplos dessas classes de sistema são xApplication e xVersionControl. Algumas dessas classes são estendidas por classes de aplicativo. Por exemplo, a classe Application estende a classe de sistema xApplication .
As classes que derivam de classes x-system são conhecidas como classes de aplicativo substituto. No Application Explorer, no nó Classes , o ícone ao lado das classes de aplicativo substitutas difere do ícone padrão.
Classes X-System
Algumas das classes de aplicativo substituto estão associadas a uma variável global especial que representa uma instância da classe. Por exemplo, a variável appl faz referência a um objeto pré-instanciado da classe Application . A vantagem da variável appl é que o sistema mantém o objeto durante todo o escopo da sua sessão. Seu código seria menos eficiente se ele repetidamente usou a nova sintaxe Application() para obter uma instância da classe Application . Você não deve usar a classe de sistema xApplication . Em vez disso, use a classe Application substitute application.
Você pode fazer referência aos membros estáticos da classe Application usando a seguinte sintaxe padrão: Application::checkForNewBatchJobs(). No entanto, para fazer referência aos membros da instância da classe Application , você deve usar a variável appl dessa classe, se ela existir. Esse padrão se aplica à maioria das classes x-system. A classe de aplicativo substituto Session é uma exceção, porque não há nenhuma variável global especial para Session.
A tabela a seguir lista as classes x-system que têm uma classe de aplicativo substituto correspondente. As variáveis globais especiais também são mostradas para as classes que têm uma.
| Classe de aplicação | Classe X-System | Variável global |
|---|---|---|
| Argumentos | xArgs | Não aplicável |
| Aplicação | xAplicação | Appl |
| ClassFactory | xClassFactory | classFactory |
| Empresa | xEmpresa | appl.empresa |
| Global | xGlobal | Não aplicável |
| Informações | xInformação | Registo de informações |
| MenuFunction | xMenuFunction | Não aplicável |
| Session | xSessão | Não aplicável |
| Controle de versão | xVersionControl | controle de versão |
Exemplo de classes x-system
O exemplo a seguir mostra a sintaxe para usar várias variáveis especiais que fazem referência a instâncias das classes de aplicativo substituto.
TreeNode treeNode;
Args args;
FormRun formRun;
// appl variable
info(appl.buildNo());
// company variable
appl.company().reloadRights();
// infolog variable
treeNode = infolog.findNode("\\forms\\custTable");
info(treeNode.AOTgetProperty("Name"));
// Output is "CustTable".
// classFactory variable
args = new Args(formstr(Batch));
formRun = classFactory.formRunClass(args);
formRun.init();
formRun.run();
formRun.detach();
info("Method is ending. This is a message in the Infolog.");
// Output is "Method is ending. This is a message in the Infolog."
Classes de processamento em lote
Você implementa classes usando o sistema de processamento em lote e estendendo as classes RunBase e RunBaseBatch . Para remover o botão Recorrência da caixa de diálogo Processamento em lote , use o método Args::p armEnum . Recomendamos que você designe uma classe para ser executada como um método em lote vinculado ao servidor. Os métodos em lote vinculados ao servidor são mais seguros do que os métodos em lote que não são vinculados ao servidor pelos seguintes motivos:
- O método é executado usando as permissões do usuário que enviou o método.
- O método pode usar apenas métodos específicos de classe Info e Global para interagir com o cliente que está processando-o. Esta restrição limita a interação com o cliente.
Habilitar uma classe para ser executada como um método em lote vinculado ao servidor
Crie uma classe que estende a classe RunBaseBatch .
Substitua o método RunBaseBatch.runsImpersonated para retornar um valor true, conforme mostrado no exemplo a seguir.
public boolean runsImpersonated() { return true; }Confirme se a classe chama apenas os seguintes métodos de classe Info e Global :
- add
- Informações.cópia
- Info.cut
- Info.importar
- Info.exportar
- Info.line
- Info.num
- Global::erro
- Global::info
- Global::aviso
Os métodos Info.line e Info.num são herdados da classe xInfo .
Removendo o botão Recorrência da caixa de diálogo de processamento em lote
Ao implementar uma classe usando o sistema de processamento em lote, você pode remover o botão Recorrência chamando o método Args.parmEnum e passando o valor de enumeração do sistema NoYes::Yes . A enumeração do sistema NoYes determina se o botão Recorrência é removido da caixa de diálogo. O valor padrão é NoYes::No.
No exemplo a seguir, a classe InventTransferMultiShip é implementada. O método BatchDialog::main cria a caixa de diálogo Processamento em lote .
static void noRecurrenceButton(Args _args)
{
Args a;
InventTransferMultiShip inventTransferMultiShip;
a = new Args();
inventTransferMultiShip = InventTransferMultiShip::construct();
a.caller(inventTransferMultiShip);
a.parmEnum(NoYes::Yes);
BatchDialog::main(a);
}
Classes de manipulação de imagem
Duas classes de sistema permitem manipular gráficos e ícones: Image e Imagelist.
- Imagem – Esta classe permite carregar, salvar e manipular imagens individuais. Por exemplo, você pode capturar uma tela e salvá-la como uma imagem, cortar ou girar uma imagem ou manipular a profundidade de cor.
- Imagelist – Esta classe permite que você trabalhe com um conjunto de imagens que têm propriedades comuns, como o tamanho e a cor da transparência. Você pode exibir as listas de imagens que são usadas nas classes de aplicativo ImageListAppl .
Modelo de objeto de consulta
O modelo de objeto de consulta contém classes que são usadas para definir e executar uma consulta. Os objetos de consulta são usados para definir a fonte de dados de consulta, os campos retornados, intervalos de registros e relações com fontes de dados filhas. As classes de consulta são mais visíveis quando você cria uma consulta dinâmica no código, mas também são usadas nos bastidores quando você cria uma consulta estática no Application Explorer.
A tabela a seguir descreve as classes no modelo de objeto de consulta.
| Classe do sistema | Description |
|---|---|
| QueryRun | Essa classe executa a consulta e busca os dados. |
| Query | Essa classe possui algumas propriedades e tem uma ou mais fontes de dados relacionadas. É o nível superior da definição de consulta. |
| QueryBuildDataSource | Essa classe define o acesso a uma única fonte de dados na consulta. Se houver mais de uma fonte de dados no mesmo nível em uma consulta, instruções SQL separadas serão produzidas e executadas sequencialmente. Se uma fonte de dados for filha de outra fonte de dados, uma associação será criada entre as duas fontes de dados. |
| QueryBuildFieldList | Essa classe define os campos que são retornados do banco de dados. Por padrão, a lista de campos é dinâmica e todos os campos são retornados da tabela, do mapa ou da exibição da fonte de dados. Cada fonte de dados tem apenas um objeto QueryBuildFieldList . Este objeto contém informações sobre todos os campos selecionados. Você pode especificar funções agregadas, como SUM, COUNT e AVG, no objeto da lista de campos. |
| QueryBuildRange | Essa classe define um subconjunto de registros que é retornado, com base em um único campo. Um intervalo é traduzido em uma cláusula WHERE na instrução SQL de consulta. Se mais de um campo for usado para limitar a consulta (cláusula WHERE ), a fonte de dados conterá mais de um intervalo. |
| QueryBuildDynalink | Esta classe contém informações sobre uma relação (limitação) para um registro externo. Quando a consulta é executada, essas informações são convertidas em entradas adicionais na cláusula WHERE da instrução SQL da consulta. Essa classe pode existir somente na fonte de dados pai de uma consulta. Os formulários usam a função quando duas fontes de dados são sincronizadas. A fonte de dados filho conterá uma ou mais DLLs para a fonte de dados pai. A função é usada mesmo se as duas fontes de dados são colocadas em duas formas diferentes, mas ainda estão sincronizadas. |
| QueryBuildLink | Esta classe especifica a relação entre as duas fontes de dados na junção. Essa classe pode existir somente em uma fonte de dados filho. |
Você também pode usar a API SysDa para consultar dados.
Visão geral das classes do sistema
A origem das classes do sistema não está disponível. Uma classe de sistema pode ter as seguintes características:
- Métodos estáticos (ou métodos de classe)
- Métodos dinâmicos
- Propriedades – Essas propriedades são funções de membro que são usadas para definir propriedades. Um exemplo é LeftMargin.
Não é possível substituir métodos de classe do sistema. Não é nossa intenção que você use as classes do sistema para projetar seus objetos de aplicativo do zero. Em vez disso, use-os para estender ou modificar a funcionalidade padrão no Application Explorer. Por exemplo, você pode adicionar dinamicamente informações extras a um relatório existente. Como alternativa, você pode alterar as opções disponíveis em uma página, com base na seleção do usuário em uma página anterior.
Classes de obtenção
As classes de coleção permitem criar listas, conjuntos, estruturas, mapas e matrizes.
Classes de objeto de aplicativo
Essas classes de sistema contêm funções que são ativadas sempre que você usa o Application Explorer para criar seu aplicativo. Por exemplo, o sistema usa a classe FormDesign quando você define o layout do formulário no nó Designs no Application Explorer. Essas classes também permitem que você crie e modifique objetos de aplicativo.
Classes de integração
A integração com o ambiente é normalmente implementada por classes. Aqui estão alguns exemplos das classes nesta categoria:
- COM – A chamada de métodos em objetos COM.
- DLL – A chamada das funções DLL do Microsoft Windows.
- IO – Ler e escrever ficheiros externos.
- ODBCConnection – Uma interface Open Database Connectivity (ODBC) para um banco de dados estrangeiro.