目的: 由後端取得多筆資料,加入現有畫面的 datastore
處理說明: 1>後端如何將datatable 的資料包成 JSON的格式, 傳至前端,並解碼
2>前端如何解碼 JSON 的格式
2>前端如何解碼 JSON 的格式
1>*.cs myfunc.cs - 宣告 dt2JSON 函式 , 傳回 datatable T1 的 JSON格式
using Newtonsoft.Json;
public static string dt2JSON(DataTable dt)
{
string JsonString = string.Empty;
if (dt.Rows.Count > 0)
{
JsonString = JsonConvert.SerializeObject(dt);
}
return JsonString;
}
2>*.cs V120402, 取得 ds , 並將 ds.Tables["T1"] 轉換成 JSON格式字串, 傳回 前端
[HttpPost]
public HttpResponseMessage get_sub_Data1()
{
var c = HttpContext.Current;
NameValueCollection nvc = c.Request.Form;
string Tmp_BRP = nvc["sub_BRP"];
string Tmp_TMNO = nvc["sub_TMNO"];
OracleCommand cmd = new OracleCommand();
string Tmp_Sql1 = ""; //for 日期起迄
string Tmp_Sql = " SELECT
RNK,TMNO,TMNOXX,DOCNO,SHT,REV,DOCTLE,STLCT,VOL,
BRDAY_,REMARK_,STAT,NATIXX,LGTPXX "
+ " FROM ( SELECT dense_rank() over(order by TMNO) as RNK,"
+ " TMNO,TMNOXX,DOCNO,SHT,REV,DOCTLE,STLCT,
VOL,10 as BRDAY_,' ' as REMARK_,STAT, "
+ " NATIXX,LGTPXX "
+ " FROM AMM_TMDWG "
+ " WHERE 1=1 ";
//panel11
//條碼編號
if (!myfunc.checkisnull(Tmp_TMNO))
{
Tmp_Sql = Tmp_Sql + " AND TMNO= " + myfunc.AA(Tmp_TMNO);
};
Tmp_Sql = Tmp_Sql + ")";
cmd.CommandText = Tmp_Sql;
string countSql = " SELECT COUNT(*) as total FROM (" + Tmp_Sql + ")";
DataSet ds = getDataTable(cmd, countSql);
int Tmp_TOTAL = int.Parse(ds.Tables["T1C"].Rows[0]["TOTAL"].ToString());
string Tmp_STAT = "";
string Tmp_Str = "";
if (Tmp_TOTAL > 0)
{
Tmp_STAT = ds.Tables["T1"].Rows[0]["STAT"].ToString();
if (Tmp_STAT == "A")
{
Tmp_Str = "目前條碼編號(" + Tmp_TMNO + ")的文件已借出/已刪除, 不可借閱";
}
}
//新增 CaluField 欄位 - [管制現況]
getKeyCode("STAT", ref ds);
//取得最新版期, 版別
//自訂 CaluField 欄位 - [最新版期(VNDTXY_)] [最新版別(VNTPXD_)]
ds.Tables["T1"].Columns.Add("VNDTXY_", typeof(object));
ds.Tables["T1"].Columns.Add("VNTPXD_", typeof(object));
string Tmp_Val = ""; //欄位值 以 ; 分隔
string Tmp_NATIXX = "", Tmp_LGTPXX = "", Tmp_TMNOXX = "";
string Tmp_VNDTXY_ = "", Tmp_VNTPXD_ = "";
OracleConnection conn = new OracleConnection(DBService.ConnectionString(DBLINK));
OracleCommand cmd1 = new OracleCommand();
OracleDataReader reader;
var response = this.Request.CreateResponse();
string Tmp_dt2JSON;
string Tmp_RtnMsg = "";
try
{
conn.Open();
conn.ClientInfo = User.Identity.Name;
conn.ModuleName = BaseSYS + "_" + BaseMODID;
conn.ActionName = ActionName;
cmd1.Connection = conn;
foreach (DataRow row in ds.Tables["T1"].Rows)
{
Tmp_NATIXX = row["NATIXX"].ToString();
Tmp_LGTPXX = row["LGTPXX"].ToString();
Tmp_TMNOXX = row["TMNOXX"].ToString();
Tmp_VNDTXY_ = "";
Tmp_VNTPXD_ = "";
if (Tmp_NATIXX.Length > 0)
{
//自訂 SQL , 取得 CaluField 欄位值
Tmp_Sql = " SELECT ITEMXY,VNDTXY, VNTPXD "
+ " FROM TM_XY@TLS_245 "
+ " WHERE OWN_DEP='L' "
+ " AND NATIXX=" + myfunc.AA(Tmp_NATIXX)
+ " AND LGTPXX=" + myfunc.AA(Tmp_LGTPXX)
+ " AND TMNOXX=" + myfunc.AA(Tmp_TMNOXX)
+ " ORDER BY ITEMXY DESC ";
cmd1.CommandText = Tmp_Sql;
reader = cmd1.ExecuteReader();
//只取最大版期 & 版別
if (reader.Read())
{
Tmp_VNDTXY_ = Tmp_VNDTXY_ + String.Format("{0:yyyy/MM/dd}", DateTime.Parse(reader["VNDTXY"].ToString())) + ",";
Tmp_VNTPXD_ = Tmp_VNTPXD_ + reader["VNTPXD"].ToString() + ",";
} // end of while
if (Tmp_VNDTXY_.Length > 0)
Tmp_VNDTXY_ = Tmp_VNDTXY_.Substring(0, Tmp_VNDTXY_.Length - 1);
if (Tmp_VNTPXD_.Length > 0)
Tmp_VNTPXD_ = Tmp_VNTPXD_.Substring(0, Tmp_VNTPXD_.Length - 1);
row["VNDTXY_"] = Tmp_VNDTXY_;
row["VNTPXD_"] = Tmp_VNTPXD_;
} // end of if (Tmp_NATIXX.Length > 0)
} // end of foreach (DataRow row in ds.Tables["T1"].Rows)
//如何將 ds 的 T1包成 JSON格式, 傳回前遄
Tmp_dt2JSON = myfunc.dt2JSON(ds.Tables["T1"]);
Tmp_RtnMsg = Tmp_dt2JSON;
Tmp_Str = "{success: true,Rtn_Msg:" + myfunc.AA(Tmp_RtnMsg) + ","
+ " }";
response.Content = new StringContent(Tmp_Str); // 回應內容
return response;
} // end of try
catch (Exception e)
{
var Tmp_ErrMsg = myfunc.Get1ORA(e.Message);
Tmp_RtnMsg = "取得[條碼編號]的資料失敗 (get_sub_data1) !! <br> "
+ Tmp_ErrMsg;
//JSON 傳回字串 {"sucess": false, "Rtn_Msg" : "錯誤訊息" }, 以 myfunc.JSONAA 包含 \"
Tmp_Str = "{"+myfunc.JSONAA("success")+": false ,"+myfunc.JSONAA("failure")+": true , "
+ myfunc.JSONAA("Rtn_Msg")+":"+myfunc.JSONAA(Tmp_RtnMsg) + "}";
response.Content = new StringContent(Tmp_Str); // 回應內容
return response;
}
finally
{
conn.Close();
}
//return ds;
}// end of get_sub_Data1();
3>*.js , 將 Ext.Ajax 的傳回值(JSON 字串), 轉換成 JSON Object(Ext.decode(JSONString))
var Tmp_recs = Ext.decode(Tmp_Obj["Rtn_Msg"]);
console.log("Tmp_recs:", Tmp_recs);
console.log("Tmp_recs.length:", Tmp_recs.length);
var Tmp_rec;
for (i = 0; i < Tmp_recs.length; i++) {
Tmp_rec = Tmp_recs[i];
console.log("1 Tmp_rec:", Tmp_rec);
console.log("Tmp_rec:", Tmp_rec);
Ext.getCmp("sub_Grid").store.add(Tmp_rec);
} // for (i=0;i<)
沒有留言:
張貼留言