อัพโหลดอย่างง่ายดายสำหรับแอปพลิเคชันบุคคลที่สาม ขั้นตอนการอัพโหลดข้อมูลเป็น xml การสร้างไฟล์ XML การอัปโหลดอย่างง่ายสำหรับแอปพลิเคชันบุคคลที่สาม 1c อัปโหลดข้อมูล xml ดาวน์โหลด
ผู้เชี่ยวชาญ 1C ทุกคนอาจประสบปัญหาในการถ่ายโอนข้อมูลจากฐานข้อมูลหนึ่งไปยังอีกฐานข้อมูลหนึ่ง ในกรณีที่การกำหนดค่าแตกต่างกัน คุณต้องเขียนกฎการแปลงข้อมูล กฎเหล่านี้สร้างขึ้นในการกำหนดค่า 1C "การแปลงข้อมูล"
นอกจากนี้ยังสามารถถ่ายโอนข้อมูลโดยใช้ . การกำหนดค่า 1C 8.3 จำนวนมากมีฟังก์ชันมาตรฐานสำหรับการตั้งค่าการซิงโครไนซ์ข้อมูลระหว่างการกำหนดค่าต่างๆ และการผสานรวมกับ 1C Document Flow อย่างราบรื่น
แต่เมื่อจำเป็นต้องถ่ายโอนข้อมูลระหว่างการกำหนดค่าที่เหมือนกันทุกประการ คุณสามารถทำให้งานของคุณง่ายขึ้น และใช้การประมวลผลมาตรฐานสำหรับการอัปโหลดและการโหลดผ่าน XML โปรดทราบว่าวิธีการนี้ เช่นเดียวกับการแปลงข้อมูล จะเปรียบเทียบออบเจ็กต์ระหว่างกันโดยใช้ตัวระบุที่ไม่ซ้ำกัน (GUID) ไม่ใช่ตามชื่อ
คุณสามารถดาวน์โหลดการประมวลผลนี้บนดิสก์ ITS หรือใช้ลิงก์:
เป็นสากลและเหมาะสำหรับการกำหนดค่าใดๆ
ลองพิจารณาตัวอย่างการยกเลิกการโหลดไดเรกทอรี "ระบบการตั้งชื่อ" จากฐานข้อมูล 1C 8.3 Accounting 3.0 หนึ่งไปยังอีกฐานข้อมูลหนึ่ง ข้อกำหนดเบื้องต้นจะถูกเลือกโดยผู้ปกครอง (กลุ่ม) “งานไม้”
การอัปโหลดข้อมูลจาก 1C ไปยัง XML
ไปที่ฐานข้อมูลที่จะดาวน์โหลดข้อมูล (ที่มา) อย่าลืมตรวจสอบโดยคำนึงถึงเงื่อนไขที่เป็นไปได้ทั้งหมดเพื่อหลีกเลี่ยงผลที่ไม่พึงประสงค์
เปิดการประมวลผลการอัปโหลดและดาวน์โหลดข้อมูล XML (Ctrl+O)
เราสนใจแท็บ "อัปโหลด" ก่อนอื่น ให้ระบุชื่อไฟล์ที่จะอัปโหลดข้อมูลและเส้นทางสำหรับการบันทึก ในกรณีนี้ ข้อมูลจะถูกอัปโหลด “ไปยังไฟล์บนเซิร์ฟเวอร์”
ในส่วนหัวของการประมวลผล คุณสามารถกำหนดระยะเวลาที่จะดำเนินการเลือกได้ นอกจากนี้ สำหรับการลงทะเบียนเป็นระยะ คุณสามารถระบุวิธีการใช้การเลือกตามงวดได้ หากจำเป็นต้องอัปโหลดการเคลื่อนไหวพร้อมกับเอกสาร จะมีการตั้งค่าสถานะที่เกี่ยวข้อง ในกรณีนี้ เราโอเวอร์โหลดไดเร็กทอรี ดังนั้นจึงไม่จำเป็นต้องกำหนดค่าใดๆ ในส่วนหัว
มาดูการเลือกข้อมูลสำหรับการอัปโหลดกันดีกว่า ในส่วนตารางของแบบฟอร์มการประมวลผล ให้เลือกกล่องกาเครื่องหมายสำหรับออบเจ็กต์การกำหนดค่าที่คุณต้องการถ่ายโอน
คอลัมน์ "ยกเลิกการโหลดหากจำเป็น" หมายความว่าจำเป็นต้องโอเวอร์โหลดวัตถุนี้หรือไม่ หากอ้างอิงโดยแอตทริบิวต์ของไดเร็กทอรีที่เรากำลังโอเวอร์โหลด ตัวอย่างเช่น ตำแหน่งของรายการที่คุณกำลังโหลดมีหน่วยการวัดที่ไม่ได้อยู่ในฐานข้อมูลเป้าหมาย หากเลือกธงในคอลัมน์ "อัปโหลดหากจำเป็น" ตรงข้ามกับหนังสืออ้างอิงพร้อมหน่วยการวัด ตำแหน่งใหม่จะถูกสร้างขึ้น มิฉะนั้นค่าของแอตทริบิวต์จะเป็น “<Объект не найден>" และตัวระบุเฉพาะของมัน
ในกรณีธรรมดาที่ไม่มีการเลือก การตั้งค่ารายการโอเวอร์โหลดจะมีลักษณะเช่นนี้
ในตัวอย่างนี้ คุณต้องเลือกเฉพาะรายการที่อยู่ในโฟลเดอร์ "งานไม้"
การประมวลผลที่คล้ายกันสำหรับ 8.2 ช่วยให้คุณสามารถตั้งค่าการเลือกสำหรับออบเจ็กต์การกำหนดค่าแต่ละรายการในรูปแบบที่สะดวก น่าเสียดายที่ใน 8.3 ไม่มีฟังก์ชันดังกล่าว ทางออกหนึ่งในสถานการณ์นี้คือการเลือกรายการที่จำเป็นในแท็บ "วัตถุเพิ่มเติมสำหรับการขนถ่าย"
คุณสามารถเพิ่มออบเจ็กต์ได้ที่นี่ด้วยตนเอง (ปุ่ม “เพิ่ม”) หรือตามคำขอ (“เพิ่มตามคำขอ...”) หากมีจำนวนมากควรใช้ตัวเลือกที่สอง
ในกรณีนี้คำขอจะเป็นดังนี้ กรอกพารามิเตอร์ กรอกคำขอหลังจากตรวจสอบข้อมูลแล้วคลิกปุ่ม "เลือกผลลัพธ์"
หลังจากที่คุณระบุออบเจ็กต์ที่จำเป็นทั้งหมดและองค์ประกอบเพิ่มเติมสำหรับการอัปโหลดแล้ว ให้คลิกที่ปุ่ม "อัปโหลดข้อมูล" พวกเขาจะจบลงในไฟล์ XML ชื่อและเส้นทางที่คุณระบุไว้ก่อนหน้านี้ ผลลัพธ์ของการดำเนินการนี้จะปรากฏในข้อความ
ในตัวอย่างนี้ จำเป็นต้องขนถ่ายเพียง 3 ตำแหน่ง แต่ห้าตำแหน่งถูกขนถ่าย เนื่องจากธงถูกตั้งค่าไว้ตรงข้ามไดเรกทอรี "ระบบการตั้งชื่อ" ในคอลัมน์ "อัปโหลดหากจำเป็น" นอกจากตำแหน่งที่จำเป็นแล้ว พ่อแม่ของพวกเขายังมีงานล้นมืออีกด้วย
กำลังโหลดไดเรกทอรีจาก XML
หลังจากดาวน์โหลดข้อมูลจากการกำหนดค่าต้นทางลงในไฟล์ XML สำเร็จแล้ว ให้เปิดฐานข้อมูลปลายทาง โครงสร้างของวัตถุและรายละเอียดต้องตรงกัน ในกรณีนี้ การโอนจะดำเนินการระหว่างสองการกำหนดค่ามาตรฐาน 1C: การบัญชี 3.0
เปิดการประมวลผลในฐานข้อมูลตัวรับ การประมวลผลนี้ใช้สำหรับการอัปโหลดและการโหลดข้อมูล ไปที่แท็บ "ดาวน์โหลด" และระบุเส้นทางไปยังไฟล์ XML ที่เคยดาวน์โหลดข้อมูลไปก่อนหน้านี้ หลังจากนั้นคลิกที่ปุ่ม "ดาวน์โหลดข้อมูล"
ผลการดาวน์โหลดจะแสดงเป็นข้อความ ในกรณีของเรา ทุกอย่างเป็นไปด้วยดี
ไดเร็กทอรี "Nomenclature" ในฐานข้อมูลที่ได้รับไม่ได้ถูกกรอก ตอนนี้มีห้าองค์ประกอบ: ตำแหน่งระบบการตั้งชื่อสามตำแหน่งและสองกลุ่ม
ในองค์กร การบัญชีสามารถรักษาได้ไม่เพียงแต่ในโซลูชันบนแพลตฟอร์ม 1C:Enterprise แต่ยังอยู่ในระบบซอฟต์แวร์อื่น ๆ (Galaktika, Parus, SAP ฯลฯ ) สิ่งนี้ทำให้เกิดความท้าทายในการรวมสองแอปพลิเคชันเข้าด้วยกัน
ตัวอย่างเช่น แอปพลิเคชันบางตัว (เรียกว่า "X") จำเป็นต้องอ่านรายการเอกสารการกำหนดค่า เราจะไม่พูดถึงประโยชน์เชิงปฏิบัติของการแก้ปัญหาดังกล่าว ฉันจะทราบเพียงว่าวิธีที่สะดวกและเป็นสากลที่สุดในสถานการณ์เช่นนี้คือการอัปโหลดรายการเอกสารในรูปแบบ XML
การแลกเปลี่ยนโดยใช้รูปแบบนี้เป็นสากลเนื่องจากแอปพลิเคชันส่วนใหญ่สามารถทำงานได้ มาดูกันว่าคุณสามารถอัปโหลดรายการเอกสารการกำหนดค่าไปยังไฟล์ XML จาก 1C:Enterprise ได้อย่างไร
อัปโหลดไปยัง XML
เอาล่ะ เรามาดูประเด็นหลักกันดีกว่า เราจำเป็นต้องสำรวจรายการข้อมูลเมตาของเอกสารและสร้างรายการในไฟล์ XML ภาพหน้าจอต่อไปนี้แสดงอัลกอริทึมสำหรับการสร้างไฟล์ XML:
ฟังก์ชัน CreateXML() ส่งออก // รับชื่อของไฟล์ชั่วคราวเส้นทาง = GetTemporaryFileName() ; // เริ่มต้นคลาส "XML Record"รายการ = รายการใหม่ XML; // เปิดไฟล์ชั่วคราวเพื่อเขียน- 8 " ) ; // เขียนการประกาศไฟล์ XMLบันทึก. WriteDeclarationXML() ; // บันทึก. เขียนองค์ประกอบStart(" เอกสารการกำหนดค่า" ) ; // องค์ประกอบแรก // แอตทริบิวต์ขององค์ประกอบแรกพร้อมวันที่สร้างไฟล์บันทึก. WriteAttribute(" สร้าง ", รูปแบบ (CurrentDate(), " DF = ปปปป-MM- ddThh:mm:ss; ดีแอลเอฟ= DT" ) ) ; // เขียนองค์ประกอบสำหรับเอกสารการกำหนดค่าแต่ละรายการ เราใส่ชื่อของเอกสารในข้อความสำหรับเอกสารแต่ละฉบับจากข้อมูลเมตา เอกสารบันทึกวงจร WriteElementStart("เอกสาร"); บันทึก. WriteText(ชื่อเอกสาร) ; บันทึก. WriteEndElement() ; เอ็นด์ไซเคิล ; // เขียนองค์ประกอบแรกให้เสร็จสิ้นบันทึก. WriteEndElement() ; บันทึก. ปิด(); //ปิดไฟล์ // รับข้อมูลไบนารี่ของไฟล์และนำไปไว้ในที่เก็บข้อมูลชั่วคราว BinaryData = BinaryData ใหม่ (เส้นทาง) ; ที่อยู่ = PlaceInTemporaryStorage (BinaryData, UniqueIdentifier ใหม่); ที่อยู่ผู้ส่งกลับ; // คืนที่อยู่ของไฟล์ไปยังที่เก็บข้อมูล EndFunctionแต่ละองค์ประกอบที่สร้างขึ้นจะต้องเสร็จสมบูรณ์อย่างถูกต้อง หลังจากดำเนินการ “WriteStartofElement()” แล้ว จะต้องดำเนินการเมธอด “WriteEndElement()” มิฉะนั้นโครงสร้างของไฟล์ XML จะไม่ถูกต้อง
เทมเพลตทั่วไปสำหรับการสร้างไฟล์ XML มีลำดับดังต่อไปนี้:
// 1. เริ่มต้นคลาส "XML Record"รายการ = รายการใหม่ XML; - 2. เปิดไฟล์ชั่วคราวเพื่อบันทึกบันทึก. OpenFile(เส้นทาง, " UTF - 8 " ) ; // 3. เขียนการประกาศไฟล์ XMLบันทึก. WriteDeclarationXML() ; - 4. ++ เขียนเนื้อหาของไฟล์ XMLบันทึก. WriteElementStart("XMLElement"); บันทึก. WriteEndElement() ; // -- เขียนเนื้อหาของไฟล์ XML // 5. ปิดไฟล์บันทึก. ปิด();ห้าขั้นตอนนี้จะสร้างไฟล์ XML เกือบทุกไฟล์
ในตัวอย่างของเรา ไฟล์ที่สร้างขึ้นจะถูกแปลงเป็นข้อมูลไบนารีและส่งคืนไปยังตำแหน่งที่เรียกใช้ฟังก์ชัน CreateXML ไฟล์นี้สามารถเขียนไปยังระบบไฟล์ได้
คุณสามารถดูตัวอย่างไฟล์ที่อัปโหลดได้ในภาพหน้าจอด้านบน
แอปพลิเคชันบุคคลที่สาม
ตามตัวอย่าง ฉันสร้างแอปพลิเคชันใน .NET Framework เพื่อสาธิตการอ่านไฟล์ XML ในแอปพลิเคชันบุคคลที่สาม
โปรแกรมอ่านไฟล์ที่สร้างขึ้นและแสดงเอกสารในรูปแบบของรายการ:
คุณสามารถลองด้วยตัวเองโดยสามารถดาวน์โหลดแอปพลิเคชันได้โดยใช้ลิงก์ท้ายบทความ
ความเก่งกาจ
รูปแบบ XML ใช้ในการกำหนดค่าส่วนใหญ่สำหรับการแลกเปลี่ยนข้อมูลระหว่างโซลูชันแอปพลิเคชันบนแพลตฟอร์ม 1C:Enterprise วิธีการสื่อสารที่ใช้กันทั่วไปอีกวิธีหนึ่งคือผ่านการเชื่อมต่อ COM XML ช่วยให้คุณสามารถแลกเปลี่ยนกับแอปพลิเคชันได้เกือบทุกตัวซึ่งเป็นสาเหตุที่สมควรเรียกว่าเป็นสากล
ไฟล์สำหรับดาวน์โหลด:
แอปพลิเคชั่นอ่านไฟล์ XML
กำลังประมวลผลการสร้างไฟล์ XML
โหมดการทำงาน
การประมวลผล UploadLoadDataXML82 ใช้โหมดการทำงาน 2 โหมด: การอัปโหลด (การสร้างไฟล์อัพโหลดของข้อมูลที่ผู้ใช้ระบุ) และการโหลด (การอ่านไฟล์อัพโหลดที่สร้างโดยโหมดที่มีชื่อเดียวกันและการเขียนข้อมูลที่มีอยู่ในนั้น) โหมดนี้ตั้งค่าได้โดยการเลือกในช่องโหมด
ก่อนที่จะเริ่มโหมดใดโหมดหนึ่ง (คลิกปุ่มเรียกใช้) คุณต้องระบุชื่อของไฟล์อัปโหลดโดยป้อนด้วยตนเองในช่อง "ชื่อไฟล์" หรือใช้ปุ่มเพื่อเลือกฟิลด์นี้และกล่องโต้ตอบการเลือกไฟล์มาตรฐาน .
ในโหมดดาวน์โหลด คุณสามารถแก้ไขการใช้ผลรวมเมื่อเขียนรีจิสเตอร์ ซึ่งอาจส่งผลต่อความเร็วในการดาวน์โหลด ปุ่ม "ปิดใช้งานผลรวม" และ "เปิดใช้งานผลรวม" จะใช้งานได้เมื่อตั้งค่าสถานะ "เปิดใช้งานความสามารถในการแก้ไขการใช้ผลรวมขณะโหลดข้อมูล" และใช้เพื่อควบคุมโหมดการใช้ผลรวมด้วยตนเองเมื่อโหลดข้อมูล ** เงื่อนไขการบังคับใช้การประมวลผล **
การประมวลผลสามารถใช้ได้เฉพาะในกรณีที่ฐานข้อมูลที่อัพโหลดข้อมูลและที่โหลดข้อมูลนั้นเป็นเนื้อเดียวกัน (การกำหนดค่าเหมือนกัน ข้อมูลอาจแตกต่างกัน) หรือออบเจ็กต์ที่อัพโหลดทั้งหมดเกือบจะเหมือนกันทั้งหมดใน องค์ประกอบและประเภทของรายละเอียดและส่วนตาราง คุณสมบัติของออบเจ็กต์เมตาดาต้า "ชั้นนำ" เป็นต้น ควรสังเกตว่าเนื่องจากข้อจำกัดเหล่านี้ การประมวลผลจึงมีจุดประสงค์หลักเพื่อการแลกเปลี่ยนระหว่าง IS ที่เป็นเนื้อเดียวกัน
รูปแบบไฟล์อัพโหลดแตกต่างจากรูปแบบไฟล์ที่สร้างขึ้นเมื่ออัพโหลดตามแผนการแลกเปลี่ยนในส่วนหัว ในการอัปโหลดข้อมูล (องค์ประกอบไดเร็กทอรี ชุดบันทึกการลงทะเบียน ฯลฯ) การประมวลผลจะใช้กลไกการทำให้เป็นอนุกรม XML เดียวกันกับการอัปโหลดตามแผนการแลกเปลี่ยน ในส่วนนี้ รูปแบบไฟล์จะเหมือนกัน
การกำหนดองค์ประกอบของการขนถ่าย
การประมวลผลช่วยให้สามารถอัปโหลดข้อมูลฐานข้อมูลทั้งแบบเต็มและบางส่วนไปยังไฟล์ได้ องค์ประกอบของข้อมูลที่อัพโหลดได้รับการกำหนดค่าในกล่องโต้ตอบโดยทำเครื่องหมายที่กล่องในคอลัมน์ของแผนผังที่แสดงออบเจ็กต์ข้อมูลเมตาที่สามารถอัพโหลดข้อมูลได้ คอลัมน์เพิ่มเติมของช่องทำเครื่องหมาย "หากจำเป็น" จะกำหนดความจำเป็นในการยกเลิกการโหลดออบเจ็กต์ประเภทนี้ "โดยการอ้างอิง" นั่นคือหากทำเครื่องหมายที่ช่องทำเครื่องหมายในคอลัมน์ "หากจำเป็น" เท่านั้น ข้อมูลสำหรับออบเจ็กต์ดังกล่าวจะไม่ถูกดาวน์โหลดทั้งหมด แต่เฉพาะในขอบเขตที่จำเป็นเพื่อรักษาความสมบูรณ์ของการอ้างอิงในฐานข้อมูลที่จะโหลดการดาวน์โหลด ไฟล์.
เมื่อเปิดแบบฟอร์ม การประมวลผลจะตั้งค่าสัญญาณของการขนถ่ายโดยอ้างอิงกับออบเจ็กต์ทั้งหมด ซึ่งรับประกันความสมบูรณ์ในการอ้างอิงของแฟรกเมนต์ที่ไม่ได้โหลดของฐานข้อมูล
เมื่อคุณคลิกที่ปุ่ม “ตรวจหาออบเจ็กต์ที่ดาวน์โหลดด้วยลิงก์” การประมวลผลจะวิเคราะห์ว่าลิงก์ข้อมูลใดที่อาจมีอยู่ในออบเจ็กต์ที่มีชุดแฟล็กการดาวน์โหลดแบบเต็ม และเติมลงในคอลัมน์แฟล็กที่ระบุความจำเป็นในการดาวน์โหลดโดยการอ้างอิงโดยอัตโนมัติ หากออบเจ็กต์มีการตั้งค่าสถานะการยกเลิกการโหลดแบบเต็มอยู่แล้ว การยกเลิกการโหลดด้วยแฟล็กอ้างอิงจะไม่ถูกตั้งค่า
แอปพลิเคชันที่เป็นไปได้
การใช้การประมวลผลนี้เป็นไปได้ เช่น เพื่อสร้างสำเนาสำรองทั้งหมดหรือบางส่วน แลกเปลี่ยนข้อมูลระหว่างฐานข้อมูล และยังเป็นเครื่องมือเสริมเมื่อกู้คืนฐานข้อมูลที่มีปัญหา
2018-11-15T19:32:35+00:00การประมวลผลแบบสากล "การอัปโหลดและการโหลดข้อมูล XML" จะดำเนินการขนถ่ายข้อมูลฐานข้อมูลทั้งหมดหรือบางส่วนลงในไฟล์ในรูปแบบ XML ต่อจากนั้น ไฟล์นี้สามารถโหลดลงในฐานข้อมูลได้โดยใช้การประมวลผลเดียวกัน รูปแบบไฟล์อัพโหลดแตกต่างจากรูปแบบไฟล์ที่สร้างขึ้นเมื่ออัพโหลดตามแผนการแลกเปลี่ยนในส่วนหัว
การประมวลผลสามารถใช้ได้เฉพาะในกรณีที่ฐานข้อมูลที่อัพโหลดข้อมูลและที่โหลดข้อมูลนั้นเป็นเนื้อเดียวกัน (การกำหนดค่าเหมือนกัน ข้อมูลอาจแตกต่างกัน) หรือออบเจ็กต์ที่อัพโหลดทั้งหมดเกือบจะเหมือนกันทั้งหมดใน องค์ประกอบและประเภทของรายละเอียดและส่วนของตาราง คุณสมบัติของออบเจ็กต์เมตาดาต้า "ชั้นนำ" และอื่นๆ
การใช้การประมวลผลนี้เป็นไปได้ เช่น เพื่อสร้างสำเนาสำรองทั้งหมดหรือบางส่วน แลกเปลี่ยนข้อมูลระหว่างฐานข้อมูล และยังเป็นเครื่องมือเสริมเมื่อกู้คืนฐานข้อมูลข้อมูลที่ผิดพลาด
การประมวลผลรองรับการอัพโหลดข้อมูลโดยสามารถระบุการเลือกตามช่วงเวลาได้ นำไปใช้ยังคือการตรวจสอบวัตถุว่ามีอักขระที่ไม่ถูกต้องเมื่อแลกเปลี่ยนผ่าน XML
ขอแสดงความนับถือ (ครูและนักพัฒนา)
2018-11-15T19:32:35+00:00การประมวลผลแบบสากล "การอัปโหลดและการโหลดข้อมูล XML" จะดำเนินการขนถ่ายข้อมูลฐานข้อมูลทั้งหมดหรือบางส่วนลงในไฟล์ในรูปแบบ XML ต่อจากนั้น ไฟล์นี้สามารถโหลดลงในฐานข้อมูลได้โดยใช้การประมวลผลเดียวกัน รูปแบบไฟล์อัพโหลดแตกต่างจากรูปแบบไฟล์ที่สร้างขึ้นเมื่ออัพโหลดตามแผนการแลกเปลี่ยนในส่วนหัว
การประมวลผลสามารถใช้ได้เฉพาะในกรณีที่ฐานข้อมูลที่อัพโหลดข้อมูลและที่โหลดข้อมูลนั้นเป็นเนื้อเดียวกัน (การกำหนดค่าเหมือนกัน ข้อมูลอาจแตกต่างกัน) หรือออบเจ็กต์ที่อัพโหลดทั้งหมดเกือบจะเหมือนกันทั้งหมดใน องค์ประกอบและประเภทของรายละเอียดและส่วนของตาราง คุณสมบัติของออบเจ็กต์เมตาดาต้า "ชั้นนำ" และอื่นๆ
การใช้การประมวลผลนี้เป็นไปได้ เช่น เพื่อสร้างสำเนาสำรองทั้งหมดหรือบางส่วน แลกเปลี่ยนข้อมูลระหว่างฐานข้อมูล และยังเป็นเครื่องมือเสริมเมื่อกู้คืนฐานข้อมูลข้อมูลที่ผิดพลาด
การประมวลผลรองรับการอัพโหลดข้อมูลโดยสามารถระบุการเลือกตามช่วงเวลาได้ นำไปใช้ยังคือการตรวจสอบวัตถุว่ามีอักขระที่ไม่ถูกต้องเมื่อแลกเปลี่ยนผ่าน XML
ขอแสดงความนับถือ (ครูและนักพัฒนา)