public static void CreateUDV() { string formId, itemId, colId, queryName; int queryId, controlType, lRetCode = 0; Recordset oRecordSet = oCompany.GetBusinessObject(BoObjectTypes.BoRecordset); oRecordSet = AccessMatrixEngine.GetAllConfiguration(); while (!oRecordSet.EoF) { formId = oRecordSet.Fields.Item("U_FormId").Value.ToString(); itemId = oRecordSet.Fields.Item("U_ItemId").Value.ToString(); colId = oRecordSet.Fields.Item("U_ColumnId").Value.ToString(); queryName = oRecordSet.Fields.Item("U_QueryName").Value.ToString(); controlType = Convert.ToInt32(oRecordSet.Fields.Item("U_ControlType").Value.ToString()); if (formId == "UDO_FT_UserProject") { string zz = "asd"; } if (queryName == "") { oRecordSet.MoveNext(); continue; } queryId = GetQueryId(queryName); ClearUDVIfExist(formId, itemId, (controlType == 1 ? "-1" : colId));//If control is textbox, SAP return the colUID value as "1". But UDV only works as "-1". FormattedSearches oFormattedSearches = (FormattedSearches)oCompany.GetBusinessObject(BoObjectTypes.oFormattedSearches); oFormattedSearches.FormID = formId; oFormattedSearches.ItemID = itemId; oFormattedSearches.ColumnID = (controlType == 1 ? "-1" : colId); //If control is textbox, SAP return the colUID value as "1". But UDV only works as "-1". oFormattedSearches.Action = BoFormattedSearchActionEnum.bofsaQuery; oFormattedSearches.QueryID = queryId; lRetCode = oFormattedSearches.Add(); if (lRetCode != 0) { string errMsg = AddOnUtilities.oCompany.GetLastErrorDescription(); AddOnUtilities.MsgBoxWrapper(errMsg, MsgBoxType.B1StatusBar, BoMessageTime.bmt_Short, true); } oRecordSet.MoveNext(); } }
private static void oApplication_ItemEvent(string FormUID, ref SAPbouiCOM.ItemEvent pVal, out bool BubbleEvent) { //For UDOs, FormType is 0 and FormUID starts with UDO. if (pVal.FormType != 0 || FormUID.Contains("UDO")) { SAPbouiCOM.BoEventTypes EventEnum = 0; EventEnum = pVal.EventType; // To prevent an endless loop of MessageBoxes, // we'll not notify et_FORM_ACTIVATE and et_FORM_LOAD events //if ( ( EventEnum != SAPbouiCOM.BoEventTypes.et_FORM_ACTIVATE ) & ( EventEnum != SAPbouiCOM.BoEventTypes.et_FORM_LOAD ) ) if (pVal.BeforeAction) { string input = ""; //if FormType is 0, it's UDO and use FormType as FormUID (Variable) string formType = pVal.FormType.ToString() == "0" ? FormUID : pVal.FormType.ToString(); if (EventEnum == SAPbouiCOM.BoEventTypes.et_VALIDATE || EventEnum == BoEventTypes.et_CHOOSE_FROM_LIST) { SAPbobsCOM.Recordset rsConfigData = AccessMatrixEngine.GetConfiguration(formType, pVal.ItemUID, pVal.ColUID, (int)pVal.EventType); string accessMatrixKey = String.Empty, controlType = String.Empty; if (rsConfigData.RecordCount > 0) { accessMatrixKey = rsConfigData.Fields.Item("U_AccessMatrixKey").Value.ToString(); controlType = rsConfigData.Fields.Item("U_ControlType").Value.ToString(); string controlName = rsConfigData.Fields.Item("U_ControlName").Value.ToString(); string itemId = rsConfigData.Fields.Item("U_ItemId").Value.ToString(); string colId = rsConfigData.Fields.Item("U_ColumnId").Value.ToString(); string result = AccessMatrixEngine.CheckIfValidOrNot(rsConfigData); input = AccessMatrixEngine.GetInputValue(itemId, colId, controlType); if (input != "" && result != "") { BubbleEvent = false; AddOnUtilities.oApplication.ActivateMenuItem("7425"); return; } if (result != "") { BubbleEvent = false; AddOnUtilities.MsgBoxWrapper(result, Enum.MsgBoxType.B1StatusBar, BoMessageTime.bmt_Short, true); return; } //Set Names from Codes in UDOs. string relatedColumn = rsConfigData.Fields.Item("U_RelatedColumn").Value.ToString(); string relatedItem = rsConfigData.Fields.Item("U_RelatedItem").Value.ToString(); if (input != "" && pVal.FormType.ToString() == "0") { if (relatedColumn != "" && relatedItem != "") { string strName = AccessMatrixEngine.GetNameByCode(input, accessMatrixKey); AccessMatrixEngine.SetValueToMatrix(relatedItem, relatedColumn, strName); } } BubbleEvent = true; return; } } else if (EventEnum == SAPbouiCOM.BoEventTypes.et_KEY_DOWN && pVal.CharPressed == 9) { SAPbobsCOM.Recordset rsConfigData = AccessMatrixEngine.GetConfiguration(formType, pVal.ItemUID, pVal.ColUID, (int)pVal.EventType); string accessMatrixKey = String.Empty, controlType = String.Empty; if (rsConfigData.RecordCount > 0) { accessMatrixKey = rsConfigData.Fields.Item("U_AccessMatrixKey").Value.ToString(); controlType = rsConfigData.Fields.Item("U_ControlType").Value.ToString(); string controlName = rsConfigData.Fields.Item("U_ControlName").Value.ToString(); string itemId = rsConfigData.Fields.Item("U_ItemId").Value.ToString(); string colId = rsConfigData.Fields.Item("U_ColumnId").Value.ToString(); string result = AccessMatrixEngine.CheckIfValidOrNot(rsConfigData); input = AccessMatrixEngine.GetInputValue(itemId, colId, controlType); if (input == "") { BubbleEvent = false; AddOnUtilities.oApplication.ActivateMenuItem("7425"); return; } if (result != "") { BubbleEvent = false; AddOnUtilities.oApplication.ActivateMenuItem("7425"); return; } BubbleEvent = true; return; } } else if (EventEnum == SAPbouiCOM.BoEventTypes.et_ITEM_PRESSED) { SAPbobsCOM.Recordset rsConfigData = AccessMatrixEngine.GetConfigurationForLineLoop(formType, pVal.ItemUID, pVal.ColUID, (int)pVal.EventType); int recordCount = rsConfigData.RecordCount; string accessMatrixKey = String.Empty, controlType = String.Empty; while (!rsConfigData.EoF) { //To Do : Update following statement to be dynamic. // I = 1 (Item), S = 2 (Service) //Some Document do not have Item or Service Type. Those controls are always ComboBox. //Check if it is ComboBox and if it's ComboBox, assign ControlType as 3 which is not Item or Service. dynamic tmpControl = AddOnUtilities.oApplication.Forms.ActiveForm.Items.Item("3").Specific; string documentType = ""; if (tmpControl is SAPbouiCOM.ComboBox) { documentType = ((SAPbouiCOM.ComboBox)AddOnUtilities.oApplication.Forms.ActiveForm.Items.Item("3").Specific).Value; documentType = (documentType == "I" ? "1" : "2"); } else { documentType = "3"; } string configDocumentType = rsConfigData.Fields.Item("U_DocType").Value.ToString(); if (documentType != configDocumentType) { rsConfigData.MoveNext(); continue; } //if(rsConfigData.Fields.Item("U_DocType").Value.ToString() != documentType && !rsConfigData.EoF) //{ //rsConfigData.MoveNext(); //} string result = AccessMatrixEngine.CheckIfValidOrNotAllLine(rsConfigData, documentType); rsConfigData.MoveNext(); if (result != "") { BubbleEvent = false; AddOnUtilities.MsgBoxWrapper(result, Enum.MsgBoxType.B1StatusBar, BoMessageTime.bmt_Short, true); return; } } } } } BubbleEvent = true; }