Share via


เรียกใช้สคริปต์ X++ แบบกำหนดเองที่มีดาวน์ไทม์เป็นศูนย์

คุณลักษณะนี้ช่วยให้คุณสามารถอัปโหลดและเรียกใช้แพคเกจที่สามารถปรับใช้ได้ ซึ่งมีสคริปต์ X++ แบบกำหนดเองโดยไม่ต้องผ่าน Microsoft Dynamics Lifecycle Services (LCS) หรือหยุดระบบของคุณชั่วคราว ดังนั้นคุณจึงสามารถแก้ไขข้อมูลย่อยที่ไม่สอดคล้องกันได้โดยไม่ทําให้ต้องมีการหยุดทำงานใดๆ

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

สำคัญ

คุณลักษณะนี้มีวัตถุประสงค์เพื่อการแก้ไขข้อมูลย่อยที่ไม่สอดคล้องกันเท่านั้น โดยต้องไม่ใช้เพื่อวัตถุประสงค์ต่อไปนี้หรือวัตถุประสงค์อื่นใด:

  • การรวบรวมข้อมูล
  • การเปลี่ยนเค้าร่าง
  • การย้ายข้อมูลหรือกระบวนการที่ใช้เวลาทำงานนานอื่นๆ
  • การแก้ไขข้อมูลที่สามารถแก้ไขได้ด้วยวิธีอื่น เช่น กระบวนการทางธุรกิจปกติ เครื่องมือความสอดคล้องของข้อมูล หรือเครื่องมือระบบบริการตนเองอื่นๆ

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

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

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

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

ตามที่ภาพประกอบต่อไปนี้แสดง ระบบจะให้รายละเอียดเกี่ยวกับวิธีการเรียกใช้แต่ละแพคเกจที่ปรับใช้ใน X++ และเอนทิตี้ที่ได้รับการดำเนินการ

หน้ารายละเอียดสคริปต์

กําหนดหน้าที่ให้กับผู้ใช้เพื่อควบคุมการเข้าถึง

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

  • รักษาสคริปต์ที่กำหนดเอง – หน้าที่นี้ได้รับความสามารถในการอัปโหลด ทดสอบ ตรวจสอบ และเรียกใช้สคริปต์ X++ ที่กำหนดเองในสภาพแวดล้อม (การทดสอบการยอมรับของผู้ใช้ [UAT] และการทำงานจริง)
  • อนุมัติสคริปต์ที่กำหนดเอง – หน้าที่นี้จให้ความสามารถในการอนุมัติสคริปต์ X++ ที่กำหนดเองที่อัปโหลด การอนุมัติเป็นขั้นตอนบังคับก่อนที่จะสามารถทดสอบ ตรวจสอบ ความถูกต้อง และเรียกใช้สคริปต์ใดๆ

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

สร้างแพคเกจที่สามารถปรับใช้ได้

คุณลักษณะนี้ต้องการแพคเกจที่ปรับใช้ได้ปกติซึ่งสามารถสร้างขึ้นใน Visual Studio สำหรับคำแนะนำ โปรดดู สร้างแพคเกจของแบบจำลองที่สามารถปรับใช้ได้

แพคเกจที่ปรับใช้ได้ของคุณต้องมีคลาส X++ ที่เรียกใช้ได้เพียงหนึ่งคลาสเท่านั้น กล่าวอีกอย่างคือ ต้องมีคลาสหนึ่งคลาสที่มีวิธีการที่มีลายเซ็นต่อไปนี้

public static void main(Args _args)

หมายเหตุ

ชื่อของวิธีการหลักต้องเป็นรูปแบบตัวพิมพ์เล็ก

ตัวอย่างโค้ด

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการที่สามารถใช้ในโครงสร้างแพคเกจที่ปรับใช้ได้

class MyScriptClassForIssueXYZ
{
    public static void main(Args _args)
    {
        if (curExt() != 'DAT')
        {
            throw error("This script must run in the DAT company!");
        }

        ttsbegin;

        MyTable myTable;

        update_recordset myTable
            setting myField = 17
            where myTable.myReference == 'xyz';

        if (myTable.RowCount() != 1)
        {
            throw error("Not updating the expected row!");
        }

        info("Success");
  
        ttscommit;
    }

}

แนวทางปฏิบัติที่ดีที่สุด

รายการต่อไปนี้อธิบายแนวทางที่พึงปฏิบัติบางอย่างเพื่อการเขียน การดําเนินการ และการเรียกใช้สคริปต์ที่สำเร็จ รายการไม่ครบถ้วนและควรพิจารณาเฉพาะแนวทางเท่านั้น

  • เขียน ข้อความความสำเร็จที่ตอนท้ายของสคริปต์ ด้วยวิธีนี้ คุณจะสามารถดูว่าสคริปต์เรียกใช้โดยไม่มีข้อยกเว้นหรือไม่
  • เพิ่ม การจัดการที่ชัดแจ้งของขอบเขตธุรกรรม
  • ใช้ ตรรกะทางธุรกิจที่มีอยู่ เช่น วิธีการ update() แต่ ไม่ ข้ามตรรกะทางธุรกิจโดยใช้ doUpdate(), doInsert() และวิธีการ doDelete() วิธีการนี้ช่วยให้มั่นใจว่าข้อมูลที่ขึ้นต่อกันได้รับการจัดการอย่างถูกต้อง และยังจะช่วยลดความเสี่ยงต่อความไม่สอดคล้องกันของข้อมูลได้อย่างมากด้วย
  • ยืนยัน บริบทของบริษัท วิธีการนี้จะแสดงข้อผิดพลาดทั่วไปเมื่อเรียกใช้สคริปต์ ตัวอย่างเช่น เป็นการแสดงให้ทราบว่าสคริปต์ถูกเรียกใช้ในบริษัทที่ไม่ถูกต้องหรือไม่
  • ยืนยัน ว่าจํานวนของเรกคอร์ดที่ได้รับผลกระทบตรงกับความคาดหวังของคุณ วิธีการนี้จะแสดงให้ทราบว่าข้อมูลถูกเปลี่ยนแปลงในระบบโดยไม่ได้คาดในขณะที่จัดเตรียมสคริปต์หรือไม่
  • ใช้ ชื่อคลาสเฉพาะของแต่ละสคริปต์ (ตัวอย่างเช่น โดยรวมถึงการอ้างอิงไปยังรายการงานในชื่อ) วิธีการนี้จะป้องกันปัญหาชื่อใช้ไม่ได้เมื่อคุณอัปโหลดสคริปต์ ถ้าต้องใช้การทำซ้ำใหม่ของสคริปต์ ให้ตรวจสอบให้แน่ใจว่าได้ตั้งชื่อใหม่แล้ว
  • ทดสอบ แต่ละสคริปต์ในสภาพแวดล้อมที่ไม่ใช่สภาพแวดล้อมการทำงานจริงก่อน ทดสอบผลกระทบที่ตั้งใจไว้และเพื่อผลเสียต่อข้อมูลที่เกี่ยวข้องโดยไม่ได้ตั้งใจ ตรวจสอบให้แน่ใจว่ากระบวนการทางธุรกิจทั้งหมดที่อาจได้รับผลกระทบสามารถเสร็จสมบูรณ์เรียบร้อยหลังจากนั้น

อัปโหลดและเรียกใช้แพคเกจที่ปรับใช้ได้

ใช้ขั้นตอนต่อไปนี้เพื่ออัปโหลดและเรียกใช้สคริปต์

  1. ในแอปการเงินและการดำเนินงานของคุณ ให้ไปที่ การดูแลระบบ > งานประจำงวด > ฐานข้อมูล > สคริปต์ที่กำหนดเอง

  2. เลือก อัปโหลด

  3. เลือกแพคเกจที่ปรับใช้ได้ที่คุณสร้างไว้ตามที่อธิบายไว้ก่อนหน้าในบทความนี้ ระบบจะขอให้คุณระบุวัตถุประสงค์ของสคริปต์

  4. ตอนนี้สคริปต์ต้องได้รับอนุมัติโดยผู้ใช้รายอื่นที่ไม่ใช่ผู้ใช้ที่อัปโหลดสคริปต์นั้น ผู้อนุมัติต้องทำตามขั้นตอนเหล่านี้:

    1. ไปที่ การดูแลระบบ > งานประจำงวด > ฐานข้อมูล > สคริปต์ที่กำหนดเอง
    2. เลือกสคริปต์ที่จะอนุมัติ แล้วเลือก รายละเอียด
    3. ในบานหน้าต่างการดำเนินการ บนแท็บ ลำดับงานของกระบวนการ ในกลุ่ม เริ่มต้น ให้เลือก อนุมัติ หรือ ปฏิเสธ ถ้าคุณเลือก อนุมัติ สคริปต์จะถูกทำเครื่องหมายเป็นอนุมัติแล้ว และมีการปลดล็อคสำหรับการทดสอบ ถ้าคุณเลือก ปฏิเสธ สคริปต์จะถูกล็อค ในทั้งสองกรณี เหตุการณ์ดังกล่าวจะถูกบันทึกและสําเนาของสคริปต์จะถูกเก็บรักษาไว้ในระบบ
  5. คุณต้องทดสอบสคริปต์เพื่อให้แน่ใจว่าสคริปต์นั้นมีวัตถุประสงค์เพื่ออะไร ผู้ทดสอบอาจเป็นคนเดียวกับผู้อัปโหลดหรือผู้อนุมัติ หรืออาจเป็นผู้ใช้ที่มีสิทธิ์ที่กำหนด ผู้ทดสอบต้องทำตามขั้นตอนเหล่านี้:

    1. ไปที่ การดูแลระบบ > งานประจำงวด > ฐานข้อมูล > สคริปต์ที่กำหนดเอง

    2. เลือกสคริปต์ที่จะทดสอบ แล้วเลือก รายละเอียด

    3. ในบานหน้าต่างการดำเนินการ บนแท็บ ลำดับงานของกระบวนการ ในกลุ่ม ทดสอบ ให้เลือก ดำเนินการทดสอบ สคริปต์ถูกเรียกใช้ภายในธุรกรรมชั่วคราวที่ระบบจะยกเลิกโดยอัตโนมัติในขณะที่รวบรวมบันทึกต่างๆ และคำสั่ง SQL

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

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

  7. หลังจากเรียกใช้สคริปต์เสร็จสิ้นแล้ว ให้ตรวจสอบผลลัพธ์ และยืนยันว่าสคริปต์ทำงานตามที่คุณตั้งใจไว้ ทำตามขั้นตอนเหล่านี้

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

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

อัปโหลดและเรียกใช้แพคเกจที่ปรับใช้ได้ผ่าน LCS

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

แม้ว่าวิธีการนี้จะมีข้อจํากัดน้อยกว่า แต่วิธีการนี้จะให้การป้องกันข้อผิดพลาดน้อยลง นอกจากนี้ เนื่องจากต้องมีการรีสตาร์ทเซิร์ฟเวอร์ทั้งหมด จึงทําให้เกิดการหยุดทำงานบางอย่าง