日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Sbo通用数据选择功能的实现

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sbo通用数据选择功能的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文著作權屬于江湖浪子@IT,任何人未經作者本人批準,不得轉載。 ? 在Sbo Addon開發中,經常為了業務實現,需要從當前的業務數據庫中列舉出符合條件信息,供業務操作人員進行選擇,并且將選擇之后的數據及其相關信息傳遞到當前的業務界面,或者填充當前的業務控件(比如編輯文本、下拉框等),或者填充Matrix中的指定Column,以及更加個性化的業務處理(比如根據選擇的數據進行業務初始化、業務流程處理等)。 這的確是一個很常用的功能,有必要對其進行業務抽象和歸納,形成一個通用的數據選擇功能。富盛Sbo程序開發框架有效的解決了這一問題。 因為業務不同,需要選擇的業務數據也不同。就是說,這個通用的數據選擇提供的選擇數據是不確定的,自然選擇條件是不確定的,提供操作用戶的表示數據是不確定的,選擇之后的傳遞到業務界面上的數據和業務操作也是不確定的。 1、檢索條件、數據展示定制化 要展示不同的數據選擇內容,并且展示數據可能來自不同的數據表中,甚至選擇數據集的來源可能是SELECT語句,也完全可能是存儲過程的返回集合,能夠滿足這種展示條件的只有使用Grid控件了。而Grid控件的數據來源是可以定制的,這又滿足了數據檢索條件不確定性的要求。 實現如下: fsSbo.AddButton2Form(ref oForm, "btnChoose", "選擇", 315, 10, 65, 20);
??????????????????????????? fsSbo.AddItem2Form(ref oForm, "2", BoFormItemTypes.it_BUTTON, 315, 80, 65, 20); Grid grd = fsSbo.AddGrid2Form(ref oForm, "grdData", 5, 5, 530, 300);
??????????????????????????? grd.DataTable = oForm.DataSources.DataTables.Add("dtData");
??????????????????????????? grd.SelectionMode = BoMatrixSelect.ms_Single; grd.DataTable.ExecuteQuery(strChooseDataSQL);
??????????????????????????? for (int i = 0; i < grd.DataTable.Columns.Count; i++)
??????????????????????????? {
??????????????????????????????? if (grd.DataTable.Columns.Item(i).Type == BoFieldsType.ft_Integer || grd.DataTable.Columns.Item(i).Type == BoFieldsType.ft_Float)
??????????????????????????????????? grd.Columns.Item(i).RightJustified = true; grd.Columns.Item(i).Editable = false; if (grd.Columns.Item(i).UniqueID.StartsWith("$$")) grd.Columns.Item(i).Visible = false;
??????????????????????????? } grd.AutoResizeColumns(); 當然,在數據展示的時候,應該考慮到行業習慣,Grid數據欄目如果是數據類型應該自動將其展示為右對齊,顯然,這是可以辦到的。 檢索條件自動化、展示數據自動化、展示數據慣例化,看來都不是問題。在接下來要解決的是選擇結果定制化,這也完全可以辦到。 2、數據選擇業務處理定制化 在選擇數據窗口中,通過參數獲得調用窗體及數據信息需要回寫的控件Id,當然了,如果需要回寫到Matrix中,除了需要指定這個Matrix的數據回寫的列欄目,還應該指定需要回寫的對應行;當然了,對于個性化的業務處理,在調用窗體中定義一個回調函數,在數據選擇窗體的選擇事件通過回調函數來完成個性化業務處理。 實現方法如下: string[] strColumns = strFatherFields.Split(',');
??????????????????? string[] strValues = new string[strFatherFields.Length == 0 || frmFather != null ? dt.Columns.Count : strColumns.Length];
??????????????????? for (int i = 0; i < strValues.Length; i++)
??????????????????? {
??????????????????????? string strValue = "";
??????????????????????? if (dt.Columns.Item(i).Cells.Item(nSelectedRow).Value != null) strValue = dt.Columns.Item(i).Cells.Item(nSelectedRow).Value.ToString();
??????????????????????? if (i < dt.Columns.Count) strValues[i] = strValue;
??????????????????? } if (strFatherFId.Length > 0 && strColumns.Length > 0)
??????????????????? {
??????????????????????? Form frm = fsSbo.fsSboApplication.Forms.Item(strFatherFId); oForm.Close(); frm.Freeze(true);
??????????????????????? for (int i = 0; i < strColumns.Length; i++)
??????????????????????? {
??????????????????????????? if (strMtxId.Length > 0 && nMtxRow > 0)
??????????????????????????? {
??????????????????????????????? Matrix mtx = (Matrix)frm.Items.Item(strMtxId).Specific;
??????????????????????????????? Column oColumn = mtx.Columns.Item(strColumns[i]); if (oColumn.Type == BoFormItemTypes.it_EDIT || oColumn.Type == BoFormItemTypes.it_EXTEDIT)
??????????????????????????????????? fsSbo.SetValue2MtxEditText(ref mtx, strColumns[i], nMtxRow, strValues[i]);
??????????????????????????????? else if (oColumn.Type == BoFormItemTypes.it_COMBO_BOX)
??????????????????????????????????? fsSbo.SetValue2MtxCombox(ref mtx, strColumns[i], nMtxRow, strValues[i]);
??????????????????????????? }
??????????????????????????? else
??????????????????????????? {
??????????????????????????????? Item oItem = frm.Items.Item(strColumns[i]);
??????????????????????????????? if (oItem.Type == BoFormItemTypes.it_COMBO_BOX)
??????????????????????????????????? fsSbo.SetValue2Combox(ref frm, strColumns[i], strValues[i]);
??????????????????????????????? else if (oItem.Type == BoFormItemTypes.it_EDIT || oItem.Type == BoFormItemTypes.it_EXTEDIT)
??????????????????????????????????? fsSbo.SetValue2EditText(ref frm, strColumns[i], strValues[i]);
??????????????????????????? }
??????????????????????? } if (frm.Mode != BoFormMode.fm_ADD_MODE) frm.Mode = BoFormMode.fm_UPDATE_MODE; frm.Freeze(false);
??????????????????????? frm.Refresh();
??????????????????????? frm.Update();
??????????????????? }
??????????????????? else if (frmFather != null)
??????????????????? {
??????????????????????? string strFormId = oForm.UniqueID; oForm.Close(); frmFather.SetReturnValue4SelectForm(strValues, strFatherFields);
??????????????????? } 3、如何調用 既然完成了業務處理,調用這個通用的數據選擇功能就很簡單了。當然將這個調用寫成一個通用的函數是個很好的習慣。富盛Sbo程序開發框架就是這樣完成的。 public Boolean OpenChooseDataForm(string strTitle, string strFatherId, string strQuerySQL, string strFatherFields, string strMtxId, int nMtxRow)
??????? {
??????????? Boolean bRet = false;
??????????? try
??????????? {
??????????????? fsSboChooseDataBase frm = new fsSboChooseDataBase(this);
??????????????? frm.ChooseDataSQL = strQuerySQL;
??????????????? frm.FatherFields = strFatherFields;
??????????????? frm.FatherFormId = strFatherId;
??????????????? if (strMtxId.Length > 0 && nMtxRow > 0)
??????????????? {
??????????????????? frm.FatherMatrixId = strMtxId;
??????????????????? frm.FatherMatrixRow = nMtxRow;
??????????????? }
???????????????
??????????????? bRet = ShowForm(frm, "ChooseData" + strFatherId, strTitle);
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? ShowMsg("錯誤:" + ex.Message);
??????????? } return bRet;
??????? } 這里的fsSboChooseDataBase就是上述我們討論的通用數據選擇業務實現類了。 4、實例 在富盛打葉復烤生產管理系統中,廣泛的使用這一通用數據選擇功能。 4.1 通過以下代碼實現加工協議選擇,選擇之后的信息被回填到業務選擇界面的編輯文本中。 string strSQL = "", strTitle = "", strFields = ""; strTitle = "選擇加工協議";
??????????????????? strSQL = "SELECT DocEntry as [$$DocEntry], U_DealCode 加工協議, U_DealName 協議描述, U_DealNo 檔案編號, U_WrkBatNo 生產批次, U_CardCode 委托方, U_CardName 委托方名稱, U_PlanSD 計劃開始, U_PlanED 計劃結束? FROM [@FSCXFWORKDEALINFO] WHERE IsNull(U_Stts,'0') in ('2','3')";
??????????????????? strFields = "DealEntry,emDealCode,emDealName,emDealNo,emBatNo,emCardCode,emCardName"; bRet = fsSbo.OpenChooseDataForm(strTitle, oForm.UniqueID, strSQL, strFields, "", -1); 實現的數據選擇界面如下: 選后數據回寫到以下界面 4.2 通過以下代碼實現加工物料選擇,選擇之后的信息被回填到業務選擇界面的Matrix中。 string strSQL = "", strTitle = "選擇投料"; string strDealEntry = fsSbo.GetValue4EditText(oForm, "DealEntry");
??????????????? if (strDealEntry.Length > 0)
??????????????? {
??????????????????????? strSQL = "SELECT U_ItemCode 物料代碼, U_ItemName 物料描述, U_BaseItem as [$$BaseItem], U_BaseCode as [$$BaseCode], U_GrdEntry as [$$GrdEntry], U_GrdCode 等級, U_FromCode as [$$FromCode], U_FromName [產地], U_ItemAge 年限, IsNull(U_Qty,0) - IsNull(U_Qtyed,0) [$$RemQty], U_ItemGrp [$$ItemGrp], U_WhsCode [$$WhsCode], DocEntry as [$$DocEntry], U_Qty 計劃加工, U_Qtyed 已加工, U_Notes 備注 FROM [@FSCXFWORKDEALLINE1] WHERE U_ItemGrp in (" + fsSbo.fsSboMes4CxF.ItemGroupCodeBeforePick + ") AND DocEntry=" + strDealEntry + (strItemList.Length > 0 ? " AND U_ItemCode not in (" + strItemList + ")" : "");
??????????????????? bRet = fsSbo.OpenChooseDataForm(strTitle, this, strSQL, "REQUEST");
??????????????? } 數據選擇界面如下: 選后數據回寫到以下界面: <>

轉載于:https://blog.51cto.com/foresun/94859

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Sbo通用数据选择功能的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。