2023年5月3日 星期三

V20302 檔案處理 , 開啟檔案,寫入文字,讀取文字 - 存成 *_log.TXT , 並傳送至前端

 目的: V20302 將文字存入 *_log.TXT , 並傳送至前端

處理說明: 0>傳送檔案至前端 
                      1>>必需用 form.submit , 不可用 Ext.Ajax
                      2>>standardSubmit=true
                      3>>必需用主畫面 Ext.getCmp("s_form").submit
                             不可用子畫面 me.up("form").submit() 
                             也不可用子畫面 Ext.getCmp("mySubForm").submit()
                              --> 因為執行 submit 時,本子畫面已被 destroy() 
                                       this.up("window").close();
                                       this.up("window").destroy();
                  1>判斷檔案是否存在,若已存在,則刪除檔案
                       if (File.Exists(Tmp_out_pFName))
                       {   File.Delete(Tmp_out_pFName);  }

                  2>如何將文字存入 //換行
                       string  Tmp_Str = "Hello text" + "\r\n";
                       File.WriteAllText("myfilename.txt", Tmp_Str);
                       File.AppendAllText("myfilename.txt", Tmp_Str);

                  3>讀取檔案的文字
                      string  Tmp_Str = File.ReadAllText("myfilename.txt");

                   4>複製檔案
                       File.Copy("myname.txt", "myname2.txt");





1>*.js
  var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection();
 for (let i = 0; i <= cur_recs.length - 1; i++) {
            console.log("i:", i);
            cur_rec = cur_recs[i];
            Tmp_DataAry1.push(cur_rec.data);
 }  // for i=0 to 
        let Tmp_DataString1 = JSON.stringify(Tmp_DataAry1);
            var np = {};
        np["DataString1"] = Tmp_DataString1;      
   //me.up("form").submit({      
   Ext.getCmp('s_form').submit({
                method: "POST",
                url: '../../api/V20302API/DoRemove',
                standardSubmit: true,      
                params: np,
                async: false,
            })  //end of form.submit


2>*.cs
//開啟檔案
string Tmp_out_FName = "V20306_系統件除帳_log.txt";      //處理_log.txt
string documentPath = HttpContext.Current.Server.MapPath("~") + "document\\";  // 取得實實的路徑  string Tmp_out_pFName = documentPath + Tmp_out_FName;    //含 path 的Filename
            if (File.Exists(Tmp_out_pFName))
            {
                File.Delete(Tmp_out_pFName);
            }

//using (StreamWriter sw = new StreamWriter(Tmp_out_pFName))   //小寫TXT     
//{            
  for (var i = 0; i < dt1.Rows.Count; i++)
 {
     Tmp_FMNO = dt1.Rows[i]["FMNO"].ToString();
      Tmp_Sql = " SELECT   A.RPNOAF,A.TYPEAF as CSM_TYPEAF,B.TYPEAF as FM_TYPEAF  "
                      + "  FROM     CSM_AF@TLS_245 A, AMM_FM B   "
                      + "   WHERE  A.RPNOAF = nvl(B.MRPNOAF, B.RPNOAF)  "
                      + "   AND        B.FMNO = " + myfunc.AA(Tmp_FMNO);
                    Tmp_Str = myfunc.SqlValue(Tmp_Sql);
                    Tmp_RPNOAF = myfunc.StrExtract(Tmp_Str, 1);
                    Tmp_CSM_TYPEAF = myfunc.StrExtract(Tmp_Str, 2);
                    Tmp_FM_TYPEAF = myfunc.StrExtract(Tmp_Str, 3);
                    if (Tmp_CSM_TYPEAF != Tmp_FM_TYPEAF)
                    {
                        Tmp_Str = "交修單號(" + Tmp_RPNOAF + ")"
                                       + " AMM約別(" + Tmp_FM_TYPEAF + ") "
                                       + "和 TLS的約別(" + Tmp_CSM_TYPEAF + ") 不同 ,"
                                       + "敬請檢核!!<br>"+"\r\n";
                        //File.WriteAllText(Tmp_out_pFName, Tmp_Str);
                        File.AppendAllText(Tmp_out_pFName, Tmp_Str);
                        Tmp_Str =File.ReadAllText(Tmp_out_pFName);
                            //sw.WriteLine(Tmp_Str);
                        }
                }//   for (var i = 0; i < dt1.Rows.Count; i++)
   //sw.Close();


PS: c# using 的使用方法如下:
1>引入命名空間
    using System.Text;
2>使用資源後,自動釋放 
using (var file = File.Open("filePath", FileMode.OpenOrCreate))
{
   //do something
}

-->
FileStream file = File.Open("filePath", FileMode.OpenOrCreate);
try
{
//do something
}
finally
{
if (file!= null)
{
((IDisposable)file).Dispose();
}
}


2023年4月26日 星期三

V20302 - 單檔維護 - 新建畫面 - 新增

目的: V20302 - 單檔維護 - 新建畫面

處理步驟:  1>利用小工具 - 產生欄位_單檔 -->產生 V20302 的相關欄位資料
                       (V20302.js V20302_JSON.js , 
                         V20302APIController.cs)
                        [Query.欄位s(J_gridmodel),
                         Grid.欄位s(J_columns), 
                         編輯畫面欄位(J_formFields)]
                   2>將檔案加入 Project  , 並試 Run, 可以顯示資料
                   3>編輯[過濾條件(Query)] 加入, 並執行




PS : 若用現有檔案(V80C03)修改, 則需修改 Table 的相關欄位資料, 很花時間
        除非兩檔案的 Table 相同, 


  

2023年4月25日 星期二

V20302 - Query 畫面未顯示 - 不同元件但用同一 id

目的:  V20302 - Query 畫面未顯示 - 且未顯示錯誤訊息(語法結構皆對,但是執行時錯誤)

原因:  不同元件,但用同一 id  (由 V80C03 複製至 V20302,修改 V20302)

處理方法: 1>在 Query 利用 remark 方式, 讓畫面可以正常顯示,再來找問題



GitLab : - 開立分支 V80204 智為測試中, 開發另一支程式 V20302

 目的: GitLab : V80204 智為測試中, 尚未上線, 開發另一支程式 V20302

處理說明: 如下 2 方法均可
      方法 1>由現有分支(V80204) , 再開立分支(V20302) (Source 包含 V20302+V80204)
                   優點: V80204測試中,有問題,以現有分支 V20302修改,
                              不需切回分支 V80204修改,
                   缺點: V80204上版時, V20302必需沒問題,才可 compiler 上版

      方法 2> 由master開立新的分支 V20302 (Source 不包含測試中的 V80204)
                     優點: V80204測試中,有問題,開啟分支 V80204修改, 不會受新分支 V20302的影響











AMM Web 網路目錄 - 正式區 & 測試區

 目的: AMM Web 網路目錄  - 正式區 &  測試區

            正式區: http://192.30.8.210:8421 

           測試區: http://192.30.8.240:8521







2023年4月24日 星期一

gitLab - 找回之前的版本 - V80204C - XLSIN2XLSOUT 函式不見

目的: gitLab  - 找回之前的版本  - V80204C  -  XLSIN2XLSOUT 函式不見 

處理說明: 1>

è [方案總管] à[V80204CAPIController]à按右鍵à檢視記錄à點選分支記錄à [與上一版本比較]

è 找到有該函式的版本à 將該版本函式複製回目前版本





 






2023年4月23日 星期日

V80204 – loadMask - 顯示稍候訊息,Async不可設為false

 目的: V80204 – WBS報工工時 [顯示資料], 去後端處理, 要顯示等待訊息
          - loadMask  - 顯示稍候訊息,Async不可設為false

處理說明:  1> Ext.Ajax  的處理模式 :   必需  async: true,  - loadMask 才會顯示訊息
                         // 1>> 異步模式  : false,    即會等後端執行完成,才會往下,所以不會顯示等待訊息
                                                                     若  async: false --> LoadMask不會顯示訊息     
                 // 2>> 異步模式  : true,   即會不用等後端執行完成,前端仍會往下, 所以會顯示等待訊息
                                                                       async: true ,    (defaule)  


1>V80201.js
var myMask = new Ext.LoadMask(Ext.getBody(), {
msg: '資料處理中,請稍候...',
});

//顯示訊息
myMask.show();

//隱藏訊息
Ext.getCmp('sub_Grid').store.on("load", function (me, records, successful, eOpts) {
        if (successful) {

            console.log("successful");
            console.log("Ext.getCmp('sub_Grid').store.data", Ext.getCmp('sub_Grid').store.data);
            win1.show();
            //若已載入完成,則            
            myMask.hide();
        }
    }
    );