zoukankan      html  css  js  c++  java
  • Epicor系统二次开发

    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);
    }

    博客标明【原创】的文章都是本人亲自编写内容! 如有需要转载, 请标明出处:辉创1989(http://www.cnblogs.com/ahui1989/),届时非常感谢! 文章分享在此,希望我之原创有帮到你们! 如有不足之处也可联系我,以便我们共同探讨! 本人现职为Epicor10 系统 开发维护工作,如有需要可共同探讨相关技术知识及经验总结! QQ:929412592
  • 相关阅读:
    10款免费开源图表插件推荐
    jQuery中$.get()、$.post()和$.ajax()
    layer弹出层的iframe页面回调
    【转载】MSXML应用总结 概念篇
    【转载】MSXML应用总结 开发篇(上)
    【转载】MSXML应用总结 开发篇(下)
    【转载】MFC怎么封装CreateWindow
    【转载】MFC的Main函数跑哪去了
    【转载】C++创建对象的两种方法
    【转载】malloc内存分配与free内存释放的原理
  • 原文地址:https://www.cnblogs.com/ahui1989/p/5977360.html
Copyright © 2011-2022 走看看