V10 RecursosGuías
RecursosGuías
Guías
Años | List of Articles

¿Cómo abrir listas en aplicaciones externas?

Última modificación el 03/05/2024

El mecanismo de listas del ERP PRIMAVERA es, probablemente, la característica más popular del sistema, ya que permite acceder y explorar la información almacenada en el ámbito de las operaciones disponibles en el Shell de la aplicación. Por otra parte, las listas también permiten editar registros en el sistema, por lo que puede llamar a una lista de clientes en el Shell utilizando la tecla "F4" y seleccionar el registro que desea editar.

Abrir lista del ERP

A continuación demostraremos cómo abrir una lista del ERP desde una aplicación externa debidamente conectada a una categoría de información.

Paso 1 - Crear el proyecto y añadir las referencias necesarias

En Visual Studio empezaremos por crear un proyecto sencillo de Windows Forms App (.NET Framework), añadiendo las siguientes referencias del ERP:

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

Paso 2 - Inicializar la plataforma y la empresa de trabajo

Antes de realizar cualquier operación en el ERP, es necesario abrir la plataforma y la empresa de trabajo utilizando el siguiente 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

En el Shell, cuando un control F4 invoca la lista correspondiente (tecla F4 pulsada), el evento AbreLista de la clase StdBSNavigator (assembly StdPlatBS100) se activa. Para poder controlar la lista desde el lado de la aplicación externa, también necesitamos suscribirnos a ese evento (idealmente, en el load de la clase).

private StdPlatBS100.StdBSNavegador Navegador = null;

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

El evento, ya suscrito en el lado de la aplicación externa, debe primero validar que el usuario tiene permisos para la categoría seleccionada y luego abrir la lista respectiva.

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

Paso 4 - Apertura de la lista

Como vimos anteriormente, cuando se desencadena el evento, el método TrataNavegadorAbreLista es invocado. Aquí es donde se realizará todo el procesamiento para poder abrir la lista. En primer lugar, es necesario delcarar una property del tipo StdBELista pública, con el nombre Lista. Esta propiedad se utilizará para inicializar la lista.

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

El evento AbreLista recibe en sus parámetros, además de la query y el filtro, el control que invocó la lista. Este control debe asignarse a la propiedad correspondiente de la lista FormLista. También es necesario validar si el formulario es modal o no. Si es modal, la propia lista también se mostrará del mismo modo.

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

Paso 5 - Apertura de la lista

Añada un control de tipo TextBox y en el evento de clic del botón solo tiene que poner la siguiente línea:

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

La categoría pasada a TrataF4 (1.er parámetro) puede obtenerse a partir de las constantes que se encuentran en la assembly ConstantesPrimavera100 y clase Categorias. Del mismo modo, el nombre del audit se puede encontrar en las constantes de la clase Audit.

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

Un ejemplo práctico del uso de esta técnica está disponible en Github.

Bookmark or share this article
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!