ไลบรารีคลาส X++

หมายเหตุ

กลุ่มความสนใจของชุมชนได้ย้ายจาก Yammer ไปยัง Microsoft Viva Engage แล้ว หากต้องการเข้าร่วมชุมชน Viva Engage และเข้าร่วมในการสนทนาล่าสุด ให้กรอก แบบฟอร์ม คําขอการเข้าถึงการเงินและการดําเนินงาน Viva Engage Community และเลือกชุมชนที่คุณต้องการเข้าร่วม

บทความนี้อธิบายถึงไลบรารีของคลาสใน X++

มีคลาสสองชนิด: คลาสแอปพลิเคชันและคลาสระบบ

  • คลาสแอปพลิเคชัน – ใช้คลาสเหล่านี้ใน X++ ภายใต้โหนดคลาสโค้ด>ใน Application Explorer
  • คลาสของระบบ – คลาสเหล่านี้บางครั้งเรียกว่าคลาสเคอร์เนล ซึ่งจะปรากฏขึ้นภายใต้โหนด คลาสเอกสาร > ของระบบ ใน Application Explorer คุณไม่สามารถเข้าถึงรหัสแหล่งที่มาสําหรับคลาสเหล่านี้ได้ สําหรับรายการของคลาสระบบ ให้ดู API, คลาส และการอ้างอิงตาราง

โครงสร้างทั่วไปของคลาสแอปพลิเคชัน

ชนิดบล็อกโค้ดต่อไปนี้เป็นมาตรฐานสําหรับคลาสแอปพลิเคชัน:

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

วิธีการเพิ่มเติมสําหรับคลาสมีชนิดต่อไปนี้:

  • วิธีการอินสแตนซ์
  • วิธีการแบบคงที่
  • วิธีการหลัก

คุณสามารถสร้างวิธีการในสินค้าหลายชนิดได้ ยกตัวอย่างเช่น

  • ชั้นเรียน
  • แผนที่
  • Views
  • ชุดข้อมูล
  • แบบฟอร์ม
  • แบบ สอบ ถาม

การแทนที่คลาสแอพลิเคชันสําหรับคลาสของระบบ

ใช้ คลาสแอปพลิเคชันแทนที่ แทนที่คลาสระบบที่ขยาย

ใน Application Explorer ภายใต้ คลาสเอกสาร > ของระบบ เคอร์เนลหรือคลาสระบบหลายคลาสมีชื่อที่ขึ้นต้นด้วย x ตัวพิมพ์เล็ก คลาสเหล่านี้จะเรียกว่าคลาส x-system ตัวอย่างของคลาสระบบเหล่านี้คือ xApplication และ xVersionControl คลาสเหล่านี้บางส่วนได้รับการขยายโดยคลาสแอปพลิเคชัน ตัวอย่างเช่น คลาสแอปพลิเคชันจะขยายคลาสระบบ xApplication

คลาสที่สืบทอดมาจากคลาส x-system เรียกว่า คลาสแอพลิเคชันที่แทนที่ ใน Application Explorer ภายใต้โหนด คลาส ไอคอนถัดจากคลาสแอปพลิเคชันที่แทนที่แตกต่างจากไอคอนมาตรฐาน

คลาส x-system

คลาสแอปพลิเคชันที่แทนที่บางอย่างจะเชื่อมโยงกับตัวแปรส่วนกลางพิเศษที่แสดงอินสแตนซ์ของคลาส ตัวอย่างเช่น ตัวแปร appl อ้างอิงออบเจ็กต์ที่มีการสร้างอินสแตนซ์ล่วงหน้าจากคลาส แอปพลิเคชัน ประโยชน์ของตัวแปร appl คือว่า ระบบรักษาวัตถุตลอดขอบเขตของเซสชันของคุณ โค้ดของคุณจะมีประสิทธิภาพน้อยกว่าหากใช้ไวยากรณ์ Application() ใหม่ซ้ํา ๆ เพื่อรับอินสแตนซ์ของคลาส แอปพลิเคชัน อย่าใช้คลาสระบบ xApplication ใช้คลาส แอพลิเคชัน ที่แทนที่ แอพลิเคชัน แทน

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

ตารางต่อไปนี้แสดงรายการคลาสระบบ x ที่มีคลาสแอปพลิเคชันตัวแทนที่สอดคล้องกัน ตัวแปรโกลบอลพิเศษจะแสดงสําหรับคลาสเหล่านั้นที่มี

คลาสแอปพลิเคชัน x-system class ตัวแปรส่วนกลาง
Args xArgs ใช้ไม่ได้
ใบคำขอเปิด xApplication appl
ClassFactory xClassFactory classFactory
บริษัท xCompany appl.company
ส่วนกลาง xGlobal ใช้ไม่ได้
รายละเอียด xInfo Infolog
เมนูฟังก์ชัน xMenuFunction ใช้ไม่ได้
รอบเวลา xSession ใช้ไม่ได้
VersionControl xVersionControl versionControl

ตัวอย่างของคลาส x-system

ตัวอย่างต่อไปนี้แสดงไวยากรณ์สําหรับการใช้ตัวแปรพิเศษหลายตัวที่อ้างอิงอินสแตนซ์ของคลาสแอปพลิเคชันการแทนที่

TreeNode treeNode;
Args     args;
FormRun  formRun;

// appl variable
info(appl.buildNo());

// company variable
appl.company().reloadRights();

// infolog variable
treeNode = infolog.findNode("\\forms\\custTable");
info(treeNode.AOTgetProperty("Name"));
// Output is "CustTable".

// classFactory variable
args = new Args(formstr(Batch));
formRun = classFactory.formRunClass(args);
formRun.init();
formRun.run();
formRun.detach();
info("Method is ending. This is a message in the Infolog.");
// Output is "Method is ending. This is a message in the Infolog."

คลาสการประมวลผลชุดงาน

ใช้คลาสโดยใช้ระบบประมวลผลชุดงานและโดยการขยายคลาส RunBase และ RunBaseBatch เมื่อต้องการลบปุ่ม กิจวัตร ออกจากกล่องโต้ตอบ การประมวลผลชุดงาน ให้ใช้วิธีการ Args::p armEnum กําหนดคลาสที่จะรันเป็นวิธีการชุดงานที่ผูกกับเซิร์ฟเวอร์ วิธีการของชุดงานที่ผูกกับเซิร์ฟเวอร์มีความปลอดภัยมากกว่าวิธีการชุดงานที่ไม่ได้ผูกกับเซิร์ฟเวอร์ด้วยเหตุผลต่อไปนี้:

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

เปิดใช้งานคลาสเพื่อรันเป็นวิธีการชุดงานที่ผูกกับเซิร์ฟเวอร์

  1. สร้างคลาสที่ขยายคลาส RunBaseBatch

  2. แทนที่เมธอด RunBaseBatch.runsImpersonated เพื่อส่งคืน ค่า true ดังที่แสดงในตัวอย่างต่อไปนี้

    public boolean runsImpersonated()
    {
        return true;
    }
    
  3. ยืนยันว่าคลาสเรียกใช้เฉพาะ ข้อมูล และวิธีการคลาส ส่วนกลาง ต่อไปนี้เท่านั้น:

    • เพิ่ม
    • Info.copy
    • Info.cut
    • Info.import
    • Info.export
    • Info.line
    • Info.num
    • ส่วนกลาง::ข้อผิดพลาด
    • ส่วนกลาง::ข้อมูล
    • ส่วนกลาง::คําเตือน

    เมธอด Info.line และ Info.num จะสืบทอดมาจากคลาส xInfo

ลบปุ่ม การเกิดซ้ํา ออกจากกล่องโต้ตอบการประมวลผลชุดงาน

เมื่อคุณใช้คลาสโดยใช้ระบบประมวลผลชุดงาน ให้ลบปุ่ม การเกิดซ้ํา โดยการเรียกเมธอด Args.parmEnum และส่งผ่าน NoYes::ใช่ ค่าการแจงนับระบบ การแจงนับระบบ NoYes จะกําหนดว่าปุ่ม การเกิดซ้ํา ถูกลบออกจากกล่องโต้ตอบหรือไม่ ค่าเริ่มต้นคือ NoYes:No

ในตัวอย่างต่อไปนี้ มีการใช้งานคลาส InventTransferMultiShip BatchDialog::เมธอดหลักจะสร้างกล่องโต้ตอบการประมวลผลชุดงาน

static void noRecurrenceButton(Args _args)
{
    Args a;
    InventTransferMultiShip inventTransferMultiShip;
    a = new Args();
    inventTransferMultiShip = InventTransferMultiShip::construct();
    a.caller(inventTransferMultiShip);
    a.parmEnum(NoYes::Yes);
    BatchDialog::main(a);
}

คลาสการจัดการรูปภาพ

ระดับชั้นระบบสองระดับช่วยให้คุณสามารถจัดการกราฟิกและไอคอนได้: รูปภาพและ Imagelist

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

แบบจําลองวัตถุคิวรี

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

ตารางต่อไปนี้อธิบายเกี่ยวกับคลาสในรูปแบบออบเจ็กต์คิวรี

คลาสของระบบ คำอธิบาย
QueryRun คลาสนี้จะเรียกใช้คิวรีและรับข้อมูล
การสอบถาม คลาสนี้จะเก็บคุณสมบัติบางอย่างและมีแหล่งข้อมูลที่เกี่ยวข้องอย่างน้อยหนึ่งรายการ ซึ่งเป็นระดับบนสุดของข้อกําหนดคิวรี
QueryBuildDataSource ระดับชั้นนี้จะกําหนดการเข้าถึงแหล่งข้อมูลเดียวในคิวรี ถ้ามีแหล่งข้อมูลมากกว่าหนึ่งรายการในระดับเดียวกันในคิวรี คิวรีจะสร้างคําสั่ง SQL แยกต่างหากและเรียกใช้ตามลําดับ ถ้าแหล่งข้อมูลหนึ่งเป็นแหล่งข้อมูลรองของแหล่งข้อมูลอื่น คิวรีจะสร้างการรวมระหว่างแหล่งข้อมูลสองแหล่ง
QueryBuildFieldList ระดับชั้นนี้จะกําหนดเขตข้อมูลที่ส่งกลับจากฐานข้อมูล ตามค่าเริ่มต้น รายการเขตข้อมูลเป็นแบบไดนามิก และเขตข้อมูลทั้งหมดจะถูกส่งกลับจากตารางแหล่งข้อมูล แผนที่ หรือมุมมอง แต่ละแหล่งข้อมูลมีออบเจ็กต์ QueryBuildFieldList เดียวเท่านั้น วัตถุนี้มีข้อมูลเกี่ยวกับเขตข้อมูลที่เลือกทั้งหมด คุณสามารถระบุฟังก์ชันการรวม เช่น SUM, COUNT และ AVG บนวัตถุรายการเขตข้อมูล
QueryBuildRange คลาสนี้จะกําหนดชุดย่อยของเรกคอร์ดที่ส่งกลับโดยยึดตามเขตข้อมูลเดียว ช่วงจะถูกแปลเป็นส่วนคําสั่ง WHERE ในคําสั่ง SQL คิวรี ถ้ามีการใช้เขตข้อมูลมากกว่าหนึ่งรายการเพื่อจํากัดคิวรี (ส่วนคําสั่ง WHERE ) แหล่งข้อมูลจะประกอบด้วยช่วงมากกว่าหนึ่งช่วง
QueryBuildDynalink ระดับชั้นนี้ประกอบด้วยข้อมูลเกี่ยวกับความสัมพันธ์ (ข้อจํากัด) ไปยังเรกคอร์ดภายนอก เมื่อเรียกใช้คิวรี ข้อมูลนี้จะถูกแปลงเป็นรายการเพิ่มเติมในคําสั่ง WHERE ของคําสั่ง SQL คิวรี คลาสนี้สามารถมีอยู่บนแหล่งข้อมูลหลักของคิวรีเท่านั้น ฟอร์มใช้ฟังก์ชันเมื่อมีการซิงโครไนซ์แหล่งข้อมูลสองแหล่ง แหล่งข้อมูลย่อยนั้นประกอบด้วยอย่างน้อยหนึ่ง DLL ไปยังแหล่งข้อมูลหลัก ใช้ฟังก์ชันแม้ว่าแหล่งข้อมูลทั้งสองจะอยู่ในฟอร์มที่แตกต่างกันสองฟอร์ม แต่ยังคงซิงโครไนซ์อยู่
QueryBuildLink คลาสนี้ระบุความสัมพันธ์ระหว่างแหล่งข้อมูลสองแหล่งในการรวม คลาสนี้สามารถมีอยู่บนแหล่งข้อมูลลูกได้เท่านั้น

คุณยังสามารถใช้ SysDa API เพื่อคิวรีข้อมูลได้

ภาพรวมของคลาสของระบบ

แหล่งข้อมูลสําหรับคลาสของระบบไม่พร้อมใช้งาน คลาสระบบสามารถมีลักษณะดังต่อไปนี้:

  • วิธีการแบบคงที่ (หรือวิธีการของคลาส)
  • วิธีการแบบไดนามิก
  • คุณสมบัติ – คุณสมบัติเหล่านี้เป็นฟังก์ชันสมาชิกที่ตั้งค่าคุณสมบัติ ตัวอย่างคือ LeftMargin

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

คลาสคอลเลกชัน

คลาสคอลเลกชันช่วยให้คุณสร้างรายการ, ชุด, โครงสร้าง, แผนที่ และอาร์เรย์

คลาสออบเจ็กต์ของแอพลิเคชัน

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

คลาสการรวม

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

  • COM – การเรียกใช้วิธีการบนวัตถุ COM
  • DLL – การเรียกใช้ฟังก์ชัน Microsoft Windows DLL
  • IO – อ่านและเขียนไฟล์ภายนอก
  • ODBCConnection – อินเทอร์เฟซการเชื่อมต่อฐานข้อมูลแบบเปิด (ODBC) กับฐานข้อมูลต่างประเทศ