Baixe o app para aproveitar ainda mais
Prévia do material em texto
Framework .NET MXM Framework .NET MXM Página 1 FRAMEWORK .NET MXM Framework .NET MXM Framework .NET MXM Página 2 Histórico de Alterações Responsável Descrição Data Versão Samuel Macedo Criação do Documento 07/02/2011 1.0 Samuel Macedo Inclusão de alterações na framework da versão 2.0.2.0 16/12/2011 1.1 Samuel Macedo Inclusão de informação sobre configuração da tecla F1 para o HelpField 09/02/2012 1.2 Samuel Macedo Inclusão de tópico sobre métodos de extensão do Ext.Net.MXMControls. 27/02/2012 1.3 Samuel Macedo Inclusão de tópico sobre MXM.WebService 20/03/2012 1.4 Samuel Macedo Inclusão de informações sobre propriedade MXMDisabled nos controle MXMNumberField e MXMDateField 28/03/2012 1.5 Samuel Macedo Inclusão de informação sobre propriedade AutoTrim do FormBasic da web 22/06/2012 1.6 Framework .NET MXM Framework .NET MXM Página 3 Sumário 1. A Framework .................................................................................................................................. 5 1.1 Modelo de desenvolvimento (MVP) ........................................................................................... 5 1.2 MAPs ......................................................................................................................................... 5 1.2.1 MAPs comuns a todos os tipos de tela ............................................................................. 6 Utilizado para mapear um link para uma tela de consulta. ............................................................ 10 1.2.2 MAPs específicos de telas do tipo CRUD ....................................................................... 10 1.2.3 MAPs específicos de telas de consulta ........................................................................... 11 1.3 Classes básicas utilizadas pela framework ............................................................................. 12 1.3.1 Persistência (MXM.Persistence) ...................................................................................... 12 1.3.2 Classes de Ajuda ............................................................................................................. 15 1.3.3 ErrorList ........................................................................................................................... 18 1.3.4 Ambiente / AmbienteList .................................................................................................. 19 1.3.5 Classe JavascriptService ................................................................................................. 20 2. A camada de Apresentação (View) ............................................................................................. 21 1.4 Classes de apresentação para implementação de tipos de tela específicos .......................... 22 1.4.1 FormCRUD ...................................................................................................................... 22 1.4.2 FormProcess .................................................................................................................... 23 1.4.3 FormConsult .................................................................................................................... 24 1.5 Classes de apresentação base ............................................................................................... 25 1.5.1 FormBasic ........................................................................................................................ 25 1.5.2 FormErrorList ................................................................................................................... 28 1.5.3 FormMAPControl ............................................................................................................. 28 1.6 Controles / Componentes ........................................................................................................ 30 1.6.1 Web (Ext.Net.MXMControls) ........................................................................................... 30 1.6.2 Windows .......................................................................................................................... 33 1.6.3 Windows (MXM.Controls) ................................................................................................ 33 1.6.4 Web (Ext.Net.MxmControls) ............................................................................................ 35 3. A camada presenter .................................................................................................................... 35 1.6.5 MainPresenter .................................................................................................................. 35 1.6.6 MAPControlPresenter ...................................................................................................... 36 1.7 Presenters associados a tipos específicos de telas ................................................................ 36 1.7.1 Presenters CustomCRUDPresenter e CRUDPresenter .................................................. 36 1.7.2 Presenters CustomProcessPresenter e ProcessPresenterPersistence .......................... 38 1.7.3 Presenters CustomConsultPresenter e ConsultPresenter .............................................. 39 1.7.4 Interface IDBPresenterControl / Classe PersistControl ................................................... 39 4. A camada Model .......................................................................................................................... 41 1.8 Classes de Persistência .......................................................................................................... 41 1.8.1 Mapeando classes ........................................................................................................... 41 1.9 Classes de Validação .............................................................................................................. 50 1.9.1 Métodos de validação ...................................................................................................... 50 1.9.2 Método ProcessValidate .................................................................................................. 50 1.9.3 Classes de validação que utilizam Persist ...................................................................... 51 1.10 Classes de Consulta (MXMConsult) .................................................................................... 51 1.10.1 Constructors ..................................................................................................................... 51 1.10.2 Métodos ........................................................................................................................... 52 1.10.3 Exemplo de utilização da MainConsult diretamente para executar queries ................... 52 1.10.4 Exemplo de implementação e utilização classe de consulta herdando de MainConsult 53 1.11 Classes de Processo (MainProcess / ProcessErrorList) ..................................................... 53 5. Outras classes ............................................................................................................................. 54 1.12 MXM ..................................................................................................................................... 54 1.12.1 Funcionalidades ............................................................................................................... 54 1.13 MXM.Audit ........................................................................................................................... 58 1.14 MXM.Objects .......................................................................................................................59 1.15 MXM.Connection ................................................................................................................. 59 Framework .NET MXM Framework .NET MXM Página 4 1.15.1 Classe DBConnection ...................................................................................................... 59 1.16 MXM.Unmanaged ................................................................................................................ 60 1.17 MXM.WebSite ...................................................................................................................... 61 1.17.1 Login e página principal ................................................................................................... 61 1.17.2 Classe DashBoard ........................................................................................................... 61 1.17.3 JQuery ............................................................................................................................. 61 1.18 MXM.WebService ................................................................................................................ 62 6. Utilitários ...................................................................................................................................... 62 1.19 Registro de Ambientes ........................................................................................................ 62 1.19.1 Aba Ambientes ................................................................................................................. 62 1.19.2 Aba LDAP ........................................................................................................................ 64 7. Guia de Utilização e Exemplos .................................................................................................... 65 1.20 Configuração do ambiente de desenvolvimento ................................................................. 65 1.21 Criação de novos projetos ................................................................................................... 65 1.21.1 Criando um novo projeto desktop .................................................................................... 65 1.21.2 Criando um novo projeto Web ......................................................................................... 65 1.21.3 Criando classes de persistência ...................................................................................... 65 1.21.4 Criando classes de validação .......................................................................................... 76 1.21.5 Criando classes de ajuda ................................................................................................ 86 5.1 Implementação de telas ........................................................................................................... 90 5.1.1 Implementando uma tela de cadastro (CRUD) ............................................................... 90 2.1.1 Implementando uma tela de consulta ............................................................................ 105 2.1.2 Implementando uma tela de processo .......................................................................... 108 2.1.3 Implementando um presenter e utlizando-o em uma tela ............................................. 108 2.2 F.A.Q. ..................................................................................................................................... 108 Framework .NET MXM Framework .NET MXM Página 5 1. A Framework 1.1 Modelo de desenvolvimento (MVP) A framework .NET MXM utiliza o modelo de desenvolvimento MVP (Model, View, Presenter). Nesse modelo, o desenvolvimento é dividido em três camadas: View, que é a camada de apresentação e deve conter o código relacionado à interface com o usuário, Model que é o modelo de dados da aplicação e Presenter, que atua como uma camada intermediária entre o Model e o View. A framework MXM possui versões para Windows e web, de forma que existem classes base de apresentação separadas para cada plataforma. Existem, dessa forma, duas versões de cada uma dessas classes com as mesmas funcionalidades, porém estão contidas em assemblies distintos, um para Windows e um para web, implementando as particularidades de cada plataforma (os nomes dessas classes em geral são precedidos da palavra “Form”, p. ex., FormBasic, FormErrorList, etc). A camada Presenter contém as rotinas intermediárias entre a camada View e a Model, e é independente de plataforma, uma vez que todo o código relacionado às telas está contido na camada View, sendo utilizados os mesmos Presenters tanto para web quanto para Windows. A camada Model corresponde às classes de persistência e às demais classes que trabalham em contato direto com o modelo de dados, como classes de processo, consulta, etc. 1.2 MAPs O MAP é um recurso utlizado pela framework para mapear elementos da camada de apresentação para elementos das camadas model / presenter e fornecer à framework informações em geral sobre a tela, possibilitando que parte do processamento seja realizado de forma automatizada, sem intervenção do desenvolvedor. Dessa forma, como será visto mais adiante, em uma tela de cadastro, por exemplo, o desenvolvedor não irá precisar preencher as classes de persistência manualmente com os valores contidos nos campos da tela: através do uso de MAPs específicos ele apenas informará qual controle está ligado a qual propriedade da classe, e a criação do objeto será feita automaticamente. Esses MAPs são atributos definidos para as classes e suas propriedades, e são lidos pela framework através de reflection. Em geral pertencem ao namespace MXM.Presenter, do assembly MXM.Presenter. Framework .NET MXM Framework .NET MXM Página 6 1.2.1 MAPs comuns a todos os tipos de tela 1.2.1.1 MAPIDFunction Utilizado para informar o código da função da tela. É importante informar este código em todas as telas, pois o mesmo é utilizado pela framework para diversos fins, como controle de acesso e auditoria. Parâmetros Descrição ID ID da função (corresponde ao valor da coluna MXF_FUNCAO da tabela MXS_FUNCAO_MXF). 1.2.1.2 MAPClass Utilizado para informar a classe da camada model com que se está trabalhando em uma determinada tela. No caso de telas CRUD, por exemplo, a classe de persistência e a classe de validação. Parâmetros Descrição ClassType Informar o tipo (TypeOf) da classe com que se irá trabalhar na tela. ValidatorType Informar o tipo da classe de validação em telas do tipo CRUD (não utilizado nas demais telas). 1.2.1.3 MAPControl Mapeia um controle da tela, relacionando-o ou não a uma propriedade em uma classe. A finalidade de se mapear um controle é permitir que as tarefas mais comuns, como a limpeza do controle após o processamento ou exclusão, por exemplo, sejam realizadas de forma automatizada pela framework, e caso o mesmo esteja relacionado a propriedade de uma classe, permitir que a mesma seja preenchida automaticamente com o valor do controle na tela. Controles não mapeados serão ignorados pela framework, sendo necessário manipulá-los manualmente. Parâmetros Descrição ControlName Informar o nome (ID na web / Name no Windows Forms) do controle. Framework .NET MXM Framework .NET MXM Página 7 PropertyName Informar a propriedade na classe de persistência que irá receber o valor contido no controle (opcional). WindowHelp Caso o controle possua janela de ajuda (TextBox com F1 no Windows ou HelpFieldna web), informar o tipo (TypeOf) da classe de ajuda. LinkFunctionID Caso o campo seja um HelpField, para linkar uma outra funcionalidade ao mesmo informe o ID da função da tela que será aberta (por exemplo, para um HelpField de empresa fornecer um botão com link para tela de cadastro de empresa, passe o ID da função da tela de cadastro de empresa). LinkValueProperty Propriedade na classe de persistência que será aberta correspondente ao valor inserido no controle. 1.2.1.4 MAPListControl Semelhante ao MAPControl, porém mapeia um controle que contém uma lista de itens (ComboBox, ListBox, etc), associando-a a um enum que contém os dados destes itens, mapeado conforme descrito abaixo. Isto permite que esses itens sejam manipulados automaticamente pela framework. Este MAP é suportado apenas pela framework Windows. Parâmetros Descrição EnumType Tipo (typeof) do enum relacionado ao controle. Esses Enums devem ser criados da seguinte forma: 1. O Enum deverá possuir o atributo [EnumDescription(typeof(Properties.EnumDesc))]. 2. Cada item do enum deverá possuir um atributo do tipo EnumValue. Como parâmetro para esse atributo deverá ser informado o valor que efetivamente será passado para a classe model quando o item correspondente for selecionado no controle na tela. 3. Além de criar o Enum, também é necessário definir a descrição (o que realmente aparecerá para o usuário na tela nos itens do controle) para cada item do enum. Isso é feito utilizando o resource EnumDesc.resx, localizado na pasta Properties do projeto que contém o enum. Esse arquivo deverá conter uma linha para cada item do enum, de forma que a coluna "Name" de cada uma dessas linhas possua exatamente o nome do item, e a coluna "Value" possua a descrição. Framework .NET MXM Framework .NET MXM Página 8 1.2.1.5 MAPGridClass Utilizado para mapear grids, relacionando a grid a uma classe, e opcionalmente a uma propriedade na classe associada à tela. Como telas CRUD trabalham diretamente com classes de persistência, e nessas classes é possível identificar o tipo da classe através de atributos da própria classe de persistência (através dos atributos OneToMany e ManyToMany), não sendo necessário nestes casos utilizar este atributo: basta utilizar o atributo MAPControl relacionando a grid à propriedade na classe que contém a lista que está relacionada à grid. Nas demais telas deve-se utilizar o MAPGridClass. Esse MAP só é suportado pela framework Windows. Em telas web a grid deverá ser manipulada manualmente. 1.2.1.6 MAPControlDescription Utilizado para mapear campos do tipo “código / descrição”, para que a descrição seja buscada automaticamente. Parâmetros Descrição ClassType Tipo (typeof) da classe de persistência que será utilizada para buscar a descrição. ControlName Nome do controle que contém o código. PropertyName Propriedade na classe definida em ClassType correspondente ao código / chave (o código digitado no MXMTextBox alvo deverá ser igual ao valor dessa propriedade). PropertyDescription Propriedade na classe definida em ClassType correspondente à descrição (o valor dessa propriedade será exibido no MXMTextBox que está sendo mapeado). 1.2.1.7 MAPControlValidation Permite criar uma validação para o controle, associando o controle a um método numa classe de validação. Essa validação será executada ao sair do controle, sendo exibidas na tela as mensagens contidas no ErrorList passado como parâmetro para o método. Framework .NET MXM Framework .NET MXM Página 9 Parâmetros Descrição ParameterControls Deve ser utilizado para mapear controles na tela cujos conteúdos serão passados como parâmetros para o método de validação. Passar um array de String com os nomes dos controles. TargetControl Nome do controle que será validado. ValidationClass Tipo (TypeOf) da classe que contém o método de validação. ValidationMethod Nome do método de validação. RequiresConnection Define se o método precisa de conexão com o banco. O método de validação deve ser estático (static) e seus parâmetros devem obedecer ao seguinte padrão: • Os primeiros 0 a N parâmetros receberão o conteúdo dos controles mapeados através da propriedade “ParameterControls” do MAP, conforme explicado acima. Dessa forma, o método de validação deve esperar receber como primeiros parâmetros exatamente a mesma quantidade de itens e na mesma ordem em que aparecem no array passado para ParameterControls. • O primeiro parâmetro após estes 0 a N, irá receber o conteúdo do controle que está sendo validado. • O próximo parâmetro deverá ser do tipo ErrorList. A esta ErrorList deverão ser adicionados os erros encontrados na validação. Ao fim da validação, estes erros serão exibidos na tela. • Caso o método precise de conexão com o banco (RequiresConnection = true), o método ainda deverá esperar mais um últmo parâmetro do tipo Persistence, que irá ser passado com a conexão já aberta. 1.2.1.8 MAPPresenter Framework .NET MXM Framework .NET MXM Página 10 Utilizado para mapear um presenter implementado pelo usuário. A não ser que seja criado um presenter a parte, herdando dos presenters padrão da framework e implementando novas funcionalidades, não é necessário utilizar este MAP, bastando utilizar o MAPClass para que o presenter padrão de cada tipo de tela seja criado automaticamente. Parâmetros Descrição PresenterType Tipo (TypeOf) do presenter 1.2.1.9 MAPConsultLink Utilizado para mapear um link para uma tela de consulta. Parâmetros Descrição ConsultButtonID ID do botão que chmará a tela de consulta FunctionID ID da função corrspondente à tela de consulta LoadFiltered True para que a consulta já venha filtrada pelos campos mapeados, false para apenas carregar os valores dos campos mapeados nos filtros correspondentes 1.2.1.10 MAPConsultFilter Permite mapear os campos que serão utilizados como filtros na tela mapeada através do MAPConsultLink. Parâmetros Descrição ControlName ID do controle na tela onde está sendo feito o mapeamento que será usado como filtro DestinyControlName Nome do controle na tela destino que receberá o valor contido no controle mapeado pelo ControlName 1.2.2 MAPs específicos de telas do tipo CRUD 1.2.2.1 MAPControlKey Semelhante ao MAPControl, porém mapeia um controle que está relacionado a uma propriedade na classe de persistência que corresponde a uma chave (PK) na tabela. É utilizado apenas em telas CRUD, já que somente essas telas trabalham diretamente com classes de persistência. Parâmetros Descrição Framework .NET MXM Framework .NET MXM Página 11 LoadSaveRecord Caso seja definido como “true”, ao sair do controle serão carregados nos campos da tela os valores do registro com chave equivalente aos valores digitados nos campos mapeados como MAPControlKey. Nullable Se true, define que ao sair do campo será disparado o carregamento da tela mesmo que o controle esteja vazio. É opcional e seu uso deve ser evitado, tendo sido implementado apenas para dar suporte a telas que trabalham com tabelas já existentes com modelagem errada. Demais parâmetros funcionam de maneira idêntica a MAPControl, sendo obrigatório informar o PropertyName. 1.2.2.2 MapCommandInformedIndex Permite mapear índice utilizado ao fazer a busca de uma tela CRUD utilizando uma classe que implementa ICommandInformed. O parâmetro corresponde ao índice que será passadoao buscar a classe. 1.2.3 MAPs específicos de telas de consulta 1.2.3.1 MAPColumnTitle Mapeia as colunas da consulta e dados em geral sobre a exibição de cada coluna na exportação (alinhamento, formatação, etc). Parâmetros Descrição Column Nome da coluna no store. Title Título da coluna, da forma como deverá aparecer ao exportar a consulta para um arquivo Excel ou pdf. Format Formato como será exibida a informação ao exportar (p. ex. “dd/MM/yyyy”). IsGroup Se a consulta deverá ser agrupada pela coluna. Uma consulta pode ter mais de um grupo. Ordem Ordem em que a coluna será exibida ao exportar. SummaryType Caso a coluna possua um totalizador, informe o tipo de totalizador (somatório ou contagem). SummaryLabel Informa, se for o caso, o texto que irá aparecer antes do totalizador. Align Alinhamento da coluna ao exportar (direita, esquerda ou centralizado). Width Largura da coluna Framework .NET MXM Framework .NET MXM Página 12 1.2.3.2 MAPExportConfig Utilizado para fornecer informações sobre o arquivo exportado. Parâmetros Descrição Title Título que será exibido no arquivo exportado Filename Nome (físico) do arquivo ShowTitleInPdfFile Defina se será exibido título no arquivo gerado ao exportar a consulta para pdf ShowTitleInExcelFile Defina se será exibido título no arquivo gerado ao exportar a consulta para Excel ShowDateInPdfFile Defina se será exibida data no arquivo gerado ao exportar a consulta para pdf ShowDateInExcelFile Defina se será exibida data no arquivo gerado ao exportar a consulta para Excel FonteHeader Tamanho da fonte no header FonteRow Tamanho da fonte das linhas Orientacao Orientação (“R” para retrato ou “P” para paisagem) 1.3 Classes básicas utilizadas pela framework 1.3.1 Persistência (MXM.Persistence) A classe MXM.Persistence tem como objetivo tornar a comunicação com o banco de dados totalmente orientada a objetos para o desenvolvedor. Após mapear as tabelas do banco para classes de persistência seguindo uma série de regras definidas a seguir, o desenvolvedor não precisará lidar diretamente com comandos de banco, como selects, inserts, etc, para manipular estas tabelas, podendo trabalhar diretamente com as classes mapeadas e com uma instância da classe "Persistence" (MXM.Persistence.Persistence), que encapsula todos esses comandos, fazendo com que o desenvolvedor possa obter resultados semelhantes através de métodos desta classe. 1.3.1.1 Constructor O constructor desta classe aceita como parâmetro um objeto da classe “MXM.Connection.Ambiente”. Ao instanciá-la, a conexão com o banco de dados será automaticamente aberta, sendo imprescindível utilizá-la dentro de um bloco “using” para que a conexão seja fechada ao sair do mesmo, sempre que instanciada manualmente. Framework .NET MXM Framework .NET MXM Página 13 1.3.1.2 Buscando dados do banco A busca de dados é feita utilizando-se as classes de persistência. Em geral, utiliza-se uma instância de uma dessas classes como filtro, ou seja, instancia-se a classe de persistência, preenchendo apenas as propriedades que serão utilizadas no filtro. As demais propriedades serão ignoradas. Por exemplo, se eu possuo uma classe "Venda" que possui as propriedades "Codigo", "Data", "CodigoCliente" e "Observacao", e quero obter todas as vendas realizadas no dia 13/05/2009 pelo cliente de código "2", crio uma nova instancia desse classe para utilizar como filtro (Venda v = new Venda()) e preencho apenas a propriedades relacionadas a busca que quero executar ("Data" e "CodigoCliente": v.Data = new DateTime(2009,5,13); v.CodigoCliente = 2;), deixando as outras propriedades não preenchidas (null). Este objeto deverá ser passado para um dos métodos de busca da classe Persistence para que seja executada a busca (no caso do exemplo, seria utilizado o "GetObjects" que retoria uma lista de objetos da classe Venda com todas as propriedades preenchidas relativos a todos os registros na tabela associada a esta classe que possuam a data igual a 13/05/2009 e o código do cliente igual a 2). 1.3.1.2.1 Realizando uma busca que retorna apenas um objeto Para realizar uma busca que retorne apenas um objeto (ao buscar pela chave primária por exemplo) deve-se utilizar o método “GetObject”, que retorna um objeto do tipo object (deve ser feito typecast para o tipo original) caso seja encontrado um registro na tabela correspondente ao padrão de busca utilizado ou null caso nenhum registro seja encontrado. 1.3.1.2.2 Retornando uma lista de objetos que obedeçam a um padrão Para obter uma lista de objetos correspondentes a um conjunto de registros de uma tabela que obedeçam ao padrão estabelecido, deve-se utilizar o método “GetObjects”, que retorna uma lista de objetos do tipo “object” (deve ser feito typecast em cada um deles para o tipo original). Se nenhuma row obedecer o padrão será retornada uma lista vazia. 1.3.1.2.3 Retornando uma lista com objetos correspondentes a todas as rows da tabela Framework .NET MXM Framework .NET MXM Página 14 Para obter uma lista com objetos correspondentes a todos os registros da tabela relacionada a uma classe, utilize o método “GetAllObject”. Este método retorna uma lista semelhante a retornada pelo método “GetObjects”. 1.3.1.3 Persistência de objetos 1.3.1.3.1 Iniciando uma transação Utilize o método “StartTransaction”. 1.3.1.3.2 Salvando um objeto (criando novos registros) Para salvar objetos no banco (criar novos registros, semelhante ao comando INSERT), utilize o método “Save”. Este método possui 2 sobrecargas, uma que aceita apenas um objeto (será criado um novo registro na tabela correspondente ao objeto) e outra que aceita uma lista de objetos (será criado um novo registro na tabela para cada objeto da lista). As propriedades da classe correspondentes às primary keys que utilizarem geração automática não deverão ser preenchidas, já que seu valor será gerado automaticamente. 1.3.1.3.3 Persistindo alterações realizadas em um objeto (alterando registros já existentes) Para persistir alterações realizadas em objetos (alterar registros já existentes, semelhante ao comando UPDATE), utilize o método “Update”. Este método possui 2 sobrecargas, uma que aceita apenas um objeto (o registro correspondente ao objeto será atualizado) e outra que aceita uma lista de objetos (todos os registro correspondentes a todos os objetos da lista serão alterados). É importante que estes objetos estejam com as propriedades relacionadas a chaves primárias preenchidas corretamente. 1.3.1.3.4 Excluindo registros associados a objetos Para excluir registros associados a objetos, deve-se utilizar o método “Delete”. Este método possui 2 sobrecargas, uma que aceita apenas um objeto (o registro associado ao objeto será excluído) e outra que aceita uma lista de objetos (todos os registro correspondentes a todos os objetos da lista serão excluídos). Framework .NET MXM Framework .NET MXM Página 15 1.3.1.3.5 Executando Commit Utilize o método “Commit”. 1.3.1.3.6 Executando Rollback Utilize o método “Rollback”. 1.3.1.3.7 Fechando a conexão com o banco A conexão é fechada através do método “Close”, porém, como a Persistence deve sempre ser usada dentro de um bloco “using”, não é necessário chamar esse método explicitamente, pois a mesma será fechada ao fim do bloco. 1.3.2 Classes de Ajuda As classes de ajuda são utilizadas em conjunto com controles específicos (HelpField na web e MXMTextBox no Windows). Controlesdesse tipo permitem a exibição uma tela de consulta que pode ser utilizada pelo usuário para buscar os valores disponíveis para o controle. Os dados dessa consulta são configurados através de classes de ajuda, que devem herdar da classe abstrata MainHelpConfig, que pertence ao namespace MXM.Objects.Help, do assembly MXM.Objects. Segue abaixo uma descrição de como implementar as classes de ajuda. Para descrição de como utilizá-las e associá-las aos controles, consulte tópico correspondente. 1.3.2.1 Implementando classe de ajuda 1. Crie uma classe herdando de MainHelpConfig. Framework .NET MXM Framework .NET MXM Página 16 2. Essa classe deverá possuir um constructor que recebe um parâmetro inteiro (índex). Esse parâmetro será passado para a propriedade Index, que pode ser utilizada em qualquer método da classe para permitir que uma mesma classe de ajuda tenha um funcionamento diferente dependendo do valor passado. Por exemplo, uma mesma classe de ajuda pode ser utilizada em duas telas, possuindo uma condição (propriedade Where) diferente em cada uma. Dessa forma, poderia passar valores diferentes para o parâmetro index em cada tela e utilizá-lo no método SetupProperty (descrito em seguida) para, através de um “if” ou “switch” definir o valor da minha propriedade “Where”. 3. Implemente o método SetupProperty de MainHelpConfig (override). Nesse método deverão ser preenchidas as propriedades da classe com as informações gerais da consulta. As propriedades são as seguintes: Propriedade Descrição Title Título que será exibido na tela de consulta KeyField Campo chave, correspondente ao código na tabela em que será realizada a busca (nome da coluna da tabela, p. ex. MXU_USUARIO) DescriptionF ield Campo correspondente à descrição (nome da coluna da tabela, p. ex. MXU_NOME) From Tabelas utilizadas na consulta separadas por vírgula (correspondente ao from da query). Where Condição da consulta, exatamente como apareceria no where da query. Caso a condição dependa de valores de outros campos da tela, ou de valores que serão definidos apenas na camada de apresentação, utilize parâmetros (:NOME_DO_PARAMETRO) na query para esses valores (p. ex. Where = “MXU_USUARIO = :CODIGOUSUARIO”. OrderBy Campos utilizados para ordenação separados por vírgula (equivalente ao order by da query) Distinct Boolean. Utilizado para definir se será incluído distinct na query, para não trazer valores repetidos. public class WHExemplo : MainHelpConfig { public WHExemplo(Int32 index) : base(index) { } ... Framework .NET MXM Framework .NET MXM Página 17 4. Implemente o método CreateHelpFields de MainHelpConfig (override). Nesse método deverão ser definidos os campos da consulta, inserindo instâncias da classe HelpConfigField na propriedade Fields. O constructor dessa classe possui os seguintes parâmetros: Parâmetro Descrição Name / Alias Caso seja necessário manipular o valor da coluna na query (utilizando um decode ou nvl por exemplo), deve-se utilizar o campo Name para informar o valor e o parâmetro Alias para informar um nome para a coluna (existem construtores com e sem o parâmetro Alias). Do contrário, utilize o constructor sem o parâmetro Alias e apenas passe o nome da coluna para Name. Description Descrição da coluna, conforme deverá aparecer no título da grid em que serão exibidos os resultados da consulta Type Tipo da coluna Width Largura da coluna protected override void SetupProperty() { Title = "Exemplo"; KeyField = "EXE_CODIGO"; DescriptionField = "EXE_NOME"; WindowHeight = 300; WindowWidth = 700; RegistersPerPage = 10; From = "EXEMPLO_EXE, OUTROEXEMPLO_OEX"; Where = "EXE_OUTROEXEMPLO = OEX_CODIGO"; if (Index == 0) { Where += "AND OEX_VALORX = 1"; } } Framework .NET MXM Framework .NET MXM Página 18 1.3.3 ErrorList Representa uma lista de mensagens e é utilizada em diversos momentos pela framework, por exemplo nas classes de validação para adicionar os erros encontrados ou diretamente pelo desenvolvedor para exibir mensagens para o usuário. 1.3.3.1 Métodos Método Descrição AddFatalError Adiciona um erro à lista de mensagens. Como parâmetros devem ser passados o código do erro e a mensagem. AddWarningMessage Adiciona um warning à lista de mensagens. Como parâmetros devem ser passados o código do warning e a mensagem. AddMessage Adiciona uma mensagem à lista de mensagens. Como parâmetros devem ser passados o código do warning e a mensagem. AddExceptionError Permite adicionar a mensagem de uma exceção à lista de mensagens passando a exceção como parâmetro. RemoveDuplicateMessages Remove mensagens duplicadas 1.3.3.2 Propriedades Propriedade Descrição HasFatalErro Valor booleano. Pode ser usado para consultar se existem erros na lista. protected override void CreateHelpFields() { Fields.Add(new HelpConfigField("EXE_CODIGO", "Código", typeof(Int32), 100)); Fields.Add(new HelpConfigField("EXE_NOME", "Nome", typeof(String), 250)); Fields.Add(new HelpConfigField("SUBSTR(OEX_PERIODO,0,2) || '/' || SUBSTR(OEX_PERIODO,3,4)", "OEX_PERIODO", "Período", typeof(String), 150)); Fields.Add(new HelpConfigField("NVL(OEX_TIPO,'Sem Tipo')", "OEX_NMTPDOCUMENTO", "Tipo", typeof(String), 150)); } Framework .NET MXM Framework .NET MXM Página 19 1.3.3.3 Resources de mensagens de erros Por padrão, as mensagens que serão passadas para o segundo parâmetro dos métodos AddFatalError, AddWarningMessage e AddMessage devem ficar em um resource de nome Message.resx dentro da pasta Properties do projeto que contém a classe correspondente à mensagem. Dessa forma, as mensagens nunca deverão ser passadas diretamente como uma String para esse parâmetro (“p. ex. “Erro exemplo”), sendo passado apenas o valor no resource (p. ex. Properties.Message.CODIGO_DA_MENSAGEM). 1.3.4 Ambiente / AmbienteList A classe Ambiente armazena dados em geral sobre a aplicação, como nome e senha do usuário logado por exemplo, e dados sobre a conexão com o banco de dados. Uma aplicação pode trabalhar com um ou mais ambientes (caso a aplicação conecte em mais de uma base). A classe AmbienteList representa uma lista desses ambientes. Todas as classes da framework em que é possível trabalhar com o banco de dados, como as classes da camada de apresentação, classes de processo, etc, possuem propriedades do tipo Ambiente (Amb), AmbienteList (AmbList) e um inteiro (AmbIndex) que é utilizado para indexar a lista AmbList obtendo um dos ambientes. Dessa forma, por exemplo, na camada de apresentação de uma tela de cadastro, que irá herdar da classe FormCRUD, posso obter o nome do usuário logado usando Amb.Username, onde Amb é uma propriedade do tipo Ambiente da própria classe. Conforme será visto em local apropriado, a instância das classes que trabalham diretamente com o banco (como Persistence e MainConsult por exemplo) geralmente é feita passando-se um desses objetos como parâmetro. Dessa forma, se na mesma classe do exemplo anterior o desenvolvedor precisar criar uma instancia de MainConsult para executar uma query, para instanciá-la bastaria passar a propriedade AmbList para o constructor. A classe Ambiente possui as seguintes propriedades: Propriedade Descrição ConnectionString ConnectionString do ambiente ConnectionStringDataBase ConnectionString com informações específicas do tipo de banco. Culture String com cultura do usuário logado (p. ex. “Pt-Br”) DataBaseType Tipo debanco (Oracle, SQLServer, etc). EmailUser E-mail do usuário logado. Name Nome do usuário logado. Password Senha do usuário logado. Framework .NET MXM Framework .NET MXM Página 20 Produto Produto (tabela MXS_PRODUTO_MXP) da aplicação. SaveAudit Não utilizado atualmente. SetRole Não utilizado atualmente. Tag Utilizado em determinadas aplicações para passar informações adicionais ao ambiente. UserName Código do usuário logado (MXU_USUARIO). ValidatePasswordInDatabase Se a validação de senha do usuário é feita no banco (true) ou na tabela (MXS_USUARIO_MXU) para esse ambiente. 1.3.5 Classe JavascriptService Utilize a classe JavascriptService do arquivo MXM.Web.Javascript para registrar os javascripts de utilitários da framework. Essa classe possui 2 métodos, RegisterBasicUtils, para registrar os scripts básicos e RegisterGridUtils para utilitários para trabalhar com grids (para usar o segundo é obrigatório usar o primeiro). Esse métodos devem ser chamados no OnPreRender da página e deve ser passada a página para eles como parâmetro. Framework .NET MXM Framework .NET MXM Página 21 2. A camada de Apresentação (View) Todas as classes correspondentes à camada de apresentação deverão herdar de uma das classes base definidas pela framework para este fim. Dessa forma, as classes, que herdariam diretamente de System.Windows.Forms.Form para Windows Forms e System.Web.UI.Page para ASP.Net, deverão herdar de uma das classes de apresentação da framework. Essas classes estão contidas no namespace MXM.Win.Forms / Assembly MXM.Win.Forms para telas Windows e MXM.Web.Coolite.Forms / Assembly MXM.Web.Coolite.Forms para telas web. A implementação das classes de apresentação nunca será feita no mesmo projeto da aplicação principal (no caso da web, do website), que conterá apenas referências para os assemblies que contém a implementação propriamente dita das telas. No caso da web, como os arquivos aspx e seus arquivos .cs associados não podem ficar em um assembly separado, apenas estes deverão ficar no website. O arquivo .cs associado ao aspx não deverá conter praticamente nenhum código, apenas a definição da classe associada ao aspx herdando da classe de apresentação, que deverá ser implementada em um assembly / projeto distinto Framework .NET MXM Framework .NET MXM Página 22 (consulte tópico sobre o FormBasic para informações sobre como acessar os controles do aspx em um projeto separado). 1.4 Classes de apresentação para implementação de tipos de tela específicos Existem classes base de apresentação para os tipos mais comuns de tela, como telas de cadastro (CRUD), processo, consulta e relatório. Ao implementar essas classes, grande parte da funcionalidade da tela será controlada automaticamente pela framework, bastando ao desenvolvedor montar a tela (design) e utilizar os MAPs corretamente. Todas essas classes possuem um presenter associado, sendo possível ao desenvolvedor interferir no funcionamento da tela através da utilização de eventos desse presenter (descritos no tópico apropriado) e da sobrecarga de métodos específicos de cada tipo de tela, que serão relacionados nos tópicos correspondentes. 1.4.1 FormCRUD A classe “FormCRUD” permite a implementação da camada de apresentação de telas do tipo CRUD (Create, Read, Update, Delete – Criação, Consulta, Alteração e Exclusão), ou seja, telas de cadastro e alguns tipos de processo. Para utilizá-la, a classe correspondente a camada de apresentação deverá herdar de FormCRUD. Nas telas web é necessário criar botões com os nomes (ID) padrão utlizados pela classe (btGravar para o botão que irá salvar / atualizar, btExcluir para o botão que irá apagar os registros e btPrint para o botão utilizado para imprimir listagem dos registros que são cadastrados pela tela). Nas telas Windows isso não é necessário, pois os botões ficam diretamente em FormCRUD, sendo utilizada herança de form. Essa classe sempre irá trabalhar em conjunto com uma classe de persistência e uma classe de validação (camada model), de forma que o MAPClass deverá ser utilizado para mapear classes desses dois tipos. Ao utilizar o MAPClass dessa forma, será instanciado um presenter do tipo padrão utilizado pela tela automaticamente (CRUDPresenter). O desenvolvedor poderá ainda implementar um presenter herdando de CRUDPresenter e utilizar o MAPPresenter para mapeá-lo, não sendo necessário utilizar o MAPClass nesse caso. Para maiores detalhes sobre o presenter CRUDPresenter consulte o tópico apropriado. 1.4.1.1 Métodos Método Parêmetros Retorno Descrição GetRecordInControl RecordList void Permite ao desenvolvedor interferir no carregamento dos objetos da lista de Framework .NET MXM Framework .NET MXM Página 23 objetos que será persistida no banco para, por exemplo, alterar propriedades, preencher propriedades com valores padrão, preencher propriedades com dados de controles não suportados pela framework, etc. Para isso basta alterar diretamente os objetos contidos em RecordList (passado como parâmetro). Nas telas de cadastro de apenas um item (maioria das telas), esta lista conterá apenas a posição 0. SetRecordInControl RecordList void Permite ao desenvolvedor interferir no carregamento dos controles da tela com registros da lista contendo objetos com dados vindos do banco para, por exemplo, preencher controles na tela que não são suportados pela framework. Para isso basta verificar os dados dos itens da lista. Nas telas de cadastro de apenas um item (maioria das telas), esta lista conterá apenas a posição 0. 1.4.2 FormProcess A classe “FormProcess” permite a implementação da camada de apresentação de telas de processo. Para utilizá-la, a classe correspondente a camada de apresentação deverá herdar de FormProcess. Nas telas web é necessário criar botões com os nomes (ID) padrão utlizados pela classe FormProcess (btPtrocess para o botão que irá executar o processamento e btUndoProcess para o botão que irá desfazer o processamento, caso esse recurso seja utilizado). Nas telas Windows isso não é necessário, pois os botões ficam diretamente em FormProcess, sendo utilizada herança de form. Não possui métodos sobrecarregáveis como FormCRUD, sendo utilizados apenas eventos do presenter para interferir manualmente no funcionamento da tela. Essa classe sempre irá trabalhar em conjunto com uma classe de processo (MainProcess, camada model), de forma que o MAPClass deverá ser utilizado para mapear uma classe desse tipo. Ao utilizar o MAPClass dessa forma, será instanciado um presenter do tipo Framework .NET MXM Framework .NET MXM Página 24 padrão utilizado pela tela automaticamente (ProcessPresenterPersistence). O desenvolvedor poderá ainda implementar um presenter herdando de ProcessPresenterPersistence e utilizar o MAPPresenter para mapeá-lo, não sendo necessário utilizar o MAPClass nesse caso. Para maiores detalhes sobre o presenter ProcessPresenterPersistence consulte o tópico apropriado. 1.4.3 FormConsult A classe “FormConsult” permite a implementação da camada de apresentação de telas de consulta. Para utilizá-la, a classe correspondente a camada de apresentação deverá herdar de FormConsult. Nas telas web é necessário criar botões com os nomes (ID) padrão utlizados pela classe FormProcess (btFilter para o botão que irá filtrar a consulta, btExcel para o botão que será utilizado para exportar os dados da consulta para uma planilhado Excel e btPdf para o botão que será utilizado para exportar os dados da consulta para um arquivo pdf). Essa classe sempre irá trabalhar em conjunto com uma classe de consulta (MainConsult, camada model), de forma que o MAPClass deverá ser utilizado para mapear uma classe desse tipo. Ao utilizar o MAPClass dessa forma, será instanciado um presenter do tipo padrão utilizado pela tela automaticamente (ConsultPresenter). O desenvolvedor poderá ainda implementar um presenter herdando de ConsultPresenter e utilizar o MAPPresenter para mapeá-lo, não sendo necessário utilizar o MAPClass nesse caso. Para maiores detalhes sobre o presenter ConsultPresenter consulte o tópico apropriado. A classe utiliza, além dos MAPs comuns às demais telas, alguns MAPs específicos descritos no tópico apropriado. Possui ainda dois métodos que devem ser obrigatoriamente implementados: Método Descrição ValidateFilter Deve ser utilizado para validar os dados dos filtros, acrescentando os erros encontrados à propriedade ErrorList. A consulta só será executada se não houverem erros na lista. LoadData Deverá ser implementado o carregamento dos dados da consulta na tela. O método recebe como parâmetro uma instância de MainConsult com todos os campos mapeados através de MAPControl e similares preenchidos. Deverá então ser feito um TypeCast para o tipo de classe de consulta da Framework .NET MXM Framework .NET MXM Página 25 tela e chamados os métodos para trazer os dados da consulta, utilizando-os para exibir a consulta na tela (através de databind com o store de uma grid, por exemplo). 1.5 Classes de apresentação base Caso nenhuma das classes descritas anteriormente sirva para a implementação de uma tela específica, é possível herdar diretamente de uma das classes base, das quais todas essas classes herdam (elas herdam de FormMAPControl, que é o nível mais baixo de herança acima das classes para telas específicas). Segue descrição da função de cada classe base e de suas funcionalidades. Essa descrição pode ser usada como referência para as funcionalidades disponíveis nas classes de apresentação para telas específicas, uma vez que elas estão no nível mais baixo de herança. A propriedade ErrorList, por exemplo, é definida na classe base FormErrorList, mas é possível usá-la em FormCRUD, uma vez que FormCRUD herda de FormMAPControl, que herda de FormErrorList. 1.5.1 FormBasic Classe mais básica, no topo da hierarquia de classes de apresentação, implementa as funcionalidades comuns a todas as telas e funcionalidades específicas de cada plataforma, como redirecionamento para tela de login ao término da sessão na web e alteração da funcionalidade da tecla enter no Windows (possui a mesma função do tab, no mesmo padrão do Manager). 1.5.1.1 Propriedades comuns a web / Windows Propriedade Descrição Amb, AmbList e AmbIndex Consulte tópico correspondente às classes Ambiente / AmbienteList Presenter O Presenter que irá trabalhar em conjunto com a classe de apresentação. Ao herdar diretamente das classes FormBasic e FormErrorList, o Presenter deverá ser mapeado através de MAPPresenter ou instanciado manualmente. Como em FormMAPControl, como será visto no tópico apropriado, é implementada uma série de funcionalidades que dependem de um presenter, como a auditoria por exemplo (a rotina de gravação de auditoria é implementada no presenter, pois Framework .NET MXM Framework .NET MXM Página 26 funciona da mesma maneira para web e para Windows), para uma classe que herde diretamente de FormMAPControl e não mapeie um presenter através de MAPPresenter será criado automaticamente um presenter básico, só com as funcionalidades diretamente utilizadas pela tela. Para as classes abaixo de FormMAPControl, existe a opção de mapear um presenter específico através de MAPPresenter ou utilizar apenas MAPClass, que fará com que seja instanciado o tipo de presenter relacionado à tela automaticamente. Propriedades web Propriedade Descrição AutoTrim Quando true (default) chama o trim automaticamente para todos os campos de texto da página quando os mesmos perdem o foco. 1.5.1.2 Interface IBasicForm A interface IBasicForm é implementada pela classe FormBasic, tanto na sua versão para Windows quanto para web, o que permite que os presenters chamem métodos específicos de cada plataforma implementados nessa camada em ambas as plataformas. Método Descrição Clear Método para limpeza dos controles da tela. Em FormBasic este é um método virtual vazio, devendo ser implementado pelo desenvolvedor caso seja relevante para a tela que esta desenvolvendo. Em FormMAPControl ele é implementado, limpando automaticamente os controles mapeados utilizando MAPs como MAPControl e MAPControlKey. O parâmetro ClearKey serve para identificar se os campos relativos à chave primária deverão ou não ser limpos nos casos em que essa informação é relevante, como em FormCRUD. Mesmo em classes abaixo de MAPControl o desenvolvedor pode sobrescrever o método para interferir na limpeza dos controles, bastando chamar base.Clear para executar a limpeza implementada em FormMAPControl. ShowError Deve ser chamado para exibir mensagens para o usuário. Assim como o método Clear, em FormBasic este é um método virtual vazio, Framework .NET MXM Framework .NET MXM Página 27 sendo implementado apenas em FormErrorList. SetFocus Coloca o foco no campo mapeado através de MAPSetFocus. GetControl Retorna o controle com o nome passado como parâmetro. EnableMappedButton Habilita ou desabilita o botão com nome passado como parâmetro com base no parâmetro boolean. 1.5.1.3 Métodos específicos da web Método Descrição SetLoading Define que um determinado DirectEvent irá exibir o loading ao ser executado bloqueando um outro controle. Para “em” deve-se passar o EventMask do DirectEvent. Para “customTarget”, o controle que será bloqueado enquanto o DirectEvent estiver sendo executado (passe null para bloquear toda a página. Para msg, passe a mensagem que será exibida. ShowNotification Mostra a mensagem passada como parâmetro como um Notification do Coolite. Existe uma sobrecarga em que é possível configurar a posição e o tamanho da notificação, e outra que espera apenas a mensagem como parâmetro (a notificação será exibida no centro da tela com 200px por 200px ). 1.5.1.4 Propriedades específicas da web Propriedade Descrição RedirectOnSessionEnd Define se deverá ser efetuado redirecionamento para a tela de login ao término da sessão. 1.5.1.5 Acesso aos controles do aspx na web No FormBasic da web, no OnInit, é executada uma rotina que lê todas as propriedades da classe e, caso encontre controles na tela com o mesmo nome da propriedade, passa para essa propriedade uma instância do controle. Isso é feito para que seja possível acessar os controles da tela em uma classe implementada em um projeto separado do arquivo aspx, bastando criar nessa classe propriedades do mesmo tipo e com o mesmo nome (ID) do controle na tela. Dessa forma, conforme descrito anteriormente, é possível manter no website apenas os aspx, sem nenhum código implementado no cs. Framework .NET MXM Framework .NET MXM Página 28 1.5.2 FormErrorList Herda de FormBasic, acrescentando uma propriedade do tipo ErrorList, e implementa o método ShowError, que pode ser chamado em qualquer classe que herde de FormErrorList para mostrar na tela as mensagens contidas nessa ErrorList para o usuário. Para maiores informações sobrea classe ErrorList consulte o tópico apropriado. 1.5.2.1 Interface ICustomError Propriedade Descrição ErrorList Propriedade do tipo ErrorList 1.5.3 FormMAPControl Implementa toda a parte automatizada da tela através do uso de MAPControl e similares, como MAPControlKey, MAPGridControl, etc. Para ser capaz de usar qualquer MAP relacionado aos controles da tela o desenvolvedor deverá herdar desta classe. É também a partir dessa classe que é implementada a auditoria. 1.5.3.1 Interface IMAPControl A interface IMAPControl é implementada pela classe FormMAPControl, tanto na sua versão para Windows quanto para web, o que permite que os presenters chamem métodos específicos de cada plataforma implementados nessa camada em ambas as plataformas. Esses métodos / propriedades na prática são utilizados apenas internamente pelos presenters, havendo pouca utilidade em seu uso direto pelo desenvolvedor. 1.5.3.1.1 Propriedades Propriedade Descrição MAPControls Lista de todos os controles mapeados na tela através de MAPControl e similares. 1.5.3.1.2 Métodos Método Descrição GetControl Busca o controle com o nome passado como parâmetro na tela. Framework .NET MXM Framework .NET MXM Página 29 GetMAPControl Busca o controle com o nome passado como parâmentro em todos os controles mapeados. ClearControl Limpa o valor de um controle (p. ex. colocando o texto de um textbox em branco ou desmarcando um checkbox). GetValueFromControl Retorna o valor do controle passado como parâmetro. SetValueInControl Insere o valor passado para o parâmetro value no controle cujo nome foi passado para o parâmetro controlName para exibição na tela. Click Em FormMAPControl é um método virtual em branco. É implementado nos presenters que herdam de FormMAPControl, associando ao evento de clique de um dos botões da tela o EventHandler passado para o parâmetro Click. O parâmetro TypeButton é utilizado para saber em qual botão o evento deve ser associado. Isso permite que a rotina que será executada ao clicar no botão fique implementada no presenter. EnableButton Em FormMAPControl é um método virtual em branco. É implementado nos presenters que herdam de FormMAPControl, habilitando ou não (parâmetro value) um controle da tela, caso o usuário possua ou não acesso à propriedade associada a esse controle. O parâmetro TypeButton é utilizado para saber em qual botão o evento deve ser associado. GetControlIdentificationPropertyName Retorna o nome da propriedade dos controles utilizada para identificá-los em cada plataforma (ID na web e Name no Windows). IsGridControl* Retorna um valor boolean identificando se um controle é uma grid ou não. GetDataFromGrid* Retorna as informações contidas numa grid como um DataTable SetValueInGridControl* Semelhante a SetValueInControl para grids. SetupGridDescription Associa evento ao sair de um campo com um Framework .NET MXM Framework .NET MXM Página 30 código em uma grid para carregar a descrição em outro campo. SetHelpWindowInControl Associa o helpwindow a um controle. SetHelpWindowInGridColumn* Semelhante a SetHelpWindowInControl, para uma coluna de uma grid. LoadListControl* Utilizado para preencher um controle mapeado com MAPListControl com os valores de seu Enum. LosdLidtInGridControl* Semelhante a LoadListControl, para uma coluna de uma grid. AssociateValidationToControl Associa uma validação criada através de MAPControlValidation a um controle. SetDescriptionInControl Em dois controles código / descrição, associa o controle com a descrição ao controle com o código. GetClickEventParameters Passa o EventArgs do clique de um botão. SetControlInProperty Insere o controle numa propriedade da classe com o mesmo nome do controle. * Implementados apenas no Windows. 1.6 Controles / Componentes 1.6.1 Web (Ext.Net.MXMControls) Os componentes para web pertencem ao assembly Ext.Net.MXMControls. 1.6.1.1 Help 1.6.1.1.1 HelpField Campos que possuem uma consulta associada. Esses campos estão sempre associados a uma tabela do banco de dados, e exibem um botão com um desenho de uma lupa ao lado do campo de texto que quando clicado exibe uma tela de consulta em que o usuário pode buscar e selecionar um dos valores disponíveis para inserção no campo. A configuração dessas telas de consulta é feita através de classes que herdam de MainHelpConfig. Consulte o tópico relacionado à classe MainHelpConfig para descrição de como implementar classes desse tipo. Todas as propriedades utilizadas no TextField do Coolite (FieldLabel, etc) podem ser utilizadas em controles desse tipo. Framework .NET MXM Framework .NET MXM Página 31 Propriedade Descrição HelpClass O nome da classe MainHelpConfig associada ao controle (utilize a propriedade AssemblyQualifiedName, p.ex. MinhaClasseDeAjuda.GetType().AssemblyQualifiedName). Existem parâmetros dos MAPs MAPControl, MAPControlKey, etc, para fazer essa associação, de forma que normalmente não é necessário utilizar essa propriedade explicitamente. HelpIndex Utilize para definir o valor da propriedade Index da classe MainHelpConfig que será utilizado. DescriptionFieldID Caso o HelpField seja utilizado em um campo código / descrição, defina o ID do campo que receberá a descrição relacionada ao código inserido no campo. Habilitando tecla F1: Devido a uma série de fatores (W3C, dificuldade de compatibilidade entre browsers, etc) o HelpField por padrão não funciona como no Manager, em que a janela de busca é exibida ao pressionar a tecla “F1”. Porém, como esse comportamento pode ser necessário para alguns clientes, a tecla F1 pode ser habilitada apenas para o Internet Explorer através do web.config. Para isso, adicione a tag <add key="enableF1" value="true"/> ao AppSettings. 1.6.1.1.2 HelpParameter HelpParameter não é um componente, é uma classe que pertence a Ext.Net.MXMControls utilizada pelo HelpField para associar os parâmetros da classe MainHelpConfig (consulte trecho sobre a propriedade Where no tópico relacionado à classe MainHelpConfig) a controles da tela ou definir valores para os parâmetros. Devem ser adicionadas instâncias dessa classe à propriedade parameters do HelpField para cada parâmetro utilizado na propriedade Where da classe MainHelpConfig associada ao controle. A classe possui as seguintes propriedades: Propriedade Descrição Name Nome do parâmetro como aparece na propriedade Where da classe MainHelpConfig, sem o “:”. IsControlValue Define se o valor virá de um controle da tela (true) ou será definido explicitamente pelo desenvolvedor. Value Caso o valor seja buscado de um controle da tela, essa propriedade deverá conter o ID do controle. Caso contrário, deve ser passado o Framework .NET MXM Framework .NET MXM Página 32 valor do parâmetro para essa propriedade. 1.6.1.2 Campos de texto 1.6.1.2.1 MXMNumberField Permite apenas a digitação de números, conforme as regras definidas através das propriedades do componente. Herda de Ext.Net.NumberField do Coolite, possuindo todas as propriedades desse componente, como FieldLabel, etc. Propriedade Descrição ShowSeparator Define se deve ser exibido separador de milhar ao sair do campo. AlignLeft Por padrão os campos numéricos são alinhados à direita. Caso deseje que sejam alinhados à esquerda, utilize esse campo (true). DecimalPrecision Número de casas decimais. AllowNegative Define se o campo permite a digitação de valores negativos.AllowDecimals Define se o campo permite a digitação de números com decimais. MXMDisabled Quando true, desabilita o controle com a mesma aparência utilizada pelos campos descrição do HelpField. 1.6.1.2.2 MXMDateField Permite apenas a digitação de datas, conforme as regras definidas através das propriedades do componente, e formata qualquer valor numérico digitado como uma data válida ao sair do campo. Herda de Ext.Net.DateField do Coolite, possuindo todas as propriedades desse componente, como FieldLabel, etc. Propriedade Descrição IsLongYear Quando true o campo adotará o padrão de data com ano 4 dígitos (dd/mm/yyyy). Quando false o de 2 dígitos (dd/mm/yy). MXMDisabled Quando true, desabilita o controle com a mesma aparência utilizada pelos campos descrição do HelpField. 1.6.1.2.3 MXMMonthYearField Framework .NET MXM Framework .NET MXM Página 33 Permite apenas a digitação de valores no formato mês/ano e formata qualquer valor numérico digitado nesse formato. Herda de Ext.Net.TextField do Coolite, possuindo todas as propriedades desse componente, como FieldLabel, etc. 1.6.1.2.4 MXMTimeField Permite apenas a digitação de horas no formato HH24:MM e formata qualquer valor numérico digitado nesse formato. Herda de Ext.Net.TextField do Coolite, possuindo todas as propriedades desse componente, como FieldLabel, etc. 1.6.1.3 Métodos de extensão No Assembly Ext.Net.MXMControls estão implementados métodos de extensão relacionados a controles. Para usá-los, basta fazer referência ao assembly (using). Método Descrição Controles suportados SetMXMDisabled Desabilita o controle com aparência semelhante à do campo descrição do Help Field. HelpField, TextField, TriggerField, TextArea, ComboBox 1.6.2 Windows Os componentes para Windows pertencem ao assembly MXM.Controls. 1.6.3 Windows (MXM.Controls) 1.6.3.1.1 MXMTextBox O MXMTextBox permite a utilização de janelas de consulta ao ser associado a uma classe MainHelpConfig (semelhante so HelpField da web, porém a exibição da janela de ajuda é feita através das teclas F1 ou F4, não possui botão para chamar a janela ajuda). Permite ainda controlar a entrada de dados (por exemplo, permitindo apenas entrada de valores numéricos, data, etc). Propriedade Descrição ControleDescricao Caso o MXMTextBox seja utilizado em um campo código / descrição, defina o TextBox que receberá a descrição relacionada ao código inserido no campo. Framework .NET MXM Framework .NET MXM Página 34 WindowHelp A classe MainHelpConfig associada ao controle (passar instância da classe). Existem parâmetros dos MAPs MAPControl, MAPControlKey, etc, para fazer essa associação, de forma que normalmente não é necessário utilizar essa propriedade explicitamente. HelpFilter Deverá ser passada uma lista dos controles que serão usados como parâmetros na ordem em que aparecem na propriedade Where. DataType Utilizado para controlar o tipo de dados que podem ser inseridos no controle. Os tipos disponíveis são os seguintes (enum : Tipo Descrição Text Default, permite digitação de qualquer caracter. Number Permite apenas a digitação de números, com ou sem casas decimais, com e sem sinal. UnsignedNumber Permite apenas a digitação de números, com ou sem casas decimais, sem sinal. Integer Permite apenas a digitação de números inteiros, com ou sem sinal. UnsignedInteger Permite apenas a digitação de números inteiros sem sinal. DayMonthYear Para datas com 4 dígitos no ano (dd/mm/yyyy). MonthYear Para campos com valor mês/ano (mm/yyyy). DayMonthShortYear Para datas com 4 dígitos no ano (dd/mm/yy). ShortTime Para horas (hh24:mm). IntegerCode Para digitação de códigos numéricos (sequences, etc). CharCase Se o campo aceita apenas letras maiúsculas (UpperCase), minúsculas (LowerCase) ou ambos os tipos (Normal), que é o valor default. Valores do enum CharCaseList. Digits Quantidade de dígitos decimais, caso o DataType seja Number ou UnsignedNumber. 1.6.3.1.2 MXMDataGridView DataGridView no padrão da MXM (Enter funciona igual ao Tab para passar o foco para a próxima coluna, Ctrl + Delete exclui a linha, etc). Framework .NET MXM Framework .NET MXM Página 35 1.6.3.1.3 DataGridViewMXMTextBoxColumn / DataGridViewMXMTextBoxCell Permitem criar uma coluna no DataGridView que funciona como um MXMTextBox, com F1, etc. 1.6.4 Web (Ext.Net.MxmControls) 3. A camada presenter Os presenters fazem parte dos assemblies MXM.Presenter e MXM.Presenter.Persistence. Em MXM.Presenter estão os presenters base, sem nenhum tipo de vínculo com o MXM.Persistence. O projeto MXM.Presenter.Persistence possui presenters herdando desses presenters base e implementando tudo que utiliza MXM.Persistence. 1.6.5 MainPresenter Presenter mais básico. Todos os demais presenters, com exceção dos de login, herdam desse presenter. Define a propriedade View, que é um objeto que corresponde à camada de apresentação necessário para o funcionamento de todos os presenters que irão herdar de MainPresenter. É através dessa propriedade que os presenters chamam métodos na camada de apresentação: cada tipo de classe da camada de apresentação implementa interfaces Framework .NET MXM Framework .NET MXM Página 36 próprias (p. ex. tanto a classe FormMAPControl do Windows quanto a da web implementam a interface IMAPControl), o que permite ao presenter chamar métodos em comum nessas classes. Dessa forma, determinadas rotinas, que funcionam de maneira comum, independente da plataforma, podem ser implementadas na camada presenter, sendo feitas chamadas de métodos nas classes da camada de apresentação para executar as tarefas específicas de cada plataforma, como bloquear um botão ou ler o valor de um campo da tela. 1.6.6 MAPControlPresenter Implementa a gravação da auditoria de acesso às telas e toda parte independente de plataforma das rotinas relacionadas ao uso de MAPControl e similares para mapear controles da tela para a camada model. A partir desse presenter é necessária interação com o banco (no caso desse presenter apenas para gravar a auditoria), de forma que nele é definida a propriedade abstrata DBControl, do tipo IDBPresenterControl, que será utilizada para interação com o banco (consulte tópico sobre a interface IDBPresenterControl) e o método abstrato InstantiateDbControl, onde essa propriedade deverá ser instanciada. Todos os presenters que herdarem de FormMAPControl deverão implementar essa propriedade / método (no caso dos presenters contidos em MXM.Presenter.Persistence utilizando a classe PersistControl, que implementa a interface IDBPresenterControl utilizando MXM.Persistence). 1.7 Presenters associados a tipos específicos de telas Conforme descrito no tópico relativo à camada de apresentação, cada uma das classes de apresentação para telas específicas possui um presenter padrão associado. Estes presenters estão em MXM.Presenter.Persistence e herdam de presenters base que estão no assembly MXM.Presenter. Segue descrição desses presenters e das interfaces que implementam. Essas interfaces podem ser usadas na camada de apresentação para, através da propriedade “Presenter”, utilizar os eventos dos presenters para interferir no funcionamento das telas. Definem ainda métodos que são utilizados na camada de apresentação para chamar métodos nos presenters. 1.7.1 Presenters CustomCRUDPresenter e CRUDPresenter CustomCrudPresenter implementa a interface ICustomCRUDPresenter, e faz parte do assembly MXM.Presenter.Serve de base para o presenter CRUDPresenter, que implementa a interface ICRUDPresenter e faz parte do assembly MXM.Presenter.Persistence. CRUDPresenter é o presenter padrão de telas CRUD. Framework .NET MXM Framework .NET MXM Página 37 1.7.1.1 Interface ICustomCRUDPresenter 1.7.1.1.1 Eventos Evento Descrição BeforeGetRecord Disparado quando o usuário pressiona o botão para executar uma operação na tela (save, update ou delete), antes da montagem da lista de objetos que serão persistidos, antes da chamada ao método GetRecordInControl da camada e apresentação. O parâmetro ExecuteOperation pode ser usado para definir se a operação será ou não executada. AfterGetRecord Disparado quando o usuário pressiona o botão para executar uma operação na tela (save, update ou delete), após a montagem da lista de objetos que serão persistidos. O parâmetro ExecuteOperation pode ser usado para definir se a operação será ou não executada. È passada também a lista de objetos como parâmetro. BeforeCommit Disparado quando o usuário pressiona o botão para executar uma operação na tela (save, update ou delete), antes de executar o commit; AfterCommit Disparado quando o usuário pressiona o botão para executar uma operação na tela (save, update ou delete), após executar o commit; BeforeDoOperation Disparado quando o usuário pressiona o botão para executar uma operação na tela (save, update ou delete), após a validação, caso a mesma não retorne erros, e antes da operação ser executada, para cada objeto de persistência da lista. BeforeLoadViewFromRecord Executado ao sair do campo contendo a PK em que serão carregados os dados na tela antes de carregar os dados na tela, antes do SetRecordInControl da camada de apresentação. Recebe como parâmetro o objeto já com as PKs carregadas. AfterLoadViewFromRecord Semelhante ao BeforeLoadViewFromRecord, executado após a tela ser carregada. Framework .NET MXM Framework .NET MXM Página 38 1.7.1.1.2 Métodos Método Descrição KeyExit Carrega a tela com os dados do objeto correspondente a um registro da tabela que contenha as pks iguais aos campos de pk preenchidos na tela. 1.7.1.2 Interface ICRUDPresenter 1.7.1.2.1 Eventos Evento Descrição AfterGetRecordInControl Executado para cada objeto que for criado a partir da propriedade CountSaveRecord (por padrão 1 objeto), após a criação do objeto. É passada a lista com os objetos adicionados até o momento em que o objeto foi adicionado e a posição do objeto na lista. BeforeDoPersistenceOperation Semelhante a BeforeDoOperation da ICustomCRUDPresenter, mas passando além da classe que será persistida um persist com a conexão aberta. AfterDoPersistenceOperation Semelhante a BeforeDoPersistenceOperation, mas executado após a execução da operação. 1.7.1.2.2 Propriedades Propriedade Descrição CountSaveRecord Usado para definir quantos objetos serão criados automaticamente com os dados dos campos mapeados na tela na lista de objetos que serão persistidos. Por padrão essa propriedade tem o valor 1, podendo ser alterada em telas que salvam mais de um item de uma vez. 1.7.2 Presenters CustomProcessPresenter e ProcessPresenterPersistence CustomProcessPresenter serve de base para o presenter ProcessPresenterPersistence, que implementa a interface IProcessPresenter e faz parte do assembly MXM.Presenter.Persistence. ProcessPresenterPersistence é o presenter padrão de telas de processo. Framework .NET MXM Framework .NET MXM Página 39 1.7.2.1 Interface IProcessPresenter 1.7.2.1.1 Eventos Evento Descrição BeforeProcess Disparado ao pressionar o botão para processar ou desfazer processamento, antes de executar o processo. Recebe como parâmetros uma instância da classe de processo e TypeExecProcess, que identifica qual botão foi pressionado. AfterProcess Disparado após o processamento, após o commit do persistence, de forma que só será disparado se o processo for executado sem erros (ErrorList). Mesmos parâmetros do BeforeProcess. 1.7.3 Presenters CustomConsultPresenter e ConsultPresenter CustomConsultPresenter implementa a interface ICustomConsultPresenter, e faz parte do assembly MXM.Presenter. Serve de base para o presenter ConsultPresenter, que faz parte do assembly MXM.Presenter.Persistence e é o presenter padrão de telas de consulta. 1.7.3.1 Interface ICustomConsultPresenter 1.7.3.1.1 Métodos Método Descrição Filter Este é o método que é executado ao pressionar o botão de filtragem da consulta. Pode ser chamado em uma tela de consulta caso a consulta precise ser feita fora do clique do botão (por exemplo em uma tela em que a consulta já tenha que vir carregada ao ser aberta, esse método pode ser chamado no PageLoad). 1.7.4 Interface IDBPresenterControl / Classe PersistControl Como os presenters base definidos em MXM.Presenter não possuem vínculo com a Persistence, sua interação com o banco de dados é feita através da interface Framework .NET MXM Framework .NET MXM Página 40 IDBPresenterControl, que define métodos de interação com o banco, como abrir e fechar a conexão, etc. Essa interface é implementada utilizando o MXM.Persistence para executar essa interação com o banco em MXM.Presenter.Persistence pela classe PersistControl. Métodos da interface IDBPresenterControl Método Descrição Open Abre conexão com o banco Close Fecha conexão com o banco StartTransaction Inicia transação InTransaction Retorna bool indicando se está na transação ou se a mesma já foi encerrada Commit Executa commit RollBack Executa rollback GetRecord Traz um registro do banco utilizando o objeto passado como parâmetro como filtro GetRecords Retorna lista com todos os registros da tabela relacionada ao tipo de objeto passado para o parâmetro clazz. GetListRecordType Retorna o tipo dos objetos de uma lista (propertyName) mapeada em um objeto (Record). SaveAudit Salva a auditoria de acesso à tela relacionada ao ID de função passado como parâmetro para IDFuncion com base nos dados do ambiente passado para Amb (p. ex. o usuário gravado será Amb.UserName). SaveDocumentAudit Salva a auditoria de acesso ao documento cujo código foi passado como parâmetro para IDDocument com base nos dados do ambiente passado para Amb (p. ex. o usuário gravado será Amb.UserName). Framework .NET MXM Framework .NET MXM Página 41 4. A camada Model 1.8 Classes de Persistência As classes de persistência estão diretamente associadas a uma tabela no banco, sendo cada coluna da tabela associada a uma propriedade pública da classe. O mapeamento é feito diretamente na classe, no próprio arquivo .cs, utilizando attributes semelhantes aos MAPs. Estes attributes, posicionados em locais específicos na classe, permitem informar à camada de persistência todos os dados relacionados ao mapeamento classe-tabela, como o nome da tabela a que uma classe está relacionada, o nome de cada coluna a que cada propriedade está relacionada, se uma determinada coluna está associada a uma coluna que representa uma chave primária ou estrangeira, etc. 1.8.1 Mapeando classes 1.8.1.1 Regras Gerais • Constructors: As classes deverão ter sempre um constructor sem parâmetros, e, para conveniência de uso, um constructor recebendo como parâmetro as chaves primárias. • Herança: As classes de persistência em geral deverão herdar de "MainRecordPesistence", exceto
Compartilhar