Exemplo n.º 1
0
        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;
        }