Hola!
Primero, debes definir en que momento vas a hacer la actualizacion de datos:
- Si se hace cada vez que el usuario actualiza una celda.
- Si se hace solo cuando se presione el boton “Actualizar”, tal como lo hace el estandar de SAP.
En ambos casos hay que saber cuando se modifica el contenido de una celda, bien sea para disparar el evento de actualizacion o para cambiar el boton de “Crear” u “OK” a “Modificar” (Si usas la misma logica de SAP en sus pantallas).
Para esto deberas tener una propiedad, campo o variable en el form que guarde el valor de una celda al hacer focus y verificar que al momento de salir de esta, el valor inicial sea distinto (eventos GotFocusAfter y ValidateBefore), con esto se determina cuando se habilita la actualizacion.
Por Ejemplo, para una columan de tipo String defino este campo en el form:
Private Col_StringDatoAnterior As String
Luego usando este campo cada vez que se hace foco a una celda:
Private Sub Grid1_GotFocusAfter(sboObject As System.Object, pVal As SAPbouiCOM.SBOItemEventArg) Handles Grid1.GotFocusAfter
If (pVal.ColUID = "Mi Columna String1" or pVal.ColUID = "Mi Columna String2") Then
Dim dtRow As Integer = Grid1.GetDataTableRowIndex(pVal.Row)
Col_DatAnt = Grid1.DataTable.GetValue(pVal.ColUID, dtRow) 'Asigno el valor inicial de la celda'
End If
End Sub
Luego al validar la celda, verifico si el valor de esta a cambiado:
Private Sub Grid1_ValidateBefore(sboObject As System.Object, pVal As SAPbouiCOM.SBOItemEventArg, ByRef BubbleEvent As System.Boolean) Handles Grid1.ValidateBefore
Funciones.FreezeForm(oForm, True)
If Grid1.DataTable.GetValue(pVal.ColUID, pVal.Row) <> Col_DatAnt Then
ActualizaUDT(pVal.Row, pVal.ColUID) 'En Caso de que se Actualice Cada Vez que cambie una celda'
Button1.Caption = "Actualizar" 'En Caso de que se actualice por este boton'
EndIf
Funciones.FreezeForm(oForm, False)
End Sub
Una vez que determinas cuando e que momento actualizar, deberas usar el objeto UserTables para Insertar:
oUserTable = oCompany.UserTables.Item("Mi_Tabla_UDT");
int iRet = 0;
try
{
//oCompany.StartTransaction();
oUserTable.Code = code;
oUserTable.Name = name;
oUserTable.UserFields.Fields.Item("U_Field1").Value = Valor1;
oUserTable.UserFields.Fields.Item("U_Field2").Value = Valor2;
iRet = oUserTable.Add();
}
catch (Exception ex)
{
return ex.Message;
}
O Usar GetByKey para Actualizar:
oUserTable = oCompany.UserTables.Item("Mi_Tabla_UDT");
int iRet = 0;
try
{
//oCompany.StartTransaction();
oUserTable.GetByKey(Code);
oUserTable.Name = name;
oUserTable.UserFields.Fields.Item("U_Field1").Value = Valor1;
oUserTable.UserFields.Fields.Item("U_Field2").Value = Valor2;
iRet = oUserTable.Update();
}
catch (Exception ex)
{
return ex.Message;
}
Saludos !