¿Cómo abrir listas en aplicaciones externas?
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. 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: 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: 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). 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. 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. 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. 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: 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. Un ejemplo práctico del uso de esta técnica está disponible en Github.Abrir lista del 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.