Hi All
I am trying to add to 2 UDF's to existing table when i click on add button of user form but i am getting Ref count for this object is higher then 0 error.
The code is as mentioned bellow -
Code for adding field -
Private Sub CreateColumns(ByVal TABLENAME As String)
Try
Dim CreateUDO As New CreateUDO()
If (CreateUDO.UDFExists(oCompany, TABLENAME, "DraftKey") = True) Then
CreateUDO.AddFieldToTable(oCompany, TABLENAME, "DraftKey", "DraftKey", SAPbobsCOM.BoFieldTypes.db_Numeric, 11)
End If
If (CreateUDO.UDFExists(oCompany, TABLENAME, "DocStatus") = True) Then
CreateUDO.AddFieldToTable(oCompany, TABLENAME, "DocStatus", "DocStatus", SAPbobsCOM.BoFieldTypes.db_Alpha, 2)
End If
Catch ex As Exception
End Try
End Sub
Code to call create columns on button click -
If pVal.ActionSuccess = True And pVal.ItemUID = "1" And pVal.FormMode = "3" And pVal.EventType = SAPbouiCOM.BoEventTypes.et_ITEM_PRESSED Then
Dim OBJECTID As String = ""
Dim OBJECTIDQUERY As String = ""
Dim TABLENAME As String = ""
Dim ORIGINATORDOCENTRY As Integer
Dim ORIGINATORDOCENTRYQUERY As String = ""
Dim TABLENAMEQUERY As String = ""
ORIGINATORDOCENTRYQUERY = "select max (docentry) as DOCENTRY from [@ISA_ORIGIN]"
oRecordSet = oCompany.GetBusinessObject(BoObjectTypes.BoRecordset)
oRecordSet.DoQuery(ORIGINATORDOCENTRYQUERY)
If oRecordSet.RecordCount > 0 Then
ORIGINATORDOCENTRY = oRecordSet.Fields.Item("DOCENTRY").Value
OBJECTIDQUERY = "SELECT U_OID from [@ISA_ORIGIN] WHERE DOCENTRY = " & ORIGINATORDOCENTRY
oRecordSet = oCompany.GetBusinessObject(BoObjectTypes.BoRecordset)
oRecordSet.DoQuery(OBJECTIDQUERY)
If oRecordSet.RecordCount > 0 Then
OBJECTID = oRecordSet.Fields.Item("U_OID").Value
TABLENAMEQUERY = "SELECT TABLENAME from [OUDO] WHERE CODE = '" & OBJECTID & "'"
oRecordSet = oCompany.GetBusinessObject(BoObjectTypes.BoRecordset)
oRecordSet.DoQuery(TABLENAMEQUERY)
If oRecordSet.RecordCount > 0 Then
TABLENAME = oRecordSet.Fields.Item("TABLENAME").Value
CreateColumns(TABLENAME)
End If
End If
End If
End If
Code To Add Field To Table -
Public Function AddFieldToTable(ByVal oCompany As SAPbobsCOM.Company, ByVal TblName As String, ByVal FldName As [String], ByVal FldDesc As String, ByVal fType As SAPbobsCOM.BoFieldTypes, ByVal fSize As Integer, _
ByVal subType As SAPbobsCOM.BoFldSubTypes) As Boolean
Dim oUserField As SAPbobsCOM.UserFieldsMD
Try
Dim RetVal As Integer, ErrCode As Integer
Dim ErrMsg As String = ""
oUserField = Nothing
oUserField = DirectCast(oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserFields), SAPbobsCOM.UserFieldsMD)
oUserField.TableName = TblName
oUserField.Name = FldName
oUserField.Description = FldDesc
oUserField.Type = fType
oUserField.SubType = subType
'oUserField.Size = fSize;
oUserField.EditSize = fSize
RetVal = oUserField.Add()
If RetVal <> 0 Then
oCompany.GetLastError(ErrCode, ErrMsg)
If RetVal = "-2035" Then
Return True
End If
Return False
Else
Return True
End If
Catch ex As Exception
Finally
System.Runtime.InteropServices.Marshal.ReleaseComObject(oUserField)
oUserField = Nothing
GC.Collect()
End Try
End Function