Epicor系统二次开发
一、获取或修改界面EpiDataView的字段数据(Get EpiDataView data) C# EpiDataView edv = (EpiDataView)oTrans.EpiDataViews[“ViewName”]; if(edv.dataView.Count > 0) { string someValue = (string)edv.dataView[edv.Row][“FieldName”]; edv.dataView[edv.Row][“FieldName”] = someValue; } —————————————————————————————————————————————————— VB Dim edv As EpiDataView = CType(oTrans.EpiDataViews(“ViewName”), EpiDataView) if edv.DataView.Count>0 then dim someValue as string = [edv].dataView([edv].Row)(“FieldName”) [edv].dataView([edv].Row)(“FieldName”) = someValue end if 如果EpiDataView中有多行数据,例如incoming po suggestion或purchase suggestion,可以通过以下格式指定行号取得值 统计行数:edv.DataView.Count 取第100行的值:[edv].dataView(99)(“FieldName”)二、获取Session字段数据(Get Session data) C# add reference Epicor.Mfg.Core.Session.dll using Epicor.Mfg.Core; string UserID = ((Epicor.Mfg.Core.Session)this.oTrans.Session).UserID; string CompanyID = ((Epicor.Mfg.Core.Session)this.oTrans.Session).CompanyID; E10 Ice.Core.Session.dll using Ice.Core; string UserID = ((Ice.Core.Session)this.oTrans.Session).UserID;三、call adapter 调用adapter的GetByID方法,获取adapter中的数据或更新数据,使用前必须先引用相应Adapter C# 注意E10加Adapter需要在开始增加 using Erp.Adapters; PartAdapter adpPart = new PartAdapter(this.oTrans); adpPart.BOConnect(); adpPart.GetByID(“PART0001”); string PartDescription = adpPart.PartData.Tables[“Part”].Rows[0][“PartDescription”]; adpPart.PartData.Tables[“Part”].Rows[0][“PartDescription”]=”PART0001 xxxxxx”; adpPart.Update(); adpPart.Dispose(); VB Dim adpPart As PartAdapter = New PartAdapter(oTrans) adpPart.BOConnect() adpPart.GetByID(“PART0001”) string PartDescription = adpPart.PartData.Tables(“Part”).Rows(0)(“PartDescription”) adpPart.PartData.Tables(“Part”).Rows(0)(“PartDescription”)=”PART0001 xxxxxx” adpPart.Update() adpPart.Dispose() 四、Search Data by Adapter 使用adapter查询数据,使用前必须先引用相应Adapter C# PartAdapter adpPart = new PartAdapter(this.oTrans); adpPart.BOConnect(); bool MorePages; String whereClause = “PartNum=’PART0001′”; SearchOptions opts = new SearchOptions(SearchMode.AutoSearch); opts.NamedSearch.WhereClauses.Add(“Part”, whereClause); DataSet dsPart = adpPart.GetRows(opts, out MorePages); 注意E10加Adapter需要在开始增加 using Erp.Adapters; VB Dim adpPart As PartAdapter = New PartAdapter(oTrans) adpPart.BOConnect() Dim MorePages As Boolean Dim whereClause As String = “PartNum=’PART0001′” Dim opts As SearchOptions = New SearchOptions(SearchMode.AutoSearch) opts.NamedSearch.WhereClauses.Add(“Part”, whereClause) Dim dsPart As Data.DataSet = adpPart.GetRows(opts, MorePages) 五、Search Data by Epicor.Mfg.UI.FormFunctions.SearchFunctions 使用界面查询功能查询数据并返回值到当前界面EpiDataView,但数据列只有部分,类似于标准界面上的查询功能,适用于快速查询基本数据。 –使用Simple Search向导产生以下代码 C# bool recSelected; string whereClause = string.Empty; //”StartDate <= ‘” + ApplyDate.ToString(“MM/dd/yyyy”) + “‘”; 如果是日期值转换月日年格式后,两边要加单引号 System.Data.DataSet dsCurrencyAdapter = Epicor.Mfg.UI.FormFunctions.SearchFunctions.listLookup(this.oTrans, “CurrencyAdapter”, out recSelected, true, whereClause); if (recSelected) { // Map Search Fields to Application Fields System.Data.DataRow adapterRow = dsCurrencyAdapter.Tables[0].Rows[0]; EpiDataView edvPODetail = ((EpiDataView)(this.oTrans.EpiDataViews[“PODetail”])); System.Data.DataRow edvPODetailRow = edvPODetail.CurrentDataRow; if ((edvPODetailRow != null)) { edvPODetailRow.BeginEdit(); edvPODetailRow[“ShortChar10”] = Convert.ToString(adapterRow[“CurrencyCode”]); edvPODetailRow.EndEdit(); } } E10: Ice.UI.FormFunctions.SearchFunctions 发现这种方法不能取得ud field的值。 VB Dim recSelected As Boolean Dim whereClause As String = String.Empty Dim dsResourceGroupAdapter As System.Data.DataSet = Epicor.Mfg.UI.FormFunctions.SearchFunctions.listLookup(Me.oTrans, “ResourceGroupAdapter”, recSelected, False, whereClause) If recSelected Then Dim adapterRow As System.Data.DataRow = dsResourceGroupAdapter.Tables(0).Rows(0) ’ Map Search Fields to Application Fields Dim edvJobOpDtl As EpiDataView = CType(Script.oTrans.EpiDataViews(“JobOpDtl”),EpiDataView) Dim edvJobOpDtlRow As System.Data.DataRow = edvJobOpDtl.CurrentDataRow If (Not (edvJobOpDtlRow) Is Nothing) Then edvJobOpDtlRow.BeginEdit edvJobOpDtlRow(“Character01”) = adapterRow(“ResourceGrpID”) edvJobOpDtlRow.EndEdit End If End If六、InvokeSearch 查詢數據,類似GetRows() System.Collections.Hashtable myHash = new System.Collections.Hashtable(); string wClause = “Key1 = ‘“ + key1 + “‘“; myHash.Add(“UD100A”, wClause); SearchOptions opts = Epicor.Mfg.UI.Searches.SearchOptions.CreateRuntimeSearch(myHash,DataSetMode.RowsDataSet); ud100Adapter.InvokeSearch(opts); ucbCarrierSize.DataSource = ud100Adapter.UD100Data.UD100A; 七、 EpiViewNotification 窗体事件,例如不允许访问某供应商的PO –选择窗体事件向导产生以下代码 C# private void edvPOHeader_EpiViewNotification(EpiDataView view, EpiNotifyArgs args) { // ** Argument Properties and Uses ** // view.dataView[args.Row][“FieldName”] // args.Row, args.Column, args.Sender, args.NotifyType // NotifyType.Initialize, NotifyType.AddRow, NotifyType.DeleteRow, NotifyType.InitLastView, NotifyType.InitAndResetTreeNodes if ((args.NotifyType == EpiTransaction.NotifyType.Initialize))//选择记录的时候 { if ((args.Row > -1)) { //MessageBox.Show((string)view.dataView[args.Row][“VendorVendorID”]); if((string)view.dataView[args.Row][“VendorVendorID”]==”S0000022″) { oTrans.ClearDataSets(); //throw new UIException(“不能访问此供应商”); throw new Exception(“不能访问此供应商”); //MessageBox.Show(“不能访问此供应商”); } } } if ((args.NotifyType == EpiTransaction.NotifyType.AddRow))//新加记录的时候 { if ((args.Row > -1)) { //MessageBox.Show(“EpiTransaction.NotifyType.AddRow”); } } }八、Before Form change FormEvent args.ProposedValue及args.Row[“UOMCode”]的区别,args.ProposedValue是操作时选择的内容但args.Row[“UOMCode”]是没有值的。 private void PriceLstParts_BeforeFieldChange(object sender, DataColumnChangeEventArgs args) { switch (args.Column.ColumnName) { case “PartNum”: break; case “UOMCode”: //MessageBox.Show(args.Row[“UOMCode”].ToString().Length.ToString()+”/” + args.ProposedValue.ToString()); if(args.ProposedValue.ToString().Length>0) { bool ChkDupPart = CheckDupPartByListCode(args.Row[“ListCode”].ToString(),args.Row[“PartNum”].ToString()); if(ChkDupPart) { //MessageBox.Show(“Duplicate Part: ” + args.Row[“PartNum”].ToString()); throw new Exception(“Duplicate Part Not Allow. PartNum: ” + args.Row[“PartNum”].ToString()); } } break; } } throw new EpiUIException(); which library? [Table/ViewName]_BeforeFieldChange() Handles DataTable.ColumnChanging event This event handler is called before users can shift focus away from a field with changed data bound to a DataSource and DataField. It performs the following events: ? This event handler can validate the entered value of a field. ? If the value is not valid, then you can prevent the user from leaving the field until a correct value is entered. To prevent users from leaving a field that is not validated, you can use this C# code: throw new EpiUIException();epiUltraGrid 控件:—-Hidden UltraGrid Column 隐藏epiUltraGrid某列C#epiUltraGridC1.DisplayLayout.Bands[0].Columns[0].Hidden = true;VBepiUltraGridC1.DisplayLayout.Bands(0).Columns(0).Hidden = true—-Edit UltraGrid display ColumnName 修改epiUltraGrid列显示名称C#epiUltraGridReqSummary.DisplayLayout.Bands[0].Columns[“Net_Req_Lots”].Header.Caption = “Net Req Shot [D/E]”;VBepiUltraGridReqSummary.DisplayLayout.Bands(0).Columns(“Net_Req_Lots”).Header.Caption = “Net Req Shot [D/E]”—-select epiUltraGrid row 代码选择epiUltraGrid某一行并赋值C#epiUltraGridShipInfo.ActiveRow = epiUltraGridOnhandLotInfo.Rows[3];epiUltraGridShipInfo.ActiveRow.Cells[“ShipQty”].Value = 999;将鼠标选中当前行epiUltraGridShipInfo.ActiveRow.Selected = trueVBepiUltraGridShipInfo.ActiveRow = epiUltraGridOnhandLotInfo.Rows(3)epiUltraGridShipInfo.ActiveRow.Cells(“ShipQty”).Value = 999将鼠标选中当前行epiUltraGridShipInfo.ActiveRow.Selected = true—–epiUltraGrid ActiveCell epiUltraGrid某单元格值发生改变之后VBPrivate Sub epiUltraGridC1_AfterCellUpdate(ByVal sender As Object, ByVal args As Infragistics.Win.UltraWinGrid.CellEventArgs)Select Case args.Cell.Column.KeyCase “Character01″……End SelectEnd Sub—-Format epiUltraGrid Amount ColumnC#epiUltraGridC1.DataSource=adapterDynamicQuery.QueryResults;epiUltraGridC1.DisplayLayout.Bands[0].Columns[“EmpExpense.DocTotalExpenseAmt”].Format = “#,##0.00”;epiUltraGridC1.DisplayLayout.Bands[0].Columns[“EmpExpense.DocTotalExpenseAmt”].CellAppearance.TextHAlign = Infragistics.Win.HAlign.Right;—-设置epiUltraCombo下拉显示列宽this.epiUltraComboLOB.DropDownWidth = 200;—-时间选择在系统中一般日期与时间是分开存储,时间部分是使用数值字段存储,例如自订义字段Number01,例如客制化加入epiTimeEditor控件,绑定Number01,选择时间是 10:15 AM,在系统保存此数据时,Number01的值自动是36900,计算方法:epiTimeEditor 10:15 AM = 10*3600 + 15*60 = store Database Integer 36900—-关闭窗体窗体名.Close()PartForm.Close()—-You can also create code that casts to a specific control type:VB Code:Dim eucSales As EpiUltraCombo = CType(csm.GetNativeControlReference(“5483cdef-3049-4705-b597-28ae93bc7fdf”), EpiUltraCombo)C# Code:EpiUltraCombo eucSales = (EpiUltraCombo )csm.GetNativeControlReference(“5483cdef-3049-4705-b597-28ae93bc7fdf”);Control.Combos is EpiCombo—隐藏下拉菜单功能private static void baseToolbarsManager_BeforeToolDropdown(object sender, Infragistics.Win.UltraWinToolbars.BeforeToolDropdownEventArgs args){baseToolbarsManager.Tools[“RemovePOLinkTool”].SharedProps.Visible = false;baseToolbarsManager.Tools[“IncomingICPOSugTool”].SharedProps.Visible = false;baseToolbarsManager.Tools[“SendICPOSugTool”].SharedProps.Visible = false;}—Set EpiUltraCombo Propertiesthis.epiUltraComboShipTo.ValueMember = “CustNum”;this.epiUltraComboShipTo.DataSource = dsCustomerAdapter;this.epiUltraComboShipTo.DisplayMember = “Name”;string[] fields = new string[] {“Name”};this.epiUltraComboShipTo.SetColumnFilter(fields);–fill epiUltraComboprivate void FillepiUltraComboFamily(){DataTable TB = new DataTable();DataRow DR;TB.Columns.Add(“Family”, typeof(String));DR = TB.NewRow();DR[“Family”] = “FG”;TB.Rows.Add(DR);DR = TB.NewRow();DR[“Family”] = “RM”;TB.Rows.Add(DR);// Set EpiUltraCombo Propertiesthis.epiUltraComboFamily.ValueMember = “Family”;this.epiUltraComboFamily.DataSource = TB;this.epiUltraComboFamily.DisplayMember = “Family”;string[] fields = new string[] {“Family”};this.epiUltraComboFamily.SetColumnFilter(fields);}
发表回复