public static string CreateUdo(string udoCode, string udoDescription, string headerTable, string chidlTable, int position, int fatherMenuId)
        {
            SAPbobsCOM.UserObjectsMD udo = (SAPbobsCOM.UserObjectsMD)DiManager.Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserObjectsMD);
            bool updateFlag = udo.GetByKey(udoCode);

            udo.Code                  = udoCode;
            udo.Name                  = udoDescription;
            udo.ObjectType            = BoUDOObjType.boud_Document;
            udo.TableName             = headerTable;
            udo.ChildTables.TableName = chidlTable;
            udo.ChildTables.Add();


            udo.CanCancel            = BoYesNoEnum.tNO;
            udo.CanClose             = BoYesNoEnum.tYES;
            udo.CanDelete            = BoYesNoEnum.tNO;
            udo.CanFind              = BoYesNoEnum.tYES;
            udo.MenuCaption          = udoDescription;
            udo.CanCreateDefaultForm = BoYesNoEnum.tYES;
            udo.EnableEnhancedForm   = BoYesNoEnum.tYES;
            udo.MenuItem             = BoYesNoEnum.tYES;
            udo.Position             = position;
            udo.FatherMenuID         = fatherMenuId;
            udo.MenuUID              = udoCode;

            udo.FormColumns.FormColumnAlias       = "DocEntry";
            udo.FormColumns.FormColumnDescription = "DocEntry";
            udo.FormColumns.Add();



            return(updateFlag ? udo.Update() != 0 ? Company.GetLastErrorDescription() : string.Empty : udo.Add() != 0 ? Company.GetLastErrorDescription() : string.Empty);
        }
        public void AddChildTableToUserObject(string ObjectName, string ChildTableName)
        {
            // se não preenchido um table name separado, usa o mesmo do objeto

            Log.AppendFormat("Inserção de tabela filha ({0}) ao objeto {1}: ", ChildTableName, ObjectName);

            SAPbobsCOM.UserObjectsMD UserObjectsMD = (SAPbobsCOM.UserObjectsMD)SBOApp.Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserObjectsMD);

            // Remove a arroba do usertable Name
            ChildTableName = ChildTableName.Replace("@", "");

            bool bUpdate = UserObjectsMD.GetByKey(ObjectName);

            bool JaAdicionada = false;

            for (int i = 0; i < UserObjectsMD.ChildTables.Count; i++)
            {
                UserObjectsMD.ChildTables.SetCurrentLine(i);
                if (ChildTableName == UserObjectsMD.ChildTables.TableName)
                {
                    JaAdicionada = true;
                    break;
                }
            }

            if (!JaAdicionada)
            {
                UserObjectsMD.ChildTables.Add();
                UserObjectsMD.ChildTables.TableName = ChildTableName;
            }

            CodErro = UserObjectsMD.Update();
            this.ValidateAction();

            Marshal.ReleaseComObject(UserObjectsMD);
            UserObjectsMD = null;
        }