V10 RecursosGuias
RecursosGuias
Guias
Voltar | Lista de artigos

Como abrir listas em aplicações externas?

Última alteração a 28/09/2021

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.

Abrir lista do ERP

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:

  • ERPBS100
  • StdBE100
  • StdBE100
  • StdBSSql100
  • StdPlatBE100
  • StdPlatBS100
  • Primavera.Extensibility.Engine
  • Primavera.Extensibility.Paterns

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:

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);
	}
}

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).

private StdPlatBS100.StdBSNavegador Navegador = null;

Navegador = PSO.Navegador;
Navegador.AbreLista += new StdPlatBS100.StdBSNavegador.AbreListaHandler(Navegador_AbreLista);

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.

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);
}

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.

public StdPlatBS100.StdBSLista Lista { get; set; } = null;

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.

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();
	}
}

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:

PSO.Listas.TrataF4("Clientes", "Cliente", this, textBoxCliente, "mnuTabClientes");

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.

PSO.Listas.TrataF4(ConstantesPrimavera100.Categorias.Cliente, "Cliente", this, textBoxCliente, ConstantesPrimavera100.Audit.TAB_CLIENTES);

Um exemplo prático da utilização desta técnica está disponível no Github.

Adicionar aos favoritos ou partilhar este artigo
Esta página foi útil?
Obrigado pelo seu voto.

login para deixar a sua opinião.

Obrigado pelo seu feedback. Iremos analisá-lo para continuarmos a melhorar!
Artigos Relacionados
Começar a Usar Como criar um projeto de integração com Visual Studio? Como criar um projeto de extensibilidade de interface (PEX) com Visual Studio? Como criar um projeto de extensibilidade de API (Motor) com Visual Studio? Como criar separadores do utilizador com Visual Studio?