Skip to Content
0
Apr 01, 2016 at 08:51 AM

Refcount higher than zero

73 Views

Hello,

I want to create runtime UDF.but i got refcount error.

Please help me ......

this is my code

#region UDF Table Type Defination

public static void addTable(string tblName, string tblDsc, int tblType)

{

SAPbobsCOM.UserTablesMD oUsertbl;

oUsertbl = clsAddOn.PTS_Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserTables);

if (oUsertbl.GetByKey(tblName) == false)

{

oUsertbl.TableName = tblName;

oUsertbl.TableDescription = tblDsc;

switch (tblType)

{

case 0:

oUsertbl.TableType = SAPbobsCOM.BoUTBTableType.bott_NoObject;

break;

case 1:

oUsertbl.TableType = SAPbobsCOM.BoUTBTableType.bott_MasterData;

break;

case 2:

oUsertbl.TableType = SAPbobsCOM.BoUTBTableType.bott_MasterDataLines;

break;

case 3:

oUsertbl.TableType = SAPbobsCOM.BoUTBTableType.bott_Document;

break;

case 4:

oUsertbl.TableType = SAPbobsCOM.BoUTBTableType.bott_DocumentLines;

break;

}

if (oUsertbl.Add() == 0)

{

clsAddOn.PTS_Application.StatusBar.SetText(tblName + " Created Sucessfully.", SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Success);

}

else

clsAddOn.PTS_Application.StatusBar.SetText(clsAddOn.PTS_Company.GetLastErrorDescription(), SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);

}

System.Runtime.InteropServices.Marshal.ReleaseComObject(oUsertbl);

oUsertbl = null;

GC.Collect();

}

#endregion

#region Add UDF Fields To The UDF Table

public static void addField(string TblName, string Title, string Desc, string Type, int Length, string Structure)

{

bool isFieldExist = false;

SAPbobsCOM.Recordset oRecordset;

oRecordset = clsAddOn.PTS_Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset);

oRecordset.DoQuery("select FieldID, EditSize from CUFD where AliasID ='" + Title + "' and TableID ='" + TblName + "'");

int FieldID = 0;

FieldID = oRecordset.Fields.Item("FieldID").Value;

int EditSize = oRecordset.Fields.Item("EditSize").Value;

if (oRecordset.RecordCount == 0)

{

isFieldExist = true;

}

Marshal.ReleaseComObject(oRecordset);

GC.Collect();

SAPbobsCOM.UserFieldsMD oUserFieldsMD;

oUserFieldsMD = clsAddOn.PTS_Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserFields);

// Numeric with NA - Update size - remove it after update time

if (isFieldExist == false && Type == "N" && Structure == "N" && EditSize < 11)

{

oUserFieldsMD.GetByKey(TblName, FieldID);

oUserFieldsMD.EditSize = Length;

if (oUserFieldsMD.Update() == 0)

clsAddOn.PTS_Application.StatusBar.SetText(Title + " Updated Sucessfully in " + TblName, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Success);

else

clsAddOn.PTS_Application.StatusBar.SetText(TblName + Title + clsAddOn.PTS_Company.GetLastErrorDescription(), SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);

return; // Remove after change

}

if (isFieldExist == true)

{

oUserFieldsMD.TableName = TblName;

oUserFieldsMD.Name = Title;

oUserFieldsMD.Description = Desc;

// Alphanumeric with Regular

if (Type == "A" && Structure == "A")

{

oUserFieldsMD.Type = SAPbobsCOM.BoFieldTypes.db_Alpha;

oUserFieldsMD.Size = Length;

}

// Alphanumeric with Address

if (Type == "A" && Structure == "?")

{

oUserFieldsMD.Type = SAPbobsCOM.BoFieldTypes.db_Alpha;

}

// Alphanumeric with TelNo

if (Type == "A" && Structure == "#")

{

oUserFieldsMD.Type = SAPbobsCOM.BoFieldTypes.db_Alpha;

}

// Alphanumeric with Text

if (Type == "A" && Structure == "M")

{

oUserFieldsMD.Type = SAPbobsCOM.BoFieldTypes.db_Alpha;

}

// Numeric with NA

if (Type == "N" && Structure == "N")

{

oUserFieldsMD.Type = SAPbobsCOM.BoFieldTypes.db_Numeric;

oUserFieldsMD.EditSize = Length;

}

//Datetime with Date

if (Type == "D" && Structure == "D")

{

oUserFieldsMD.Type = SAPbobsCOM.BoFieldTypes.db_Date;

}

//Datetime with Time

if (Type == "D" && Structure == "T")

{

oUserFieldsMD.Type = SAPbobsCOM.BoFieldTypes.db_Date;

}

//Unit& Total with rate

if (Type == "B" && Structure == "R")

{

oUserFieldsMD.Type = SAPbobsCOM.BoFieldTypes.db_Float;

}

//Unit& Total with Amount

if (Type == "B" && Structure == "S")

{

oUserFieldsMD.Type = SAPbobsCOM.BoFieldTypes.db_Float;

}

// Unit& Total with Price

if (Type == "B" && Structure == "P")

{

oUserFieldsMD.Type = SAPbobsCOM.BoFieldTypes.db_Float;

}

// Unit& Total with quantity

if (Type == "B" && Structure == "Q")

{

oUserFieldsMD.Type = SAPbobsCOM.BoFieldTypes.db_Float;

}

// Unit& Total with Percentage

if (Type == "B" && Structure == "%")

{

oUserFieldsMD.Type = SAPbobsCOM.BoFieldTypes.db_Float;

}

// Unit& Total with Measure

if (Type == "B" && Structure == "M")

{

oUserFieldsMD.Type = SAPbobsCOM.BoFieldTypes.db_Float;

}

// General with link

if (Type == "M" && Structure == "B")

{

oUserFieldsMD.Type = SAPbobsCOM.BoFieldTypes.db_Alpha;

}

// General with Image

if (Type == "R" && Structure == "I")

{

oUserFieldsMD.Type = SAPbobsCOM.BoFieldTypes.db_Alpha;

}

switch (Structure)

{

case "A":

oUserFieldsMD.SubType = SAPbobsCOM.BoFldSubTypes.st_None;

break;

case "?":

oUserFieldsMD.SubType = SAPbobsCOM.BoFldSubTypes.st_Address;

break;

case "#":

oUserFieldsMD.SubType = SAPbobsCOM.BoFldSubTypes.st_Phone;

break;

case "N":

oUserFieldsMD.SubType = SAPbobsCOM.BoFldSubTypes.st_None;

break;

case "D":

oUserFieldsMD.SubType = SAPbobsCOM.BoFldSubTypes.st_None;

break;

case "T":

oUserFieldsMD.SubType = SAPbobsCOM.BoFldSubTypes.st_Time;

break;

case "R":

oUserFieldsMD.SubType = SAPbobsCOM.BoFldSubTypes.st_Rate;

break;

case "S":

oUserFieldsMD.SubType = SAPbobsCOM.BoFldSubTypes.st_Sum;

break;

case "P":

oUserFieldsMD.SubType = SAPbobsCOM.BoFldSubTypes.st_Price;

break;

case "Q":

oUserFieldsMD.SubType = SAPbobsCOM.BoFldSubTypes.st_Quantity;

break;

case "%":

oUserFieldsMD.SubType = SAPbobsCOM.BoFldSubTypes.st_Percentage;

break;

case "M":

oUserFieldsMD.SubType = SAPbobsCOM.BoFldSubTypes.st_Measurement;

break;

case "B":

oUserFieldsMD.SubType = SAPbobsCOM.BoFldSubTypes.st_Link;

break;

case "I":

oUserFieldsMD.SubType = SAPbobsCOM.BoFldSubTypes.st_Image;

break;

}

GC.Collect();

int fieldaddcnt = oUserFieldsMD.Add();

if (oUserFieldsMD.Add() == 0)

{

clsAddOn.PTS_Application.StatusBar.SetText(Title + " Created Sucessfully in " + TblName, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Success);

}

else

clsAddOn.PTS_Application.StatusBar.SetText(TblName + Title + clsAddOn.PTS_Company.GetLastErrorDescription(), SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);

}

System.Runtime.InteropServices.Marshal.ReleaseComObject(oUserFieldsMD);

oUserFieldsMD = null;

GC.Collect();

}

#endregion

#region Register UDO

public static void RegisterUDO(string UDO_Code, String UDO_Name, int Tbl_Type, string Tbl_Name, string Menu_Caption, int Position, string Def_Fields, string Child_Tbl)

{

SAPbobsCOM.UserObjectsMD oUserObjectsMD;

oUserObjectsMD = clsAddOn.PTS_Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oUserObjectsMD);

if (oUserObjectsMD.GetByKey(UDO_Code) != true)

{

oUserObjectsMD.Code = UDO_Code;

oUserObjectsMD.Name = UDO_Name;

oUserObjectsMD.TableName = Tbl_Name;

switch (Tbl_Type)

{

case 3:

oUserObjectsMD.ObjectType = SAPbobsCOM.BoUDOObjType.boud_Document;

break;

case 1:

oUserObjectsMD.ObjectType = SAPbobsCOM.BoUDOObjType.boud_MasterData;

break;

}

//Code for Services

oUserObjectsMD.CanFind = SAPbobsCOM.BoYesNoEnum.tYES;

oUserObjectsMD.CanDelete = SAPbobsCOM.BoYesNoEnum.tYES;

oUserObjectsMD.CanCancel = SAPbobsCOM.BoYesNoEnum.tYES;

oUserObjectsMD.CanLog = SAPbobsCOM.BoYesNoEnum.tYES;

oUserObjectsMD.CanClose = SAPbobsCOM.BoYesNoEnum.tYES;

oUserObjectsMD.ManageSeries = SAPbobsCOM.BoYesNoEnum.tYES;

if (oUserObjectsMD.CanFind == SAPbobsCOM.BoYesNoEnum.tYES)

{

if (oUserObjectsMD.ObjectType == SAPbobsCOM.BoUDOObjType.boud_Document)

{

oUserObjectsMD.FindColumns.ColumnAlias = "DocNum";

oUserObjectsMD.FindColumns.ColumnDescription = "DocNum";

oUserObjectsMD.FindColumns.Add();

oUserObjectsMD.FindColumns.ColumnAlias = "CreateDate";

oUserObjectsMD.FindColumns.ColumnDescription = "CreateDate";

oUserObjectsMD.FindColumns.Add();

oUserObjectsMD.FindColumns.ColumnAlias = "UpdateDate";

oUserObjectsMD.FindColumns.ColumnDescription = "UpdateDate";

oUserObjectsMD.FindColumns.Add();

}

else

{

oUserObjectsMD.FindColumns.ColumnAlias = "Code";

oUserObjectsMD.FindColumns.ColumnDescription = "Code";

oUserObjectsMD.FindColumns.Add();

}

}

if (Child_Tbl != "")

{

string[] Str_Fields = Child_Tbl.Split('/');

for (int cnt = 0; cnt < Str_Fields.Length; cnt++)

{

oUserObjectsMD.ChildTables.TableName = Str_Fields[cnt];

oUserObjectsMD.ChildTables.Add();

}

}

if (oUserObjectsMD.Add() == 0)

{

clsAddOn.PTS_Application.StatusBar.SetText(Tbl_Name + " Created Sucessfully.", SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Success);

}

else

clsAddOn.PTS_Application.StatusBar.SetText(clsAddOn.PTS_Company.GetLastErrorDescription(), SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);

Marshal.ReleaseComObject(oUserObjectsMD);

oUserObjectsMD = null;

GC.Collect();

}

}

#endregion