2024年8月15日 星期四

V80202E – 工單附檔瀏覽 – 簡單子畫面 Grid - 下載檔案 - downloadFile2

 目的: V80202E – 工單附檔瀏覽 子畫面 Grid

處理說明: 1>子畫面 - Grid 簡單子畫面
                       //設定 ReadOnly Field
                       setFieldsCls('mySubFormI',
                                            [],  //required
                                    ["sub_RPNOAF", "sub_MRPNOAF", "sub_PN", "sub_SEQOAF",],  //readonly
                           );    

                  2>下載檔案:
                        var Tmp_url = "../api/myAPI/downloadFile2?aTbl=" + Tmp_TblNM 
                                              + "&Flds=" + Tmp_Flds + "&aCnd=" + Tmp_Cnd;
                        document.location = Tmp_url;        

                        --> downloadFile2 傳回 void
                              --> 呼叫  downloadFile 傳回 file  - Byte[]
                              --> document.location = Tmp_url;  - 不可直接傳回 file 

                 3>原始Source VUTLAPIController.cs
var Tmp_url = "../api/VUTLAPI/dnloadFile_Cnd?aTbl=" + Tmp_TblNM + "&Flds=" + Tmp_Flds + "&aCnd=" + Tmp_Cnd;


                        

1>V80202.js  - 呼叫子畫面, 傳入目前資料(cur_rec)
  {
            xtype: 'button', text: '工單附檔瀏覽', id: 'Call_V80202E_Btn',
            listeners: {
                click: function () {
                    var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection();
                    if (cur_recs.length == 0) {
                        mywarnalert("請先選擇資料");
                        return false;
                    }                    
                    var cur_rec = cur_recs[0];               
                    Call_V80202E(cur_rec);

                }
            }
        },        


2>V80202E.js - 子畫面 Call_V80202E(par_rec)
    function Call_V80202E(par_rec) {
         var Tmp_AMMNO = nulltoStr(par_rec.data['AMMNO']).toString();


var cmp_sub_AMMNO = get_cmp_txt1('AMM單號', 'sub_AMMNO', 80, 130);
var cmp_sub_SAPNO = get_cmp_txt1('工號', 'sub_SAPNO', 80, 130);
var cmp_sub_PN = get_cmp_txt1('件號', 'sub_PN', 80, 130);

//子畫面欄位 & Grid
var sub_V80202E_Flds = [
{
type: 'panel', bodyStyle: "background-color:transparent;", border: 5, padding: "1",
layout: 'border',
items: [
{
xtype: 'panel', id: 'sub_panel1', region: 'north', layout: 'hbox',
height: 30,
items: [
{
xtype: 'panel', id: 'sub_panel11', layout: { type: 'hbox', align: 'stretch' }, flex: 25, border: 0,
items: [cmp_sub_AMMNO, cmp_sub_SAPNO, cmp_sub_PN,],
}, // end of sub_panel11
] //end of sub_panel1.items,
}, // end of sub_panel1
{
xtype: 'panel',
id: 'sub_panel2',region: 'center',layout: 'fit',
border: 1,
items: [sub_Grid]
},
] // end of layout: "vbox", padding: "5", items: [
} //end of sub_ShowPN_Flds , items[{
] //end of var sub_ShowPN_Flds

//子畫面按鈕
 //按鈕 : [附檔瀏覽] [離開] 鈕
        var sub_V80202E_Btns = [            
            {
                xtype: 'button', text: '附檔瀏覽', id: 'sub_V80202E_OkBtn',
                //flex: 5,
                listeners: {
                    click: function () {
                        //mysuccessalert("mysub2_確定 ");
                        //檢核 AMM項次的需求工時正確, 若有問題,則 Tmp_isOk=false, 若沒問題, Tmp_isOk=true, 才執行[確認]的處理
                        V80202E_OK();
                    }
                }
            },
            {
                xtype: 'button', text: '離開', id: 'sub_V80202E_CancelBtn',
                //flex: 5,
                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();
                    }
                }
            },
        ];

var win1 = getMyWindow("工單附檔瀏覽", sub_V80202E_Flds, sub_V80202E_Btns, "A");
win1.x = 100;
win1.setWidth(800);
win1.setHeight(300);

//取得子畫面.欄位值
var np = {};
np["sub_AMMNO"] = Tmp_AMMNO;
Ext.getCmp('sub_Grid').store.getProxy().url = '../../api/V80202EAPI/get_sub_data1',
Ext.getCmp('sub_Grid').store.getProxy().extraParams = np; //分頁OK,篩選條件OK
Ext.getCmp('sub_Grid').store.load();

//設定子畫面欄位值 
 var Tmp_AMMNO, Tmp_SAPNO, Tmp_PN;
    Tmp_AMMNO = nulltoStr(par_rec.data['AMMNO']).toString();    
    Tmp_SAPNO = nulltoStr(par_rec.data['SAPNO']).toString();    
    Tmp_PN = nulltoStr(par_rec.data['PN']).toString();            
        Ext.getCmp("sub_AMMNO").setValue(Tmp_AMMNO);
        Ext.getCmp("sub_SAPNO").setValue(Tmp_SAPNO);
        Ext.getCmp("sub_PN").setValue(Tmp_PN);              
        win1.show();


//[工單附檔瀏覽].[確認]鈕
function V80202E_OK() {
//1>目前挑選資料
var cur_recs = Ext.getCmp('sub_Grid').getSelectionModel().getSelection();
if (cur_recs.length == 0) {
mywarnalert("請先選擇資料");
return;
}
var cur_rec = cur_recs[0];
var Tmp_FILENO = nulltoStr(cur_rec.data["FILENO"]).toString();
var Tmp_TblNM;
var Tmp_Flds;
var Tmp_Cnd;
if (checkisnull(Tmp_FILENO)) {
//若 FILENO 無值,則瀏覽 AMM_OSMF
Tmp_TblNM = "AMM_OSMF";
Tmp_Flds = "FILENAME,FILEBODY";
Tmp_Cnd = " AND AMMNO=" + AA(cur_rec.data["AMMNO"])
+ " AND ITM=" + AA(cur_rec.data["ITM"]);
}
else {
//若 FILENO 有值,則瀏覽 AMM_DFILESD
Tmp_TblNM = "AMM_DFILESD";
Tmp_Flds = "DFNAME,DBLOB";
Tmp_Cnd = " AND FILENO=" + AA(cur_rec.data["FILENO"]);
}
var Tmp_url = "../api/VUTLAPI/dnloadFile_Cnd?aTbl=" + Tmp_TblNM + "&Flds=" + Tmp_Flds + "&aCnd=" + Tmp_Cnd;
document.location = Tmp_url;
} //end of V80202E_OK

PS: BaseAPIController.cs   -downloadFile   
   利用 downloadFile 傳入 SQL 及 檔案名稱欄位名 , 檔案內容欄位名  
   //public byte[] downloadFile(string sql, string fileName, string fileBody,bool inline=false)           
        
    /*
                byte[] file = null;
                try
               { downloadFile(Tmp_Sql, 'FILENAME', 'FILEBODY'); }
               catch (Exception ex)
               { throw ex; }   //檔案無法讀取,仍會下載 byte=0
               finally
               { }
                 return file;               
            */

PS: myAPIController.cs    - downloadFile2
var Tmp_url = "../api/myAPI/downloadFile2?aTbl=" + Tmp_TblNM + "&Flds=" + Tmp_Flds + "&aCnd=" + Tmp_Cnd;

沒有留言:

張貼留言