cancel
Showing results for 
Search instead for 
Did you mean: 

Creating UDO with child table

pm_witmond
Participant
0 Kudos

Hi,

I'm trying to create an UDO with a child table and a standard form. The form should contain some fields from the "mother" and a grid/matrix from the "child" table.

Doing this through the wizard is easy but through code is not working for me

This is my current code,it does create the UDO and the form but there is nothing visible from the child table.

                oUserObjectMD.Code = "UDO";

                oUserObjectMD.Name = "Header";

                oUserObjectMD.TableName = "Header";

                oUserObjectMD.ObjectType = SAPbobsCOM.BoUDOObjType.boud_Document ;

                oUserObjectMD.CanFind = SAPbobsCOM.BoYesNoEnum.tYES;

                oUserObjectMD.CanCreateDefaultForm = SAPbobsCOM.BoYesNoEnum.tYES ;

                oUserObjectMD.UseUniqueFormType = SAPbobsCOM.BoYesNoEnum.tYES;

                oUserObjectMD.FatherMenuID =2048;

                oUserObjectMD.MenuCaption = "UDO";

                oUserObjectMD.MenuUID = "UDO";

                oUserObjectMD.MenuItem = SAPbobsCOM.BoYesNoEnum.tYES;

                oUserObjectMD.ChildTables.TableName = "Lines";

                oUserObjectMD.FindColumns.ColumnAlias = "DocEntry";

                oUserObjectMD.FindColumns.ColumnDescription = "DocEntry";

                oUserObjectMD.FindColumns.Add();

                oUserObjectMD.FindColumns.ColumnAlias = "U_cardcode";

                oUserObjectMD.FindColumns.ColumnDescription = "cardcode";

                oUserObjectMD.FindColumns.Add();

                oUserObjectMD.FormColumns.FormColumnAlias = "DocEntry";

                oUserObjectMD.FormColumns.FormColumnDescription = "DocEntry";

                oUserObjectMD.FormColumns.Add();

                oUserObjectMD.FormColumns.Add();

                oUserObjectMD.FormColumns.FormColumnAlias = "U_cardcode";   //ChildTable ColumnAlias

                oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES;

                oUserObjectMD.FormColumns.FormColumnDescription = "CardCode"; //ChildTable ColumnDescription

                oUserObjectMD.FormColumns.SonNumber = 0;   // ChildTable SonNumber

                oUserObjectMD.FormColumns.SetCurrentLine(1);

                oUserObjectMD.FormColumns.FormColumnAlias = "U_cardcode";   //ChildTable ColumnAlias

                oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES;

                oUserObjectMD.FormColumns.FormColumnDescription = "CardCode"; //ChildTable ColumnDescription

                oUserObjectMD.FormColumns.SonNumber = 1;   // ChildTable SonNumber

               

               

                oUserObjectMD.Add() ;

Please help

Tnx,

Paul

Accepted Solutions (1)

Accepted Solutions (1)

Former Member

Dim oUserObjectMD As SAPbobsCOM.UserObjectsMD

Dim oUDOFind As SAPbobsCOM.UserObjectMD_FindColumns

Dim oUDOForm As SAPbobsCOM.UserObjectMD_FormColumns

Dim oUDOEnhancedForm As SAPbobsCOM.UserObjectMD_EnhancedFormColumns

Set oUserObjectMD = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserObjectsMD)

Set oUDOFind = oUserObjectMD.FindColumns

Set oUDOForm = oUserObjectMD.FormColumns

Set oUDOEnhancedForm = oUserObjectMD.EnhancedFormColumns

oUserObjectMD.Code = "UDO"

oUserObjectMD.Name = "Header"

oUserObjectMD.TableName = "HEADER"

oUserObjectMD.ChildTables.TableName = "LINES"

oUserObjectMD.ObjectType = SAPbobsCOM.BoUDOObjType.boud_Document

oUserObjectMD.CanFind = SAPbobsCOM.BoYesNoEnum.tYES

oUserObjectMD.CanDelete = SAPbobsCOM.BoYesNoEnum.tYES

oUserObjectMD.CanCancel = SAPbobsCOM.BoYesNoEnum.tYES

oUserObjectMD.CanClose = SAPbobsCOM.BoYesNoEnum.tYES

oUserObjectMD.CanYearTransfer = SAPbobsCOM.BoYesNoEnum.tNO

oUserObjectMD.CanLog = SAPbobsCOM.BoYesNoEnum.tNO

oUserObjectMD.ManageSeries = SAPbobsCOM.BoYesNoEnum.tNO

oUserObjectMD.CanCreateDefaultForm = SAPbobsCOM.BoYesNoEnum.tYES

oUserObjectMD.EnableEnhancedForm = SAPbobsCOM.BoYesNoEnum.tYES

oUserObjectMD.MenuItem = SAPbobsCOM.BoYesNoEnum.tYES

oUserObjectMD.FatherMenuID = 2048

oUserObjectMD.MenuCaption = "UDO"

oUserObjectMD.MenuUID = "UDO"

oUserObjectMD.Position = 1

oUserObjectMD.CanLog = SAPbobsCOM.BoYesNoEnum.tNO

oUserObjectMD.UseUniqueFormType = SAPbobsCOM.BoYesNoEnum.tYES

'===========================================================================================

oUDOFind.ColumnAlias = "DocEntry"

oUDOFind.ColumnDescription = "DocEntry"

oUDOFind.Add

oUDOFind.ColumnAlias = "DocNum"

oUDOFind.ColumnDescription = "DocNum"

oUDOFind.Add

oUDOFind.ColumnAlias = "CreateDate"

oUDOFind.ColumnDescription = "CreateDate"

oUDOFind.Add

oUDOFind.ColumnAlias = "UpdateDate"

oUDOFind.ColumnDescription = "UpdateDate"

oUDOFind.Add

oUDOFind.ColumnAlias = "U_cardcode"

oUDOFind.ColumnDescription = "cardcode"

oUDOFind.Add

oUDOFind.ColumnAlias = "U_ShipTo"

oUDOFind.ColumnDescription = "ShipTo"

oUDOFind.Add

oUDOFind.ColumnAlias = "U_BillTo"

oUDOFind.ColumnDescription = "BillTo"

'===========================================================================================

oUDOForm.FormColumnAlias = "DocEntry"

oUDOForm.FormColumnDescription = "DocEntry"

oUDOForm.Add

oUDOForm.FormColumnAlias = "U_cardcode"

oUDOForm.FormColumnDescription = "cardcode"

oUDOForm.Editable = SAPbobsCOM.BoYesNoEnum.tYES

oUDOForm.Add

oUDOForm.FormColumnAlias = "U_ShipTo"

oUDOForm.FormColumnDescription = "ShipTo"

oUDOForm.Editable = SAPbobsCOM.BoYesNoEnum.tYES

oUDOForm.Add

oUDOForm.FormColumnAlias = "U_BillTo"

oUDOForm.FormColumnDescription = "BillTo"

oUDOForm.Editable = SAPbobsCOM.BoYesNoEnum.tYES

oUDOForm.Add

'===========================================================================================

oUDOEnhancedForm.ColumnAlias = "LineId"

oUDOEnhancedForm.ColumnDescription = "LineId"

oUDOEnhancedForm.ColumnIsUsed = SAPbobsCOM.BoYesNoEnum.tYES

oUDOEnhancedForm.ColumnNumber = 1

oUDOEnhancedForm.ChildNumber = 1

oUDOEnhancedForm.Add

oUDOEnhancedForm.ColumnAlias = "U_itemcode"

oUDOEnhancedForm.ColumnDescription = "itemcode"

oUDOEnhancedForm.ColumnIsUsed = SAPbobsCOM.BoYesNoEnum.tYES

oUDOEnhancedForm.ColumnNumber = 2

oUDOEnhancedForm.ChildNumber = 1

oUDOEnhancedForm.Add

oUDOEnhancedForm.ColumnAlias = "U_itemname"

oUDOEnhancedForm.ColumnDescription = "itemname"

oUDOEnhancedForm.ColumnIsUsed = SAPbobsCOM.BoYesNoEnum.tYES

oUDOEnhancedForm.ColumnNumber = 3

oUDOEnhancedForm.ChildNumber = 1

oUDOEnhancedForm.Add

oUDOEnhancedForm.ColumnAlias = "U_quantity"

oUDOEnhancedForm.ColumnDescription = "quantity"

oUDOEnhancedForm.ColumnIsUsed = SAPbobsCOM.BoYesNoEnum.tYES

oUDOEnhancedForm.ColumnNumber = 4

oUDOEnhancedForm.ChildNumber = 1

oUDOEnhancedForm.Add

oUDOEnhancedForm.ColumnAlias = "U_price"

oUDOEnhancedForm.ColumnDescription = "price"

oUDOEnhancedForm.ColumnIsUsed = SAPbobsCOM.BoYesNoEnum.tYES

oUDOEnhancedForm.ColumnNumber = 5

oUDOEnhancedForm.ChildNumber = 1

oUDOEnhancedForm.Add

oUDOEnhancedForm.ColumnAlias = "U_discount"

oUDOEnhancedForm.ColumnDescription = "discount"

oUDOEnhancedForm.ColumnIsUsed = SAPbobsCOM.BoYesNoEnum.tYES

oUDOEnhancedForm.ColumnNumber = 6

oUDOEnhancedForm.ChildNumber = 1

oUDOEnhancedForm.Add

If oUserObjectMD.Add <> 0 Then

'oCompany.GetLastError(lErrCode, sErrMsg)

'MessageBox.Show (lErrCode & ": " & sErrMsg)

Debug.Print oCompany.GetLastErrorDescription

Else

Debug.Print "Ok"

End If

Regards

pm_witmond
Participant
0 Kudos

Hi,

Thanks we're almost there !

The form is created and the columns are visible

But the child columns are not editable

Thansk for the support

Paul

dennis_gimenez
Explorer
0 Kudos

Thanks You!!!!!!!!!!!!!

Answers (3)

Answers (3)

Former Member
0 Kudos

Try this one. Actually I spent a lot of hours to create also a UDO with child table.

    Public Sub oCreateObjects()

        Try

            Dim oUserObjectMD As SAPbobsCOM.UserObjectsMD

            oRec.DoQuery("SELECT Code FROM [" & oCompany.CompanyDB & "]..OUDO WHERE Code = 'APP_OBIL' ")

            If oRec.RecordCount = 1 Then

                Return

            End If

            System.Runtime.InteropServices.Marshal.ReleaseComObject(oRec)

            oRec = Nothing

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

            oUserObjectMD.EnableEnhancedForm = SAPbobsCOM.BoYesNoEnum.tNO

            oUserObjectMD.CanCancel = SAPbobsCOM.BoYesNoEnum.tNO

            oUserObjectMD.CanClose = SAPbobsCOM.BoYesNoEnum.tNO

            oUserObjectMD.CanCreateDefaultForm = SAPbobsCOM.BoYesNoEnum.tNO

            oUserObjectMD.CanDelete = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.CanFind = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.CanYearTransfer = SAPbobsCOM.BoYesNoEnum.tNO

            oUserObjectMD.Code = "APP_BIL"

            oUserObjectMD.ManageSeries = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.Name = "Billing Integration"

            oUserObjectMD.ObjectType = SAPbobsCOM.BoUDOObjType.boud_MasterData

            oUserObjectMD.TableName = "APP_OBIL"

            'For Header

            oUserObjectMD.CanCreateDefaultForm = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.FormColumnAlias = "Code"

            oUserObjectMD.FormColumns.FormColumnDescription = "Code"

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.CanCreateDefaultForm = SAPbobsCOM.BoYesNoEnum.tYES 

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_clientcde"

            oUserObjectMD.FormColumns.FormColumnDescription = "Client Code"

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.CanCreateDefaultForm = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_dealercde"

            oUserObjectMD.FormColumns.FormColumnDescription = "Card Code"

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.CanCreateDefaultForm = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_billno"

            oUserObjectMD.FormColumns.FormColumnDescription = "Bill No"

            oUserObjectMD.FormColumns.Add()

            'For Details

            oUserObjectMD.ChildTables.TableName = "APP_BIL1"

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_DocDate"

            oUserObjectMD.FormColumns.FormColumnDescription = "Trip date"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_DocNo"

            oUserObjectMD.FormColumns.FormColumnDescription = "Hauling Trip Ticket"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_UnitNo"

            oUserObjectMD.FormColumns.FormColumnDescription = "Tractor Body Number"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_PlateNo"

            oUserObjectMD.FormColumns.FormColumnDescription = "Tractor Plate Number"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_TrlNo"

            oUserObjectMD.FormColumns.FormColumnDescription = "Trailer Body Number"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_TrlPlate"

            oUserObjectMD.FormColumns.FormColumnDescription = "Trailer Plate Number"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_TtNo"

            oUserObjectMD.FormColumns.FormColumnDescription = "Trip Ticket Number"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_Ttypecde"

            oUserObjectMD.FormColumns.FormColumnDescription = "Trip type code"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_Routcde"

            oUserObjectMD.FormColumns.FormColumnDescription = "Route Code"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_Source"

            oUserObjectMD.FormColumns.FormColumnDescription = "Trip's origin"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_Destin"

            oUserObjectMD.FormColumns.FormColumnDescription = "Trip's destination"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_Cargocde"

            oUserObjectMD.FormColumns.FormColumnDescription = "Cargo Code"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_Cargodesc"

            oUserObjectMD.FormColumns.FormColumnDescription = "Cargo Description"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_Quantity"

            oUserObjectMD.FormColumns.FormColumnDescription = "Quantity of Cargo"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_NoOfPal"

            oUserObjectMD.FormColumns.FormColumnDescription = "No of qty in pallets"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_BlRate"

            oUserObjectMD.FormColumns.FormColumnDescription = "Billing/Hauling Rate"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_FwdDrNo"

            oUserObjectMD.FormColumns.FormColumnDescription = "Forward DR Number"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_BckDrNo"

            oUserObjectMD.FormColumns.FormColumnDescription = "Backload DR Number"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_NlocTrip"

            oUserObjectMD.FormColumns.FormColumnDescription = "Number of local trips"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_DriverNo"

            oUserObjectMD.FormColumns.FormColumnDescription = "Employee/Driver number"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_EmpName"

            oUserObjectMD.FormColumns.FormColumnDescription = "Employee Name"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_Vatable"

            oUserObjectMD.FormColumns.FormColumnDescription = "Without VAT"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_VatAmount"

            oUserObjectMD.FormColumns.FormColumnDescription = "With VAT"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

            oUserObjectMD.FormColumns.FormColumnAlias = "U_APP_DupCar"

            oUserObjectMD.FormColumns.FormColumnDescription = "Duplicate cargo type"

            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES

            oUserObjectMD.FormColumns.SonNumber = 1

            oUserObjectMD.FormColumns.Add()

             

            If oUserObjectMD.Add() <> 0 Then

                SAP_APP.SetMessage(oCompany.GetLastErrorDescription)

            Else

                SAP_APP.SetMessage("Please close your SAP application to Apply registered object.", SAPbouiCOM.BoStatusBarMessageType.smt_Error)

            End If

            oUserObjectMD = Nothing

            GC.Collect()

        Catch ex As Exception

            SAP_APP.SetMessage(ex.ToString, SAPbouiCOM.BoStatusBarMessageType.smt_Error)

            Return

        End Try

    End Sub

Former Member
0 Kudos

Hi witmond,

visit this link

Try this,

oUdoMd.EnableEnhancedForm = BoYesNoEnum.tYES

Dim oEnhancedColumns As SAPbobsCOM.UserObjectMD_EnhancedFormColumns = oUdoMd.EnhancedFormColumns

And give the child columns here under oEnhancedColumns

Hope it helps,

Regards

Sameer

Former Member
0 Kudos

hi P.M. Witmond

            SAPbobsCOM.UserObjectsMD oUserObjectMD = null;
            SAPbobsCOM.UserObjectMD_FindColumns oUDOFind = null;

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

            oUserObjectMD.Code = "UDO";
            oUserObjectMD.Name = "Header";
            oUserObjectMD.TableName = "HEADER";

            oUserObjectMD.ObjectType = SAPbobsCOM.BoUDOObjType.boud_Document;

            oUserObjectMD.CanFind = SAPbobsCOM.BoYesNoEnum.tYES;
            oUserObjectMD.CanDelete = SAPbobsCOM.BoYesNoEnum.tNO;
            oUserObjectMD.CanCancel = SAPbobsCOM.BoYesNoEnum.tNO;
            oUserObjectMD.CanClose = SAPbobsCOM.BoYesNoEnum.tNO;
            oUserObjectMD.CanYearTransfer = SAPbobsCOM.BoYesNoEnum.tNO;
            oUserObjectMD.CanLog = SAPbobsCOM.BoYesNoEnum.tNO;
            oUserObjectMD.ManageSeries = SAPbobsCOM.BoYesNoEnum.tNO;

            oUserObjectMD.CanCreateDefaultForm = SAPbobsCOM.BoYesNoEnum.tYES;
            oUserObjectMD.EnableEnhancedForm = SAPbobsCOM.BoYesNoEnum.tNO;
            oUserObjectMD.MenuItem = SAPbobsCOM.BoYesNoEnum.tYES;

            oUserObjectMD.FatherMenuID = 2048;
            oUserObjectMD.MenuCaption = "UDO";
            oUserObjectMD.MenuUID = "UDO";
            oUserObjectMD.Position = 1;
            oUserObjectMD.CanLog = SAPbobsCOM.BoYesNoEnum.tNO;


            oUserObjectMD.FindColumns.ColumnAlias = "DocEntry";
            oUserObjectMD.FindColumns.ColumnDescription = "DocEntry";
            oUserObjectMD.FindColumns.Add();

            oUserObjectMD.FindColumns.ColumnAlias = "U_cardcode";
            oUserObjectMD.FindColumns.ColumnDescription = "cardcode";
            oUserObjectMD.FindColumns.Add();

            oUserObjectMD.ChildTables.TableName = "LINES";

            oUserObjectMD.FormColumns.SetCurrentLine(0);
            oUserObjectMD.FormColumns.FormColumnAlias = "U_itemcode";   //ChildTable ColumnAlias
            oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES;
            oUserObjectMD.FormColumns.FormColumnDescription = "itemcode"; //ChildTable ColumnDescription
            oUserObjectMD.FormColumns.SonNumber = 1;   // ChildTable SonNumber
            oUserObjectMD.FormColumns.Add();


            if (oUserObjectMD.Add() != 0)
            {
                Program.oCompany.GetLastErrorDescription();
            }

pm_witmond
Participant
0 Kudos

Hi Chan,

Thanks but it’s not working

Please see my current code :

oUserObjectMD.Code = "UDO";

oUserObjectMD.Name = "UDO";

oUserObjectMD.TableName = "UDO_HEADER";

oUserObjectMD.ObjectType = SAPbobsCOM.BoUDOObjType.boud_Document;

oUserObjectMD.CanFind = SAPbobsCOM.BoYesNoEnum.tYES;

oUserObjectMD.CanCreateDefaultForm = SAPbobsCOM.BoYesNoEnum.tYES;
oUserObjectMD.EnableEnhancedForm = SAPbobsCOM.BoYesNoEnum.tYES;

oUserObjectMD.MenuItem= SAPbobsCOM.BoYesNoEnum.tYES;

oUserObjectMD.FatherMenuID = 2048;

oUserObjectMD.MenuCaption = "UDO";

oUserObjectMD.MenuUID = "UDO";

oUserObjectMD.FindColumns.ColumnAlias = "DocEntry";

oUserObjectMD.FindColumns.ColumnDescription = "DocEntry";

oUserObjectMD.FindColumns.Add();

oUserObjectMD.FormColumns.FormColumnAlias = "DocEntry";

oUserObjectMD.FormColumns.FormColumnDescription = "DocEntry";

oUserObjectMD.FormColumns.Add();

oUserObjectMD.FindColumns.ColumnAlias = "U_CardCode";

oUserObjectMD.FindColumns.ColumnDescription= "CardCode";

oUserObjectMD.FindColumns.Add();

oUserObjectMD.FormColumns.FormColumnAlias = "U_CardCode";

oUserObjectMD.FormColumns.FormColumnDescription = "CardCode";

oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES;

oUserObjectMD.FormColumns.Add();

oUserObjectMD.FindColumns.ColumnAlias = "U_ShipTo";

oUserObjectMD.FindColumns.ColumnDescription = "ShipTo";

oUserObjectMD.FindColumns.Add();

oUserObjectMD.FormColumns.FormColumnAlias = "U_ShipTo";

oUserObjectMD.FormColumns.FormColumnDescription = "ShipTo";

oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES;

oUserObjectMD.FormColumns.Add();

oUserObjectMD.FindColumns.ColumnAlias = "U_BillTo";

oUserObjectMD.FindColumns.ColumnDescription = "BillTo";

oUserObjectMD.FindColumns.Add();

oUserObjectMD.FormColumns.FormColumnAlias = "U_BillTo";

oUserObjectMD.FormColumns.FormColumnDescription = "BillTo";

oUserObjectMD.FormColumns.Editable = SAPbobsCOM.BoYesNoEnum.tYES;

oUserObjectMD.FormColumns.Add();

oUserObjectMD.ChildTables.TableName = "UDO_Lines";

oUserObjectMD.FormColumns.SetCurrentLine(0);

oUserObjectMD.FormColumns.FormColumnAlias = "DocEntry"

oUserObjectMD.FormColumns.FormColumnDescription= "DocEntry";

oUserObjectMD.FormColumns.Add();

oUserObjectMD.FormColumns.FormColumnAlias= "U_ItemCode";  

oUserObjectMD.FormColumns.Editable= SAPbobsCOM.BoYesNoEnum.tYES;

oUserObjectMD.FormColumns.FormColumnDescription = "ItemCode";

oUserObjectMD.FormColumns.SonNumber= 1;  

oUserObjectMD.FormColumns.Add();

using the code above we get this screen

But we need this screen :

Can you find the error ?

Thanks,

Paul

AdKerremans
Active Contributor
0 Kudos

Hi Paul,

I'm sorry, but it is not possible to set the fields of a child table by code.

We have teh same problem for a long time and no indication when of if SAP will solve this.

Regards

Ad

Former Member
0 Kudos

Hi Ad,

I disagree with your answer, you can do all of this, here is some sample and code which I write some years ago to do it.

First the generated xml file (I created code to generate it, since on the time of programming this the export option wasn't available):

  <BO>

    <AdmInfo>

      <Object>206</Object>

      <Version>2</Version>

    </AdmInfo>

    <UserObjectsMD>

      <row>

        <CanCancel>tNO</CanCancel>

        <CanClose>tNO</CanClose>

        <CanCreateDefaultForm>tYES</CanCreateDefaultForm>

        <CanDelete>tYES</CanDelete>

        <CanFind>tYES</CanFind>

        <CanLog>tNO</CanLog>

        <CanYearTransfer>tNO</CanYearTransfer>

        <ChildTables>

          <ChildTable>

            <TableName>ELC0039</TableName>

          </ChildTable>

        </ChildTables>

        <Code>ELC0038</Code>

        <EnableEnhancedForm>tNO</EnableEnhancedForm>

        <ExtensionName></ExtensionName>

        <FindColumns>

          <FindColumn>

            <ColumnAlias>U_ELC00211</ColumnAlias>

            <ColumnDescription>Id Menu</ColumnDescription>

          </FindColumn>

          <FindColumn>

            <ColumnAlias>U_ELC00212</ColumnAlias>

            <ColumnDescription>Id Fenêtre</ColumnDescription>

          </FindColumn>

        </FindColumns>

        <FormColumns>

          <FormColumn>

            <FormColumnAlias>Code</FormColumnAlias>

            <FormColumnDescription>Code</FormColumnDescription>

            <SonNumber>0</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>Name</FormColumnAlias>

            <FormColumnDescription>Name</FormColumnDescription>

            <SonNumber>0</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00014</FormColumnAlias>

            <FormColumnDescription>Actif</FormColumnDescription>

            <SonNumber>0</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00211</FormColumnAlias>

            <FormColumnDescription>Id Menu</FormColumnDescription>

            <SonNumber>0</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00212</FormColumnAlias>

            <FormColumnDescription>Id Fenêtre</FormColumnDescription>

            <SonNumber>0</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00033</FormColumnAlias>

            <FormColumnDescription>Description</FormColumnDescription>

            <SonNumber>0</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00027</FormColumnAlias>

            <FormColumnDescription>Commentaires</FormColumnDescription>

            <SonNumber>0</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00014</FormColumnAlias>

            <FormColumnDescription>Actif</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00213</FormColumnAlias>

            <FormColumnDescription>Item Id</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00214</FormColumnAlias>

            <FormColumnDescription>Type élément</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00215</FormColumnAlias>

            <FormColumnDescription>Left</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00216</FormColumnAlias>

            <FormColumnDescription>Top</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00217</FormColumnAlias>

            <FormColumnDescription>Width</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00218</FormColumnAlias>

            <FormColumnDescription>Height</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00241</FormColumnAlias>

            <FormColumnDescription>Left Rel. To</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00242</FormColumnAlias>

            <FormColumnDescription>Top Rel. To</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00243</FormColumnAlias>

            <FormColumnDescription>Width Rel. To</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00244</FormColumnAlias>

            <FormColumnDescription>Height Rel. To</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00219</FormColumnAlias>

            <FormColumnDescription>Table Id</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00220</FormColumnAlias>

            <FormColumnDescription>Field Id</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00221</FormColumnAlias>

            <FormColumnDescription>Visible</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00222</FormColumnAlias>

            <FormColumnDescription>Enabled</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00223</FormColumnAlias>

            <FormColumnDescription>AffectsFormMode</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00224</FormColumnAlias>

            <FormColumnDescription>FromPane</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00225</FormColumnAlias>

            <FormColumnDescription>ToPane</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00226</FormColumnAlias>

            <FormColumnDescription>TabOrder</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00227</FormColumnAlias>

            <FormColumnDescription>LinkTo</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00033</FormColumnAlias>

            <FormColumnDescription>Description</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00228</FormColumnAlias>

            <FormColumnDescription>Descr. Length</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00229</FormColumnAlias>

            <FormColumnDescription>RightJustified</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00230</FormColumnAlias>

            <FormColumnDescription>ForeColor</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00231</FormColumnAlias>

            <FormColumnDescription>BackColor</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00232</FormColumnAlias>

            <FormColumnDescription>TextStyle</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00233</FormColumnAlias>

            <FormColumnDescription>FontSize</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00234</FormColumnAlias>

            <FormColumnDescription>SuppressZero</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00235</FormColumnAlias>

            <FormColumnDescription>ChooseFromListType</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00236</FormColumnAlias>

            <FormColumnDescription>ChooseFromListAlias</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00237</FormColumnAlias>

            <FormColumnDescription>LinkedObjectType</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00238</FormColumnAlias>

            <FormColumnDescription>ValOn</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00239</FormColumnAlias>

            <FormColumnDescription>ValOff</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00240</FormColumnAlias>

            <FormColumnDescription>DispDesc</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

          <FormColumn>

            <FormColumnAlias>U_ELC00027</FormColumnAlias>

            <FormColumnDescription>Commentaires</FormColumnDescription>

            <SonNumber>1</SonNumber>

          </FormColumn>

        </FormColumns>

        <ManageSeries>tNO</ManageSeries>

        <Name>Personnalized UI</Name>

        <ObjectType>boud_MasterData</ObjectType>

        <TableName>ELC0038</TableName>

        <UseUniqueFormType>tYES</UseUniqueFormType>

      </row>

    </UserObjectsMD>

  </BO>

And the code to import it:

namespace BusinessOne.DI.Components
{
    using System;
    using System.ComponentModel;
    using System.Globalization;
    using System.Threading;
    using System.Xml;
    using Addon;
    using Exceptions;
    using Properties;
    using SAPbobsCOM;
    using Types.Enums.DI;
    using Utilities;

    public class UserObjectsMDExt : DIObjectBase
    {
        #region Private Members
        private string _key1;
        #endregion

        #region Constructors & Destructors
        public UserObjectsMDExt()
            : base()
        {
        }
        #endregion

        #region Properties
        public string Code
        {
            get
            {
                _key1 = ((UserObjectsMD)COMObject).Code;
                return _key1;
            }

            set
            {
                if ((null == value) ||
                    ((null != value) && (20 < value.Length)))
                {
                    throw new ItemTypeException(string.Format(CultureInfo.InvariantCulture, B1Connection.Language.Translate("T0000014"), value, "UserObjectsMD.Code"));
                }

                ((UserObjectsMD)COMObject).Code = value;
            }
        }

        public override string ObjectTable
        {
            get { return "OUDO"; }
        }

        public override BusinessObjectType ObjectType
        {
            get { return BusinessObjectType.UserObjectsMD; }
        }

        public string TableName
        {
            get
            {
                return ((UserObjectsMD)COMObject).TableName;
            }

            set
            {
                if ((null == value) ||
                    ((null != value) && (19 < value.Length)))
                {
                    throw new ItemTypeException(string.Format(CultureInfo.InvariantCulture, B1Connection.Language.Translate("T0000014"), value, "UserObjectsMD.TableName"));
                }

                ((UserObjectsMD)COMObject).TableName = value;
            }
        }

        public override object UniqueId
        {
            get { return Code; }
        }

        public override string Xml
        {
            get
            {
                string xml = "<?xml version=\"1.0\" encoding=\"UTF-16\"?><BOM>";
                string xmlTemp = string.Empty;
                bool found = false;
                int pos = 0;

                xml += "<BO><AdmInfo><Object>206</Object><Version>2</Version></AdmInfo><UserObjectsMD><row>";
                xml += "<CanCancel>" + ((UserObjectsMD)COMObject).CanCancel + "</CanCancel>";
                xml += "<CanClose>" + ((UserObjectsMD)COMObject).CanClose + "</CanClose>";
                xml += "<CanCreateDefaultForm>" + ((UserObjectsMD)COMObject).CanCreateDefaultForm + "</CanCreateDefaultForm>";
                xml += "<CanDelete>" + ((UserObjectsMD)COMObject).CanDelete + "</CanDelete>";
                xml += "<CanFind>" + ((UserObjectsMD)COMObject).CanFind + "</CanFind>";
                xml += "<CanLog>" + ((UserObjectsMD)COMObject).CanLog + "</CanLog>";
                xml += "<CanYearTransfer>" + ((UserObjectsMD)COMObject).CanYearTransfer + "</CanYearTransfer>";

                if (0 < ((UserObjectsMD)COMObject).ChildTables.Count)
                {
                    found = false;
                    xmlTemp = "<ChildTables>";

                    for (pos = 0; pos < ((UserObjectsMD)COMObject).ChildTables.Count; pos++)
                    {
                        ((UserObjectsMD)COMObject).ChildTables.SetCurrentLine(pos);
                        if (false == string.IsNullOrEmpty(((UserObjectsMD)COMObject).ChildTables.Code))
                        {
                            xmlTemp += "<ChildTable><LogTableName>" + ((UserObjectsMD)COMObject).ChildTables.LogTableName + "</LogTableName>" +
                                        "<TableName>" + ((UserObjectsMD)COMObject).ChildTables.TableName + "</TableName></ChildTable>";
                            found = true;
                        }
                    }

                    if (true == found)
                    {
                        xml += xmlTemp + "</ChildTables>";
                    }
                }

                xml += "<Code>" + ((UserObjectsMD)COMObject).Code + "</Code>";
#if !SBO881
                xml += "<EnableEnhancedForm>" + ((SAPbobsCOM.UserObjectsMD)COMObject).EnableEnhancedForm + "</EnableEnhancedForm>";
#endif
                xml += "<ExtensionName>" + ((UserObjectsMD)COMObject).ExtensionName + "</ExtensionName>";

                if (0 != ((UserObjectsMD)COMObject).FindColumns.Count)
                {
                    found = false;
                    xmlTemp = "<FindColumns>";
                    for (pos = 0; pos < ((UserObjectsMD)COMObject).FindColumns.Count; pos++)
                    {
                        ((UserObjectsMD)COMObject).FindColumns.SetCurrentLine(pos);
                        if (false == string.IsNullOrEmpty(((UserObjectsMD)COMObject).FindColumns.Code))
                        {
                            xmlTemp += "<FindColumn><ColumnAlias>" + ((UserObjectsMD)COMObject).FindColumns.ColumnAlias + "</ColumnAlias>"
                                        + "<ColumnDescription>" + ((UserObjectsMD)COMObject).FindColumns.ColumnDescription + "</ColumnDescription>"
                                        + "</FindColumn>";
                            found = true;
                        }
                    }

                    if (true == found)
                    {
                        xml += xmlTemp + "</FindColumns>";
                    }
                }

                if (0 != ((UserObjectsMD)COMObject).FormColumns.Count)
                {
                    found = false;
                    xmlTemp = "<FormColumns>";
                    for (pos = 0; pos < ((UserObjectsMD)COMObject).FormColumns.Count; pos++)
                    {
                        ((UserObjectsMD)COMObject).FormColumns.SetCurrentLine(pos);
                        if (false == string.IsNullOrEmpty(((UserObjectsMD)COMObject).FormColumns.Code))
                        {
                            xmlTemp += string.Format(
                                            CultureInfo.InvariantCulture,
                                            "<FormColumn><FormColumnAlias>{0}</FormColumnAlias><FormColumnDescription>{1}</FormColumnDescription><SonNumber>{2}</SonNumber></FormColumn>",
                                            ((UserObjectsMD)COMObject).FormColumns.FormColumnAlias,
                                            ((UserObjectsMD)COMObject).FormColumns.FormColumnDescription,
                                            ((UserObjectsMD)COMObject).FormColumns.SonNumber);
                            found = true;
                        }
                    }

                    if (true == found)
                    {
                        xml += xmlTemp + "</FormColumns>";
                    }
                }

#if !SBO881
                xml += "<FormSRF>" + ((SAPbobsCOM.UserObjectsMD)COMObject).FormSRF + "</FormSRF>";
#endif
                xml += string.Format(CultureInfo.InvariantCulture, "<LogTableName>{0}</LogTableName>", ((UserObjectsMD)COMObject).LogTableName);
                xml += string.Format(CultureInfo.InvariantCulture, "<ManageSeries>{0}</ManageSeries>", ((UserObjectsMD)COMObject).ManageSeries);
#if !SBO881
                xml += "<MenuCaption>" + ((SAPbobsCOM.UserObjectsMD)COMObject).MenuCaption + "</MenuCaption>";
                xml += "<MenuItem>" + ((SAPbobsCOM.UserObjectsMD)COMObject).MenuItem + "</MenuItem>";
                xml += "<MenuUID>" + ((SAPbobsCOM.UserObjectsMD)COMObject).MenuUID + "</MenuUID>";
#endif
                xml += string.Format(CultureInfo.InvariantCulture, "<Name>{0}</Name>", ((UserObjectsMD)COMObject).Name);
                xml += string.Format(CultureInfo.InvariantCulture, "<ObjectType>{0}</ObjectType>", ((UserObjectsMD)COMObject).ObjectType);
#if !SBO881
                xml += "<Position>" + ((SAPbobsCOM.UserObjectsMD)COMObject).Position + "</Position>";
#endif
                xml += string.Format(CultureInfo.InvariantCulture, "<TableName>{0}</TableName>", ((UserObjectsMD)COMObject).TableName);
                xml += "<UseUniqueFormType>" + ((UserObjectsMD)COMObject).UseUniqueFormType + "</UseUniqueFormType>";
                xml += "</row></UserObjectsMD></BO></BOM>";

                return xml;
            }
        }
        #endregion

        #region Framework Overloaded Functions
        public override bool Exists()
        {
            bool returnValue = false;

            if ((null != COMObject) &&
                (null != GetKeyByFields(Code, TableName)))
            {
                returnValue = true;
            }

            return returnValue;
        }

        public override bool GetObject(XmlDocument xmlDoc)
        {
            bool returnValue = false;

            if (null != xmlDoc)
            {
                XmlNode key1 = xmlDoc.SelectSingleNode("//row/Code");

                if (null != key1)
                {
                    _key1 = key1.InnerText;
                    returnValue = GetByKey(_key1);
                }
            }

            return returnValue;
        }

        public override int Add(XmlDocument xmlDoc)
        {
            int errorCode = 0;

            if (null != xmlDoc)
            {
                CreateNew();
                if (null != COMObject)
                {
                    SetXml(xmlDoc);

                    errorCode = Add();
                }
            }

            return errorCode;
        }

        public override string ToString()
        {
            return Code;
        }
        #endregion

        #region Protected Functions
        protected override void ReadXml(string xmlFilename, int pos)
        {
            XmlDocument xmlDoc = new XmlDocument();
           
            xmlDoc.Load(xmlFilename);
            SetXml(xmlDoc);
        }
        #endregion

        #region Private Functions
        private void SetXml(XmlDocument xmlDoc)
        {
            UserObjectsMD udo = (UserObjectsMD)COMObject;

            XmlDocument tempDoc = new XmlDocument();
            XmlNode xmlNode = null;
            int pos = 0;

            xmlNode = xmlDoc.SelectSingleNode("//row/CanCancel");
            if (null != xmlNode)
            {
                udo.CanCancel = ("tYES" == xmlNode.InnerText) ? BoYesNoEnum.tYES : BoYesNoEnum.tNO;
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/CanClose");
            if (null != xmlNode)
            {
                udo.CanClose = ("tYES" == xmlNode.InnerText) ? BoYesNoEnum.tYES : BoYesNoEnum.tNO;
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/CanCreateDefaultForm");
            if (null != xmlNode)
            {
                udo.CanCreateDefaultForm = ("tYES" == xmlNode.InnerText) ? BoYesNoEnum.tYES : BoYesNoEnum.tNO;
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/CanDelete");
            if (null != xmlNode)
            {
                udo.CanDelete = ("tYES" == xmlNode.InnerText) ? BoYesNoEnum.tYES : BoYesNoEnum.tNO;
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/CanFind");
            if (null != xmlNode)
            {
                udo.CanFind = ("tYES" == xmlNode.InnerText) ? BoYesNoEnum.tYES : BoYesNoEnum.tNO;
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/CanLog");
            if (null != xmlNode)
            {
                udo.CanLog = ("tYES" == xmlNode.InnerText) ? BoYesNoEnum.tYES : BoYesNoEnum.tNO;
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/CanYearTransfer");
            if (null != xmlNode)
            {
                udo.CanYearTransfer = ("tYES" == xmlNode.InnerText) ? BoYesNoEnum.tYES : BoYesNoEnum.tNO;
            }

#if !SBO881
            xmlNode = xmlDoc.SelectSingleNode("//row/EnableEnhancedForm");
            if (null != xmlNode)
            {
                udo.EnableEnhancedForm = ("tYES" == xmlNode.InnerText) ? SAPbobsCOM.BoYesNoEnum.tYES : SAPbobsCOM.BoYesNoEnum.tNO;
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/MenuCaption");
            if (null != xmlNode)
            {
                udo.MenuCaption = xmlNode.InnerText;
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/FormSRF");
            if (null != xmlNode)
            {
                udo.FormSRF = xmlNode.InnerText;
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/MenuItem");
            if (null != xmlNode)
            {
                udo.MenuItem = ("tYES" == xmlNode.InnerText) ? SAPbobsCOM.BoYesNoEnum.tYES : SAPbobsCOM.BoYesNoEnum.tNO;
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/MenuUID");
            if (null != xmlNode)
            {
                udo.MenuUID = xmlNode.InnerText;
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/Position");
            if (null != xmlNode)
            {
                udo.Position = BusinessOne.Utilities.Conversions.ToInt(xmlNode.InnerText);
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/UseUniqueFormType");
            if (null != xmlNode)
            {
                udo.UseUniqueFormType = ("tYES" == xmlNode.InnerText) ? SAPbobsCOM.BoYesNoEnum.tYES : SAPbobsCOM.BoYesNoEnum.tNO;
            }
#endif

            xmlNode = xmlDoc.SelectSingleNode("//row/ChildTables");
            if (null != xmlNode)
            {
                pos = 0;
                foreach (XmlNode childNode in xmlNode.ChildNodes)
                {
                    tempDoc.LoadXml(childNode.OuterXml);
                    if (0 != pos)
                    {
                        udo.ChildTables.Add();
                        udo.ChildTables.SetCurrentLine(udo.ChildTables.Count - 1);
                    }

                    xmlNode = tempDoc.SelectSingleNode("//LogTableName");
                    if (null != xmlNode)
                    {
                        udo.ChildTables.LogTableName = xmlNode.InnerText;
                    }

                    xmlNode = tempDoc.SelectSingleNode("//TableName");
                    if (null != xmlNode)
                    {
                        udo.ChildTables.TableName = xmlNode.InnerText;
                    }

                    pos++;
                }
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/Code");
            if (null != xmlNode)
            {
                udo.Code = xmlNode.InnerText;
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/ExtensionName");
            if ((null != xmlNode) && (false == string.IsNullOrEmpty(xmlNode.InnerText)))
            {
                udo.ExtensionName = xmlNode.InnerText;
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/FindColumns");
            if (null != xmlNode)
            {
                pos = 0;
                foreach (XmlNode childNode in xmlNode.ChildNodes)
                {
                    tempDoc.LoadXml(childNode.OuterXml);
                    if (0 != pos)
                    {
                        udo.FindColumns.Add();
                        udo.FindColumns.SetCurrentLine(udo.FindColumns.Count - 1);
                    }

                    xmlNode = tempDoc.SelectSingleNode("//ColumnAlias");
                    if (null != xmlNode)
                    {
                        udo.FindColumns.ColumnAlias = xmlNode.InnerText;
                    }

                    xmlNode = tempDoc.SelectSingleNode("//ColumnDescription");
                    if (null != xmlNode)
                    {
                        udo.FindColumns.ColumnDescription = xmlNode.InnerText;
                    }

                    pos++;
                }
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/FormColumns");
            if (null != xmlNode)
            {
                pos = 0;
                foreach (XmlNode childNode in xmlNode.ChildNodes)
                {
                    tempDoc.LoadXml(childNode.OuterXml);
                    if (0 != pos)
                    {
                        udo.FormColumns.Add();
                        udo.FormColumns.SetCurrentLine(udo.FormColumns.Count - 1);
                    }

                    xmlNode = tempDoc.SelectSingleNode("//FormColumnAlias");
                    if (null != xmlNode)
                    {
                        udo.FormColumns.FormColumnAlias = xmlNode.InnerText;
                    }

                    xmlNode = tempDoc.SelectSingleNode("//FormColumnDescription");
                    if (null != xmlNode)
                    {
                        udo.FormColumns.FormColumnDescription = xmlNode.InnerText;
                    }

                    xmlNode = tempDoc.SelectSingleNode("//SonNumber");
                    if (null != xmlNode)
                    {
                        udo.FormColumns.SonNumber = Conversions.ToInt(xmlNode.InnerText);
                    }

                    pos++;
                }
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/LogTableName");
            if ((null != xmlNode) && (false == string.IsNullOrEmpty(xmlNode.InnerText)))
            {
                udo.LogTableName = xmlNode.InnerText;
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/ManageSeries");
            if (null != xmlNode)
            {
                udo.ManageSeries = ("tYES" == xmlNode.InnerText) ? BoYesNoEnum.tYES : BoYesNoEnum.tNO;
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/Name");
            if (null != xmlNode)
            {
                udo.Name = xmlNode.InnerText;
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/ObjectType");
            if (null != xmlNode)
            {
                switch (xmlNode.InnerText)
                {
                    case "boud_MasterData":
                        udo.ObjectType = BoUDOObjType.boud_MasterData;
                        break;
                    case "boud_Document":
                        udo.ObjectType = BoUDOObjType.boud_Document;
                        break;
                }
            }

            xmlNode = xmlDoc.SelectSingleNode("//row/TableName");
            if (null != xmlNode)
            {
                udo.TableName = xmlNode.InnerText;
            }
        }
        #endregion
    }
}

And it works since years, in production environements

Regards,

Eric

Former Member
0 Kudos

hi P.M. Witmond

When B1 data register And When the DI API to register The difference

SELECT * FROM UDO1 WHERE CODE = 'UDO'

SELECT * FROM UDO2 WHERE CODE = 'UDO'

SELECT * FROM UDO3 WHERE CODE = 'UDO'

B1 Application UDO Create

DI API UDO Create

SAP B1 9.0 PL06 32bit

This is Test Source

SAPbobsCOM.UserObjectsMD oUserObjectMD = null;
            SAPbobsCOM.UserObjectMD_FindColumns oUDOFind = null;
            SAPbobsCOM.UserObjectMD_FormColumns oUDOForm = null;

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

            oUDOFind = oUserObjectMD.FindColumns;
            oUDOForm = oUserObjectMD.FormColumns;

            oUserObjectMD.Code = "UDO";
            oUserObjectMD.Name = "Header";
            oUserObjectMD.TableName = "HEADER";

            oUserObjectMD.ObjectType = SAPbobsCOM.BoUDOObjType.boud_Document;

            oUserObjectMD.CanFind = SAPbobsCOM.BoYesNoEnum.tYES;
            oUserObjectMD.CanDelete = SAPbobsCOM.BoYesNoEnum.tYES;
            oUserObjectMD.CanCancel = SAPbobsCOM.BoYesNoEnum.tYES;
            oUserObjectMD.CanClose = SAPbobsCOM.BoYesNoEnum.tYES;
            oUserObjectMD.CanYearTransfer = SAPbobsCOM.BoYesNoEnum.tNO;
            oUserObjectMD.CanLog = SAPbobsCOM.BoYesNoEnum.tNO;
            oUserObjectMD.ManageSeries = SAPbobsCOM.BoYesNoEnum.tNO;

            oUserObjectMD.CanCreateDefaultForm = SAPbobsCOM.BoYesNoEnum.tYES;
            oUserObjectMD.EnableEnhancedForm = SAPbobsCOM.BoYesNoEnum.tYES;
            oUserObjectMD.MenuItem = SAPbobsCOM.BoYesNoEnum.tYES;

            oUserObjectMD.FatherMenuID = 2048;
            oUserObjectMD.MenuCaption = "UDO";
            oUserObjectMD.MenuUID = "UDO";
            oUserObjectMD.Position = 1;
            oUserObjectMD.CanLog = SAPbobsCOM.BoYesNoEnum.tNO;

            oUserObjectMD.UseUniqueFormType = SAPbobsCOM.BoYesNoEnum.tYES;

            //===========================================================================================
            oUDOFind.ColumnAlias = "DocEntry";
            oUDOFind.ColumnDescription = "DocEntry";

            oUDOFind.Add();
            oUDOFind.ColumnAlias = "DocNum";
            oUDOFind.ColumnDescription = "DocNum";

            oUDOFind.Add();
            oUDOFind.ColumnAlias = "CreateDate";
            oUDOFind.ColumnDescription = "CreateDate";

            oUDOFind.Add();
            oUDOFind.ColumnAlias = "UpdateDate";
            oUDOFind.ColumnDescription = "UpdateDate";

            oUDOFind.Add();
            oUDOFind.ColumnAlias = "U_cardcode";
            oUDOFind.ColumnDescription = "cardcode";

            oUDOFind.Add();
            oUDOFind.ColumnAlias = "U_ShipTo";
            oUDOFind.ColumnDescription = "ShipTo";

            oUDOFind.Add();
            oUDOFind.ColumnAlias = "U_BillTo";
            oUDOFind.ColumnDescription = "BillTo";

            //===========================================================================================
            oUserObjectMD.ChildTables.TableName = "LINES";

            oUDOForm.Add();
            oUDOForm.SetCurrentLine(0);
            oUDOForm.FormColumnAlias = "LineId";
            oUDOForm.FormColumnDescription = "LineId";
            oUDOForm.SonNumber = 1;

            oUDOForm.Add();
            oUDOForm.SetCurrentLine(1);
            oUDOForm.FormColumnAlias = "U_itemcode";
            oUDOForm.FormColumnDescription = "itemcode";
            oUDOForm.Editable = SAPbobsCOM.BoYesNoEnum.tNO;
            oUDOForm.SonNumber = 1;

            oUDOForm.Add();
            oUDOForm.SetCurrentLine(2);
            oUDOForm.FormColumnAlias = "U_itemname";
            oUDOForm.FormColumnDescription = "itemname";
            oUDOForm.Editable = SAPbobsCOM.BoYesNoEnum.tNO;
            oUDOForm.SonNumber = 1;

            oUDOForm.Add();
            oUDOForm.SetCurrentLine(3);
            oUDOForm.FormColumnAlias = "U_quantity";
            oUDOForm.FormColumnDescription = "quantity";
            oUDOForm.Editable = SAPbobsCOM.BoYesNoEnum.tNO;
            oUDOForm.SonNumber = 1;

            oUDOForm.Add();
            oUDOForm.SetCurrentLine(4);
            oUDOForm.FormColumnAlias = "U_price";
            oUDOForm.FormColumnDescription = "price";
            oUDOForm.Editable = SAPbobsCOM.BoYesNoEnum.tNO;
            oUDOForm.SonNumber = 1;

            oUDOForm.Add();
            oUDOForm.SetCurrentLine(5);
            oUDOForm.FormColumnAlias = "U_discount";
            oUDOForm.FormColumnDescription = "discount";
            oUDOForm.Editable = SAPbobsCOM.BoYesNoEnum.tNO;
            oUDOForm.SonNumber = 1;

            //===========================================================================================
            oUDOForm.SetCurrentLine(6);
            oUDOForm.FormColumnAlias = "DocEntry";
            oUDOForm.FormColumnDescription = "DocEntry";

            oUDOForm.Add();
            oUDOForm.SetCurrentLine(7);
            oUDOForm.FormColumnAlias = "U_cardcode";
            oUDOForm.FormColumnDescription = "cardcode";
            oUDOForm.Editable = SAPbobsCOM.BoYesNoEnum.tYES;

            oUDOForm.Add();
            oUDOForm.SetCurrentLine(8);
            oUDOForm.FormColumnAlias = "U_ShipTo";
            oUDOForm.FormColumnDescription = "ShipTo";
            oUDOForm.Editable = SAPbobsCOM.BoYesNoEnum.tYES;

            oUDOForm.Add();
            oUDOForm.SetCurrentLine(9);
            oUDOForm.FormColumnAlias = "U_BillTo";
            oUDOForm.FormColumnDescription = "BillTo";
            oUDOForm.Editable = SAPbobsCOM.BoYesNoEnum.tYES;


            if (oUserObjectMD.Add() != 0)
            {
                Program.oCompany.GetLastErrorDescription();
            }

==========================================================

I think there is no problem in the data.

Data Check that no problem was found.

pm_witmond
Participant
0 Kudos

Hi Chan,

Did you actually tested the code ?

On our system (9.0 PL08 64B) it's not working

We can create the UDO, no error is displayed but the last step where we must select the fields for the child was never executed.

Thanks,

Paul

pm_witmond
Participant
0 Kudos

Hi Eric,

Thanks for the answer, the approach is different but if it works who cares.

I'll try this asap

Thanks,

Paul

Former Member
0 Kudos

HI P.M.Witmond

SQL Data B1 Create and DI API is the same.

I had progressed enough testing.

But neither of us with the same results.

I think the problem with DI API.

My Source is no problem.

So I enrolled in Idea Place.

Waiting for an answer from SAP.

Regards,

AdKerremans
Active Contributor
0 Kudos

Hi,

Can you give the link for your idea so we can vote for it.

Regards

Ad

Former Member
0 Kudos

hi Ad

I did not know that you can vote.

Thank

URL Copy & Paste

https://ideas.sap.com/ct/ct_a_view_idea.bix?c=5E7C8A57-8FB9-4C04-9571-9B61022802BA&idea_id={5E5E7774...

Vote please.

Regards

ChanKyu Kim

AdKerremans
Active Contributor
0 Kudos

Hi Chankyu,

Your link doesn't work

Regards

Ad

Former Member
0 Kudos

hi Ad

Sorry My Link doesn;t work

https://ideas.sap.com/ct/ct_a_view_idea.bix?c=5E7C8A57-8FB9-4C04-9571-9B61022802BA&idea_id={5E5E7774...

URL Copy and New Internet Explorer URL Paste Plz.

Regards