Actu. el form con datos nuevos después el update

csharp
Etiquetas: #<Tag:0x00007fb8db308ae0>

#1

hola estimados,
tengo un formulario el cual esta con automanaged = true y bueno los datos se actualizand, eliminan y agregan casi automáticamente.
Tengo una grilla que es el de los métodos de pagos, el cual obtiene un valor y actualiza el campo pymcode del OCRD, cuando actualizo esto hago que el caption de mi button se ponga en update, pero apenas lo presiona actualiza y se cierra…

Cómo puedo actualizar el formulario con nuevos valores una vez actualizado. o hay un evento, que puedo manejar en código, que ocurre después de que se completa el evento de actualización?

muchas gracias!


#2

Hola :grin:

Cuando quieras cambiar el “Estado” del form, debes hacerlo cambiando la propiedad “Mode” del formulario, es decir es vez de cambiar el caption del button, debes modificar el Mode del Form, esto asignara el caption del boton “1” (“Crear”,“Actualizar”,“OK”) de acuerdo al modo seleccionado (fm_UPDATE_MODE, fm_ADD_MODE,fm_OK_MODE,fm_FIND_MODE, ect).

oForm.Mode = SAPbouiCOM.BoFormMode.fm_UPDATE_MODE; // Coloca en Modo Actualizar y Cambia el caption del boton de forma automatica

Saludos :vulcan_salute:


#3

Hola Gabriel, feliz año ejeje, si entiendo eso, como me habias dicho anteriomente utilizo el automanaged, entonces solo cambio los captiony ya he logrado entender ya mucho el funcionamiento de eventos y tambien de las grillas en sap, ahora logro hacer la busqueda, luego actualizar la grilla, pero al momento de colocar actualizar se cierra la ventana, si guarda pero quiero que se refresque y quede como ok, pero con los datos nuevos, ya que se cierra el form.
abro el form y veo como esta la grilla por defecto (el metodo de pago que ya posee)


le cambio el metodo de cambio por defecto, y el boton como ves se ponen en update

luego de presiono el boton , se cierra el form.

diciendo que si se actualizo, y en efecto lo hizo, pero no me deja mantener el form con el cambio de datos, entonces ese es mi dilema, pensaba que podria ser con un item event
(Application.SBO_Application.ActivateMenuItem(“1289”); //Previous data record
Application.SBO_Application.ActivateMenuItem(“1288”); //Following data record)o solo seria un cambio de form?
que piensas?
muchas gracias!


#4

Me parece que algo estas haciendo en el Evento ClickBefore o ClickAfter del button para que eso ocurra, pero deberas colocar el codigo para determinar las posibles causas porque no es el comportamiento normal de un Form.


#5

bueno tengo mi boton con clickafter, el cual tiene un case como tu me recomendaste con los caption, y para poder llenar la grilla en el case find: voy un método que hace esto:


        public void grBusVlr () {



            SAPbobsCOM.Recordset oRecordset1 = ((SAPbobsCOM.Recordset)(oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset)));

            oitem = oForm.Items.Item("grdpy");
            oGrid = ((SAPbouiCOM.Grid)(oitem.Specific));
            string vlGrilla = null;

            string Sql10 = "select t0.PayMethCod as 'grcode',t1.Cardcode as 'cod' from OPYM as t0  left join  ocrd as t1 on t0.PayMethCod= t1.pymcode  where t1.cardcode='" + EditText0.Value.ToString() + "'";
            oRecordset1.DoQuery(Sql10);
            string Extraerdequery10 = oRecordset1.Fields.Item("grcode").Value.ToString();
            vlGrilla = Extraerdequery10;
            oForm.DataSources.DataTables.Item("grPagdt");
            oForm.DataSources.DataTables.Item(0).ExecuteQuery("SELECT distinct t0.PayMethCod AS 'Código',t0.Descript as' Descripción',t0.Active as 'Activo'  from OPYM  as t0 left join  ocrd as t1  on t0.PayMethCod= t1.pymcode where t0.type='O' ");
            //oGrid.DataTable = oForm.DataSources.DataTables.Item("grPagdt2");
            oGrid.Columns.Item("Activo").Type = SAPbouiCOM.BoGridColumnType.gct_CheckBox;
            //para agregar el link buton a la grilla
            oGrid.Columns.Item("Código").Type = SAPbouiCOM.BoGridColumnType.gct_EditText;
            SAPbouiCOM.EditTextColumn oEdit = (SAPbouiCOM.EditTextColumn)oGrid.Columns.Item("Código");
            oEdit.LinkedObjectType = "147";

            //oCBC.ValidValues.Add(oRec.Fields.Item(0).Value.ToString(), oRec.Fields.Item(1).Value.ToString());
            //algo parecido a lo que hace el boto de fijar metodo, lo hago aca para que el viejaSel no sea -1 y pueda sacar la linea en negrita
            //string valor = (string)oGrid.DataTable.GetValue("Código", 2); esto es para saber lo que lleva una linea en especifico
            for (int iRows = 0; iRows <= oGrid.Rows.Count - 1; iRows++)
            {
                if ((string)oGrid.DataTable.GetValue("Código", iRows) == vlGrilla)
                {
                    if (viejaSel != -1)
                        oGrid.CommonSetting.SetRowFontStyle(viejaSel, SAPbouiCOM.BoFontStyle.fs_Plain);

                    oGrid.CommonSetting.SetRowFontStyle(iRows + 1, SAPbouiCOM.BoFontStyle.fs_Bold);
                    viejaSel = iRows + 1;

                }
                
               
            }


        }

mas que nada primero para que me re dibuje la grilla y ponga la linea ne negrita.

el boton que fija el metodo estandar despues de que hace la actualizacion, es decir hay un cambio le cambio el caption a ok.
image

 int viejaSel = -1;
        String sValorGrid;
        public void Button2_ClickBefore(object sboObject, SAPbouiCOM.SBOItemEventArg pVal, out bool BubbleEvent )
        {
            BubbleEvent = true;
            try
            {

                if (oGrid.Rows.SelectedRows.Count > 0)   //VERIFICA QUE EXISTA UN ROW SELECCIONADO
                {

                    if (viejaSel != -1)
                        oGrid.CommonSetting.SetRowFontStyle(viejaSel, SAPbouiCOM.BoFontStyle.fs_Plain);

                    int nSelecRow = (oGrid.Rows.SelectedRows.Item(0, SAPbouiCOM.BoOrderType.ot_RowOrder));
                    viejaSel = nSelecRow + 1;
                    //oApp.SetStatusBarMessage("El dato es " + oldSelection + nSelecRow);
                    //seleccion  el row y se destaca en negrita
                    oGrid.CommonSetting.SetRowFontStyle(nSelecRow + 1, SAPbouiCOM.BoFontStyle.fs_Bold);
                     sValorGrid = Convert.ToString(oGrid.DataTable.GetValue("Código", nSelecRow));

                    // Button0.Caption = "Update";
                    if (Button0.Caption=="OK"){

                        Button0.Caption ="Update";

                   
                    }

                 
                }

            }
            catch (Exception)
            {

                oApp.SetStatusBarMessage("Error  en el boton:  " + oCompany.GetLastErrorDescription(), SAPbouiCOM.BoMessageTime.bmt_Medium, true);



            }


        }

para que así se vaya al case ok, estoy redirigiendo lo mal?
igual intenteba con

goto caption ""

pero de la misma manera sale.


#6

Gabriel y cuanto tengo el case

case "OK":
                                
     

                    break;```

como puedo hacer que vuelva a cargar el mismo carcode que se acaba de actualizar?, es decir cuando haya una actualización, vuelva a cargar la información pero con la actualización, pienso que eso seria la mejor solución no?

#7

Deberia ver todo el codigo, con lo que colocas no es suficiente, si puedes pasar un fork o link de GitHub con el form, seria excelente.

Saludos.


#8

estimado aca va el link
form1
saludos,