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;

VB

epiUltraGridC1.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]”;

VB

epiUltraGridReqSummary.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 = true

VB

epiUltraGridShipInfo.ActiveRow = epiUltraGridOnhandLotInfo.Rows(3)

epiUltraGridShipInfo.ActiveRow.Cells(“ShipQty”).Value = 999

将鼠标选中当前行

epiUltraGridShipInfo.ActiveRow.Selected = true

—–epiUltraGrid ActiveCell epiUltraGrid某单元格值发生改变之后

VB

Private Sub epiUltraGridC1_AfterCellUpdate(ByVal sender As Object, ByVal args As Infragistics.Win.UltraWinGrid.CellEventArgs)

Select Case args.Cell.Column.Key

Case “Character01”

……

End Select

End Sub

—-Format epiUltraGrid Amount Column

C#

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 Properties

this.epiUltraComboShipTo.ValueMember = “CustNum”;

this.epiUltraComboShipTo.DataSource = dsCustomerAdapter;

this.epiUltraComboShipTo.DisplayMember = “Name”;

string[] fields = new string[] {

“Name”};

this.epiUltraComboShipTo.SetColumnFilter(fields);



–fill epiUltraCombo

private 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 Properties

this.epiUltraComboFamily.ValueMember = “Family”;

this.epiUltraComboFamily.DataSource = TB;

this.epiUltraComboFamily.DisplayMember = “Family”;

string[] fields = new string[] {

“Family”};

this.epiUltraComboFamily.SetColumnFilter(fields);

}

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/198279.html

(0)
上一篇 2021年11月17日
下一篇 2021年11月17日

相关推荐

发表回复

登录后才能评论