V10 RecursosReferencia
RecursosReferencia
Referencia
Años | Lista de Artículos

¿Cómo utilizar la PriGrelha del SDK en modo edición?

Última modificación el 12/07/2024

El SDK es una librería de patrones y controles de negocio para el entorno Cegid, que proporciona un conjunto de componentes para ofrecer a las aplicaciones de terceros el mismo nivel de funcionalidad y experiencia de usuario que el ERP.

En el desarrollo de aplicaciones de negocio, es recurrente el uso de grids para la introducción de datos. Dependiendo del contexto de uso, puede ser necesario implementar algunas de las funcionalidades existentes en el ERP, como el drilldown, la impresión, la configuración de columnas y otras.

En estos casos se recomienda utilizar la grid proporcionada en el SDK, ya que permite abstraer a los equipos de desarrollo de estas implementaciones, para que puedan centrarse en el negocio del cliente.

Configuración de grids

Los siguientes pasos muestran cómo configurar la grid para el contexto de entrada de datos.

Paso 1 - Inicialización

En primer lugar, debe inicializarse el contexto del SDK. Para más información, consulte el artículo "¿Cómo utilizar los controles del SDK del ERP Cegid?."

Para utilizar la PriGrelha en modo de consulta, por ejemplo en una exploración, le sugerimos que consulte el artículo "¿Cómo utilizar PriGrelha desde el SDK del ERP Cegid?"

El proceso de inicialización en modo de edición es similar y posteriormente se explicarán las diferencias entre el uso de la PriGrelha en modo consulta o en modo edición.

Paso 2 - Definición de columnas y propiedades

Cuando la grid se inicia en modo consulta, no se comporta de la misma manera que en modo edición, por lo que deberá tener en cuenta ciertas propiedades a la hora de definir las columnas.

También debe prestar especial atención al definir el tipo de columna, ya que existe una relación de dependencia entre el tipo de columna y los datos introducidos en las celdas.

También debe prestar atención a ciertas propiedades de la grid, en particular a la propiedad que define el modo de edición.

Propiedades de las columnas

BloqueadaIndica si las celdas están bloqueadas para edición.
ValorMinimoValor mínimo que puede tomar cada celda de la columna (se aplica a las celdas numéricas).
ValorMaximoValor máximo que puede tomar cada celda de la columna (aplicable a celdas numéricas).
CasasDecimaisN.º de decimales.
EditLenTamaño del texto de las celdas (aplicable a celdas de texto).
ComboValoresValores para los ítems de las celdas de tipo "combobox" (se explica más adelante).

Tipos de columna

CellTypeDatePara celdas que aceptan valores referidos a fechas.
CellTypeEditPara celdas que aceptan texto libre.
CellTypeStaticTextPara celdas que muestran texto libre, pero no editable.
CellTypeIntegerPara celdas que aceptan valores numéricos enteros.
CellTypeFloatPara celdas que aceptan valores numéricos decimales.
CellTypeComboBoxCeldas formateadas con combobox.
CellTypeCheckBoxCeldas formateadas con checkbox.

Propiedades de la grid

PermiteEdicaoIndica si la grid está en modo edición (true).
PermiteAgrupamentosUserEn modo edición no existen agrupaciones (false).
PermiteDataFillEn el modo de edición, la rejilla nunca se carga mediante DataBind (false).
PermiteFiltrosEn modo edición, los filtros tampoco están activos (false).

Celdas de tipo ComboBox

Las celdas del tipo ComboBox requieren un tratamiento especial porque necesitan cargar los elementos que se mostrarán en el combo.

Por lo tanto, al definir las columnas, en el método AddColKey debe indicar los ítems del combo utilizando el argumento ComboValores.

El siguiente ejemplo muestra cómo puede cargar los elementos "Cliente", "Fornecedor" y "Outro terceiro" en el combo, en la columna en la que desea que el usuario elija el tipo de entidad:

priGrelha1.AddColKey(colTipoEntidade, FpCellType.CellTypeComboBox, "Tipo Ent.", 8, strComboValores: DaValoresComboTipoEntidade());

private string DaValoresComboTipoEntidade()
{
	return
		"Clientet" +
		"Fornecedort" +
		"Outro Terceiro";
}

Para leer el valor del ítem seleccionado debe utilizar el método normal de lectura de un valor de una celda, correspondiendo el valor leído al índice de la selección.

El siguiente ejemplo muestra cómo leer el valor y convertirlo al tipo de entidad conocido:

private string GetTipoEntidadeFromGrid(int row)
{
	string result = "C";

	switch (PSO.Utils.FInt(priGrelha1.GetGRID_GetValorCelula(row, colTipoEntidade)))
	{
		case 1:
			result = "F";
			break;
		case 2:
			result = "O";
			break;
		default:
			break;
	}

	return result;
}

Para asignar un valor a una celda de este tipo, debe utilizarse el método nativo de la grid, y el valor debe ser el del propio ítem de la combobox:

private void SetValorComboboxGrelha(string col, int row, string value)
{
	//Actualiza o valor da combo na grelha.
	priGrelha1.Grelha.SetText(priGrelha1.Cols.GetEdita(col).Number, row, value);
}

Paso 3 - Lectura y escritura de valores

Método para leer un valor de una celda:

priGrelha1.GetGRID_GetValorCelula(row, colNomeColuna);

Método para escribir un valor en una celda:

priGrelha1.SetGRID_SetValorCelula(row, colNomeColuna, "Valor");

Paso 4 - Invocar las listas en las líneas utilizando F4 

El siguiente ejemplo muestra cómo se presenta la lista de artículos cuando desea seleccionar un artículo concreto. Tiene que invocar una lista desde el evento KeyDown de la grid.

private void priGrelha1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
	try
	{
		if (e.KeyCode == Keys.F4 && !e.Control && !e.Shift)
		{
			TrataF4Linhas(priGrelha1.Grelha.ActiveCol, priGrelha1.Grelha.ActiveRow);
		}

		return;
	}
	catch (Exception ex)
	{
		PSO.Dialogos.MostraErroSimples("Erro ao executar a operação!", StdPlatBS100.StdBSTipos.IconId.PRI_Critico, ex.Message);
	}
}

private void TrataF4Linhas(int col, int row)
{
	// Artigos
	if (col == priGrelha1.Cols.GetEdita(colArtigo).Number)
	{
		PSO.AbreLista(1, ConstantesPrimavera100.Categorias.Artigo, "Artigo", this, priGrelha1.Grelha, "mnuTabArtigo", row, col, false, "(ArtigoAnulado = 0)");
	}
}

Cuando se invoca una lista, el método AbreLista recibe como argumento el form, la grid, la columna y la línea actual.

Así, cuando se invoca la lista mediante F4, el sistema registra el ítem seleccionado por el usuario en el campo de la ventana anterior.

El valor se inserta en la grid y, si existe, se invoca automáticamente el método F4RowFileds.

En este método debe insertar el código necesario para que se ejecute cuando se selecciona un elemento de la lista.

public void F4RowFields(string Categoria, string NomeCampo, dynamic Valor)
{
	try
	{
		if (Categoria == ConstantesPrimavera100.Categorias.Artigo)
		{
			TrataColuna_Artigo(priGrelha1.Grelha.ActiveRow);
		}
	}
	catch (Exception ex)
	{
		PSO.Dialogos.MostraErro("Erro ao carregar o registo.", StdPlatBS100.StdBSTipos.IconId.PRI_Exclama, ex.Message, ex);
	}
}

private void TrataColuna_Artigo(int row)
{
	try
	{
		string artigo = PSO.Utils.FStr(priGrelha1.GetGRID_GetValorCelula(row, colArtigo));

		if (!string.IsNullOrWhiteSpace(artigo))
		{
			if (BSO.Base.Artigos.Existe(artigo))
			{
				BasBEArtigo beArtigo = BSO.Base.Artigos.Consulta(artigo);

				priGrelha1.SetGRID_SetValorCelula(row, colArtigo, beArtigo.Artigo.ToUpper());
				priGrelha1.SetGRID_SetValorCelula(row, colDescArtigo, beArtigo.Descricao.ToUpper());
			}
			else
			{
				throw new Exception("Artigo inexistente!");
			}
		}
	}
	catch (Exception ex)
	{
		priGrelha1.SetGRID_SetValorCelula(row, priGrelha1.Cols.GetEdita(colArtigo).ColKey, string.Empty);
		priGrelha1.SetGRID_SetValorCelula(row, priGrelha1.Cols.GetEdita(colDescArtigo).ColKey, string.Empty);
		
		throw ex;
	}
}

Paso 5 - Evento EditMode

El evento EditMode se activa cuando el usuario entra en modo de edición en una celda, así como cuando lo finaliza.

Debe seguir el mismo procedimiento que con la tecla F4, es decir, validar el valor introducido, rellenar otros datos relacionados, etc.

private void priGrelha1_EditMode(object Sender, PriGrelha.EditModeEventArgs e)
{
	try
	{
		if ((e.Mode == 0) && (e.ChangeMade))
		{
			TrataColuna(e.Col, e.Row);
		}
	}
	catch (Exception ex)
	{
		PSO.Dialogos.MostraErroSimples("Erro ao executar a operação!", StdPlatBS100.StdBSTipos.IconId.PRI_Critico, ex.Message);
	}
}

private void TrataColuna(int col, int row)
{
	if ((row > priGrelha1.Grelha.DataRowCnt) || row == 0)
	{
		return;
	}

	if (col == priGrelha1.Cols.GetEdita(colArtigo).Number)
	{
		TrataColuna_Artigo(row);
	}
}

Paso 6 - Otros métodos y eventos de la grid a tener en cuenta

Métodos

InsereLinhasInserta n líneas desde la posición indicada.
RemoveLinhasElimina n líneas desde la posición indicada.
AdicionaLinhasBrancoGrelhaEdicaoAñade 50 líneas a las líneas existentes para que sean editables.
FormataLinhaEdicaoFormatea todas las columnas de una línea para su edición.
GRID_InsereLinhaEdicaoInserta una línea para su edición.
GRID_RemoveLinhaEdicaoElimina una línea de edición.
Grid_BloqueiaColunaBloquea/desbloquea una o varias celdas.
Grid_BloqueiaLinhaBloquea/desbloquea las celdas de una o más líneas.
Grid_CelulaBloqueadaIndica si la celda está bloqueada.
Grid_EscondeLinhaOculta/muestra una o más líneas.
Grid_LimpaParteDaGrelhaBorra una o más celdas.
Grid_SetActiveCellPosiciona el cursor en una celda de la grid.
PosicionaCelulaAnteriorPosiciona el cursor en la celda anterior.
PosicionaCelulaSeguintePosiciona el cursor en la celda siguiente.

Eventos

AntesInserirLinhaOcurre antes de GRID_InsereLinhaEdicao()
AntesRemoverLinhaOcurre antes de GRID_RemoveLinhaEdicao()
LinhaInseridaSe produce después de GRID_InsereLinhaEdicao()
LinhaRemovidaSe produce después de GRID_RemoveLinhaEdicao()

Podrá encontrar aquí un ejemplo completo de cómo utilizar la PriGrelha en modo edición.

Bookmark or share this article
Esta página foi útil?
Obrigado pelo seu voto.
Artículos Relacionados
Características de las entidades y servicios Concepto de integración Concepto de extensibilidad ¿Cómo registrar proyectos de extensibilidad? Buenas prácticas de organización de proyectos de integración