2023年11月28日 星期二

ShellExecute 執行檔案列印功能 & Email功能 - print & Email

 目的: ShellExecute 執行檔案列印功能

處理說明:


Uses ShellAPI;

Var

lpHwnd: HWND;
lpOperation, lpFile, lpParameters, lpDirectory: String;
Begin
lpHwnd:= GetDesktopWindow();
lpOperation:= 'open';
lpFile:= 'mailto:' + 'Maple119@263.net' + '?' //主郵件地址後以'?'結束
+ '&cc=' + 'balaba960808@163.com' //抄送
+ '&bcc=' + 'lyf.kibosoft.com' //暗送
+ '&subject=' + '主題'
+ '&body='+ '第一行內容' + '%0d' + '第二行內容' //主題內容以 '%0d' 轉行
+ '&File=' + 'D:\Help.rtf'; //附件只對 Outlook Express 有效
lpParameters:= '';
lpDirectory:= '';
ShellExecute(lpHwnd, pChar(lpOperation),
pChar(lpFile), pChar(lpParameters),
pChar(lpDirectory), SW_SHOWNORMAL);
End;
二、打開一個網頁
ShellExecute(0, 'open', 'http://www.google.com', '', '', SW_SHOWNORMAL);

三、打印文檔
ShellExecute(0, 'print', 'D:\Help.rtf', '', '', SW_SHOWNORMAL)

四、利用系統默認的程序打開指定的文件
ShellExecute(0, 'open', 'D:\Help.rtf', '', '', SW_SHOWNORMAL))
五、用指定的程序打開指定的文件
ShellExecute(0, 'open', 'notepad.exe', 'D:\Help.rtf', '', SW_SHOWNORMAL)
六、執行快捷方式(.LNK)
ShellExecute(handle,'open','c:\windows\desktop\aaa.lnk','', '', sw_hide); 

WinExec主要運行EXE文件。如:WinExec(’Notepad.exe Readme.txt’, SW_SHOW);
ShellExecute不僅可以運行EXE文件,也可以運行已經關聯的文件

首先必須引用shellapi.pas單元:uses ShellAPI;

1.標准用法
ShellExecute函數原型及參數含義如下:
function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall;


●hWnd:用於指定父窗口句柄。當函數調用過程出現錯誤時,它將作為Windows消息窗口的父窗口。例如,可以將其設置為應用程序主窗口句柄,即Application.Handle,也可以將其設置為桌面窗口句柄(用GetDesktopWindow函數獲得)。
●Operation:用於指定要進行的操作。

“open” : 打開由FileName參數指定的文件或文件夾;

“print” : 列印由FileName參數指定的文件;

“explore” : 操作表示浏覽由FileName參數指定的文件夾。當參數設為nil時,表示執行默認操作“open”。


●FileName:用於指定要打開的文件名、要執行的程序文件名或要浏覽的文件夾名。
●Parameters:若FileName參數是一個可執行程序,則此參數指定命令行參數,否則此參數應為nil或PChar(0)。
●Directory:用於指定默認目錄。
●ShowCmd:若FileName參數是一個可執行程序,則此參數指定程序窗口的初始顯示方式,否則此參數應設置為0。


若ShellExecute函數調用成功,則返回值為被執行程序的實例句柄。

若返回值小於32,則表示出現錯誤。
上述僅僅是ShellExecute函數的標准用法,下面將介紹它的特殊用法。


2.特殊用法
如果將FileName參數設置為“http:”協議格式,那麼該函數將打開默認浏覽器並鏈接到指定的URL地址。若用戶機器中安裝了多個浏覽器,則該函數將根據Windows 9x/NT注冊表中http協議處理程序(Protocols Handler)的設置確定啟動哪個浏覽器。
格式一:http://網站域名。
如:ShellExecute(handle, ‘open’, http:// ; www.neu.edu.cn’, nil, nil, SW_SHOWNORMAL);
格式二:http://網站域名/網頁文件名。
如:ShellExecute(handle, ‘open’, http:// ; , SW_SHOWNORMAL);



如果將FileName參數設置為“mailto:”協議格式那麼該函數將啟動默認郵件客戶程序,如Microsoft Outlook(也包括Microsoft Outlook Express)或Netscape Messanger。若用戶機器中安裝了多個郵件客戶程序,則該函數將根據Windows 9x/NT注冊表中mailto協議處理程序的設置確定啟動哪個郵件客戶程序。

格式一:mailto:
如:ShellExecute(handle,‘open’, ‘mailto:’, nil, nil, SW_SHOWNORMAL);打開新郵件窗口。


格式二:mailto:用戶賬號@郵件服務器地址
如:ShellExecute(handle, ‘open’,‘ , nil, nil, SW_SHOWNORMAL);打開新郵件窗口,並自動填入收件人地址。若指定多個收件人地址,則收件人地址之間必須用分號或逗號分隔開(下同)。


格式三:mailto:用戶賬號@郵件服務器地址?subject=郵件主題&body=郵件正文
如:ShellExecute(handle, ‘open’, ‘ ?subject=Hello&Body=This is a test’, nil, nil, SW_SHOWNORMAL);打開新郵件窗口,並自動填入收件人地址、郵件主題和郵件正文。若郵件正文包括多行文本,則必須在每行文本之間加入換行轉義字符%0a。



例子(delphi):

在一個應用程序調用c:Project1.exe;
ShellExecute(handle, ’open’,’c:Project1.exe’,’字串內容’,nil, SW_SHOWNORMAL);
在Project1.exe裡可以調用:
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=1 to paramcount do
if ParamStr(i)〈〉’’ then showmessage(ParamStr(i));
end;

最後的那個參數,為窗口指定可視性方面的一個命令。
請用下述任何一個常數
SW_HIDE 隱藏窗口,活動狀態給令一個窗口
SW_MINIMIZE 最小化窗口,活動狀態給令一個窗口
SW_RESTORE 用原來的大小和位置顯示一個窗口,同時令其進入活動狀態
SW_SHOW 用當前的大小和位置顯示一個窗口,同時令其進入活動狀態
SW_SHOWMAXIMIZED 最大化窗口,並將其激活
SW_SHOWMINIMIZED 最小化窗口,並將其激活
SW_SHOWMINNOACTIVE 最小化一個窗口,同時不改變活動窗口
SW_SHOWNA 用當前的大小和位置顯示一個窗口,不改變活動窗口
SW_SHOWNOACTIVATE 用最近的大小和位置顯示一個窗口,同時不改變活動窗口
SW_SHOWNORMAL 與SW_RESTORE相同

2023年11月22日 星期三

V80E02 – DataTable 搜尋值 .Select(“EMPLYID LIKE ‘3125672%’); -dt1.Select(:過濾條件);

 目的: V80E02 – DataTable 搜尋值 .Select(“EMPLYID LIKE  ‘3125672%’);

處理說明: 1>由 SQL 取得 DataTable
                  2> DataRow[] dr_Ary=DataTable.Select (:過濾條件) ;
                  3>dr_Ary.length>0 ,則欄位值設為 'V'


1>*.js
DataRow[] dr_Ary;
 Tmp_Sql = "   SELECT  "+myfunc.AA2("CourseOfferingName") 
                                + "    FROM    AIDviewTrainingRecords_Y40@AMM_F16V_SOI  "                                  
                                +"     WHERE  1=1 "                                   
                                + "   AND    " + myfunc.AA2("EmployeeID") + "=" + myfunc.AA(Tmp_EMPLYID); 
Tmp_dt2 = myfunc.SqlOpen(Tmp_dt2, Tmp_Sql);
Tmp_condSqlStr = " CourseOfferingName  LIKE " + myfunc.AA(Tmp_DOCMT + "%");
dr_Ary = Tmp_dt2.Select(Tmp_condSqlStr);
if (dr_Ary.Length>0)
      dr[Tmp_DOCMT] = "V";
else
     dr[Tmp_DOCMT] = "";


2023年11月20日 星期一

V80E01 - Runtime 新增欄位 - 依 SQL 資料(N筆) 新增 Grid 顯示欄位

 目的: V80E01 - 依 SQL 資料(N筆) 新增 Grid 顯示欄位

處理說明: 1> 欄位名稱 [SQL 資料(N筆)] 透過 Cookie 由後端傳至前端

                  2> Grid 的 model 及 column 必需重新設定

                       Ext.define('GridModel1', {
                                    extend: 'Ext.data.Model',
                                    fields: J_gridmodel
                                });
                       Ext.getCmp('grid_Single').store.getProxy().setModel(GridModel1, true);
                       Ext.getCmp('grid_Single').reconfigure(Ext.getCmp('grid_Single').store, J_columns);

                       Ext.getCmp('grid_Single').reloadGridData(); 



1>*.js
 items: [
                    {
                        xtype: 'button',
                        id: 'btn_Show',
                        flex: 5,
                        border: 1,
                        text: '資料顯示',
                        iconCls: 'icon-search',
                        handler: function () {
                            var Tmp_PITM = Ext.getCmp("s_PITM").getValue();
                            if (checkisnull(Tmp_PITM)) {
                                var Tmp_Str = "[受訓專業]過濾條件不可空白<br>"
                                                         + "請先輸入!!";
                                mywarnalert(Tmp_Str);
                                return;
                            }                           
                            var np = s_JSON('s_form'); //TMFunction.js, 組合form上的查詢條件為json參數傳遞                                                                                                               
                            gridstore.getProxy().url = '../api/V80E01API/getGridData_M';
                            gridstore.getProxy().extraParams = np; //分頁OK,篩選條件OK                            
                            Ext.getCmp('grid_Single').store.pageSize = 30;
                            Ext.getCmp('grid_Single').reloadGridData();    
                            Ext.getCmp('grid_Single').store.on('load', function (me, records, successful, operation, eOpts) {
                                settrue("grid_Single");
                            })
                            waittrue("grid_Single", AddFields);
                            function AddFields() {                                
                                //讀取 新增的欄位s字串 ["COSCStr"]
                                var Tmp_COSCStr = r_cookies('COSCStr');
                                //console.log("r_cookies=", r);
                                if (!checkisnull(Tmp_COSCStr)) {
                                    //先恢愎至原本的欄位 Array - J_gridmodel (7筆)  &  J_columns(8筆) , 
                                    //以免每按[顯示資料], COSC欄位一直累加
                                    while (J_gridmodel.length > 7) 
                                        J_gridmodel.pop();
                                    while (J_columns.length > 8)
                                        J_columns.pop();
                                    var Tmp_COSC_Ary = Tmp_COSCStr.split(',');
                                    var Tmp_cur_COSC = "";
                                    var Tmp_COSC_Obj = {};
                                    var Tmp_COSC_Obj1 = {};
                                    for (var i = 0; i < Tmp_COSC_Ary.length; i++) {
                                        Tmp_cur_COSC = Tmp_COSC_Ary[i];
                                        //var J_gridmodel = [
                                        //    { name: "EMPLYID" },
                                        //    { name: "EMPLYNM" },
                                        //    ]
                                        //將 Tmp_cur_COSC 加入 J_gridmodel
                                        Tmp_COSC_Obj = { name: Tmp_cur_COSC };
                                        J_gridmodel.push(Tmp_COSC_Obj);
                                        Tmp_COSC_Obj1 = { header: Tmp_cur_COSC, dataIndex: Tmp_cur_COSC, width: 60, TMType: "string" };
                                        J_columns.push(Tmp_COSC_Obj1);
                                    }
                                    console.log("J_gridmodel:", J_gridmodel);
                                    console.log("J_columns:", J_columns);
                                }
                                //Ext.getCmp('grid_Single').getView().refresh();
                                //重設 store 的 model & columns
                           Ext.define('GridModel1', {
                                    extend: 'Ext.data.Model',
                                    fields: J_gridmodel
                                });
                           Ext.getCmp('grid_Single').store.getProxy().setModel(GridModel1, true);
                           Ext.getCmp('grid_Single').reconfigure(Ext.getCmp('grid_Single').store, J_columns);
                           Ext.getCmp('grid_Single').reloadGridData();

                            }  // end of AddFields
                        }
                    },  // end of 顯示資料







2023年11月19日 星期日

V80E01 - TreeView挑選人員 - 利用Get_pickTree_btn0

 目的: V80E01 - TreeView挑選人員 - 利用Get_pickTree_btn0

 處理說明: 1> 利用  Get_pickTree_btn0  - 產生 TreeView挑選人員 Button
                   2>var cmp_pick_EMPLYID 
           = get_pickTree_btn0('挑選員工編號', 's_btn_EMPLYID', 's_EMPLYID', 's_EMPLYID_');
              //get_pickTree_btn0(挑選視窗標題,按鈕id,傳回員工編號欄位(s_EMPLYID),
                                                                                          傳回員工姓名欄位(s_EMPLYID_),  )


1>*.js

 // panel11  
    var cmp_EMPLYID = get_cmp_txt1('員工編號', 's_EMPLYID', 80, 100);
    var cmp_EMPLYID_ = get_cmp_cal0('s_EMPLYID_', 100);
    //取得 TreeView 人員挑選
    var cmp_pick_EMPLYID = get_pickTree_btn0('挑選員工編號', 's_btn_EMPLYID',                                                                                                's_EMPLYID', 's_EMPLYID_');
    cmp_EMPLYID.items.push(cmp_EMPLYID_,cmp_pick_EMPLYID);


    //篩選條件畫面
    var Query = new Ext.FormPanel({
        id: 's_form',
        layout: { type: 'hbox', align: 'stretch' },
        fieldDefaults: { labelAlign: 'right' },
        defaults: { margin: { top: 3 } },
        items: [
            {
                xtype: 'panel', id: 'panel1', layout: { type: 'hbox', align: 'stretch' }, flex: 14, border: 0,
                items: [
                    {
                 xtype: 'panel', id: 'panel11', layout: { type: 'vbox', align: 'stretch' }, flex: 25, border: 0,
                        items: [cmp_EMPLYID,],
                    },  // end of panel11
                    {
                        xtype: 'panel', id: 'panel12', layout: { type: 'vbox', align: 'stretch' }, flex: 30, border: 0,
                        items: [],
                    },   // end of panel12 , flex:16                                        
                ]
            },  // end of panel1            

2023年11月9日 星期四

V80203 – 計算日期差異天數 - Days

 目的: V80203 – 計算日期差異天數

處理說明: 1> (Tmp_DT1 - Tmp_DT2).Days


1>*.js
DateTime Tmp_STARTDT;
int Tmp_Days;
Tmp_STARTDT = DateTime.Parse(dr["STARTDT"].ToString());
Tmp_Days = (DateTime.Today - Tmp_STARTDT).Days;
dr["DAYIN_"] = Tmp_Days.ToString();

2023年11月8日 星期三

V80203 – checkbox –勾選[V]已完工,則 [ ]未完工 不勾選 - onChangeEvent - V80202 -[V]TP工單,則[ ]非 TP工單不勾選

目的 : V80203 – checkbox –勾選[V]已完工, [ ]未完工  -–勾選[V]未完工, [ ]已完工 

           V80202 -[V]TP工單,則[ ]非 TP工單不勾選

處理說明: 1>get_cmp_xxx - s_chk_AMMSTS Object - 為一般Objext - 沒有 Ext onchange屬性
                      var cmp_chk_AMMSTS1 = get_cmp_chk0('已完工', 's_chk_AMMSTS', 50, '1');
                      --> Object  cmp_chk_AMMSTS1  - 為一般Object,並沒有 onchange event 的屬性
    
              2>get_cmp_XXX --> 加入 Query(Ext.FormPanel) 後, 才有 Ext 的各種屬性(onchange/.. )
                  var Query = new Ext.FormPanel({
                  id: 's_form',
                  items: [
                 {
                xtype: 'panel', id: 'panel1', layout: { type: 'hbox', align: 'stretch' }, flex: 14, border: 0,
                items: [                  
                   {
                        xtype: 'panel', id: 'panel15', layout: { type: 'vbox', align: 'stretch' }, flex: 15, border: 0,
                        items: [cmp_chk_AMMSTS, cmp_ISROOT, cmp_ISBOMIN, cmp_ISWAITNSN],
                    },   // end of panel15 , flex:16                        

           3> [V]已完工 [ ]未完工的 true/false 控制
    Ext.getCmp("s_chk_AMMSTS").items.items[0].on('change', function (me, newValue, oldValue, eOpts) {
        if (newValue) {
            Ext.getCmp("s_chk_AMMSTS").items.items[1].setValue(false);
        }
    }
    );  // end of  cmp_chk_AMMSTS.items[0].on("change"
    Ext.getCmp("s_chk_AMMSTS").items.items[1].on('change', function (me, newValue, oldValue, eOpts) {
        if (newValue) {
            Ext.getCmp("s_chk_AMMSTS").items.items[0].setValue(false);
        }
    }
    );  // end of  cmp_chk_AMMSTS.items[0].on("change"



1>*.js
    //單況: 已完工/未完工
    var cmp_chk_AMMSTS = get_cmp_chkgrp1('單況', 's_chk_AMMSTS', 50);    
    var cmp_chk_AMMSTS1 = get_cmp_chk0('已完工', 's_chk_AMMSTS', 50, '1');
    var cmp_chk_AMMSTS2 = get_cmp_chk0('未完工', 's_chk_AMMSTS', 50, '2');
    cmp_chk_AMMSTS.items.push(cmp_chk_AMMSTS1, cmp_chk_AMMSTS2);
    cmp_chk_AMMSTS1.checked = true;    

  var Query = new Ext.FormPanel({
        id: 's_form',
        layout: { type: 'hbox', align: 'stretch' },
        fieldDefaults: { labelAlign: 'right' },
        defaults: { margin: { top: 3 } },
        items: [
            {
                xtype: 'panel', id: 'panel1', layout: { type: 'hbox', align: 'stretch' }, flex: 14, border: 0,
                items: [
                    {
                        xtype: 'panel', id: 'panel11', layout: { type: 'vbox', align: 'stretch' }, flex: 25, border: 0,
                        items: [cmp_EOECN, cmp_ACNO,cmp_AMMNO, cmp_AMMSTS, cmp_PN1, cmp_EM_SN,],
                    },  // end of panel11
                    {
                        xtype: 'panel', id: 'panel12', layout: { type: 'vbox', align: 'stretch' }, flex: 25, border: 0,
                        items: [cmp_RMK, cmp_PROJID, cmp_SAPNO, cmp_SAPMAN, cmp_STARTVAL, cmp_CHARG,],
                    },   // end of panel12 , flex:16                    
                    {
                        xtype: 'panel', id: 'panel13', layout: { type: 'vbox', align: 'stretch' }, flex: 25, border: 0,
                        items: [cmp_PN, cmp_PROCWC, cmp_MKDT,  cmp_SROTP, cmp_FACWC,],
                    },   // end of panel13 , flex:16              
                    {
                        xtype: 'panel', id: 'panel14', layout: { type: 'vbox', align: 'stretch' }, flex: 30, border: 0,
                        items: [cmp_WBSNO, cmp_ACAREA, cmp_LWA, cmp_MK,cmp_SAPDT1,],
                    },   // end of panel14 , flex:16                               
                    {
                        xtype: 'panel', id: 'panel15', layout: { type: 'vbox', align: 'stretch' }, flex: 15, border: 0,
                        items: [cmp_chk_AMMSTS, cmp_ISROOT, cmp_ISBOMIN, cmp_ISWAITNSN],
                    },   // end of panel15 , flex:16                            

    console.log("cmp_chk_AMMSTS2:", cmp_chk_AMMSTS2);
    console.log("Ext.getCmp('s_chk_AMMSTS').items.items[1]", Ext.getCmp('s_chk_AMMSTS').items.items[1]);
    Ext.getCmp("s_chk_AMMSTS").items.items[0].on('change', function (me, newValue, oldValue, eOpts) {
        if (newValue) {
            Ext.getCmp("s_chk_AMMSTS").items.items[1].setValue(false);
        }
    }
    );  // end of  cmp_chk_AMMSTS.items[0].on("change"
    Ext.getCmp("s_chk_AMMSTS").items.items[1].on('change', function (me, newValue, oldValue, eOpts) {
        if (newValue) {
            Ext.getCmp("s_chk_AMMSTS").items.items[0].setValue(false);
        }
    }
    );  // end of  cmp_chk_AMMSTS.items[0].on("change"




1>*.js
   //若按[TP工單],則 [非TP工單].checked=false;
    Ext.getCmp("s_chk_TP").items.items[0].on('change', function (me, newValue, oldValue, eOpts) {
        if (newValue) {
            Ext.getCmp("s_chk_TP").items.items[1].setValue(false);
        }
    }
    );  // end of  cmp_chk_TP.items[0].on("change"
    Ext.getCmp("s_chk_TP").items.items[1].on('change', function (me, newValue, oldValue, eOpts) {
        if (newValue) {
            Ext.getCmp("s_chk_TP").items.items[0].setValue(false);
        }
    }

V80203- 子畫面 – Grid -顯示 Grid子畫面 - store.onload - load - store - proxy - cur_rec

 目的: V80203- 工單需求物料查詢 顯示 Grid子畫面

處理說明: 1>呼叫子畫面函式: Call_V80203B();
                  2>子畫面處理:
    var win = getMyWindow("顯示原始需求物料", sub_BackFlds, sub_BackFlds_Btns);
    Ext.getCmp('sub_Grid').store.getProxy().url = '../../api/V80203BAPI/get_sub_data1',
    Ext.getCmp('sub_Grid').store.getProxy().extraParams = np; //分頁OK,篩選條件OK    
    Ext.getCmp('sub_Grid').store.load();                
                                
    win.show();    





1>V80203.js
{
            xtype: 'button', text: '顯示原始需求物料', id: 'Call_V80203B_Btn',
            listeners: {
                click: function () {
                    //mysuccessalert(" call BatAddBtn_click() ");
                    Call_V80203B();
                }
            }
        },        


2>V80203B.js
function Call_V80203B() {
    //按鈕 : [離開]  
    var sub_BackFlds_Btns = [
        {
            xtype: 'button', text: '離開', id: 'sub_BackFlds_CancelBtn',
            listeners: {
                click: function () {
                    //mysuccessalert("mysub2_取消");
                    var Tmp_win = this.up("window");
                    if (Tmp_win == undefined) {
                        Ext.Msg.alert("取消時未取到Window Object");
                    }
                    this.up("window").close();
                    this.up("window").destroy();
                }
            }
        },
    ];
    
    //sub_ Grid
    var sub_Grid = Ext.create('TMGrid', {
        grid_id: 'sub_Grid',
        columns: sub_B_Columns,
        autoScroll: true,
        flex: 1,
        store: Ext.create('gridstore', { model: sub_B_Fields }),
    });
    console.log("step2.5");

    // [顯示原始需求物料]鈕  - 子畫面欄位
    var sub_BackFlds = [
        {
            type: 'panel', bodyStyle: "background-color:transparent;", border: 0, padding: "5",
            flex: 100,
            //layout: { type: 'vbox', align: 'stretch' }, 
            layout: 'border',
            items: [
                {
                    xtype: 'panel',
                    id: 'sub_panel1',
                    region: 'north',
                    layout: { type: 'hbox', align: 'stretch' },
                    //flex: 0,
                    //border: 1,
                    items: []
                },  //end of panel1                    
                {
                    xtype: 'panel',
                    id: 'sub_panel2',
                    //title: 'sub_panel2',
                    region: 'center',
                    layout: 'fit',
                    //flex: 60,
                    //border: 20,
                    items: [sub_Grid]
                },
            ] // end of   layout: "vbox", padding: "5", items: [
        }  //end of  my_Sub2 , items[{
    ]      //end of  my_Sub2 , items[

    Ext.getCmp('sub_Grid').store.on("load", function (me, records, successful, eOpts) {
        if (successful) {
            console.log("Ext.getCmp('sub_Grid').store", Ext.getCmp('sub_Grid').store);
            console.log("Ext.getCmp('sub_Grid').store.data", Ext.getCmp('sub_Grid').store.data);
        }
    }
    );

    var win = getMyWindow("顯示原始需求物料", sub_BackFlds, sub_BackFlds_Btns);
    //var win = getMyWindow("歸還登記", sub_BackFlds);
    win.width = 800;
    win.heigh = 400;
    var cur_recs = Ext.getCmp('grid_M').getSelectionModel().getSelection();
    if (cur_recs.length == 0) {
        var Tmp_Str = "請先選擇資料";
        mywarnalert(Tmp_Str);
        return ;
    }
    var cur_rec = cur_recs[0];
    var Tmp_AMMNO = cur_rec.data['AMMNO'].toString();
    var np = {};
    np["AMMNO"] = Tmp_AMMNO;    
    var is_Ok = true;
    //顯示 store 的資料
    Ext.getCmp('sub_Grid').store.getProxy().url = '../../api/V80203BAPI/get_sub_data1',
    Ext.getCmp('sub_Grid').store.getProxy().extraParams = np; //分頁OK,篩選條件OK    
    Ext.getCmp('sub_Grid').store.load();               
                                
    win.show();    
    console.log("step6");
} // end of   function LendBtn_click() {