โซลูชัน No code: การแสดงจำนวนวันนับตั้งแต่รายการที่มีการเปลี่ยนแปลงครั้งล่าสุด
Applies To
SharePoint ใน Microsoft 365 SharePoint ใน Microsoft 365 Small Businessโดยจัสตินจอยซ์, LANtek
หมายเหตุ: บทความนี้เป็นส่วนหนึ่งของคอลเลกชันของโพสต์จากสี่ปีของการ รับบล็อกจุด สำหรับผู้ใช้ SharePoint
ภาพรวม: รายงานอายุการใช้งานแบบกำหนดเองที่ไม่มีโค้ด
หนึ่งในชิ้นส่วนการทำงานที่ร้องขอบ่อยของไซต์ SharePoint คือรายงานอายุการใช้งานสำหรับทั้งงานหรือรายการ ในคำอื่นๆจำนวนวัน/เดือนที่ได้รับเนื่องจากรายการนี้ได้รับการปรับเปลี่ยนครั้งล่าสุดหรือไม่
บนพื้นผิวนี้ดูเหมือนว่าจะเป็นคำขอที่เรียบง่ายมาก หลังจากทั้งหมดเรามีวันที่สำหรับรายการที่ถูกสร้างขึ้นและปรับเปลี่ยนเรามีความสามารถในการจัดเก็บวันที่แบบกำหนดเองเมื่อการเปลี่ยนแปลงบางอย่างของรายการเกิดขึ้นผ่านตัวรับเหตุการณ์ เรามีคอลัมน์จากการคำนวณที่เราสามารถรวมสูตรที่เหมือนกันใน Excel เพื่อทำงานกับข้อมูลของเรา ดูเหมือนว่าจะมีข้อเสนอตรงไปตรงมาอย่างสวยงาม เราเลือกเขตข้อมูลวันที่สร้างคอลัมน์จากการคำนวณแล้วทำสูตรบางอย่างตามบรรทัดของ [DateField] – [วันนี้] Ah ไม่เร็วเลย เมื่อใดก็ตามที่มีความพยายามทำงาน "ง่าย" ที่รู้ว่าพยายามใช้สิ่งที่ชอบ [วันนี้] ในคอลัมน์จากการคำนวณทำให้เกิดปัญหา พยายามแทรก [วันนี้] ลงในกล่องสูตรของคอลัมน์จากการคำนวณของคุณจะให้ข้อความแสดงข้อผิดพลาดดังนี้
ทำไมจึงเป็นเช่นนี้ ดีจะต้องทำอย่างไรกับการคำนวณคอลัมน์จากการคำนวณ
มาลองใช้สูตรง่ายๆเป็นตัวอย่าง:
= IF ( [คอลัมน์1คอลัมน์] <= [ต่อๆไป], "ตกลง", "ไม่ตกลง")
ทั้งหมดนี้กล่าวว่าถ้าคอลัมน์1คอลัมน์มีค่าน้อยกว่าหรือเท่ากับต่อๆไปแล้วแสดงตกลงมิฉะนั้นแสดงไม่ใช่ตกลง นี่คือสูตรพื้นฐานทั่วไปสำหรับคอลัมน์จากการคำนวณและจะทำให้สันนิษฐานพื้นฐานเกี่ยวกับข้อมูลในรายการที่มีคอลัมน์เหล่านี้: ค่าสำหรับคอลัมน์1คอลัมน์และต่อๆไปจะไม่สามารถเปลี่ยนแปลงได้โดยไม่ต้องมีเหตุการณ์การอัปเดตในรายการ
ที่เหมาะสมแล้วคอลัมน์จากการคำนวณจะมีการคำนวณเฉพาะเมื่อรายการถูกอัปเดต (หรือสร้างขึ้น) เนื่องจากพวกเขาถือว่าข้อมูลที่คุณกำลังคำนวณอยู่ในรายการตัวเอง ซึ่งจะเป็นการสร้างปัญหาเมื่อคุณพยายามใช้บางสิ่งที่เปลี่ยนแปลงไปยังเขตข้อมูลของรายการเช่นวันที่ของวันนี้
ตอนนี้ฉันไม่ได้อยู่ในการประชุมที่พวกเขาตัดสินใจว่านี่เป็นวิธีที่คอลัมน์จากการคำนวณจะทำงานอย่างไรก็ตามถ้าฉันต้องทำให้การคาดเดาที่ได้รับการศึกษาจะถือว่าพวกเขาทำงานในลักษณะนี้เพื่อประสิทธิภาพการทำงาน ลองนึกภาพถ้าคุณมีรายการของหลายพันรายการแต่ละรายการที่มีคอลัมน์จากการคำนวณที่จำเป็นต้องมีการอัปเดต "live" ซึ่งจะหมายความว่ากลไกบางอย่างอาจเป็นงานตัวจับเวลาจะต้องทำซ้ำผ่านแต่ละรายการที่มีคอลัมน์จากการคำนวณซึ่งมักจะและอัปเดตค่า การดำเนินการนี้อาจมีการใช้งานอย่างมากในแง่ของประสิทธิภาพเนื่องจากการปรับใช้ที่มีขนาดใหญ่กว่างานนี้อาจใช้งานได้อย่างต่อเนื่องและการเปลี่ยนแปลงสิ่งต่างๆ นั่นเป็นเพียงการเดาของฉันเท่านั้นแต่จะทำให้คุณรู้สึกว่าคุณคิดอย่างไร
มีคำแนะนำบางอย่างสำหรับโซลูชันที่คล้ายกันลอยอยู่ที่นั่นที่เกี่ยวข้องกับหลอก SharePoint ในการยอมรับค่าวันนี้โดยการสร้างคอลัมน์ที่ชื่อวันนี้แล้วเพิ่มลงในสูตรของคุณจากนั้นจึงทำการลบ สิ่งเหล่านี้ทั้งหมดเป็นสิ่งที่ดีและดีแต่จำสิ่งที่ฉันกล่าวว่าเมื่อคอลัมน์จากการคำนวณได้รับการอัปเดต ค่านี้จะเปลี่ยนแปลงเฉพาะเมื่อมีการอัปเดตรายการซึ่งหมายความว่าค่าของคุณจะไม่ถูกต้องโดยเฉพาะอย่างยิ่งในกรณีของการคำนวณวัน
ฉันเคยเห็นผู้อื่นโดยใช้จาวาสคริปต์ที่ชาญฉลาดในการเขียนค่าไปยังหน้า การทำงานนี้จะทำงานนอกจากนี้แต่ฉันขอมากกับสคริปต์ของไคลเอ็นต์เมื่อสามารถหลีกเลี่ยงได้
การ
ดังนั้นควรทำอย่างไร คอลัมน์จากการคำนวณจะไม่อยู่ในคำถามดังนั้นเรียกว่าฟังก์ชัน "ระเหย" เช่นวันนี้ อาจเป็นไปได้ว่าเราสามารถพัฒนาโค้ดแบบกำหนดเองบางอย่างเพื่อดูแลสิ่งนี้ได้สำหรับเราเช่นคอลัมน์จากการคำนวณงานตัวจับเวลาหรือกระบวนการจัดกำหนดการให้พร้อมและอัปเดตรายการเดี่ยวทุกรายการที่ต้องการการคำนวณนี้ ที่จะทำให้เรากลับไปยังปัญหาของประสิทธิภาพการทำงานที่ฉันกล่าวถึงในย่อหน้าสุดท้ายแม้ว่าและนอกจากนี้ยังเป็นโซลูชันเปราะที่เฉพาะเจาะจงสำหรับไซต์/รายการ/คอลัมน์ในคำถาม ด้านบนของข้อกังวลทั้งสองคุณยังต้องไปค้นหาคนโง่เช่นตัวเองซึ่งจะรู้วิธีการใช้โค้ดและส่งเสริมให้เขาพัฒนาโซลูชันนี้ให้กับคุณ แต่มีวิธีที่ง่ายยิ่งขึ้น!
ถ้าคุณมีสิทธิ์ในการสร้างเขตข้อมูลและแก้ไขหน้าบนไซต์ของคุณและมีความรู้เกี่ยวกับ XSLT และการสร้างมุมมองคุณสามารถใส่แม่แบบ XSL ที่สามารถรวมอยู่ในมุมมองรายการได้และจะคำนวณค่าของคุณทุกครั้งในแต่ละครั้งที่มีการร้องขอหน้า สถานการณ์สมมตินี้จะเอาความกังวลของเราออกจากประสิทธิภาพการทำงานและไม่จำเป็นต้องมีโค้ดแบบกำหนดเองที่จะได้รับการพัฒนาและปรับใช้ผ่านทางโซลูชัน
สมบูรณ์ . ดังนั้นเราจะทำอะไรได้บ้าง
-
สร้างหรือเลือกเขตข้อมูลที่จะทำหน้าที่เป็นแหล่งข้อมูลของเรา ต้องเป็นชนิดวันที่
-
สร้างเขตข้อมูลของเราที่จะทำหน้าที่เป็นตัวยึดสำหรับค่าที่ถูกคำนวณ
-
เพิ่มทั้งสองเขตข้อมูลเหล่านี้ไปยังชนิดเนื้อหาและเพิ่มชนิดเนื้อหานั้นลงในรายการ
-
สร้างมุมมองของรายการที่มีทั้งคอลัมน์ของแหล่งที่มาและตัวยึด
-
อัปโหลดเทมเพลต XSL ไปยังไลบรารีสไตล์
-
ตั้งค่าคุณสมบัติ "การเชื่อมโยง XSL" สำหรับ Web Part สำหรับมุมมองรายการผ่าน UI
-
สำเร็จ!
มาลองสำรวจตัวอย่างการใช้งานตัวอย่างและการเดินผ่านการดำเนินการ ลูกค้าของเราต้องการมุมมองของรายการหลักของพวกเขาที่จะบอกให้พวกเขาทราบว่ามีการนั่งอยู่ที่สถานะของรายการใดบ้าง รายการนี้มีชนิดเนื้อหาของไซต์แบบกำหนดเองที่สืบทอดมาจากชนิดรายการและเพิ่มลงในรายการ มีตัวรับเหตุการณ์อยู่แล้วในตำแหน่งที่จับภาพแต่ละครั้งที่เขตข้อมูลสถานะในรายการที่มีการเปลี่ยนแปลงและบันทึกวันที่ลงในคอลัมน์ที่ชื่อว่า "สถานะวันที่เปลี่ยนแปลง" การเดินสายทั้งหมดนี้ไม่จำเป็นต้องทำและสามารถทำได้กับเขตข้อมูลวันที่ใดๆ (ดังนั้นจึงเป็นการดำเนินการของเราแต่อย่าลังเลที่จะทดลองใช้งาน) ค่าน้อยที่สุดที่คุณจะต้องเป็นเขตข้อมูลวันที่ต้นฉบับและเขตข้อมูลตัวแทนของคุณเพื่อถือการคำนวณของคุณ (เพิ่มเติมในย่อหน้าถัดไป) ที่เพิ่มลงในรายการของคุณถึงแม้ว่าฉันจะแนะนำให้คุณใช้คอลัมน์ไซต์และชนิดเนื้อหาของไซต์ในกรณีที่คุณต้องการนำโซลูชันนี้ไปใช้กับที่อื่นบนไซต์ของคุณ
ดังนั้นเราจึงมีวันที่แหล่งข้อมูลของเราที่เราสามารถใช้ในการคำนวณของเรากับวันที่ของวันนี้ ในตอนนี้เราสามารถสร้างคอลัมน์ของไซต์แบบกำหนดเองเพื่อใช้เป็นคอนเทนเนอร์สำหรับค่าจากการคำนวณของเรา ในกรณีนี้ฉันเลือกที่จะใช้คอลัมน์จากการคำนวณเนื่องจากจะไม่สามารถเปลี่ยนแปลงในฟอร์มใหม่หรือแก้ไขรายการได้แต่สามารถเลือกให้แสดงในมุมมองได้เนื่องจากเราไม่ต้องการให้ผู้ใช้ใส่ค่าที่กำหนดเองในคอลัมน์นี้ คุณอาจสับสนว่าทำไมจึงไม่แสดงในมุมมองเป็นต้น
ตอนนี้เรามีคอลัมน์ไซต์ของเราเราสามารถเพิ่มลงในชนิดเนื้อหาของเราที่จะใช้ในรายการของเรา ถัดไปเราจำเป็นต้องสร้างมุมมองของเราที่จะปรับแต่งด้วย XSLT ของเราในภายหลัง ตรวจสอบให้แน่ใจว่าคุณได้สร้างมุมมองมาตรฐานที่มีคอลัมน์วันที่ต้นฉบับของคุณและคอลัมน์จากการคำนวณใหม่ที่จะทำหน้าที่เป็นตัวยึดสำหรับค่าจากการคำนวณ
ขณะนี้เรามีทุกอย่างที่เราจำเป็นต้องสนับสนุนรายงานอายุการใช้งานแบบกำหนดเองของเรา ทั้งหมดที่ยังคงถูกสร้างเทมเพลต XSL ของเราอัปโหลดไปยังไลบรารีสไตล์ของไซต์และลิงก์ไปยังมุมมองรายการของเรา เทมเพลต XSL ที่เราจะใช้จะมีมาร์กอัปที่สร้างขึ้นใน SharePoint ปกติสำหรับสร้างมุมมองเช่นเดียวกับมาร์กอัปแบบกำหนดเองของเราที่ใช้ในการแทนที่บางส่วนของสิ่งนี้และคำนวณค่าที่ต้องการของเราสำหรับเรา
การให้เครดิตที่ครบกำหนดของเทมเพลต XSL สำหรับการทำการคำนวณที่แท้จริงที่ฉันใช้สำหรับโซลูชันนี้ถูก graciously โดย "swirch" บนศูนย์ข้อมูล MSDN: http://social.msdn.microsoft.com/Forums/en-US/sharepointcustomization/thread/aeda905b-9bc6-40c4-bd22-21306c5cb0d2/
ดาวน์โหลดสไตล์ชีต XSL (aging.zip) ฉันได้ใส่รวมอยู่ที่นี่: Https://OneDrive.live.com/?cid=c262e8e2d59a86d9&permissionsChanged = 1&ID = c262e8e2d59a86d9! 104
การเปิดนี้ในตัวแก้ไขข้อความที่คุณชื่นชอบคุณจะเห็นมาร์กอัป XSL ของ SharePoint ปกติมากมายสำหรับการแสดงมุมมองถ้าคุณให้เลื่อนลงไปที่บรรทัด๓๕๗คุณจะเห็นการเริ่มต้นของเทมเพลตแบบกำหนดเองที่ฉันเพิ่มลงในมาร์กอัปครั้งแรกเป็นเทมเพลต "DateDiff" ตามด้วย "คำนวณ-julian-วัน" และ "FieldRef_printTableCell_EcbAllowed Days_x0020_At_x0020_Status" ต่อไปนี้คือแม่แบบสามแบบของเราที่จะทำให้และแสดงการคำนวณของเราในมุมมองของเรา ถ้าคุณกำลังจะใช้ชื่อเขตข้อมูลที่แตกต่างจากที่ระบุไว้ก่อนหน้าในบทความนี้คุณจะต้องไปยังเทมเพลตนี้และแทนที่การอ้างอิงไปยังชื่ออื่น โปรดจำไว้ว่าคุณจะต้องใช้ชื่อภายในของเขตข้อมูลที่ไม่ใช่ชื่อที่ใช้แสดง
เมื่อคุณพอใจแล้วว่าเทมเพลตจะพร้อมใช้งานให้ไปยังไลบรารีสไตล์ของคุณแล้วอัปโหลดภายใต้โฟลเดอร์ "สไตล์ของ XSL" แล้วคัดลอกลิงก์ไปยังไฟล์นั้น การทำเช่นนี้จะช่วยให้เราสามารถทำการเปลี่ยนแปลงในภายหลังหรือเพิ่มไปยังส่วนต่างๆของไซต์ได้ในขณะที่เราโปรด
ถัดไปให้ไปที่รายการของคุณแล้วเลือกมุมมองที่คุณสร้างไว้ก่อนหน้าในบทความนี้ จากเมนู "การดำเนินการของไซต์" ให้คลิก "แก้ไขหน้า"
ค้นหา Web Part สำหรับมุมมองรายการของคุณบนหน้าและเปิดเมนู Web Part ด้วยการคลิกที่ลูกศรลงด้านล่างเล็กน้อยที่มุมขวาบน จากเมนูนี้เลือก "แก้ไข Web Part"
การทำเช่นนี้จะเปิดเมนูของ Web Part ทางด้านขวาของหน้าต่างเบราว์เซอร์ของคุณ
คลิกที่ส่วน + สำหรับส่วน "เบ็ดเตล็ด" และค้นหาคุณสมบัติ "การเชื่อมโยง XSL"
วางในลิงก์ไปยังไฟล์ XSL ของคุณในไลบรารีสไตล์ที่คุณคัดลอกไว้ก่อนหน้านี้ (ซึ่งอาจเป็นลิงก์แบบสัมพัทธ์หรือแบบสัมบูรณ์)
คลิก "ตกลง" เพื่อบันทึกการเปลี่ยนแปลงของคุณแล้วคลิกปุ่ม "หยุดการแก้ไข" บน ribbon "หน้า" ที่ด้านบนของหน้า
ถ้าทุกอย่างได้รับการกำหนดค่าอย่างถูกต้องแล้วคุณควรดูตัวเลขในคอลัมน์ "วันที่สถานะ" ของคุณ
และสุดท้ายนี่คือสิ่งที่จะมีลักษณะเหมือนกับข้อมูลการทดสอบบางส่วนของวันที่ต่างๆดังนี้
สรุป
มีการจัดรูปแบบที่มีประสิทธิภาพและดียิ่งขึ้นเมื่อต้องการสร้างรายงานอายุการใช้งานใน SharePoint ให้เสร็จสมบูรณ์ด้วยการใช้งานที่ไม่มีรหัสอย่างง่าย การทำเช่นนี้มีแอปพลิเคชันที่อาจเป็นไปได้ไม่กี่แอปพลิเคชันที่เราสำรวจมาที่นี่ สถานการณ์สมมติทั่วไปอื่นสำหรับรายงานชนิดนี้จะแนบไปกับรายการงานเพื่อให้คุณสามารถดูระยะเวลาที่จะได้รับเนื่องจากงานถูกสร้างขึ้นอย่างรวดเร็ว
ขอให้สนุก!
--จัสติน
จัสตินจอยซ์, LANtek
ข้อคิดเห็น
ขั้นตอนที่หายไป
10/8/2012 3:51 AM ตกลงฉันจะทำตามขั้นตอนแต่ต้องมีสิ่งที่ขาดหายไปโดยที่ XSL จะรู้ว่าวันที่ใดที่จะใช้หรือเขตข้อมูลใดที่จะเพิ่มจำนวนวันตั้งแต่ลงไป ทำความเกลียดชังเมื่อขั้นตอนดังกล่าวไม่ได้รับการแจ้งเตือนไม่มีการยอมรับรหัส!
8/30/2012 12:12 น. ฉันยอมรับ-ฉันไม่คิดว่าสิ่งนี้จริงๆนับเป็น "ไม่มีรหัส" ที่น่าสนใจผ่าน screwup บางส่วนของ SharePoint ฉันมีคอลัมน์จากการคำนวณที่ใช้งานได้โดยใช้วันนี้ ... ไม่แน่ใจว่าเหตุใดฉันจึงไม่สามารถทำงานได้อีกต่อไปแต่ยังไม่สามารถทำงานได้อีกต่อไปแต่ยังมีการทำงานอยู่สูตรสำหรับ "วันที่สถานะ" คอลัมน์จากการคำนวณหรือไม่
5/2/2012 7:39 AM จัสติน-สูตรที่คุณใช้สำหรับ "วันที่สถานะ" ของคอลัมน์ไซต์ที่ได้จากการคำนวณ (คอลัมน์พื้นที่ที่สำรองไว้) คืออะไร "= วันนี้"SharePoint ๒๐๐๗
12/2/2011 11:29 AM ในตอนนี้ฉันไม่ได้พยายามนำโซลูชันนี้ไปใช้กับ SharePoint ๒๐๐๗แต่ฉันกำลังดูอยู่ ขออภัยไม่มีคล้ายกระจกคุณสมบัติ XslLink บน web part ผ่าน UIโพสต์
ที่ยอดเยี่ยม 11/30/2011 9:53 AM สวัสดี, โพสต์ที่ยอดเยี่ยม ฉันกำลังใช้ SharePoint ๒๐๐๗ ฉันไม่มีส่วนเบ็ดเตล็ดตามที่ระบุไว้ด้านบน คุณมีขั้นตอนสำหรับการกำหนดค่า SP2007 หรือ ไม่ ขอบคุณอีกครั้ง: โซลูชันไม่ใช่โค้ด: การแสดงวันที่เนื่องจากรายการ SharePoint มีการเปลี่ยนแปลง
ครั้งล่าสุด 10/11/2011 8:24 AM สวัสดีคริส ค้นหาที่ยอดเยี่ยม! ฉันจะดูสิ่งที่คุณโพสต์หวังว่าในวันนี้และดูว่าฉันสามารถทำให้การแก้ปัญหานี้มีประสิทธิภาพมากขึ้นอีกเล็กน้อย ฉันดีใจที่คุณชอบโพสต์และฉันดีใจมากที่คุณสามารถค้นหาวิธีแก้ไขรูปแบบวันที่ยุโรปได้ :) -จัสตินโซลูชันสำหรับรูปแบบ https://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-format-issue-sharepoint-2010/
วันที่ในยุโรป 10/11/2011 6:45 AM สวัสดีอีกครั้งจัสติน เบาฉันพบวิธีแก้ไขปัญหาสำหรับปัญหาที่ฉันกล่าวไว้ก่อนหน้านี้บนหน้า นี้รูปแบบ
วันที่ยุโรป 10/7/2011 3:59 AM สวัสดีจัสติน นี่คือโซลูชันที่ดีจริงๆขอบคุณและเพียงแค่การเรียงลำดับของสิ่งที่ฉันได้ใช้เวลาสองวันที่ผ่านมาค้นหา! อย่างไรก็ตามฉันมีปัญหาเกี่ยวกับปัญหาและฉันหวังว่าคุณจะช่วยฉันได้ ฉันได้เปลี่ยนรหัสของคุณเล็กน้อยเมื่อต้องการ calcultate จำนวนวันจนกว่าจะมีการเปลี่ยนแปลงตัวแปรในบรรทัดสุดท้ายของฟังก์ชัน "DateDiff" Xsl <: ค่า-ของการเลือก = "$JulianToday-$JulianStartDate" ></xsl: ค่า-ของ> อย่างไรก็ตามฉันเท่านั้นที่จะได้รับการ caclulate ความแตกต่างอย่างถูกต้องครึ่งเวลา ดังนั้นกรณีที่มีวันที่นี้ (รูปแบบวว/ดด/ปปปป) 30/12/2011 คำนวณได้อย่างถูกต้องแต่มีวันที่นี้ (รูปแบบเดียวกัน) 12/10/2011 คำนวณเมื่อ 10-Dec-๒๐๑๑มากกว่า 12-ต.ค.-๒๐๑๑ ฉันพยายามเพียงแค่สลับตำแหน่งของค่าวันและเดือนในตัวแปร "JulianStartDate" เช่นนี้ <xsl: พารามิเตอร์ name = "เดือน" เลือก = "สายอักขระย่อย (ddwrt: FormatDateTime (string ($StartDate), ๑๐๓๓, ' yyyyMMdd '), 7, 2)"/> <xsl: พารามิเตอร์ name = "Day" เลือก = "string (ddwrt: FormatDateTime (สตริง ($StartDate), ๑๐๓๓, ' yyyyMMdd '), 5, 2)"/> และนี้ได้รับการแก้ไขปัญหาด้วยวันที่ที่สองแต่จะไม่ถูกต้องสำหรับวันแรก! ฉันยังได้พยายามเปลี่ยนแปลงการโทร FormatDateTime เพื่อใช้ LCIDs ยุโรปและการเปลี่ยนแปลงต่างๆให้กับพารามิเตอร์สุดท้ายของ FormatDateTime (เช่น ddMMyyyy, MMddyyyy) ที่มีการปรับให้เหมาะสมกับพารามิเตอร์ของสายอักขระย่อยอาร์กิวเมนต์โดยไม่ประสบความสำเร็จ ฉันยินดีให้คำแนะนำที่คุณสามารถนำเสนอได้อย่างมาก ขอบคุณ, คริสไม่มีรหัส
9/21/2011 4:27 AM ฉันไม่คิดว่า XSL มีคุณสมบัติเป็นโซลูชัน "ไม่ใช่โค้ด" เนื่องจากการทำความเข้าใจภาษา XSL ไม่ใช่ทุกคนแต่จะไม่เกี่ยวข้องกับการเขียนโปรแกรม นอกจากว่า: โซลูชันที่ดีขอขอบคุณ!