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