Formsettings on Invoice Form, FormPreferencesService
Im trying to use formsettingspreference to set what columns will be visible in the matrix in the invoice form. The below code works only if sbo is closed, once you log on you can see the changes, i'm doing it through the DI API.
My problem is that i'm not sure which values to use for the columns id's. Below i use 24 which is the columnid of "warehouse column" in the front end of sbo, but when i run the code it makes "Gross Profit (LC)" visible and not the warehouse column. Which number must i use? Where can i get all the columns id numbers?
Has anyone used this new functionality yet? What numbers must i use for column id?
Dim FormSettingsService As SAPbobsCOM.FormPreferencesService
Dim ColumnSettingsData As SAPbobsCOM.ColumnsPreferences
Dim ColumnSettingsPara As SAPbobsCOM.ColumnsPreferencesParams
oCompanyService = oCompany.GetCompanyService
FormSettingsService = oCompanyService.GetBusinessService(SAPbobsCOM.ServiceTypes.FormPreferencesService)
ColumnSettingsPara = FormSettingsService.GetDataInterface(SAPbobsCOM.FormPreferencesServiceDataInterfaces.fpsdiColumnsPreferencesParams)
ColumnSettingsPara.FormID = "133"
ColumnSettingsPara.User = 1
ColumnSettingsData = FormSettingsService.GetColumnsPreferences(ColumnSettingsPara)
ColumnSettingsData.Item(24).EditableInForm = SAPbobsCOM.BoYesNoEnum.tYES
ColumnSettingsData.Item(24).VisibleInForm = SAPbobsCOM.BoYesNoEnum.tYES
Thanks in advance
John Mackin replied
I have just tried this object for the first time and have to say I found the choice of index value to the item collection to be rather strange and not very useful.
Basically where you have used (24) as the index, which is the logical choice, SAP have instead chosen it to be indexed by an internal row counter. In my database this lead to column "24" actually being index 110.
A loop through the columnsettingsdata can easily find the correct column, but is highly inefficient.
For lngCount = 0 To ColumnSettingsData.Count - 1 If ColumnSettingsData.Item(lngCount).Column = "24" Then ColumnSettingsData.Item(lngCount).EditableInForm = SAPbobsCOM.BoYesNoEnum.tNO ColumnSettingsData.Item(lngCount).VisibleInForm = SAPbobsCOM.BoYesNoEnum.tYES Exit For End If Next
The help file lists the index value as a variant, but it won't accept strings. Personally I think it should accept the columnUID as a string value as this would be the most logical way to access it for a B1 developer.
I have still to try out the XML interface, hopefully that will be a lot easier to use.