目的: JSFiddle : javascript 的線上測試平台 - 如何 include ext
2023年5月9日 星期二
2023年5月4日 星期四
V20302 - 下載文字檔案至前端
目的: V20302 - 下載文字檔案至前端
處理說明: 1> 必需用 form.submit , 不可用 Ext.Ajax
2> standardSubmit: true, 必用設為 true
2> standardSubmit: true, 必用設為 true
1>1>*.js
// //[確認除帳]鈕 -
function DoRemoveBtn_click() {
var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection();
if (cur_recs.length == 0) {
mywarnalert("請先選擇要編輯的資料");
return false;
}
var cur_rec;
let Tmp_DataAry1 = [];
var Tmp_RPNOAF;
var Tmp_Str="";
console.log("cur_recs.length:", cur_recs.length);
//判斷約別, 不可空白, 若有空白,則顯示訊息,不再往下
for (let i = 0; i <= cur_recs.length - 1; i++) {
console.log("i:", i);
cur_rec = cur_recs[i];
if (checkisnull(cur_rec.data["TYPEAF"])) {
Tmp_Str = Tmp_Str + "系統件單號(" + cur_rec.data["FMNO"] + ")的約別不可空白<br>";
}
} // for i=0 to
if (Tmp_Str.length > 0) {
Tmp_Str = Tmp_Str
+ "請檢核 !!<br>";
mywarnalert(Tmp_Str);
return;
}
//判斷約別是否一致 & 執行結果是否有錯誤, 若有,則存成 *_log.txt 傳至前端
//若有成功除帳的資料,則發 Email 通知使用者
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;
var isOk = true;
///若下載檔案至前端, 則不可用 Ext.Ajax
//Ext.Ajax.request({
Ext.getCmp('s_form').submit({
method: "POST",
url: '../../api/V20302API/DoRemove',
standardSubmit: true,
params: np,
async: false,
success: function (response, opts) {
console.log("0 response.responseText=", response.responseText);
var Tmp_Obj = Ext.decode(response.responseText);
console.log("1 Tmp_Obj=", Tmp_Obj);
if (Tmp_Obj["success"] == false) {
var Tmp_RtnMsg = "系統件除帳,錯誤訊息如下: <br>"
+ Tmp_Obj["Rtn_Msg"];
mywarnalert(Tmp_RtnMsg);
isOk = false;
}
else {
Tmp_Str = "系統件除帳 OK <br>";
mywarnalert(Tmp_Str);
};
}, //end of success
failure: function (response, opts) {
var Tmp_Obj = Ext.decode(response.responseText);
var Tmp_Rtn_Msg = "系統件除帳,錯誤訊息如下: <br>"
+ Tmp_Obj["Rtn_Msg"];
mywarnalert(Tmp_Rtn_Msg);
isOk = false;
}
}) //end of Ext.Ajax.Request
}; // end of function ConfirmRemoveBtn_click() {
2>
2>2>*.cs
pupublic void DoRemove()
{
var c = HttpContext.Current;
NameValueCollection nvc = c.Request.Form;
OracleConnection conn = new OracleConnection(DBService.ConnectionString(DBLINK));//
OracleCommand cmd = new OracleCommand();
OracleDataReader reader;
var response = Request.CreateResponse();
conn.Open();
string Tmp_RtnMsg;
try
{
conn.ClientInfo = User.Identity.Name;
conn.ModuleName = BaseSYS + "_" + BaseMODID;
conn.ActionName = ActionName;
cmd.Connection = conn;
string Tmp_Sql = "";
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);
}
//將 table 字串轉成 DataTable
//DataTable DataTable1 = (DataTable)JsonConvert.DeserializeObject(Tmp_DataString1, (typeof(DataTable)));
string Tmp_DataString1 = nvc["DataString1"]; //Tmp_DataString: 將目前子畫面的資料. JSON字串
DataTable dt1 = myfunc.JSON2dt(Tmp_DataString1);
//每筆資料列印後, 不分頁列印下一筆
string Tmp_FMNO;
string Tmp_Str, Tmp_RPNOAF, Tmp_CSM_TYPEAF, Tmp_FM_TYPEAF;
//using (StreamWriter sw = new StreamWriter(Tmp_out_pFName)) //小寫TXT
//不用 sw, 改用File.AppendText(Tmp_out_pFName,Tmp_Str)
{
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>";
// //sw.WriteLine(Tmp_Str);
File.AppendAllText(Tmp_out_pFName, Tmp_Str); //不用 sw , 改用 File.AppendAllText
}
}// for (var i = 0; i < dt1.Rows.Count; i++)
// sw.Close才會實際寫入檔案(Tmp_out_pFName)
// //sw.Close();
//讀取檔案的文字內容 , 若內容>0 ,郥 success : false , 傳回檔案內容
//string Tmp_FStr = File.ReadAllText(Tmp_out_pFName);
//if (Tmp_FStr.Length>0)
//{
// Tmp_RtnMsg = "[確認除帳]失敗 !! <br>"
// + Tmp_FStr;
// response.Content = new StringContent("{success: false,Rtn_Msg:" + Tmp_RtnMsg+ "}"); // 回應內容
//}
//else
// response.Content = new StringContent("{success: true,Rtn_Msg:約別正確}"); // 回應內容
//return response;
////FileInfo fileInfo = new FileInfo(Tmp_out_pFName);
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode((string)Tmp_out_FName, System.Text.Encoding.UTF8) + "\"");
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.ContentType = "text/plain";
////HttpContext.Current.Response.BinaryWrite(ms.ToArray());
HttpContext.Current.Response.WriteFile(Tmp_out_pFName);
//////包裝標籤檔產生完成
////Tmp_Str = "產生包裝匯出檔案成功<br>"
//// + "(" + FileName + ")<br>";
////MyCookie = new HttpCookie("EX_DFile", HttpUtility.UrlEncode(Tmp_Str));
////HttpContext.Current.Response.Cookies.Add(MyCookie);
HttpContext.Current.Response.End();
};// using
} // end of try
catch (Exception e)
{
string Tmp_msg;
Tmp_msg = myfunc.Get1ORA(e.Message);
Tmp_RtnMsg = "[確認除帳]失敗 !! <br>"
+ Tmp_msg;
//response.Content = new StringContent("{'success': false,'Rtn_Msg':'" + Tmp_RtnMsg + "'}"); // 回應內容
//return response;
}
finally
{
conn.Close();
}
} // end of DoRemove
1
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
}
{
//do something
}
-->
FileStream file = File.Open("filePath", FileMode.OpenOrCreate);
try
{
//do something
}
finally
{
if (file!= null)
{
((IDisposable)file).Dispose();
}
}
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),
[Query.欄位s(J_gridmodel),
Grid.欄位s(J_columns),
編輯畫面欄位(J_formFields)]
2>將檔案加入 Project , 並試 Run, 可以顯示資料
3>編輯[過濾條件(Query)] 加入, 並執行
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的影響
訂閱:
文章 (Atom)