Skip to Content
Author's profile photo Mahendrakumar D.P.

How to User Defined Fields,User Defined Tables and Register User Defined Object in SAP Business One SDK?

Hello Guys,

Greetings !!!

Kindly Find the Attached Procedure Step By Step to Creating UDF,UDT and Registering UDO in SAP Business One System Forms.

  1. Creating User Defined Fields
  2. Creating User Defined Tables
  3. Registering User Defined Objects

 

Your Source Code Template Must be Same as  Follows   https://blogs.sap.com/2017/08/03/simple-sap-b1-add-on-for-beginners/

  • To Create User Defined Tables : There are Six Types Of Tables in SAP Business One. NoObject,Document,DocumentLines,MasterData and MasterDataLines. Call Following Function in Class Main.
objUtilities.CreateTable("GOD_QCGR", "GOD Groups", SAPbobsCOM.BoUTBTableType.bott_NoObject) 

 

Just Change the Type Of Parameter to Table Type. CreateTable Function Will be as Follows. Define CreateTable Function in Utilities Class

Public Function CreateTable(ByVal TableName As String, ByVal TableDescription As String, ByVal TableType As SAPbobsCOM.BoUTBTableType) As Boolean
        Dim intRetCode As Integer
        Dim objUserTableMD As SAPbobsCOM.UserTablesMD
        objUserTableMD = GOD_Main.GOD_Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserTables)
        Try
            If (Not objUserTableMD.GetByKey(TableName)) Then
                objUserTableMD.TableName = TableName
                objUserTableMD.TableDescription = TableDescription
                objUserTableMD.TableType = TableType
                intRetCode = objUserTableMD.Add()
                If (intRetCode = 0) Then
                    GOD_Main.GOD_Application.SetStatusBarMessage(TableDescription & " User Defined Table Successfully.", SAPbouiCOM.BoMessageTime.bmt_Short, False)
                    Return True
                Else
                    GOD_Main.GOD_Application.SetStatusBarMessage(TableDescription & " Failed To Creat User Defined Table.", SAPbouiCOM.BoMessageTime.bmt_Short, True)
                End If
            Else
                Return False
            End If
        Catch ex As Exception
            GOD_Main.GOD_Application.MessageBox(ex.Message)
        Finally
            System.Runtime.InteropServices.Marshal.ReleaseComObject(objUserTableMD)
            GC.Collect()
        End Try
    End Function

 

  • For Adding Fields in User Defined No Object Table GOD_OCGR Use Following Functions For
  • We Can Add Alphanumeric,Date,Quantity and all type Of User Defined Fields in System Table and User Defined Tables also
  • I have Created 3 Types of Tables – 1.Np Object Type Table. 2.Document Type and 3. Master Type Of Table
  • Registering of User Defined Table also done in Following Code

Class Main Code will be as Follows

 

Imports System.Reflection
Imports System.Diagnostics
Imports System.Net.Mail
Imports System.Net
Imports System.Text
Imports SAPbobsCOM

Public Class clsMain

#Region "Declaration"
    Dim objChooseForm As SAPbouiCOM.Form

    Public WithEvents GOD_Application As SAPbouiCOM.Application
    Public strGetManifestResourceStreamName As String = "GOD_QC_Addon"
    Public GOD_Company As SAPbobsCOM.Company
    Public SourceRowNo1 As Integer
    'Creating Instances For Each Class

    Public objUtilities As clsUtilities
    Public objItemMaster As clsItemMaster
    Public LastErrorDescription As String
    Public LastErrorCode As Integer

    'System Forms
    Public QueryXML As New Xml.XmlDocument
    Public objChoose As clsChooseFromList
    Public strVariant As String = ""
    Public strMenuClicked As String = ""
    Public strTmp As String = ""
    Public GOD_SourceForm As SAPbouiCOM.Form
    Public GOD_Static As SAPbouiCOM.StaticText
    Public GOD_Rec As SAPbobsCOM.Recordset
    'For UI
    Public GOD_Matrix As SAPbouiCOM.Matrix
    Public GOD_Edit As SAPbouiCOM.EditText
    Public GOD_Item As SAPbouiCOM.Item
    Public GOD_Combo As SAPbouiCOM.ComboBox
    Private referencedFormUID As String
    'For DI
    Public oDBs_Head As SAPbouiCOM.DBDataSource
    Public oDBs_Detail As SAPbouiCOM.DBDataSource
    'Objects
    Public GOD_ChkBox As SAPbouiCOM.CheckBox
    Public GOD_Column1 As SAPbouiCOM.ColumnTitle
    Public isAddConnected As Boolean = False
    Public GOD_RS As SAPbobsCOM.Recordset
    Public oRec As SAPbobsCOM.Recordset
    Public str As String = ""
    Public strTemp As String = ""
    'For Updating Sub User Details in SAP Activity Master
    Dim sCode As String = ""
    'For Sending Internal Messages in SAP Business one
    Public oCmpSrv As SAPbobsCOM.CompanyService
    Public oMessageService As MessagesService
#End Region

#Region "New"
    Public Sub New()
        'Object Initialization 19042017 - Mahendrakumar
        objUtilities = New clsUtilities
        objItemMaster = New clsItemMaster
    End Sub
#End Region

#Region "Initialise"
    Public Function Initialise() As Boolean
        GOD_Application = objUtilities.GetApplication()
        objUtilities.ShowSuccessMessage("Please wait for the System Form Manipulation Addon Icon to appear in menu. It may take few minutes based on Server and Network speed.")
        GOD_Company = objUtilities.GetCompany(GOD_Application)
        Call CreateTables()
        Call createObjects()
        objUtilities.ShowSuccessMessage("System Form Manipulation Add-on Connected. You may now proceed to use addon.")
        Return True
    End Function
#End Region

#Region "Create Objects"
    Private Sub createObjects()
        objChoose = New clsChooseFromList
    End Sub
#End Region


#Region "Register UDO"
    Private Sub RegisterUDO()
        'For Document Type Table
        Dim findAliasNDescription = New String(,) {{"DocEntry", "DocEntry"}} 'For Find in Default Form - DocEntry Column
        findAliasNDescription = New String(,) {{"DocEntry", "DocEntry"}}
        If Not objUtilities.UDOExists("GOD_OQCG") = True Then
            objUtilities.registerUDO("GOD_OQCG", "GOD QC Master", SAPbobsCOM.BoUDOObjType.boud_Document, findAliasNDescription, "GOD_OQCG", "GOD_QCG1", "", "", "", "", "", "", "", SAPbobsCOM.BoYesNoEnum.tNO)
        End If
     
        'For Master Data Type Table Registration
        findAliasNDescription = New String(,) {{"Code", "Code"}} 'For Find in Default Form - Code and Name For Master Type Of User Defined Table
        If Not objUtilities.UDOExists("GOD_OREC") = True Then
            objUtilities.registerUDO("GOD_OREC", "GOD Receiver", SAPbobsCOM.BoUDOObjType.boud_MasterData, findAliasNDescription, "GOD_OREC", "GOD_REC1", "", "", "", "", "", "", "", SAPbobsCOM.BoYesNoEnum.tNO)
        End If
    End Sub
#End Region
    Public Sub CLFHeader(ByVal ItemUID As String, ByVal FormUID As String, ByVal CFLName As String, ByVal FormTypeEx As String)
        clsChooseFromList.ItemUID = ItemUID
        clsChooseFromList.SourceFormUID = FormUID
        clsChooseFromList.CFLChoice = CFLName
        Dim objChooseForm As SAPbouiCOM.Form
        If objUtilities.FormExist(FormTypeEx) = True Then
            'Do Nothing
        Else
            GOD_Main.objUtilities.LoadForm("GOD_CFLHeader.xml", "GOD_CFLHeader", "GOD_CFLHeader", ResourceType.Embeded)
            objChooseForm = GOD_Main.GOD_Application.Forms.ActiveForm
            objChoose.databound(objChooseForm, GOD_SourceForm, oDBs_Detail, oDBs_Detail, "", SourceRowNo1)
        End If
    End Sub

#Region "Create Table"
    Public Sub CreateTables()
        Try
            'No Object Type Table
            objUtilities.CreateTable("GOD_OMGF", "GOD Mgf Catalog No", SAPbobsCOM.BoUTBTableType.bott_NoObject)

            'Document Type Table
            objUtilities.CreateTable("GOD_OQCG", "GOD QC Master", SAPbobsCOM.BoUTBTableType.bott_Document)
            objUtilities.CreateTable("GOD_QCG1", "GOD QC Master-Rows", SAPbobsCOM.BoUTBTableType.bott_DocumentLines)

            'Master Data Table
            objUtilities.CreateTable("GOD_OREC", "GOD Receiver", SAPbobsCOM.BoUTBTableType.bott_MasterData)
            objUtilities.CreateTable("GOD_REC1", "GOD Receiver-Rows", SAPbobsCOM.BoUTBTableType.bott_MasterDataLines)

            'Adding Fields in System Table -e.g. Item Master
            objUtilities.AddAlphaField("OITM", "Instrmnt", "Instrument", 1)

            'Adding Fields in User Defined Table
            objUtilities.AddFloatField("@GOD_OQCG", "Qty", "Qty", BoFldSubTypes.st_Quantity)
            objUtilities.AddDateField("@GOD_OQCG", "QCDate", "QC Date", BoFldSubTypes.st_None)
        Catch ex As Exception
            GOD_Main.GOD_Application.StatusBar.SetText(ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Warning)
        Finally
        End Try
    End Sub
#End Region

#Region "Item Event"
    Public Sub ItemEvent(ByVal FormUID As String, ByRef pVal As SAPbouiCOM.ItemEvent, ByRef BubbleEvent As Boolean) Handles GOD_Application.ItemEvent
        Try
            Select Case pVal.FormTypeEx
                Case "GOD_CFLHeader" 'For Choose From List at Header Level
                    objChoose.ItemEvent(FormUID, pVal, BubbleEvent)
                Case "GOD_CFLDetail" 'For Choose From List At Detail Level
                    objChoose.ItemEvent(FormUID, pVal, BubbleEvent)
                Case "150" 'For Item Master Item Event Calling
                    objItemMaster.ItemEvent(FormUID, pVal, BubbleEvent)
            End Select
        Catch ex As Exception
            GOD_Application.MessageBox(ex.Message)
        End Try
    End Sub
#End Region

#Region "Application Event"
    Private Sub ApplicationEvent(ByVal EventType As SAPbouiCOM.BoAppEventTypes) Handles GOD_Application.AppEvent
        If (EventType = SAPbouiCOM.BoAppEventTypes.aet_CompanyChanged Or EventType = SAPbouiCOM.BoAppEventTypes.aet_ServerTerminition Or EventType = SAPbouiCOM.BoAppEventTypes.aet_ShutDown) Then
            CloseApp()
        End If
    End Sub
#End Region

End Class



 

Class Utitilies Will be as Follows

 

Imports System.Reflection
Public Class clsUtilities
    Public strLastErrorCode As String
    Public strLastError As String
    Public GOD_Form As SAPbouiCOM.Form
    Public objEdit As SAPbouiCOM.EditText
    Public strAddMenu As String = ""
    Private strThousSep As String = ","
    Private strDecSep As String = "."
    Private intQtyDec As Integer = 3
    Private objForm As SAPbouiCOM.Form
    Dim GOD_RecSet As SAPbobsCOM.Recordset
    Dim Crores, Lakhs, Rupees, Paise, Temp
    Dim DecimalPlace As Long, Count As Long
    Dim myLakhs, myCrores As String
    Dim Place(9) As String
    Public Sub AddAlphaField(ByVal TableName As String, ByVal ColumnName As String, ByVal ColDescription As String, ByVal Size As Integer, Optional ByVal DefaultValue As String = "")
        Try
            addField(TableName, ColumnName, ColDescription, SAPbobsCOM.BoFieldTypes.db_Alpha, Size, SAPbobsCOM.BoFldSubTypes.st_None, "", "", DefaultValue)
        Catch ex As Exception
            GOD_Main.GOD_Application.StatusBar.SetText(ex.Message & " Field Name is " & ColDescription, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Warning)
        End Try
    End Sub
    Public Sub AddDateField(ByVal TableName As String, ByVal ColumnName As String, ByVal ColDescription As String, ByVal SubType As SAPbobsCOM.BoFldSubTypes)
        Try
            addField(TableName, ColumnName, ColDescription, SAPbobsCOM.BoFieldTypes.db_Date, 0, SubType, "", "", "")
        Catch ex As Exception
            GOD_Main.GOD_Application.StatusBar.SetText(ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Warning)
        End Try
    End Sub

    Public Sub AddFloatField(ByVal TableName As String, ByVal ColumnName As String, ByVal ColDescription As String, ByVal SubType As SAPbobsCOM.BoFldSubTypes)
        Try
            addField(TableName, ColumnName, ColDescription, SAPbobsCOM.BoFieldTypes.db_Float, 0, SubType, "", "", "")
        Catch ex As Exception
            GOD_Main.GOD_Application.StatusBar.SetText(ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Warning)
        End Try
    End Sub

    Public Sub AddNumericField(ByVal TableName As String, ByVal ColumnName As String, ByVal ColDescription As String, ByVal Size As Integer, ByVal ValidValues As String, ByVal ValidDescriptions As String, ByVal DefultValue As String)
        Try
            addField(TableName, ColumnName, ColDescription, SAPbobsCOM.BoFieldTypes.db_Numeric, Size, SAPbobsCOM.BoFldSubTypes.st_None, ValidValues, ValidDescriptions, DefultValue)
        Catch ex As Exception
            GOD_Main.GOD_Application.StatusBar.SetText(ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Warning)
        End Try
    End Sub

    Public Sub AddNumericField(ByVal TableName As String, ByVal ColumnName As String, ByVal ColDescription As String, ByVal Size As Integer)
        Try
            addField(TableName, ColumnName, ColDescription, SAPbobsCOM.BoFieldTypes.db_Numeric, Size, SAPbobsCOM.BoFldSubTypes.st_None, "", "", "")
        Catch ex As Exception
            GOD_Main.GOD_Application.StatusBar.SetText(ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Warning)
        End Try
    End Sub

    Public Sub addFieldWithLinkedTable(ByVal TableName As String, ByVal ColumnName As String, ByVal ColDescription As String, ByVal FieldType As SAPbobsCOM.BoFieldTypes, ByVal Size As Integer, ByVal SubType As SAPbobsCOM.BoFldSubTypes, ByVal LinkedTableName As String, ByVal EditSize As Integer)
        Dim objUserFieldMD As SAPbobsCOM.UserFieldsMD
        objUserFieldMD = GOD_Main.GOD_Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserFields)
        Try
            If (Not isColumnExist(TableName, ColumnName)) Then
                objUserFieldMD.Name = ColumnName
                objUserFieldMD.Type = FieldType
                objUserFieldMD.EditSize = 8
                objUserFieldMD.Description = ColDescription
                objUserFieldMD.SubType = SubType
                objUserFieldMD.LinkedTable = LinkedTableName
                objUserFieldMD.TableName = TableName
                If (objUserFieldMD.Add() <> 0) Then
                    GOD_Main.GOD_Application.StatusBar.SetText(GOD_Main.GOD_Company.GetLastErrorDescription)
                End If
            End If
        Catch ex As Exception
            GOD_Main.GOD_Application.StatusBar.SetText(ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Warning)
        Finally
            System.Runtime.InteropServices.Marshal.ReleaseComObject(objUserFieldMD)
            GC.Collect()
        End Try
    End Sub
#Region "Create Table"
    Public Function CreateTable(ByVal TableName As String, ByVal TableDescription As String, ByVal TableType As SAPbobsCOM.BoUTBTableType) As Boolean
        Dim intRetCode As Integer
        Dim objUserTableMD As SAPbobsCOM.UserTablesMD
        objUserTableMD = GOD_Main.GOD_Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserTables)
        Try
            If (Not objUserTableMD.GetByKey(TableName)) Then
                objUserTableMD.TableName = TableName
                objUserTableMD.TableDescription = TableDescription
                objUserTableMD.TableType = TableType
                intRetCode = objUserTableMD.Add()
                If intRetCode = 0 Then
                    GOD_Main.objUtilities.ShowSuccessMessage(TableName & " Table Created Successfully.")
                    Return True
                Else
                    GOD_Main.objUtilities.ShowSuccessMessage(TableName & " Table Not Created Successfully.")
                    Return False
                End If
            Else
                Return False
            End If
        Catch ex As Exception
            GOD_Main.GOD_Application.StatusBar.SetText(TableName & " Table is not Created Successfully." & ex.Message)
        Finally
            System.Runtime.InteropServices.Marshal.ReleaseComObject(objUserTableMD)
            GC.Collect()
        End Try
    End Function
#End Region

    Public Function FormExistTypeEx(ByVal FormUID As String) As Boolean
        Dim intLoop As Integer
        For intLoop = GOD_Main.GOD_Application.Forms.Count - 1 To 0 Step -1
            If Trim(FormUID) = Trim(GOD_Main.GOD_Application.Forms.Item(intLoop).TypeEx) Then
                Return True
            End If
        Next
        Return False
    End Function

#Region "GetApplication"
    'To Get SAP Business One Application
    Public Function GetApplication() As SAPbouiCOM.Application
        Dim objApp As SAPbouiCOM.Application
        Dim objSboGuiApi As New SAPbouiCOM.SboGuiApi
        Dim strConnectionString As String = Environment.GetCommandLineArgs.GetValue(1)
        objSboGuiApi = New SAPbouiCOM.SboGuiApi
        objSboGuiApi.Connect(strConnectionString)
        objApp = objSboGuiApi.GetApplication()
        Return objApp
    End Function
#End Region

#Region "GET COMPANY"
    'To Connect to SAP SAP Business One Company
    Public Function GetCompany(ByVal SBOApplication As SAPbouiCOM.Application) As SAPbobsCOM.Company
        Dim GOD_Company As SAPbobsCOM.Company
        Dim strCookie As String
        Dim strCookieContext As String
        Try
            GOD_Company = New SAPbobsCOM.Company
            strCookie = GOD_Company.GetContextCookie
            strCookieContext = SBOApplication.Company.GetConnectionContext(strCookie)
            GOD_Company.SetSboLoginContext(strCookieContext)
            If GOD_Company.Connect <> 0 Then
                strLastError = "Connection Error"
                SBOApplication.StatusBar.SetText("GOD Quality Control Addon Connection Error. Error is " & GOD_Main.GOD_Company.GetLastErrorDescription, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error)
                Return Nothing
            End If
            Return GOD_Company
        Catch ex As Exception
            SBOApplication.MessageBox(ex.Message)
            Return Nothing
        End Try
    End Function
#End Region

#Region "Register UDO"
    '*****************************************************************
    'Type               : Function    
    'Name               : registerUDO
    'Parameter          : UDOCode,UDOName,UDOType,findAliasNDescription,parentTableName,childTable1,childTable2,childTable3,childTable4,LogOption,DefFormOption,MenuItem,MenuCaption,FatherMenuId,Position
    'Return Value       : Boolean
    'Author             : Mahendrakumar 
    'Created Date       : 21042017
    'Last Modified By   : 
    'Modified Date      : 
    'Purpose            : To Register Use Defined Object in SAP Business One
    '*****************************************************************
    Function registerUDO(ByVal UDOCode As String, ByVal UDOName As String, ByVal UDOType As SAPbobsCOM.BoUDOObjType, ByVal findAliasNDescription As String(,), ByVal parentTableName As String, Optional ByVal childTable1 As String = "", Optional ByVal childTable2 As String = "", Optional ByVal childTable3 As String = "", Optional ByVal childTable4 As String = "", Optional ByVal childTable5 As String = "", Optional ByVal childTable6 As String = "", Optional ByVal childTable7 As String = "", Optional ByVal childTable8 As String = "", Optional ByVal LogOption As SAPbobsCOM.BoYesNoEnum = SAPbobsCOM.BoYesNoEnum.tNO, Optional ByVal DefFormOption As SAPbobsCOM.BoYesNoEnum = SAPbobsCOM.BoYesNoEnum.tNO, Optional ByVal MenuItem As SAPbobsCOM.BoYesNoEnum = SAPbobsCOM.BoYesNoEnum.tNO, Optional ByVal MenuCaption As String = "", Optional ByVal FatherMenuId As String = "", Optional ByVal Position As Integer = 0) As Boolean
        Dim actionSuccess As Boolean = False
        Try
            registerUDO = False
            Dim v_udoMD As SAPbobsCOM.UserObjectsMD
            v_udoMD = GOD_Main.objUtilities.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserObjectsMD)
            v_udoMD.CanCancel = SAPbobsCOM.BoYesNoEnum.tNO
            v_udoMD.CanClose = SAPbobsCOM.BoYesNoEnum.tNO
            v_udoMD.CanCreateDefaultForm = SAPbobsCOM.BoYesNoEnum.tNO
            v_udoMD.CanDelete = SAPbobsCOM.BoYesNoEnum.tYES
            v_udoMD.CanFind = SAPbobsCOM.BoYesNoEnum.tYES
            v_udoMD.CanLog = LogOption
            v_udoMD.CanYearTransfer = SAPbobsCOM.BoYesNoEnum.tYES
            v_udoMD.ManageSeries = SAPbobsCOM.BoYesNoEnum.tYES
            v_udoMD.Code = UDOCode
            v_udoMD.Name = UDOName
            v_udoMD.TableName = parentTableName
            If LogOption = SAPbobsCOM.BoYesNoEnum.tYES Then
                v_udoMD.LogTableName = "A" & parentTableName
            End If
            If DefFormOption = SAPbobsCOM.BoYesNoEnum.tYES Then
                v_udoMD.CanCreateDefaultForm = SAPbobsCOM.BoYesNoEnum.tYES
                v_udoMD.MenuItem = SAPbobsCOM.BoYesNoEnum.tYES
                v_udoMD.MenuCaption = MenuCaption
                v_udoMD.FatherMenuID = FatherMenuId
                v_udoMD.Position = Position
            End If
            v_udoMD.ObjectType = UDOType
            For i As Int16 = 0 To findAliasNDescription.GetLength(0) - 1
                If i > 0 Then v_udoMD.FindColumns.Add()
                v_udoMD.FindColumns.ColumnAlias = findAliasNDescription(i, 0)
                v_udoMD.FindColumns.ColumnDescription = findAliasNDescription(i, 1)
            Next
            If childTable1 <> "" Then
                v_udoMD.ChildTables.TableName = childTable1
                v_udoMD.ChildTables.Add()
            End If
            If childTable2 <> "" Then
                v_udoMD.ChildTables.TableName = childTable2
                v_udoMD.ChildTables.Add()
            End If
            If childTable3 <> "" Then
                v_udoMD.ChildTables.TableName = childTable3
                v_udoMD.ChildTables.Add()
            End If
            If childTable4 <> "" Then
                v_udoMD.ChildTables.TableName = childTable4
                v_udoMD.ChildTables.Add()
            End If
            If v_udoMD.Add() = 0 Then
                registerUDO = True
                GOD_Main.GOD_Application.StatusBar.SetText("Successfully Registered UDO >" & UDOCode & ">" & UDOName & ".", SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Success)
            Else
                GOD_Main.GOD_Application.StatusBar.SetText("Failed to Register UDO >" & UDOCode & ">" & UDOName & " >" & GOD_Main.GOD_Company.GetLastErrorDescription, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error)
                registerUDO = False
            End If
            System.Runtime.InteropServices.Marshal.ReleaseComObject(v_udoMD)
            v_udoMD = Nothing
            GC.Collect()
        Catch ex As Exception
            GOD_Main.GOD_Application.MessageBox(ex.Message)
        End Try
    End Function
#End Region

#Region "Check for UDO Exists"
    'Purpose            : To Check If User Defined Object already exists or not
    Public Function UDOExists(ByVal code As String) As Boolean
        GC.Collect()
        Dim v_UDOMD As SAPbobsCOM.UserObjectsMD
        Dim v_ReturnCode As Boolean
        v_UDOMD = GOD_Main.objUtilities.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserObjectsMD)
        v_ReturnCode = v_UDOMD.GetByKey(code)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(v_UDOMD)
        v_UDOMD = Nothing
        Return v_ReturnCode
    End Function
#End Region

#Region "Add Column"
    'Purpose            : Add User Defined Field to Table
    Private Sub addCol(ByVal strTab As String, ByVal strCol As String, ByVal strDesc As String, ByVal nType As Integer, Optional ByVal nEditSize As Integer = 10, Optional ByVal nSubType As Integer = 0)
        Dim oUFields As SAPbobsCOM.UserFieldsMD
        Dim nError As Integer
        oUFields = GOD_Main.GOD_Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserFields)
        oUFields.TableName = strTab
        oUFields.Name = strCol
        oUFields.Type = nType
        oUFields.SubType = nSubType
        oUFields.Description = strDesc
        oUFields.EditSize = nEditSize
        nError = oUFields.Add()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(oUFields)
        GC.Collect()
        GC.WaitForPendingFinalizers()
        If nError <> 0 Then
            'MsgBox(strCol & " table could not be added")
        End If
    End Sub
#End Region

#Region "Field Creations"
    'Purpose            : Add Alphabet Field to Table
    Public Sub AddAlphaField(ByVal TableName As String, ByVal ColumnName As String, ByVal ColDescription As String, ByVal Size As Integer, ByVal SubType As SAPbobsCOM.BoFldSubTypes, Optional ByVal DefaultValue As String = "")
        Try
            addField(TableName, ColumnName, ColDescription, SAPbobsCOM.BoFieldTypes.db_Alpha, Size, SAPbobsCOM.BoFldSubTypes.st_None, "", "", DefaultValue)
        Catch ex As Exception
            GOD_Main.GOD_Application.StatusBar.SetText(ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Warning)
        End Try
    End Sub

    'Purpose            : Add Field to Table 
    Public Sub addField(ByVal TableName As String, ByVal ColumnName As String, ByVal ColDescription As String, ByVal FieldType As SAPbobsCOM.BoFieldTypes, ByVal Size As Integer, ByVal SubType As SAPbobsCOM.BoFldSubTypes, ByVal ValidValues As String, ByVal ValidDescriptions As String, ByVal SetValidValue As String)
        Dim intLoop As Integer
        Dim strValue, strDesc As Array
        Dim objUserFieldMD As SAPbobsCOM.UserFieldsMD
        objUserFieldMD = GOD_Main.GOD_Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserFields)
        Try
            strValue = ValidValues.Split(Convert.ToChar(","))
            strDesc = ValidDescriptions.Split(Convert.ToChar(","))
            If (strValue.GetLength(0) <> strDesc.GetLength(0)) Then
                Throw New Exception("Invalid Valid Values")
            End If
            If (Not isColumnExist(TableName, ColumnName)) Then
                objUserFieldMD.TableName = TableName
                objUserFieldMD.Name = ColumnName
                objUserFieldMD.Description = ColDescription
                objUserFieldMD.Type = FieldType
                If (FieldType <> SAPbobsCOM.BoFieldTypes.db_Numeric) Then
                    objUserFieldMD.Size = Size
                Else
                    objUserFieldMD.EditSize = Size
                End If
                objUserFieldMD.SubType = SubType
                If strValue.Length > 1 Then
                    For intLoop = 0 To strValue.GetLength(0) - 1
                        objUserFieldMD.ValidValues.Value = strValue(intLoop)
                        objUserFieldMD.ValidValues.Description = strDesc(intLoop)
                        objUserFieldMD.ValidValues.Add()
                    Next
                    objUserFieldMD.DefaultValue = SetValidValue
                Else
                    If SetValidValue.Length > 0 Then
                        objUserFieldMD.DefaultValue = SetValidValue
                    End If
                End If
                If (objUserFieldMD.Add() <> 0) Then
                    GOD_Main.GOD_Application.StatusBar.SetText(GOD_Main.GOD_Company.GetLastErrorDescription)
                Else
                    GOD_Main.GOD_Application.StatusBar.SetText(objUserFieldMD.Name + " Created Successfully.", SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_None)
                End If
            End If
        Catch ex As Exception
            GOD_Main.GOD_Application.StatusBar.SetText(ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Warning)
        Finally
            System.Runtime.InteropServices.Marshal.ReleaseComObject(objUserFieldMD)
            GC.Collect()
        End Try
    End Sub
#End Region

#Region " Column Exist or Not "
    Private Function isColumnExist(ByVal TableName As String, ByVal ColumnName As String) As Boolean
        Dim objRecordSet As SAPbobsCOM.Recordset
        Dim strTemp As String = ""
        objRecordSet = GOD_Main.GOD_Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset)
        Try
            strTemp = "SELECT COUNT(*) FROM CUFD WHERE TableID = '" & TableName & "' AND AliasID = '" & ColumnName & "'"
            objRecordSet.DoQuery(strTemp)
            If (Convert.ToInt16(objRecordSet.Fields.Item(0).Value) = 0) Then
                Return False
            Else
                Return True
            End If
        Catch ex As Exception
            Throw ex
        Finally
            System.Runtime.InteropServices.Marshal.ReleaseComObject(objRecordSet)
            GC.Collect()
        End Try
    End Function
#End Region

    '-------------------------------------------------------------------------------------------
#Region "DI /UI Methods"
    Sub LoadForm(ByVal XMLFile As String, ByVal FormType As String, ByVal FormUID As String, Optional ByVal FileType As ResourceType = ResourceType.Content)
        Try
            Dim xmldoc As New Xml.XmlDocument
            Dim Streaming As System.IO.Stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("BSPL_Beam_Manufacturing." + XMLFile)
            Dim StreamRead As New System.IO.StreamReader(Streaming, True)
            xmldoc.LoadXml(StreamRead.ReadToEnd)
            StreamRead.Close()
            Dim r As New Random
            r.Next(1000)
            If Not xmldoc.SelectSingleNode("//form") Is Nothing Then
                xmldoc.SelectSingleNode("//form").Attributes.GetNamedItem("uid").Value = xmldoc.SelectSingleNode("//form").Attributes.GetNamedItem("uid").Value & "_" & r.Next
                GOD_Main.GOD_Application.LoadBatchActions(xmldoc.InnerXml)
            End If
        Catch ex As Exception
            GOD_Main.GOD_Application.MessageBox(ex.Message)
        End Try
    End Sub
#Region "GetDateTime"
    Public Function GetDateTimeValue(ByVal DateString As String) As DateTime
        Dim objBridge As SAPbobsCOM.SBObob
        objBridge = GOD_Main.GOD_Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoBridge)
        Return objBridge.Format_StringToDate(DateString).Fields.Item(0).Value
    End Function
    Public Function GetDateToString(ByVal DateString As String) As DateTime
        Dim objBridge As SAPbobsCOM.SBObob
        objBridge = GOD_Main.GOD_Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoBridge)
        Return objBridge.Format_DateToString(DateString).Fields.Item(0).Value
    End Function
    Public Function GetSBODateString(ByVal DateVal As DateTime) As String
        Dim objBridge As SAPbobsCOM.SBObob
        objBridge = GOD_Main.GOD_Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoBridge)
        Return objBridge.Format_DateToString(DateVal).Fields.Item(0).Value
    End Function
#End Region

#Region "Number Conversions"
    Public Function GetQtyValue(ByVal QtyString As String) As Double
        Dim dblValue As Double
        QtyString = QtyString.Replace(strThousSep, "")
        QtyString = QtyString.Replace(strDecSep, System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator)
        dblValue = Convert.ToDouble(QtyString)
        Return dblValue
    End Function
    Public Function GetQtyString(ByVal QtyVal As Double) As String
        GetQtyString = QtyVal.ToString()
        GetQtyString.Replace(",", strDecSep)
    End Function
#End Region

#Region "Business Objects"
    Public Function GetBusinessObject(ByVal ObjectType As SAPbobsCOM.BoObjectTypes) As Object
        Return GOD_Main.GOD_Company.GetBusinessObject(ObjectType)
    End Function

#Region "Filling the values in the Combo"
    Public Sub FillDocvalues(ByVal GOD_Form As SAPbouiCOM.Form, ByVal comboid As String)
        Dim oRS As SAPbobsCOM.Recordset = GOD_Main.objUtilities.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset)
        Dim objCombo As SAPbouiCOM.ComboBox
        oRS.DoQuery("Select Code, Name from [@FCA_DOC]")
        objCombo = GOD_Form.Items.Item(comboid).Specific
        If (objCombo.ValidValues.Count <= 0) Then
            For i As Integer = 0 To oRS.RecordCount - 1
                objCombo.ValidValues.Add(oRS.Fields.Item(0).Value, oRS.Fields.Item(1).Value)
                oRS.MoveNext()
            Next
        End If
        Dim objItem As SAPbouiCOM.Item = GOD_Form.Items.Item(comboid)
        objItem.DisplayDesc = True
    End Sub
#End Region

    Public Function CreateUIObject(ByVal Type As SAPbouiCOM.BoCreatableObjectType) As Object
        Return GOD_Main.GOD_Application.CreateObject(Type)
    End Function

#End Region

#Region "Form Objects"
    Public Function GetForm(ByVal FormUID As String) As SAPbouiCOM.Form
        Return GOD_Main.GOD_Application.Forms.Item(FormUID)
    End Function
    Public Function GetForm(ByVal Type As String, ByVal Count As Integer) As SAPbouiCOM.Form
        Return GOD_Main.GOD_Application.Forms.GetForm(Type, Count)
    End Function
#End Region

#Region "GetEditTextValue"
    Public Function GetEditText(ByVal aForm As SAPbouiCOM.Form, ByVal aUID As String) As String
        objEdit = aForm.Items.Item(aUID).Specific
        Return Convert.ToString(objEdit.Value)
    End Function
    Public Function GetEditText(ByVal aFormUID As String, ByVal aUID As String) As String
        GOD_Form = GOD_Main.GOD_Application.Forms.Item(aFormUID)
        objEdit = GOD_Form.Items.Item(aUID).Specific
        Return Convert.ToString(objEdit.Value)
    End Function
#End Region

#Region "SetEditTextValue"
    Public Sub SetEditText(ByVal aForm As SAPbouiCOM.Form, ByVal aUID As String, ByVal aVal As String)
        objEdit = aForm.Items.Item(aUID).Specific
        objEdit.Value = aVal
    End Sub
    Public Sub SetEditText(ByVal aFormUID As String, ByVal aUID As String, ByVal aVal As String)
        GOD_Form = GOD_Main.GOD_Application.Forms.Item(aFormUID)
        objEdit = GOD_Form.Items.Item(aUID).Specific
        objEdit.Value = aVal
    End Sub
#End Region
#End Region
    Public Function GetCode(ByVal sTableName As String) As String
        Dim oRecSet As SAPbobsCOM.Recordset
        Dim sQuery As String
        oRecSet = GOD_Main.GOD_Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset)
        sQuery = "SELECT Top 1 Code  FROM " & sTableName + " ORDER BY Convert(Int,Code) desc"
        oRecSet.DoQuery(sQuery)
        If Not oRecSet.EoF Then
            GetCode = Convert.ToInt32(oRecSet.Fields.Item(0).Value.ToString()) + 1
        Else
            GetCode = "1"
        End If
    End Function
    Public Function ShowSuccessMessage(ByVal Message As String)
        GOD_Main.GOD_Application.StatusBar.SetText(Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Success)
        Return Nothing
    End Function
    Public Function FormExist(ByVal FormUID As String) As Boolean
        Dim intLoop As Integer
        For intLoop = GOD_Main.GOD_Application.Forms.Count - 1 To 0 Step -1
            If Trim(FormUID) = Trim(GOD_Main.GOD_Application.Forms.Item(intLoop).UniqueID) Then
                Return True
            End If
        Next
        Return False
    End Function

End Class

Public Enum ResourceType
    Embeded
    Content
End Enum


 

Thanks and Regards,

Mahendrakumar

Assigned Tags

      Be the first to leave a comment
      You must be Logged on to comment or reply to a post.