2023年12月26日 星期二

V30702B –mysuccessalert – firehandle -getUrlStr -顯示訊息,使用者按[確認]鈕後,才重顯示資料

 目的: V30702B –mysuccessalert – firehandle -顯示訊息,使用者按[確認]鈕後,才重顯示資料

處理說明: 1>顯示[確認]訊息,且使用者按[確認]鈕,才重新顯示資料
                       var np = {}
                       np["TASKNO"] = cur_rec.data['TASKNO'].toString();
                       var Tmp_url = '../../api/V30702BAPI/UPDATE_STA';
                       var Tmp_RtnStr = getUrlStr(Tmp_url, np, "結案處理 - 單況更新");
                       if (checkRtnOK(Tmp_RtnStr)) {
                           mysuccessalert(Tmp_RtnStr, function () {
                                          Ext.getCmp('btn_Show').fireHandler(); //重新顯示 Master資料
                                         })
                           }



1>*.js
//[結案]鈕 -  - 只更新資料,無子畫面
function Call_V30702B() {
    var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection();
    var cur_rec;
    if (cur_recs.length == 0) {
        buttonModel.modelType = 0;
        mywarnalert('請先挑選[結案]的地裝派遣資料!!');
    }
    else {
        cur_rec = cur_recs[0];
        var Tmp_msg = "結案後<br>"
                                 +"目前簽入中的派遣單單況將自動簽出<br>"
                                 +"確定執行[結案]嗎 ?<br>"
                                 +"(地裝派遣單號: " + cur_rec.data['TASKNO'].toString() + ")<br>";
        myconfirmalert(Tmp_msg, callBackFunc);
        function callBackFunc(id) {
            if (id == 'yes') {
                console.log("cur_recs.length:", cur_recs.length);                
                var np = {}
                np["TASKNO"] = cur_rec.data['TASKNO'].toString();
                var Tmp_url = '../../api/V30702BAPI/UPDATE_STA';
                var Tmp_RtnStr = getUrlStr(Tmp_url, np, "結案處理 - 單況更新");
                if (checkRtnOK(Tmp_RtnStr)) {
                    mysuccessalert(Tmp_RtnStr, function () {
                        Ext.getCmp('btn_Show').fireHandler();  //重新顯示 Master資料
                    })                    
                }


V30702C – -focus - blur -識別證刷卡後,加入store 且 輸入欄位,重新FOCUS - blur - store - 新增資料

目的: V30702C – 識別證刷卡後,加入store 輸入欄位,重新FOCUS

處理說明: 1> ( [boolean], [delay] ) : Ext.ComponentCHAINABLE

                         Try to focus this component.                            

                       Ext.getCmp("sub_TAMAN").focus(false, 20);
                           --> true to also select the text in this component
                           -->Delay the focus this number of milliseconds (true for 10 milliseconds).  
                  2> on blue event
                       Ext.getCmp("sub_TAMAN").on('blur', function (me, eOpts) {
                     


1>*.js
    Ext.getCmp("sub_TAMAN").on('blur', function (me, eOpts) {
        //STEP1 將[識別證卡號] 轉成 [員工編號]
        var Tmp_CARDNO = me.getValue();
        console.log("卡號:", Tmp_CARDNO);
        var Tmp_EMPLYID = "";  //所有資料 PK 字串, 以 , 分隔
        var Tmp_EMPLYNM = "";
        var Tmp_url = "../../api/V30702CAPI/get_EMPLYID_EMPLYNM";
        var np = {};
        np["CARDNO"] = Tmp_CARDNO;
        var Tmp_Str = getUrlStr(Tmp_url, np, "識別證編號2員工編號");
        Tmp_EMPLYID = StrExtract(Tmp_Str, 1);
        Tmp_EMPLYNM = StrExtract(Tmp_Str, 2);
        if (checkRtnOK(Tmp_EMPLYID)) {
            me.setValue(Tmp_EMPLYID);
            Ext.getCmp("sub_TAMAN_").setValue(Tmp_EMPLYNM);
        }
        if (Tmp_EMPLYID.length == 0)
            return;
        //STEP2 將[執行人員] [執行人員姓名 ]- 寫入  sub_Grid
        var Tmp_TASKNO = Ext.getCmp('sub_TASKNO').getValue();
        var sub_Store_np = {
            TAMAN: Tmp_EMPLYID,
            TAMAN_: Tmp_EMPLYNM,            
        }
        //Ext.getCmp('sub_Grid').store.add(sub_Store_np);
        var find_rec = Ext.getCmp('sub_Grid').store.findRecord('TAMAN', Tmp_EMPLYID);
        //若目前資料不存在 store , 才加入  store
        if (checkisnull(find_rec)) {            
            //檢查目前使用者是否已在目前派遣單中(TASKNO)簽入
            var Tmp_url = "../../api/V30702CAPI/is_EMPLYID_checkined";
            var np = {};
            np["EMPLYID"] = Tmp_EMPLYID;
            np["TASKNO"] = Tmp_TASKNO;
            var Tmp_YN = getUrlStr(Tmp_url, np, "檢查人員是否已在派遣單checked");            
            if (Tmp_YN == "Y") {
                var Tmp_Str = "員工編號(" + Tmp_EMPLYID + ")<br>"
                    + "員工姓名(" + Tmp_EMPLYNM + ")<br>"
                    + "已在派遣單單號(" + Tmp_TASKNO + ")簽入<br>"
                    + "不可重複簽入<br>"
                    + "敬請檢核!!<br>";
                mywarnalert(Tmp_Str);
            }
            else {
                Ext.getCmp('sub_Grid').store.add(sub_Store_np);
            }                
        }
        else {
            var Tmp_Str = "員工編號(" + Tmp_EMPLYID + ")<br>"
                + "員工姓名(" + Tmp_EMPLYNM + ")<br>"
                + "已挑選<br>"
                + "不可重複挑選<br>"
                + "敬請檢核!!<br>";
            mywarnalert(Tmp_Str);
        }
        Ext.getCmp("sub_TAMAN").setValue("");
        Ext.getCmp("sub_TAMAN_").setValue("");
        Ext.getCmp("sub_TAMAN").focus(false, 20);
    }  // end of function(me,eOpts)
    );        // end of blur function)


2023年12月25日 星期一

V30702A – [收單執行]鈕 – 刷識別證 – store 資料重複,則不允許加入 store

 目的: V30702A – [收單執行]鈕 – 刷識別證 – store 資料重複,則不允許加入 store



處理說明: 1>Ext.getCmp('sub_Grid').store.findRecord(欄位名稱, 欄位值);
                      Ex:
                           var find_rec= Ext.getCmp('sub_Grid').store.findRecord('TAMAN', Tmp_EMPLYID);
                           if (checkisnull(find_rec)) { } else 



1>*.js
//STEP2 將[執行人員] [執行人員姓名 ]- 寫入  sub_Grid
        var sub_Store_np = {
            TAMAN: Tmp_EMPLYID,
            TAMAN_: Tmp_EMPLYNM,            
        }
        var find_rec = Ext.getCmp('sub_Grid').store.findRecord('TAMAN', Tmp_EMPLYID);
        //若目前資料不存在 store , 才加入  store
        if (checkisnull(find_rec)) {
            //var Tmp_find_EMPLYID = find_rec.get("TAMAN");
            Ext.getCmp('sub_Grid').store.add(sub_Store_np);
        }
        else {
            var Tmp_Str = "員工編號(" + find_rec.data["TAMAN"].toString() + ")<br>"
                + "姓名(" + find_rec.data["TAMAN_"].toString() + ")<br>"
                + "已存在<br>"
                +"不可重複挑選<br>"
                + "敬請檢核!!<br>";
            mywarnalert(Tmp_Str);
        }
        Ext.getCmp("sub_TAMAN").setValue("");
        Ext.getCmp("sub_TAMAN_").setValue("");
    }  // end of function(me,eOpts)


2023年12月21日 星期四

V30701A –selectionchange 依目前資料.單況 控制按鈕 - Enabled/Disabled -datachange 時 - 按鈕.Enabled - selectionchange

目的: V30701A –selectionchange 依目前資料.單況 控制按鈕  - Enabled/Disabled 
處理說明:  1>grid.selectionchange Event 
                       Ext.getCmp("grid_Single").on('selectionchange', function (me, eOpts) {
                           var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection();
                           if (cur_recs.length == 0) {
                                Ext.getCmp('Btn_V30702A').setDisabled(true);  // A:收單執行
                                Ext.getCmp('Btn_V30702B').setDisabled(true);  // B:結單


1>*.js
 Ext.getCmp("grid_Single").on('selectionchange', function (me, eOpts) {
        var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection();
        if (cur_recs.length == 0) {
            Ext.getCmp('Btn_V30702A').setDisabled(true);  // A:收單執行
            Ext.getCmp('Btn_V30702B').setDisabled(true);  // B:結單
            Ext.getCmp('Btn_V30702C').setDisabled(true);  // C: 派遣單簽入
            Ext.getCmp('Btn_V30702D').setDisabled(true);  // D: 派遣單簽出
        }
        else {
            Ext.getCmp('Btn_V30702A').setDisabled(true);  // A:收單執行
            Ext.getCmp('Btn_V30702B').setDisabled(true);  // B:結單
            Ext.getCmp('Btn_V30702C').setDisabled(true);  // C: 派遣單簽入
            Ext.getCmp('Btn_V30702D').setDisabled(true);  // D: 派遣單簽出
            var cur_rec = cur_recs[0];
            var Tmp_STA = cur_rec.data['STA'].toString();
            switch (Tmp_STA) {            
                case "B": {
                    Ext.getCmp('Btn_V30702A').setDisabled(false);  // A:收單執行
                    break;
                }
                case "C": {
                    Ext.getCmp('Btn_V30702B').setDisabled(false);  // B: 結單
                    Ext.getCmp('Btn_V30702C').setDisabled(false);  // C: 派遣單簽入
                    Ext.getCmp('Btn_V30702D').setDisabled(false);  // D: 派遣單簽出
                    break;
                }   
                default: {
                    if ((Tmp_STA != "A") && (Tmp_STA != "Z") && (Tmp_STA != "X") )
                       Ext.getCmp('Btn_V30702E').setDisabled(false);  // E: 撤銷
                }
            } //  end of switch            

        }
    }); //  // end of datachanged


2>V20305E.js

 Ext.getCmp('grid_M').on("selectionchange", function (view, selections, options) {
        var np = s_JSON('s_form'); //TMFunction.js, 組合form上的查詢條件為json參數傳遞
        //console.log("Ext.getCmp('s_STAT') : ", Ext.getCmp('s_STAT'));
        var gridstore = Ext.getCmp('grid_D').store;        
        var cur_recs = Ext.getCmp('grid_M').selModel.getSelection();
        if (cur_recs.length == 0) {
            //Tmp_Str = "請先選擇要查詢的資料<br>";
            //mywarnalert(Tmp_Str);
            return;
        }
        var Tmp_REQMAF = nulltoStr(cur_rec.data["REQMAF"]).toString();
        if (Tmp_REQMAF == 'Y') {
            Ext.getCmp("btn_V20305E").setDisabled(false);
        }
        else {
            Ext.getCmp("btn_V20305E").setDisabled(true);
        }
}) 



V30701A - 訉息- mysuccessalert - myconfirmalert -mywarmalert – 按[確定]鈕後,再繼續往下執行(關閉子視窗)

 目的: V30701A – 回覆訊息,[確定]鈕後,再繼續往下執行(關閉子視窗 & 主畫面重新顯示)

處理說明:  1> Ext.MessageBox.alert(par_title, par_msg, par_fn())
                       Ext.MessageBox.alert("訊息", rtn_Str, function () {
                            Ext.getCmp("btn_Show").fireHandler();
                            Ext.getCmp("sub_V30702A_CancelBtn").fireHandler();
                          });
                   2> mysuccessalert(rtn_Str, function () {
                             Ext.getCmp("btn_Show").fireHandler();
                             Ext.getCmp("sub_V30702A_CancelBtn").fireHandler();
                         });    
         
                  3> 詢問[確定][取消] 鈕 - Ext.Msg.confirm('提醒', Tmp_msg, callBackFunc); 
                        var Tmp_msg = "確定執行[申請單送出]嗎 ? (派遣申請單號:" 
                                               + cur_rec.data['TASKNO'].toString() + ")";
                        Ext.Msg.confirm('提醒', Tmp_msg, callBackFunc); 
                        function callBackFunc(id) {
                               if (id == 'yes') {
       




1>V30702A.js
    var Tmp_DataString = JSON.stringify(Tmp_DataAry);
    var np = {}; 
    np["sub_TASKNO"] = Ext.getCmp("sub_TASKNO").getValue();
    np["sub_DataString"] = Tmp_DataString;
    //np["DataAry_JSON"] = JSON.stringify(par_DataAry);
    var Tmp_url = "../../api/V30702AAPI/INSERT_AMM_DSPHCARD";  //
    var rtn_Str = getUrlStr(Tmp_url, np, "收單執行");
    console.log("rtn_Str:", rtn_Str);
    if (checkRtnOK(rtn_Str))         
        //顯示訊息&使用者按確定後,才往下執行
        Ext.MessageBox.alert("訊息", rtn_Str, function () {
            Ext.getCmp("btn_Show").fireHandler();
            Ext.getCmp("sub_V30702A_CancelBtn").fireHandler();
        })

   -->精簡寫法
       mysuccessalert(rtn_Str, function () {
        Ext.getCmp("btn_Show").fireHandler();
        Ext.getCmp("sub_V30702A_CancelBtn").fireHandler();
    });    
    
     mywarnalert(rtn_Str, function () {
        Ext.getCmp("btn_Show").fireHandler();
        Ext.getCmp("sub_V30702A_CancelBtn").fireHandler();
    });    


2>V30701A.js
    cur_rec = cur_recs[0];
        var Tmp_msg = "確定執行[申請單送出]嗎 ? (派遣申請單號:" 
                               + cur_rec.data['TASKNO'].toString() + ")";
        //Ext.Msg.confirm('提醒', Tmp_msg, callBackFunc);
        myconfirmalert(Tmp_msg, callBackFunc);

        function callBackFunc(id) {
            if (id == 'yes') {
                console.log("cur_recs.length:", cur_recs.length);        
                var np = {}
                np["TASKNO"] = cur_rec.data['TASKNO'].toString();
                var Tmp_url = '../../api/V30701AAPI/UPDATE_STA',
                var rtn_Str = getUrlStr(Tmp_url, np, "申請單送出");
                console.log("rtn_Str:", rtn_Str);
                if (checkRtnOK(rtn_Str))                    
                    mysuccessalert(rtn_Str, function () {
                        Ext.getCmp("btn_Show").fireHandler();
                        Ext.getCmp("sub_V30701A_CancelBtn").fireHandler();
                    });
                else
                    mywarnalert(rtn_Str);
            }    // end of   if (id == 'yes') {            

2023年12月20日 星期三

V30702A/E – 子畫面 – Grid & Form & - 識別證刷卡

 目的: V30702A – 子畫面 – 含 Grid    &  V30702E – 一般Form

處理說明:  1>產生一般Form欄位:  - 刷[識別證]  - 粗體字體
                        var cmp_TAMAN_lbl = get_cmp_lbl0("(請刷識別證)", 130);    
                        cmp_TAMAN_lbl.style = "font-size: 12pt; color: blue; ";
                        cmp_TAMAN_lbl.margin = "0 0 0 10";

                 2>刷[識別證] 處理 *.cs   - 將[識別證卡號] 轉成 [員工編號]
                       string Tmp_EMPLYID = myfunc.get_CARDNO2EMPLYID(Tmp_CARDNO);

                       - *.js  Ext.getCmp("sub_TAMAN").on('blur', function (me, eOpts) {  .. }

                 3>呼叫 Button.click -  .fireEvent('click');
                     Ext.getCmp('btn_Show').fireHandler();  //重新顯示 Master資料
                     Ext.getCmp('sub_V30702E_CancelBtn').fireEvent('click');  //關閉子視窗
  

    




1>*.js

Ext.getCmp("sub_TAMAN").on('blur', function (me, eOpts) {
        //STEP1 將[識別證卡號] 轉成 [員工編號]
        var Tmp_CARDNO = me.getValue();
        console.log("卡號:", Tmp_CARDNO);
        var Tmp_EMPLYID = ""; //所有資料 PK 字串, 以 , 分隔
         var Tmp_EMPLYNM = "";
         var Tmp_url = "../../api/V30702AAPI/get_EMPLYID_EMPLYNM";
         var np = {};
         np["CARDNO"] = Tmp_CARDNO
         var Tmp_Str = getUrlStr(Tmp_url, np, "識別證編號2員工編號");
          Tmp_EMPLYID = StrExtract(Tmp_Str, 1);
          Tmp_EMPLYNM = StrExtract(Tmp_Str, 2);
          if (checkRtnOK(Tmp_EMPLYID)) {
               me.setValue(Tmp_EMPLYID);
               Ext.getCmp("sub_TAMAN_").setValue(Tmp_EMPLYNM);
          }
          if (Tmp_EMPLYID.length == 0)
              return;

            //STEP2 將[執行人員] [執行人員姓名 ]- 寫入 sub_Grid
           var sub_Store_np = {
                TAMAN: Tmp_EMPLYID,
                TAMAN_: Tmp_EMPLYNM,
            }
            Ext.getCmp('sub_Grid').store.add(sub_Store_np);
            Ext.getCmp("sub_TAMAN").setValue("");
            Ext.getCmp("sub_TAMAN_").setValue("");


2>*.cs
//由識別證號碼取得員工ID        
        [HttpPost]
        public string get_EMPLYID_EMPLYNM()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            string Tmp_Str;
            string Tmp_CARDNO = nvc["CARDNO"];
            string Tmp_EMPLYID = myfunc.get_CARDNO2EMPLYID(Tmp_CARDNO);
            string Tmp_Sql = " SELECT  EMPLYNM "
                                      + " FROM    HR_EMPLYM "
                                      + " WHERE  EMPLYID=" + myfunc.AA(Tmp_EMPLYID);
            string Tmp_EMPLYNM = myfunc.SqlValue(Tmp_Sql);
            Tmp_Str = Tmp_EMPLYID + ";" + Tmp_EMPLYNM;
            return Tmp_Str;
        }  // end of get_EMPLYID

} // end of function(me,eOpts)



); // end of blur function)


2023年12月14日 星期四

V30702A - 由識別證卡號取得員工編號 - cardno

目的: V30702A -  由識別證卡號取得員工編號

處理說明: 1>連接資料庫主機 SMS_AIDC (web.config 定義)
<add name="SMS_AIDC" connectionString="Data Source=192.168.99.79; Initial Catalog=SMS_AIDC; User=A856;Password=xHMQ2uQpTz5G;Max Pool Size=5;Connect Timeout=10;" />

                  2>下 SQL :
                                         SELECT    TOP 1 PSNNO 
                                         FROM        SMS_AIDC.dbo.V_CARD 
                                         WHERE     CARDNO=: 識別證卡號






1>*.js
{
     xtype: "fieldcontainer", fieldLabel: "執行人員", labelWidth: 80, flex: 5, border: 2,
     layout: 'hbox',
     items: [
                 {
                id: "sub_TAMAN", name: "sub_TAMAN", xtype: "textfield", width: 120, padding: "0 4 0 0",
                 listeners: {
                                  blur: function (me, eOpts) {
                                            var Tmp_CARDNO = me.getValue();
                                            console.log("卡號:", Tmp_CARDNO);
                                            var Tmp_EMPLYID = "";  //所有資料 PK 字串, 以 , 分隔
                                            var Tmp_EMPLYNM = "";
                                            var Tmp_url = "../../api/V30702AAPI/get_EMPLYID_EMPLYNM";
                                            var np = {};
                                            np["CARDNO"] = Tmp_CARDNO
                                            var Tmp_Str = getUrlStr(Tmp_url, np, "識別證編號2員工編號");
                                            Tmp_EMPLYID = StrExtract(Tmp_Str, 1);
                                            Tmp_EMPLYNM = StrExtract(Tmp_Str, 2);
                                            if (checkRtnOK(Tmp_EMPLYID)) {                                                
                                                me.setValue(Tmp_EMPLYID);
                                                Ext.getCmp("sub_TAMAN_").setValue(Tmp_EMPLYNM);
                                            }
                                        }  // end of blur
                                    },         // end of blur function
                                },// end of listeners                                                    


2>*.cs
//由識別證號碼取得員工ID        
        [HttpPost]
        public string get_EMPLYID_EMPLYNM()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            string Tmp_Str;
            string Tmp_CARDNO = nvc["CARDNO"];
            string Tmp_EMPLYID = myfunc.get_CARDNO2EMPLYID(Tmp_CARDNO);
            string Tmp_Sql = " SELECT  EMPLYNM "
                                      + " FROM    HR_EMPLYM "
                                      + " WHERE  EMPLYID=" + myfunc.AA(Tmp_EMPLYID);
            string Tmp_EMPLYNM = myfunc.SqlValue(Tmp_Sql);
            Tmp_Str = Tmp_EMPLYID + ";" + Tmp_EMPLYNM;
            return Tmp_Str;
        }  // end of get_EMPLYID

3>myfunc.cs
//由員工識別證卡號取得員工ID
        /*
         *  連接至 AES   SMS_AIDC  主機(資料庫)
         *  由員工識別證卡號(CARDNO)取得員工ID(EMPLYID)
         */
        public static string get_CARDNO2EMPLYID(string par_CARDNO)
        {
            string Tmp_CARDNO = par_CARDNO;
            string Tmp_EMPLYID = "";
            BaseAPIController Tmp_BaseController = new BaseAPIController();
            try
            {
                string Tmp_Sql = "  SELECT  TOP 1 PSNNO  "
                                       + "  FROM    SMS_AIDC.dbo.V_CARD "
                                       + " WHERE   CARDNO=" + myfunc.AA(Tmp_CARDNO);
                DataSet ds = Tmp_BaseController.getDataTable_MSSQL("SMS_AIDC", Tmp_Sql);
                int Tmp_cnt = ds.Tables[0].Rows.Count;
                if (Tmp_cnt > 0)
                {
                    string Tmp_PSNNO = ds.Tables[0].Rows[0]["PSNNO"].ToString();                 
                    Tmp_EMPLYID = Tmp_PSNNO;                    
                }
                return Tmp_EMPLYID;
            }  // end of try 
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return Tmp_EMPLYID;
        }  // end of         public string get_CARDNO2EMPLYID(string par_CARDNO)



SOAP(Simple Object Access Protocol) - WSDL(Web Service Define Language - XML)

 A web service is a function that can be accessed by other programs over the web (Http).


To clarify a bit, when you create a website in PHP that outputs HTML its target is the browser and by extension the human being reading the page in the browser. 


A web service is not targeted at humans but rather at other programs.

So your PHP site that generates a random integer could be a web service if it outputs the integer in a format that may be consumed by another program. It might be in an XML format or another format, as long as other programs can understand the output.

Wsdl is the interface and that's all you need. Good thing is that it is written in xml… so that we can achieve independence of defining data. All the languages have got APIs to read Xmls.(so that's the advantage of xml).

Now…the clients gets the wsdl and generates the stub code… this code is responsible for mediating the request response between server and client.




2023年12月12日 星期二

V30701A: 不出現子畫面,直接更新單況 - Update_STA

 目的: V30701A: 不出現子畫面,直接更新單況

處理說明: 1>呼叫子畫面 *.js
                  2>後端更新資料庫 *.cs
                  3>執行完成,顯示訊息  : 透過 Cookie , 不透過 sucessful
                        var mask = new Ext.LoadMask(Ext.getBody(), {
                               msg: '處理中,請稍待...'
                        });
                      mask.show();//使用 mask 需手動呼叫show() 方法下
                       //每1秒檢核一次,是否已完成, 若已完成,則不再檢核
                     var timer = setInterval(function () {
                     var r = r_cookies('EX_DFile');
                      if (!checkisnull(r)) {
                             mysuccessalert(r);  //顯示訊息
                            clearInterval(timer);
                            mask.hide();
                           timer = null;   
                    Ext.getCmp('btn_Show').fireHandler();  //重新顯示 Master資料
                }
            }, 1000);  //1000ms = 1sec                                   




1>*.js
  //按鈕 : [附檔資料] [批次新增][確認轉發工][下載匯入格式]
    var Btn_Ary = [        
        {
            xtype: 'button', text: '申請單送出', id: 'Btn_V30701A',
            listeners: {
                click: function (me,e,eOpts) {
                    console.log(" 1 申請單送出: ");
                    Call_V30701A();
                }
            }
        },        
    ];
    //於單檔下方新增 Button
    Ext.getCmp('grid_Single').insertBtn(Btn_Ary);


2>V30701A.js
//[申請單送出]鈕 -  - 只更新資料,無子畫面
//[申請單送出]鈕 -  - 只更新資料,無子畫面
function Call_V30701A(id) {
    var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection();
    var cur_rec;
    if (cur_recs.length == 0) {
        buttonModel.modelType = 0;
        mywarnalert('請先挑選[申請單送出]的資料!!');
    }
    else {
        cur_rec = cur_recs[0];
        var Tmp_msg ="確定執行[申請單送出]嗎?<br>"
                                +"(派遣申請單號: "+ cur_rec.data['TASKNO'].toString() + ")";

        myconfirmalert(Tmp_msg, callBackFunc);

        //Ext.Msg.confirm('提醒', Tmp_msg, callBackFunc);
        function callBackFunc(id) {
            if (id == 'yes') {
                console.log("cur_recs.length:", cur_recs.length);
                var np = {}
                np["TASKNO"] = cur_rec.data['TASKNO'].toString();
                var Tmp_url = '../../api/V30701AAPI/UPDATE_STA';
                var rtn_Str = getUrlStr(Tmp_url, np, "申請單送出");
                console.log("rtn_Str:", rtn_Str);
                if (checkRtnOK(rtn_Str))
                    mysuccessalert(rtn_Str, function () {
                        Ext.getCmp("btn_Show").fireHandler();
                        Ext.getCmp("sub_V30701A_CancelBtn").fireHandler();
                    });
                else
                    mywarnalert(rtn_Str);
            }
        }// end of   if (id == 'yes') {


3>*.cs
// 更新 - UDPATE_STAT  ,  AMM_COMQ
        [HttpPost]
        public dynamic UPDATE_STA()
        {
            //取得參數值
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            string Tmp_TASKNO = nvc["TASKNO"];
            string Tmp_RtnMsg = "";
            string n = funId + "_UPDATE_STA";
            HttpCookie MyCookie;
            try
            {
                var Tmp_Sql = "  UPDATE  AMM_DSPHCAR "
                                      + "   SET        STA='B'   "
                                      + "  WHERE   TASKNO=" + myfunc.AA(Tmp_TASKNO);
                myfunc.SqlExec(Tmp_Sql);
                Tmp_RtnMsg = "派遣申請單號(" + Tmp_TASKNO + ").單況已設定為[B:待執行(派遣申請已送出)]!!";
                MyCookie = new HttpCookie("EX_DFile", HttpUtility.UrlEncode(Tmp_RtnMsg));
                HttpContext.Current.Response.Cookies.Add(MyCookie);

            }
            catch (Exception e)
            {
                Tmp_RtnMsg = myfunc.Get1ORA(e.Message);
                Tmp_RtnMsg = "[申請單送出]失敗 !!  <br>"
                                         + Tmp_RtnMsg;
                MyCookie = new HttpCookie("EX_DFile", HttpUtility.UrlEncode(Tmp_RtnMsg));
                HttpContext.Current.Response.Cookies.Add(MyCookie);
            }
            return Tmp_RtnMsg;
        }


2023年12月7日 星期四

V80405B - Excel 插入長條圖 - 統計圖

 目的: V80405B - Excel 插入長條圖

處理說明: 1>Worksheet ws2 = wk.Worksheets[2];//獲取第三個工作表 - 缺件統計圖表
                  2> Chart 設定

                       Chart chart = ws2.Charts.Add(ExcelChartType.ColumnClustered);                                                       chart.ChartTitle = "件號2缺件量統計表";
                       chart.DataRange = ws2.Range["A1:B4"];
                       chart.SeriesDataFromRange = false;




1>*.cs
  Worksheet ws2 = wk.Worksheets[2];//獲取第三個工作表 - 缺件統計圖表
  //Sheet2 : 統計圖表                
                ws2.Range[myfunc.GetExcelPos(0, 0)].Text = "件號";
                ws2.Range[myfunc.GetExcelPos(1, 0)].Text = "數量";
                ws2.Range[myfunc.GetExcelPos(0, 1)].Text = "PN1";
                //ws2.Range[myfunc.GetExcelPos(1, 1)].Text = "3";
                ws2.Range[myfunc.GetExcelPos(1, 1)].NumberValue = 3;
                ws2.Range[myfunc.GetExcelPos(1, 1)].NumberFormat = "0.00";
                ws2.Range[myfunc.GetExcelPos(0, 2)].Text = "PN2";
                //ws2.Range[myfunc.GetExcelPos(1, 2)].Text = "2";
                ws2.Range[myfunc.GetExcelPos(1, 2)].NumberValue = 2;
                ws2.Range[myfunc.GetExcelPos(1, 2)].NumberFormat = "0.00";
                ws2.Range[myfunc.GetExcelPos(0, 3)].Text = "PN3";
                //ws2.Range[myfunc.GetExcelPos(1, 3)].Text = "1";
                ws2.Range[myfunc.GetExcelPos(1, 3)].NumberValue = 1;
                ws2.Range[myfunc.GetExcelPos(1, 3)].NumberFormat = "0.00";


                //// new Chart
                Chart chart = ws2.Charts.Add(ExcelChartType.ColumnClustered);
                chart.ChartTitle = "件號2缺件量統計表";
                chart.DataRange = ws2.Range["A1:B4"];
                chart.SeriesDataFromRange = false;

                ////指定圖表所在的位置
                chart.LeftColumn = 5;
                chart.TopRow = 2;
                chart.RightColumn = 15;
                chart.BottomRow = 20;


                wk.ActiveSheetIndex = 0;
                wk.SaveToStream(mstream, FileFormat.Version2007);
                wk.SaveToFile(FileName1, FileFormat.Version2007);             


2023年12月4日 星期一

DataTable 以欄位值排序

目的: DataTable  以欄位值排序

處理說明: 1>DataTable 的顯示內容:     DataView  dv1=new DataView();
                                                                  dv1=dt1.DefaultView;
                                                                  dv1.Sort=" Date Asc ";
                                                                  --> dv1=new DataView(dt1);
                                                                        dv1.Sort=" Date Asc";   
                   2>dt.DefaultView.Sort = Date1 ASC ";
                     dt = dt.DefaultView.ToTable();

 

Exampl1:

 DataTable _dt = new DataTable();

_dt.Columns.Add("Date", typeof(DateTime));
_dt.Columns.Add("Preferance", typeof(int));

_dt.Rows.Add("30/07/2011", 0);
_dt.Rows.Add("02/03/2011", 1);
_dt.Rows.Add("10/12/2011", 2);
_dt.Rows.Add("01/12/2011", 3);

DataView _dv = new DataView(_dt);
_dv.Sort = "Date ASC";

for (int i = 0; i < _dv.Count; i++)
{
    Console.WriteLine(Convert.ToDateTime(_dv[i]["Date"]).ToString("dd/MM/yyyy") + "\t" + _dv[i]["Preferance"]);
}

Example2:
dt.DefaultView.Sort = "Parameter_Name";
dt = dt.DefaultView.ToTable();