วิธีแก้ปัญหาแบบไม่มีโค้ด: การแสดงจํานวนวันนับตั้งแต่มีการเปลี่ยนแปลงข้อมูลในรายการครั้งล่าสุด

โดย Justin Joyce, LANtek

หมายเหตุ

บทความนี้เป็นส่วนหนึ่งของคอลเลกชันโพสต์จากบล็อก Get the Point เป็นเวลาสี่ปีสําหรับผู้ใช้ SharePoint

ภาพรวม: รายงานอายุแบบกําหนดเองที่ไม่มีโค้ด

หนึ่งในส่วนฟังก์ชันที่ถูกร้องขอบ่อยครั้งของไซต์ SharePoint คือ รายงานอายุสําหรับงานหรือข้อมูลในรายการ หรือกล่าวคือ ข้อมูลในรายการนี้ถูกปรับเปลี่ยนครั้งล่าสุดเป็นเวลากี่วัน/เดือนแล้ว

ดูเหมือนว่าจะเป็นคําขอที่ง่ายมาก ท้ายที่สุดแล้ว เรามีวันที่สําหรับรายการที่กําลังสร้างและปรับเปลี่ยน เรามีความสามารถในการจัดเก็บวันที่ที่กําหนดเองเมื่อมีการเปลี่ยนแปลงบางอย่างกับรายการผ่านตัวรับเหตุการณ์ เรามีคอลัมน์จากการคํานวณที่เราสามารถรวมสูตรที่คล้ายกับ Excel เพื่อทํางานกับข้อมูลของเราได้ นี่ดูเหมือนจะเป็นข้อเสนอที่ค่อนข้างตรงไปตรงมา เราจะเลือกเขตข้อมูลวันที่ สร้างคอลัมน์จากการคํานวณ แล้วทําสูตรบางอย่างตามบรรทัด [DateField] – [Today] อา ไม่เร็วนัก! อย่างที่ใครก็ตามที่ได้ลองทํางาน "ง่ายๆ" นี้ไปแล้ว การพยายามใช้บางอย่างเช่น [Today] ในคอลัมน์จากการคํานวณจะทําให้เกิดปัญหาได้ ลองแทรก [วันนี้] ลงในกล่องสูตรของคอลัมน์จากการคํานวณ จะแสดงข้อความแสดงข้อผิดพลาดดังนี้:

ข้อความแสดงข้อผิดพลาด

ทําไมถึงเป็นเช่นนี้ มันเกี่ยวข้องกับวิธีการคํานวณคอลัมน์จากการคํานวณ

ลองใช้สูตรง่ายๆ เป็นตัวอย่าง:

= IF( [Column1]=<[Column2], "OK", "Not OK")

ทั้งหมดที่กล่าวมาก็คือถ้า Column1 น้อยกว่าหรือเท่ากับ Column2 จะแสดง ตกลง มิฉะนั้น ให้แสดง ไม่ตกลง สูตรนี้เป็นสูตรพื้นฐานที่ค่อนข้างธรรมดาสําหรับคอลัมน์จากการคํานวณ และจะสร้างสมมติฐานพื้นฐานเกี่ยวกับข้อมูลในรายการที่มีคอลัมน์เหล่านี้: ค่าสําหรับ Column1 และ Column2 จะไม่สามารถเปลี่ยนแปลงได้หากไม่มีเหตุการณ์ Update บนรายการ

ใช่ คอลัมน์จากการคํานวณจะคํานวณใหม่เมื่อรายการถูกอัปเดต (หรือถูกสร้างขึ้น) เท่านั้น เนื่องจากคอลัมน์จะถือว่าข้อมูลที่คุณกําลังคํานวณอยู่ในข้อมูลนั้น ซึ่งจะสร้างปัญหาขึ้นเมื่อคุณกําลังพยายามใช้บางสิ่งที่เปลี่ยนแปลงโดยไม่ขึ้นอยู่กับเขตข้อมูลของรายการ เช่น วันที่ของวันนี้

ตอนนี้ฉันไม่ได้อยู่ในการประชุมที่พวกเขาตัดสินใจว่านี่คือวิธีที่คอลัมน์จากการคํานวณจะทํางานอย่างไรก็ตามถ้าฉันต้องคาดเดาอย่างมีความรู้ฉันจะสันนิษฐานว่าพวกเขาทํางานในลักษณะนี้เพื่อประสิทธิภาพการทํางาน ลองจินตนาการว่าคุณมีรายการหลายพันรายการ ซึ่งแต่ละรายการมีคอลัมน์จากการคํานวณที่ต้องการการอัปเดต "แบบสด" นั่นหมายความว่ากลไกบางอย่าง ซึ่งอาจเป็นงานจับเวลา จะต้องทําซ้ําไปตามแต่ละรายการที่มีคอลัมน์จากการคํานวณนั้นบ่อยๆ และอัปเดตค่าของมัน สิ่งนี้อาจต้องเสียภาษีอย่างมากในแง่ของประสิทธิภาพ เนื่องจากด้วยการปรับใช้ขนาดใหญ่ขึ้น งานนี้อาจทํางานและเปลี่ยนแปลงสิ่งต่างๆ อย่างต่อเนื่อง นั่นเป็นเพียงการคาดเดาของฉัน แต่มันค่อนข้างสมเหตุสมผลถ้าคุณคิดเกี่ยวกับมัน

มีคําแนะนําเกี่ยวกับโซลูชันที่คล้ายกันซึ่งเกี่ยวข้องกับการหลอกให้ SharePoint ยอมรับค่า วันนี้ โดยการสร้างคอลัมน์ชื่อ วันนี้ ก่อน แล้วเพิ่มลงในสูตรของคุณ แล้วลบออก ทั้งหมดนี้ดีและดี แต่โปรดจําสิ่งที่ฉันพูดเมื่อคอลัมน์จากการคํานวณมีการอัปเดต ค่านี้จะเปลี่ยนแปลงเมื่อข้อมูลมีการอัปเดตเท่านั้น ซึ่งหมายความว่าค่าของคุณจะไม่ถูกต้องในไม่ช้า โดยเฉพาะในกรณีของการคํานวณวัน

ฉันเคยเห็นคนอื่นใช้ JavaScript ที่ชาญฉลาดเพื่อเขียนค่าลงในหน้า สิ่งนี้จะได้ผลเช่นกัน แต่ฉันค่อนข้างต่อต้านสคริปต์ลูกค้าอย่างเด็ดขาดเมื่อสามารถหลีกเลี่ยงได้

การดําเนินการ:

แล้วจะทําอย่างไร? คอลัมน์จากการคํานวณไม่เหมาะกับฟังก์ชันที่เรียกว่า "เปลี่ยนแปลงง่าย" เช่น วันนี้ เป็นไปได้ที่เราสามารถพัฒนารหัสที่กําหนดเองเพื่อดูแลสิ่งนี้ให้กับเรา เช่น คอลัมน์จากการคํานวณ งานจับเวลา หรือกระบวนการตามกําหนดเวลาที่มาพร้อมและอัปเดตทุกรายการที่ต้องการการคํานวณนี้ นั่นนําเรากลับไปที่ปัญหาของประสิทธิภาพที่ฉันกล่าวถึงในย่อหน้าที่แล้ว และยังเป็นวิธีแก้ปัญหาที่เปราะบางซึ่งจะเฉพาะเจาะจงอย่างมากสําหรับไซต์ / รายการ / คอลัมน์ที่เป็นปัญหา นอกเหนือจากข้อกังวลสองข้อนี้แล้วคุณจะต้องไปหาผู้ชายเนิร์ดเช่นตัวฉันเองที่รู้วิธีเขียนโค้ดและโน้มน้าวให้เขาพัฒนาโซลูชันนี้ให้คุณ แต่มีวิธีที่ง่ายกว่านี้!

ถ้าคุณมีสิทธิ์ในการสร้างเขตข้อมูลและแก้ไขหน้าบนไซต์ของคุณ และมีความรู้เกี่ยวกับ XSLT และสร้างมุมมอง คุณสามารถรวมเทมเพลต XSL ที่สามารถรวมไว้ในมุมมองรายการได้ และจะคํานวณค่าของคุณอย่างละเอียดทุกครั้งที่มีการร้องขอหน้า สถานการณ์นี้ขจัดความกังวลเกี่ยวกับประสิทธิภาพการทํางานของเรา และไม่จําเป็นต้องมีการพัฒนาและปรับใช้รหัสแบบกําหนดเองผ่านโซลูชัน

ยอดเยี่ยม แล้วเราจะทําอย่างไร?

  1. สร้างหรือเลือกเขตข้อมูลที่จะทําหน้าที่เป็นแหล่งข้อมูลของเรา ซึ่งต้องเป็นชนิดวันที่
  2. สร้างเขตข้อมูลของเราที่จะทําหน้าที่เป็นพื้นที่ที่สํารองไว้สําหรับค่าที่กําลังคํานวณ
  3. เพิ่มเขตข้อมูลทั้งสองเหล่านี้ลงในชนิดเนื้อหา และเพิ่มชนิดเนื้อหานั้นลงในรายการ
  4. สร้างมุมมองของรายการที่มีทั้งคอลัมน์แหล่งข้อมูลและคอลัมน์พื้นที่ที่สํารองไว้
  5. อัปโหลดเทมเพลต XSL ไปยังไลบรารีสไตล์
  6. ตั้งค่าคุณสมบัติ "ลิงก์ XSL" สําหรับ Web Part สําหรับมุมมองรายการผ่าน UI
  7. สำเร็จ!

ลองสํารวจตัวอย่างกรณีการใช้งานและปฏิบัติตามการใช้งาน ลูกค้าของเราต้องการมุมมองของรายการหลักที่จะบอกพวกเขาว่าข้อมูลในรายการนั้นๆ อยู่ที่สถานะของรายการมานานเท่าใด รายการนี้มีชนิดเนื้อหาไซต์แบบกําหนดเองที่ได้รับจากชนิดข้อมูลและเพิ่มลงในรายการ มีตัวรับเหตุการณ์อยู่แล้วที่บันทึกทุกครั้งที่เขตข้อมูลสถานะในรายการมีการเปลี่ยนแปลงและบันทึกวันที่ดังกล่าวลงในคอลัมน์ที่เรียกว่า "วันที่ที่มีการเปลี่ยนแปลงสถานะ" ไม่จําเป็นต้องเดินสายทั้งหมดนี้และไม่สามารถทําได้กับฟิลด์วันที่ใด ๆ (มันบังเอิญนี่คือการใช้งานของเรา แต่อย่าลังเลที่จะทดลอง) ขั้นต่ําสุดที่คุณจะต้องใช้เขตข้อมูลวันที่ต้นทางและเขตข้อมูลพื้นที่ที่สํารองไว้เพื่อเก็บการคํานวณของคุณ (เพิ่มเติมในย่อหน้าถัดไป) ที่เพิ่มลงในรายการของคุณ แม้ว่าฉันจะแนะนําให้คุณใช้คอลัมน์ไซต์และชนิดเนื้อหาของไซต์ในกรณีที่คุณต้องการนําโซลูชันนี้มาใช้ใหม่ในที่อื่นบนไซต์ของคุณ

ดังนั้น เรามีวันที่ต้นทางของเราที่เราสามารถใช้ในการคํานวณของเรากับวันที่ของวันนี้ ในตอนนี้ คุณสามารถสร้างคอลัมน์ไซต์แบบกําหนดเองเพื่อใช้เป็นคอนเทนเนอร์สําหรับค่าจากการคํานวณของเรา ในกรณีนี้ ผมเลือกที่จะใช้คอลัมน์ที่คํานวณแล้วเนื่องจากไม่สามารถเปลี่ยนแปลงบนฟอร์มรายการใหม่หรือฟอร์มรายการแก้ไขได้ แต่สามารถเลือกเพื่อแสดงในมุมมองได้ เนื่องจากเราไม่ต้องการให้ผู้ใช้ใส่ค่าที่กําหนดเองลงในคอลัมน์นี้ อาจเกิดความสับสนว่าเหตุใดจึงไม่แสดงในมุมมอง ฯลฯ

ตอนนี้เรามีคอลัมน์ไซต์ของเราแล้ว เราสามารถเพิ่มลงในชนิดเนื้อหาที่เราจะใช้ในรายการของเราได้ ต่อไป เราจําเป็นต้องสร้างมุมมองที่จะกําหนดเองด้วย XSLT ของเราในภายหลัง ตรวจสอบให้แน่ใจว่าคุณได้สร้างมุมมองมาตรฐานที่มีคอลัมน์วันที่แหล่งข้อมูลและคอลัมน์จากการคํานวณใหม่ที่จะทําหน้าที่เป็นพื้นที่ที่สํารองไว้สําหรับค่าจากการคํานวณ

ตอนนี้เรามีทุกอย่างที่เราจําเป็นต้องใช้เพื่อสนับสนุนรายงานอายุแบบกําหนดเองของเรา สิ่งที่เหลือคือการสร้างเทมเพลต XSL ของเรา อัปโหลดไปยังไลบรารีสไตล์ของไซต์ และลิงก์ไปยังมุมมองรายการของเรา เทมเพลต XSL ที่เราจะใช้จะมีมาร์กอัปที่สร้างขึ้นโดย SharePoint ปกติสําหรับการสร้างมุมมอง รวมถึงมาร์กอัปแบบกําหนดเองของเราที่ใช้เพื่อแทนที่บางส่วนของสิ่งนี้และคํานวณค่าที่เราต้องการให้เรา

ให้เครดิตเมื่อถึงกําหนดเครดิตเทมเพลต XSL สําหรับทําการคํานวณจริงที่ฉันใช้สําหรับโซลูชันนี้ได้รับการจัดหาให้อย่างมีน้ําใจโดย "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

เมื่อเปิดโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ คุณจะเห็นมาร์กอัป SharePoint XSL ปกติมากมายสําหรับการแสดงมุมมอง ถ้าคุณเลื่อนลงไปที่บรรทัดที่ 357 คุณจะเห็นจุดเริ่มต้นของเทมเพลตแบบกําหนดเองที่ฉันเพิ่มลงในมาร์กอัป อันแรกเป็นเทมเพลต "DateDiff" ตามด้วย "calculate-julian-day" และ "FieldRef_printTableCell_EcbAllowed.Days_x0020_At_x0020_Status" นี่คือเทมเพลตสามแบบของเราที่จะสร้างและแสดงการคํานวณของเราในมุมมองของเรา ถ้าคุณจะใช้ชื่อเขตข้อมูลอื่นนอกเหนือจากที่ได้ระบุไว้ก่อนหน้านี้ในบทความนี้ คุณจะต้องไปที่เทมเพลตเหล่านี้และแทนที่การอ้างอิงใดๆ ที่ไปยังชื่ออื่นๆ โปรดทราบว่า สําหรับขั้นตอนนี้ คุณจะต้องใช้ชื่อภายในของเขตข้อมูล ไม่ใช่ชื่อที่ใช้แสดง

เมื่อคุณพอใจแล้วว่าเทมเพลตพร้อมใช้งานแล้ว ให้นําทางไปยังไลบรารีสไตล์ของคุณและอัปโหลดภายใต้โฟลเดอร์ "XSL Style Sheets" จากนั้นคัดลอกลิงก์ไปยังไฟล์ วิธีนี้จะช่วยให้เราสามารถทําการเปลี่ยนแปลงได้อย่างง่ายดายในภายหลัง หรือเพิ่มลงในส่วนต่างๆ ของเว็บไซต์ได้ตามที่เราต้องการ

ถัดไป ให้ไปที่รายการของคุณแล้วเลือกมุมมองที่คุณสร้างไว้ก่อนหน้าในบทความนี้ จากเมนู "การดําเนินการของไซต์" คลิกที่ "แก้ไขหน้า"

คำสั่ง แก้ไขหน้า บนเมนู การกระทำในไซต์

ค้นหา Web Part สําหรับมุมมองรายการของคุณบนหน้า และเปิดเมนู Web Part โดยการคลิกที่ลูกศรชี้ลงขนาดเล็กที่มุมบนขวา จากเมนูนี้ ให้เลือก "แก้ไข Web Part"

แก้ไขคำสั่ง Web Part บนเมนู Web Part

ซึ่งจะเปิดเมนูของ Web Part ทางด้านขวามือของหน้าต่างเบราว์เซอร์ของคุณ

เมนู Web Part

คลิก + สําหรับส่วน "เบ็ดเตล็ด" และค้นหาคุณสมบัติ "ลิงก์ XSL"

คุณสมบัติลิงก์ XSL บนเมนู Web Part

วางลิงก์ไปยังไฟล์ XSL ในไลบรารีสไตล์ที่คุณคัดลอกไว้ก่อนหน้านี้ (ซึ่งอาจเป็นลิงก์แบบสัมพัทธ์หรือแบบสัมบูรณ์ก็ได้)

ลิงก์ไฟล์ XSL ถูกวางใน

คลิก "ตกลง" เพื่อบันทึกการเปลี่ยนแปลงของคุณ จากนั้นคลิกปุ่ม "หยุดการแก้ไข" บน Ribbon "หน้า" ที่ด้านบนของหน้า

ปุ่ม หยุดการแก้ไข บนแท็บ หน้า

ถ้าทุกอย่างได้รับการกําหนดค่าอย่างถูกต้อง ตอนนี้คุณควรเห็นตัวเลขในคอลัมน์ "Days At Status" ของคุณ

คอลัมน์ Days At Status แสดงตัวเลข

และสุดท้ายนี่คือสิ่งที่จะมีลักษณะอย่างไรกับข้อมูลการทดสอบบางส่วนของวันที่ต่างๆ:

รายงานอายุหนี้แสดงข้อมูลทดสอบ

สรุป:

เท่านี้ก็คือ: วิธีที่ได้รับการจัดรูปแบบดี มีเสถียรภาพ และมีประสิทธิภาพดีขึ้นในการสร้างรายงานแบบอายุใน SharePoint พร้อมด้วยการใช้งานที่ไม่ต้องใช้โค้ด สิ่งนี้มีแอปพลิเคชันที่เป็นไปได้ค่อนข้างน้อยนอกเหนือจากกรณีการใช้งานเดียวที่เราสํารวจที่นี่ สถานการณ์สมมติทั่วไปอีกสถานการณ์หนึ่งสําหรับรายงานชนิดนี้คือการแนบรายงานไปกับรายการงาน เพื่อให้คุณสามารถดูเวลาที่ผ่านมาตั้งแต่สร้างงานขึ้นมาอย่างรวดเร็ว

ขอให้สนุก!

--จัสติน

จัสติน จอยซ์, LANtek

ข้อคิดเห็น

ขั้นตอนที่หายไป
8/10/2555 3:51
ตกลง ฉันทําตามขั้นตอน แต่ต้องมีบางอย่างขาดหายไป - XSL จะรู้ได้อย่างไรว่าจะใช้วันที่ใด หรือเขตข้อมูลใดที่จะเพิ่มวันนับตั้งแต่นั้นมา เกลียดมันเมื่อพลาดขั้นตอน

ไม่มีรหัส ยอมรับแล้ว!
30/8/2555 12:12
ฉันเห็นด้วย - ฉันไม่คิดว่าสิ่งนี้นับเป็น "ไม่มีรหัส" จริงๆ
ที่น่าสนใจคือจากความผิดพลาดของ SharePoint ฉันมีคอลัมน์ที่คํานวณได้โดยใช้วันนี้ ... ไม่แน่ใจว่าอย่างไรหรือทําไมเพราะฉันไม่สามารถทําให้มันทําได้อีก แต่คนหนึ่งก็ยังอยู่ที่นั่นและใช้งานได้

สูตรสําหรับคอลัมน์จากการคํานวณ "Days At Status"
2/5/2555 7:39
Justin - สูตรที่คุณใช้สําหรับคอลัมน์ไซต์จากการคํานวณ (ตัวแทนคอลัมน์) "Days At Status" ของคุณคืออะไร มันเป็น "=today" หรือไม่

SharePoint 2007
2/12/2554 11:29
ขณะนี้ฉันยังไม่ได้พยายามนําโซลูชันนี้ไปใช้กับ SharePoint 2007 อย่างไรก็ตาม ฉันกําลังมองหา ขออภัยที่ไม่มีคุณสมบัติ XslLink ปรากฏบน Web Part ผ่าน UI

โพสต์ที่ยอดเยี่ยม
30/11/2554 9:53
สวัสดี
โพสต์ดี.
ฉันใช้ SharePoint 2007 อยู่
ฉันไม่มีส่วนเบ็ดเตล็ดตามที่ระบุไว้ข้างต้น
คุณมีขั้นตอนสําหรับการกําหนดค่า SP2007 หรือไม่
ขอบคุณ

Re: วิธีแก้ปัญหาแบบไม่มีโค้ด: การแสดงจํานวนวันนับตั้งแต่มีการเปลี่ยนแปลงข้อมูลในรายการ SharePoint ครั้งล่าสุด
11/10/2554 8:24
สวัสดี Chris
การค้นหาที่ยอดเยี่ยม!
ฉันจะดูสิ่งที่คุณโพสต์ด้วยความหวังว่าในภายหลังในวันนี้ และดูว่าฉันสามารถทําให้โซลูชันนี้แข็งแกร่งขึ้นเล็กน้อยได้หรือไม่
ฉันดีใจที่คุณชอบโพสต์นี้ และฉันดีใจมากที่คุณสามารถพบวิธีแก้ปัญหาสําหรับรูปแบบวันที่ของยุโรปได้ :)
-จัสติน

โซลูชันสําหรับรูปแบบวันที่ในยุโรป
11/10/2554 6:45
สวัสดีอีกครั้ง จัสติน
ข้อมูลเพิ่มเติม ฉันพบวิธีแก้ไขปัญหาที่ฉันกล่าวถึงก่อนหน้านี้ในหน้านี้
https://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-format-issue-sharepoint-2010/

รูปแบบวันที่ของยุโรป
7/10/2554 3:59
สวัสดี Justin
นี่เป็นทางออกที่ดีจริงๆ ขอบคุณ และเป็นสิ่งที่ฉันใช้เวลาสองวันที่ผ่านมาเพื่อค้นหา! อย่างไรก็ตามฉันมีปัญหาเล็กน้อยกับมันและฉันหวังว่าคุณจะช่วยฉันได้
ฉันได้เปลี่ยนแปลงโค้ดของคุณเล็กน้อยเพื่อคํานวณจํานวนวันจนกว่าจะมีบางอย่างเกิดขึ้นแทนที่จะเป็นต้นมาโดยการสลับตัวแปรในบรรทัดสุดท้ายของฟังก์ชัน "DateDiff"

<xsl:value-of select="$JulianToday - $JulianStartDate"></xsl:value-of>

อย่างไรก็ตาม ฉันสามารถทําให้มันคํานวณความแตกต่างได้อย่างถูกต้องเพียงครึ่งหนึ่งของเวลาเท่านั้น ตัวอย่างเช่น กับวันที่นี้ (รูปแบบ วว/ดด/ปป)

30/12/2011

การคํานวณถูกต้อง แต่เป็นวันที่นี้ (รูปแบบเดียวกัน)

12/10/2011

โดยจะคํานวณราวกับว่า 10 ธ.ค. 2011 แทนที่จะเป็น 12 ต.ค. 2011
ฉันลองสลับตําแหน่งของค่าวันและเดือนในตัวแปร "JulianStartDate" ดังนี้

<xsl:with-param name="Month" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033, 'yyyyMMdd'),7,2)"/>
<xsl:with-param name="Day" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033, 'yyyyMMdd'),5,2)"/>

และการดําเนินการนี้แก้ไขปัญหาเกี่ยวกับวันที่ที่สอง แต่เปลี่ยนเป็นไม่ถูกต้องสําหรับวันที่แรก!
ฉันยังได้ลองเปลี่ยนแปลงการเรียก FormatDateTime เพื่อใช้ LCID ของยุโรป และการเปลี่ยนแปลงต่างๆ ไปยังพารามิเตอร์สุดท้ายของ FormatDateTime (เช่น ddMMyyyy, MMddyyyy) ด้วยการปรับเปลี่ยนพารามิเตอร์ตําแหน่งสตริงย่อยอย่างเหมาะสมโดยไม่ประสบความสําเร็จ
ฉันยินดีเป็นอย่างยิ่งสําหรับคําแนะนําที่คุณสามารถให้ได้
ขอบคุณ
คริส

No-Code
21/9/2554 4:27
ฉันไม่คิดว่า XSL มีคุณสมบัติเป็นโซลูชัน "ไม่มีโค้ด" เนื่องจากการทําความเข้าใจภาษา XSL ไม่ใช่สําหรับทุกคน นอกจากนั้น : ทางออกที่ดี ขอบคุณ!