สวัสดีปีใหม่ 2020 ทุกท่านครับ
ผมทดสอบการทำงานของโค๊ด
1. ก็อปโค๊ดมาแปะ โดยวางไว้ที่ CodeFile1.cs (ตามรูป)
2.สร้าง form ใหม่ เพื่อไม่ให้ไปตีกับโค๊ดเดิม (สร้างฟอร์มเปล่าๆ)
3. ปรับโปรแกรม เพื่อ run ตัวใหม่ที่พึ่งจะวางลง ในคอนเซ็ปคิดว่าใกล้กับสิ่งที่ต้องการ เพื่อค้นหาคีย์เวิรด์บางคำใน <keys> ส่วนเวลาแสดงผล ผมต้องตัดตอนเอาเฉพาะ คีย์และ value ที่ เป็น child จากตัวที่พบข้อมูล
ref json จากกระทู้เก่า
https://ppantip.com/topic/39490843/comment12-1 และ
https://pastebin.com/biDFeGZb
ขยายความ เช่น ถ้าเจอ คีย์ "อุปกรณ์" AND "ขอซื้อ" (อาจจะมีคำว่า อุปกรณ์ หลาย กรณี เช่น นโยบาย อุปกรณ์, การรับรู้มูลค่าอุปกรณ์ชิ้นเล็ก, ทำลายอุปกรณ์ที่เลิกใช้งาน ก็จะฟิลเตอร์เหลือตัวที่เกี่ยวข้อง สองตัว แบบนี้ โดย ผมจะลองทำตาม c# code ด้านล่าง
JObject :
{{
"งานด้านปฏิบัติการ": {
"Task": {
"2_1งานลงทุนด้านอุปกรณ์": {
"2_1_1การเลือกและขอซื้ออุปกรณ์ร้านมาตรฐาน": {
"ร้านเปิดใหม่": {
"อนุมัติ": {
"POST": "MD"
}
}
},
"2_1_2การเลือกและขอซื้ออุปกรณ์ร้านนอกมาตรฐาน": {
"กลั่นกรอง": {
"POST": "MD",
"สายงาน": "สายงานการตลาด"
},
"อนุมัติ": {
"POST": "MD"
}
}
}
}
},
เพื่อสร้างลิสต์เก็บค่า Property name เพื่อจะมาค้นหาคีย์ แต่ด้านล่างเป็นการ ดึงค่าคีย์แต่ละระดับ ขึ้นมา เป็นลิสต์ กะว่า จะใช้ debug เพื่อดูค่าที่เก็บไว้ก่อนทำการ find() อีกที(ตามหนังสือที่หามาอ่านครับ) โดยเช็ค type ว่า ถ้าไม่ใช่ string ก็ย่อยลงไปอีกระดับนึง จนกว่า จะเจอระดับสุดท้าย ของแต่ละอัน
c# :
private void AddValtoList(JObject o)
{
List<string> l1 = o.Properties().Select(p => p.Name).ToList();
foreach (string n1 in l1)
{
//List<string> l3 = ((JObject)o[n1]["Task"]).Properties().Select(p => p.Name).ToList();
foreach (JProperty n3 in o[n1]["Task"])
{
foreach (JProperty n4 in o[n1]["Task"][n3.Name])
{
foreach (JProperty n5 in o[n1]["Task"][n3.Name][n4.Name])
{
if (n5.Value.Type.ToString() != "String")
{
foreach (JProperty n6 in o[n1]["Task"][n3.Name][n4.Name][n5.Name])
{
if (n6.Value.Type.ToString() != "String")
{
foreach (JProperty n7 in o[n1]["Task"][n3.Name][n4.Name][n5.Name][n6.Name])
{
AddVal(n7.Name, (string)n7.Value, n7.Path);
}
}
else
{
AddVal(n6.Name, (string)n6.Value, n6.Path);
}
}
}
else
{
AddVal(n5.Name, (string)n5.Value, n5.Path);
}
}
}
}
}
}
การฟิลเตอร์ key จาก FireBase response
ผมทดสอบการทำงานของโค๊ด
1. ก็อปโค๊ดมาแปะ โดยวางไว้ที่ CodeFile1.cs (ตามรูป)
2.สร้าง form ใหม่ เพื่อไม่ให้ไปตีกับโค๊ดเดิม (สร้างฟอร์มเปล่าๆ)
3. ปรับโปรแกรม เพื่อ run ตัวใหม่ที่พึ่งจะวางลง ในคอนเซ็ปคิดว่าใกล้กับสิ่งที่ต้องการ เพื่อค้นหาคีย์เวิรด์บางคำใน <keys> ส่วนเวลาแสดงผล ผมต้องตัดตอนเอาเฉพาะ คีย์และ value ที่ เป็น child จากตัวที่พบข้อมูล
ref json จากกระทู้เก่า https://ppantip.com/topic/39490843/comment12-1 และ https://pastebin.com/biDFeGZb
ขยายความ เช่น ถ้าเจอ คีย์ "อุปกรณ์" AND "ขอซื้อ" (อาจจะมีคำว่า อุปกรณ์ หลาย กรณี เช่น นโยบาย อุปกรณ์, การรับรู้มูลค่าอุปกรณ์ชิ้นเล็ก, ทำลายอุปกรณ์ที่เลิกใช้งาน ก็จะฟิลเตอร์เหลือตัวที่เกี่ยวข้อง สองตัว แบบนี้ โดย ผมจะลองทำตาม c# code ด้านล่าง
JObject :
{{
"งานด้านปฏิบัติการ": {
"Task": {
"2_1งานลงทุนด้านอุปกรณ์": {
"2_1_1การเลือกและขอซื้ออุปกรณ์ร้านมาตรฐาน": {
"ร้านเปิดใหม่": {
"อนุมัติ": {
"POST": "MD"
}
}
},
"2_1_2การเลือกและขอซื้ออุปกรณ์ร้านนอกมาตรฐาน": {
"กลั่นกรอง": {
"POST": "MD",
"สายงาน": "สายงานการตลาด"
},
"อนุมัติ": {
"POST": "MD"
}
}
}
}
},
c# :
{
List<string> l1 = o.Properties().Select(p => p.Name).ToList();
foreach (string n1 in l1)
{
//List<string> l3 = ((JObject)o[n1]["Task"]).Properties().Select(p => p.Name).ToList();
foreach (JProperty n3 in o[n1]["Task"])
{
foreach (JProperty n4 in o[n1]["Task"][n3.Name])
{
foreach (JProperty n5 in o[n1]["Task"][n3.Name][n4.Name])
{
if (n5.Value.Type.ToString() != "String")
{
foreach (JProperty n6 in o[n1]["Task"][n3.Name][n4.Name][n5.Name])
{
if (n6.Value.Type.ToString() != "String")
{
foreach (JProperty n7 in o[n1]["Task"][n3.Name][n4.Name][n5.Name][n6.Name])
{
AddVal(n7.Name, (string)n7.Value, n7.Path);
}
}
else
{
AddVal(n6.Name, (string)n6.Value, n6.Path);
}
}
}
else
{
AddVal(n5.Name, (string)n5.Value, n5.Path);
}
}
}
}
}
}