Como abrir listas em aplicações externas?
O mecanismo de listas do ERP PRIMAVERA é, provavelmente, a funcionalidade mais popular do sistema, pois permite aceder e explorar a informação armazenada no âmbito das operações disponibilizadas na Shell da aplicação. Por outro lado, as listas permitem também editar registos no sistema, sendo possível na Shell, através da tecla “F4”, chamar uma lista de clientes e selecionar o registo a editar. De seguida demonstraremos como abrir uma lista do ERP a partir de uma aplicação externa devidamente ligada a uma categoria de informação. Passo 1 - Criar o projeto e adicionar as referências necessárias No Visual Studio começamos por criar um projeto simples Windows Forms App (.NET Framework) adicionando as seguintes referências do ERP: Passo 2 - Inicialização da plataforma e da empresa de trabalho Antes de qualquer operação sobre o ERP, é necessário efetuar a abertura da plataforma e da empresa de trabalho através do seguinte método: Passo 3 - Evento AbreLista Na Shell quando um controlo F4 invoca a respetiva lista (tecla F4 pressionada), o evento AbreLista da classe StdBSNavegador (assembly StdPlatBS100) é despoletado. Para ser possível controlar a lista do lado da aplicação externa também teremos de subscrever esse evento (idealmente, no load da classe). O evento, já subscrito do lado da aplicação externa deve, antes de mais, validar se o utilizador tem permissões para a categoria selecionada e, só depois, efetuar a abertura da respetiva lista. Passo 4 - Abertura da Lista Tal como vimos anteriormente, no momento em que o evento é despoletado, o método TrataNavegadorAbreLista é invocado. É, aqui, que será feito todo o tratamento para que a lista possa ser aberta. Em primeiro lugar, é necessário declarar uma property do tipo StdBELista pública, com o nome Lista. Esta property será usada na inicialização da lista. O evento AbreLista recebe, nos seus parâmetros, para além da query e do filtro, o controlo que invocou a lista. Este controlo deve ser atribuído à respetiva propriedade do FormLista. É necessário, também, validar se o form é modal ou não. Caso seja modal, a própria lista também será apresentada da mesma forma. Passo 5 - Abertura da Lista Adicione um controlo do tipo TextBox e no evento click de botão é apenas necessário colocar a seguinte linha: A categoria passada para o TrataF4 (1º parâmetro) pode ser obtida pelas constantes que se encontram na assembly ConstantesPrimavera100 e classe Categorias. Da mesma forma, o nome do audit encontra-se em constantes na classe Audit. Um exemplo prático da utilização desta técnica está disponível no Github.Abrir lista do ERP
private ErpBS100.ErpBS BSO { get; set; }
private StdPlatBS100.StdPlatBS PSO { get; set; }
private void CreateContextERP()
{
PSO = new StdPlatBS100.StdPlatBS();
BSO = new ErpBS100.ErpBS();
StdPlatBS100.StdBSConfApl objAplConf = new StdPlatBS100.StdBSConfApl
{
Instancia = _Instancia,
AbvtApl = "ERP",
PwdUtilizador = _Password,
Utilizador = _Utilizador,
LicVersaoMinima = "10.00"
};
StdBE100.StdBETransaccao objStdTransac = new StdBE100.StdBETransaccao();
EnumTipoPlataforma TipoPlataforma = EnumTipoPlataforma.tpEmpresarial;
try
{
PSO.AbrePlataformaEmpresa(_Company, objStdTransac, objAplConf, TipoPlataforma);
}
catch (Exception ex)
{
throw (ex);
}
if (PSO.Inicializada)
{
BSO.AbreEmpresaTrabalho(TipoPlataforma, _Company, _Utilizador, _Password, objStdTransac, _Instancia);
}
}
private StdPlatBS100.StdBSNavegador Navegador = null;
Navegador = PSO.Navegador;
Navegador.AbreLista += new StdPlatBS100.StdBSNavegador.AbreListaHandler(Navegador_AbreLista);
public void Navegador_AbreLista(StdPlatBE100.StdBEF4 ObjF4, StdBSSql100.StdBSOSQL SqlBSO, StdBESql100.StdBESqlQuery Query, StdBE100.StdBECampos Filtro)
{
// Utilizador tem permissões sobre a categoria?
if ((!PSO.Categorias.TestaPermissaoLista(Query.Categoria, Query.Query, Query.Utilizador, Query.Sistema, StdPlatBE100.StdBETipos.TipoPermissaoListas.tplstConsultar)))
{
return;
}
// Utilizador tem permissões para consultar a lista em causa?
TrataNavegadorAbreLista(ObjF4, SqlBSO, Query, Filtro);
}
public StdPlatBS100.StdBSLista Lista { get; set; } = null;
private void TrataNavegadorAbreLista(StdPlatBE100.StdBEF4 ObjF4, StdBSSql100.StdBSOSQL SqlBSO, StdBESql100.StdBESqlQuery Query, StdBE100.StdBECampos Filtro)
{
StdPlatBS100.frmLista fFormLista = null;
var bF4 = false;
var bModal = false;
if (ObjF4 != null)
{
bF4 = true;
bModal = ObjF4.Modal;
}
if (bF4)
{
if (bModal || fFormLista == null)
{
//F4 Modal
fFormLista = PSO.Dialogos.DaDialogoListas();
PSO.Menus.ClasseBase = this;
fFormLista.F4 = (ObjF4 != null);
fFormLista.F4Ctrl = ObjF4;
fFormLista.Inicializa(this, Query, Filtro);
// O show tem que ser feito fora do Inicializa
fFormLista.ShowDialog();
if (!ObjF4.FormF4.TopLevel)
{
ObjF4.FormF4.Parent.FindForm()?.BringToFront();
}
else
{
ObjF4.FormF4.BringToFront();
}
}
else
{
// O ZOrder passou a ser executado apenas quando a lista não é modal
fFormLista.BringToFront();
}
}
else
{
fFormLista.BringToFront();
}
}
PSO.Listas.TrataF4("Clientes", "Cliente", this, textBoxCliente, "mnuTabClientes");
PSO.Listas.TrataF4(ConstantesPrimavera100.Categorias.Cliente, "Cliente", this, textBoxCliente, ConstantesPrimavera100.Audit.TAB_CLIENTES);
login para deixar a sua opinião.