cancel
Showing results for 
Search instead for 
Did you mean: 

Creación de Formularios por Defecto

Former Member
0 Kudos

Buenas Tardes.

En la Versión 8.8 para crear un objeto lo hacía de la siguiente manera y funcionaba correctamente creando el formulario por defecto, al igual que tomaba la selección de la opción de buscar, pero para la Versión 8.82 no esta haciendo bien el registro. No se que error pueda estar sucediendo, agradecería mucho cualquier aporte. Saludos!

public bool ADDDO(string Code, string TablaName, List<string> tablasHijas, string Nombre, SAPbobsCOM.BoYesNoEnum ManageSeries, SAPbobsCOM.BoYesNoEnum CanCancel, SAPbobsCOM.BoYesNoEnum CanClose, SAPbobsCOM.BoYesNoEnum CanDelete, SAPbobsCOM.BoYesNoEnum CanFind, SAPbobsCOM.BoYesNoEnum CanLog, SAPbobsCOM.BoYesNoEnum CanCreateForm, List<string> FindColumns, SAPbobsCOM.BoUDOObjType TipoObjeto, SAPbobsCOM.Company oCompany, SAPbouiCOM.Application oAplicacion)

        {

            SAPbobsCOM.IUserObjectsMD oUdo = null;

            int retVal = 0;

            try

            {

                oUdo = (SAPbobsCOM.IUserObjectsMD)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserObjectsMD);

                if (!oUdo.GetByKey(Code))

                {

                    oUdo.Code = Code;

                    oUdo.TableName = TablaName;

                    for (int i = 0; i < tablasHijas.Count; i++)

                    {

                        oUdo.ChildTables.TableName = tablasHijas[i];

                    }

                    oUdo.ObjectType = TipoObjeto;

                    oUdo.Name = Nombre;

                    oUdo.ManageSeries = ManageSeries;

                    oUdo.CanCancel = CanCancel;

                    oUdo.CanClose = CanClose;

                    oUdo.CanDelete = CanDelete;

                    oUdo.CanFind = CanFind;

                    oUdo.CanLog = CanLog;

                    oUdo.CanCreateDefaultForm = CanCreateForm;

                    for (int i = 0; i < FindColumns.Count; i++)

                    {

                        oUdo.FindColumns.ColumnAlias = FindColumns[i];

                        oUdo.FindColumns.Add();

                    }

                    retVal = oUdo.Add();

                    if (retVal != 0)

                    {

                        if (retVal != -1)

                        {

                            oAplicacion.MessageBox("ERROR  ADD UDO : " + oCompany.GetLastErrorDescription() + " UDO " + Code, 1, "", "", "");

                        }

                    }

                    GC.Collect();

                }

            }

            catch (Exception er)

            {

                oAplicacion.MessageBox("Error ADDUDO  : " + er.Message + " Stack " + er.StackTrace, 1, "", "", "");

            }

            finally

            {

                try

                {

                    Marshal.ReleaseComObject(oUdo);

                }

                catch

                {

                    GC.Collect();

                }

            }

            if (retVal == 0)

            {

                return true;

            }

            else return false;

        }

Accepted Solutions (0)

Answers (1)

Answers (1)

felipe_loyolarodriguez
Active Contributor
0 Kudos

Cual es el error que arroja el GetLastError?

Former Member
0 Kudos

No da ningún error. Sólo que al verificar Herramientas -> Herramientas de Personalización -> Asistente de Registro de Objeto no se crean correctamente. Por ejemplo, desde el código le estoy indicando que tenga la opción de Buscar y la misma no se encuentra activa. Gracias, Saludos!

felipe_loyolarodriguez
Active Contributor
0 Kudos

Por lo que veo a simple vista es lo siguiente

Estas declarando el CanFind como un BoYesNoEnumm

Y cuando le das la propiedad al UDO lo estas asiento

oUDO.CanFind = CandFind;

Normalmente debería ser

oUDO.CanFind = SAPbobsCOM.BoYesNoEnum.tYES activando la propiedad en el formulario

En tu código en ningún momento le dices que el CandFind es un BoYesNoEnumm.tYES

No se si me explico...

Saludos

Felipe

Former Member
0 Kudos

Gracias Felipe por la ayuda. Pero aún persiste el error

felipe_loyolarodriguez
Active Contributor
0 Kudos

Mira voy a pegar el código que viene en los samples del SDK para crear un UDO.

Estoy usando la versión 8.82 PL 09

        private void AddUDO()

        {

            SAPbobsCOM.UserObjectsMD oUserObjectMD = null;

            oUserObjectMD = ( ( SAPbobsCOM.UserObjectsMD )( oCompany.GetBusinessObject( SAPbobsCOM.BoObjectTypes.oUserObjectsMD ) ) );

            oUserObjectMD.CanCancel = SAPbobsCOM.BoYesNoEnum.tYES;

            oUserObjectMD.CanClose = SAPbobsCOM.BoYesNoEnum.tYES;

            oUserObjectMD.CanCreateDefaultForm = SAPbobsCOM.BoYesNoEnum.tNO;

            oUserObjectMD.CanDelete = SAPbobsCOM.BoYesNoEnum.tYES;

            oUserObjectMD.CanFind = SAPbobsCOM.BoYesNoEnum.tYES;

            oUserObjectMD.CanYearTransfer = SAPbobsCOM.BoYesNoEnum.tYES;

            oUserObjectMD.ChildTables.TableName = "SM_MOR1";

            oUserObjectMD.Code = "SM_MOR";

            oUserObjectMD.ManageSeries = SAPbobsCOM.BoYesNoEnum.tYES;

            oUserObjectMD.Name = "SM_Meal_Order";

            oUserObjectMD.ObjectType = SAPbobsCOM.BoUDOObjType.boud_Document;

            oUserObjectMD.TableName = "SM_OMOR";

            lRetCode = oUserObjectMD.Add();

            // check for errors in the process

            if ( lRetCode != 0 )

            {

                if ( lRetCode == -1 )

                {

                    chkUDOAfter.SetItemChecked( 8, true );

                }

                else

                {

                    oCompany.GetLastError( out lRetCode, out sErrMsg );

                    Interaction.MsgBox( sErrMsg, (Microsoft.VisualBasic.MsgBoxStyle)(0), null );

                }

            }

            else

            {

                Interaction.MsgBox( "UDO: " + oUserObjectMD.Name + " was added successfully", (Microsoft.VisualBasic.MsgBoxStyle)(0), null );

                chkUDOAfter.SetItemChecked( 8, true );

            }

            oUserObjectMD = null;

            GC.Collect(); // Release the handle to the table

        }

Atte.

Felipe

Former Member
0 Kudos

Hola Felipe, Buenos Días! Ayer estuve probando con el ejemplo que me enviaste, y efectivamente marca las opciones indicadas, pero el Formulario por defecto no. Tu haz creado un formulario por defecto, de una objeto tipo MasterData que solo contenga código y nombre, en la versión 8.82?

felipe_loyolarodriguez
Active Contributor
0 Kudos

No, aún no he creado formularios para UDOs.

Intenta usar una versión de la DI API  inferior a la que estás usando, Por lo que sé la DI API del PL 04 es la más estable de la 8.82.


Atte.

FLR

Former Member
0 Kudos

Gracias Felipe, por la información. Saludos!