Easyflow.NET 進階表單程式設計心得之MIMJ

什麼是MIMJ這可以分成兩個部份來看,一個是MI當然另一個就是MJ啦。MI主要的功能為開窗帶值,而MJ的功用就是當MI帶值回來造成欄位值變動時(不一定要MI開窗帶值,只要欄位值有變動就會觸發),進行後端驗証的動作並回傳一個值。

設定MI的方法

基本型

  • getClickParams(按鈕,回填到畫面上的物件,開窗的類型[“S單選","M多選"])
  • getClickParams(“GD003_btn","GD003_txt","S");

進階型

  • getClickPrarams_Fields(按鈕,當SQL where 條件之參數(分號;隔開),回填到畫面上的物件,開窗的類型)
  • getClickParams_Fields(“GD003_btn","GD003_txt","DG003_txt","S");

設定MJ的方法

基本型

  • getBlurParams(主要觸發MJ的欄位,自訂MJ的SwitchKey名稱,傳到後端用的參數(並非都當作SQL where條件參數))
  • getBlurParams(“GD003_txt", “部門分類","GD003_txt");

執行MI的用法(doMI)

基本型

  • doMI(MI組數第一組,MI組數第二組)
  • doMI(“CRMHH","01″);

執行MJ的用法(doMJ)

基本型[doMJ]: 執行MJ之後不再做特殊處理,控制權轉還MIMJBasepage。

  • doMJ(MJ組數第一組,MJ組數第二組,回填畫面之元件 = 資料庫回傳的欄位名稱)
  • doMJ(“CRMHH","03″,"EV001_txt=H001″);

MIMJ要在哪裏設定?

正常來說使用表單精靈來製作表單就會產生 “表單代號_MIMJ.aspx 及 表單代號_MIMJ.aspx.cs " 這兩個檔案。

表單精靈自動產生的網頁程式碼路徑:Easyflow的目錄EFNET/src/FRM表單代號的資料夾下

程式修改範例

//#修改程式路徑
//#D:\DSC.NET\Easyflow.NET\Web\DSC.NET\EF.NET\src\FRM\FormID(表單代號)\FormID.aspx.cs
 protected override void settingClientFunction()
 {
   //人員
     this.efsuc003.HtmImg.Attributes.Add("onclick", MIMJUtil.getClickParams("MasterPage_MasterPageContent_efsuc003_btn", "MasterPage_MasterPageContent_efsuc003_txt", "S"));
     this.efsuc003.TxtInput.Attributes.Add("onblur", MIMJUtil.getBlurParams("MasterPage_MasterPageContent_efsuc003_txt", "人員_efsuc003", "MasterPage_MasterPageContent_efsuc003_txt"));
     this.efsuc003.TxtInput.Attributes.Add("onchange", "AddtoHash('MasterPage_MasterPageContent_efsuc003_txt')");
   //部門
     this.efsuc004.HtmImg.Attributes.Add("onclick", MIMJUtil.getClickParams("MasterPage_MasterPageContent_efsuc004_btn", "MasterPage_MasterPageContent_efsuc004_txt", "S"));
     this.efsuc004.TxtInput.Attributes.Add("onblur", MIMJUtil.getBlurParams("MasterPage_MasterPageContent_efsuc004_txt", "部門_efsuc004", "MasterPage_MasterPageContent_efsuc004_txt"));
     this.efsuc004.TxtInput.Attributes.Add("onchange", "AddtoHash('MasterPage_MasterPageContent_efsuc004_txt')");

 }
//#修改程式路徑 D:\DSC.NET\Easyflow.NET\Web\DSC.NET\EF.NET\src\FRM\FormID(表單代號)\FormID_MIMJ.aspx.cs
  protected override void MIFunction()
  {
        switch (tBtnID)
        {
           case "MasterPage_MasterPageContent_efsuc003_btn": //人員
                base.doMI("RESAK", "03");
                break;
            case "MasterPage_MasterPageContent_efsuc004_btn": //部門
                base.doMI("RESAL", "01");
                break;
            default:
                break;
        }
  }

  protected override void MJFunction()
  {
      switch (tMJ)
      {
          case "人員_efsuc003":
               base.doMJ("RESAK", "03", "MasterPage_MasterPageContent_efsuc003_txt2=resak002", "MasterPage_MasterPageContent_efsuc004_txt=resal001", "MasterPage_MasterPageContent_efsuc004_txt2=resal002");
               break;
          case "部門_efsuc004":
               base.doMJ("RESAL", "01", "MasterPage_MasterPageContent_efsuc004_txt2=resal002");
               break;
          default:
               break;
      }
   }

MIMJ編輯工具(說穿了就是放DataBase上放了很多組select子句),MI利用這些子句來取的查詢後,塞到DSC的開窗元件上。而MJ當欄位值變化時,觸發後端MJ的select子句並傳回值。

MIMJ編輯程式畫面,程式安裝路徑請選擇>>Easyflow根目錄包含web.config這個檔案內會包含對資料庫的連線字串等。

 

MIForm的操作畫面

 

MI DataBase Table

 

MJ的編輯畫面

 

MJ DataBase Table

 

進階表單設計相關上課文件檔案

18 thoughts on “Easyflow.NET 進階表單程式設計心得之MIMJ

    • MI的功能是開窗並傳回我們所選擇的值,而MJ就是當欄位值onblur時解發的動作,它會將目前的欄位值送到後端做驗証、並傳回值。
      EasyFlow上最典型的MIMJ例子就屬「人員開窗」,表單精靈上可以拉出來用的。
      MI:開窗選擇人員後將人員工號寫入textbox裏,這樣MI的工作就完成了。
      MJ:MJ發現textbox值有變動,就把工號這組字串送到後端驗証。如果驗証通過,就把員工姓名寫在那個開窗按鈕的後面。這就是MJ的工作。
      MI和MJ是可以拆開來用的,但是大都是合在一起用。開窗取值不一定要做驗証的動作,驗証的動作也不一定要從開窗取值開會解發,也可以下來選單或是手打。

  1. ^^
    我們家是1.3版的easyflow,沒有可以自訂mimj的功能,不過我將DSC原有但我用不到的MIMJ的sql改掉,目前開窗已經可以用了,但是我沒法將我要的資料帶到我要的欄位上,我現在開窗有兩個欄位“料號“與“單價“目前料號可以帶出值,但是單價卻是抓到第一筆的單價例如
    A料,0.5
    B料,10
    我的單價那個textbox 卻只能抓到0.5但是料號是正確的,我也不知道是那裡錯了=_=

  2. 謝謝,jerry 我細看了一下你給文件,我了解mIMJ的使用方法了,目前我要的功能也都正常了。 ^^
    1.設定MJ的方法-基本型
    getBlurParams(主要觸發MJ的欄位, 自訂MJ的SwitchKey名稱, 傳到後端用的參數(並非均當SQL where條件之參數) 多條件要用","區別 )

  3. ^ ^" 也沒有啦,因為沒有上過課,所以只能自己摸,對了再問你個問題有你有遇過,雙檔在單頭的地方不是有個grid嗎?裡面不是會記錄單身有那些欄位、長度、title顯示之類的,我現在遇到就是Grid與單身的物件是不一樣多的狀況,例如
    Grid有
    sa001,sa002,sa002c,sa003
    單身只有
    sa001,sa002,sa003 (都是TextBox)
    這樣在key單的時候,單身就多出sa002c這個欄位(其他功能不影響),你知道要怎麼拿掉這個sa002c嗎?

    • 目前我做的兩個雙檔表單中沒有出現你說的單身資料表多了一個欄位的問題。
      你的問題可以打電話問問Easyflow客服或是到鼎新網頁上登入你的問題。
      應該會有客服人員會回答你。

  4. Jerry:
    你好!
    想請教您,開窗多選後, 有無參數可決定是否要用回傳值取代原欄位之, 或是將回傳值附加在原欄位之資料後面?

    • Charles:你好!
      不知道你所說的多選開窗是否為EasyFlow本身所提供的開窗元件(部門、人員、日期)。
      如果是的話,當開窗為多選時按鈕後其開窗按鈕後就不會像單選能在按鈕後會顯示所選值(「員工工號」「按鈕」「員工姓名」)。
      在多選開窗時,EasyFlow是不會幫我們執行MJ的驗證。且預設取回來的值就像是「員工工號-員工姓名」,如果要修改它回填值的樣式,可以修改期自動產生的「目標表單的JS檔」,來達成回填值「員工姓名」。

      開啟「目標表單的JS檔」,修改 getMultiOpenWindowValues 這個 function。在for迴圈中可以看到指定值的一行指令,document.getElementById("MasterPage_MasterPageContent_"+setField).value += tArr2[0] +'-' + tArr2[1]+";";
      將它改成如下就可以了(tArr[x]這個可能是開窗欄位值的索引)
      document.getElementById("MasterPage_MasterPageContent_"+setField).value += tArr2[1]+";";

      不知道這是不是你想要的。

  5. 您好詢問怎麼把MJ傳回來的多個直放到指定的欄位上
    以下是我寫的
    base.doMJByDB(“OpenMIMJ01″,"05″, @"XXX.XXX.XXX.XXX", “XXXXX","MasterPage_MasterPageContent_text5_txt2=MB002″,"MasterPage_MasterPageContent_text6_txt2=MB003″,"MasterPage_MasterPageContent_text7_txt2=MB025″,"MasterPage_MasterPageContent_text8_txt2=MB043″,"MasterPage_MasterPageContent_textarea1_txt2=MB009″,"MasterPage_MasterPageContent_textarea2_txt2=MB028″);
    break;
    也改了資料庫中的寫法
    — MAINSELECT
    select MB002,MB003,MB025,MB043,MB009,MB028 from $$INVMB where MB001=:MB001
    — RETURN
    MB002;MB003;MB025;MB043;MB009;MB028

    但在EASYFLOW 選擇時 卻無法將資料帶入我想放的欄位 請問是少做了什麼嗎

  6. 我在做 ECR 工程變更單時,會有幾個欄位 父階料號,品名,規格, 子階料號,品名,規格
    剛開始用連動式下拉式表單 ,結果只有出現一次正確畫面, 後來去查, 品號有18萬筆筆數太多當掉了 .筆數太多要怎麼做比較好呢? 這需求可以用MIMJ來做嗎?
    另外easyflow.net 單頭在前, 單身在後, 有辦法單身在前, 單頭在後嗎?
    不好意思,問了好多問題. 謝謝你!

    Benson

    • Hi Benson,

      品號(來源是品號基本資料?,還是工單會有重複的狀況發生?)筆數這麼多的確不適合做下拉選單的顯示。

      多筆數結果集要做的話,可以找看看是否有辦法將品號資訊分門別類(品號的命名規則),利用大方向將品號料號的結果範圍縮小。
      多做幾層MIMJ的查詢。

      單頭、單身哪個在前或在後,應該是沒有限定的。因為 MIMJ 的用途就是 利用前一次查詢的資料選擇值,來當作下一關選擇值範選的過濾條件罷了。

      如果會 AJAX 和 ASP.NET、TSQL 就不一定要用 MIMJ 了。

      以上是我個人的淺見,因為很久沒做EasyFlow的表單設定了。差不多都忘了詳細該怎麼做了。^^

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s