แชร์ผ่าน


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

Note

กลุ่มที่น่าสนใจของชุมชนได้ย้ายจาก 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 คลาสนี้จะเรียกใช้คิวรีและรับข้อมูล
Query คลาสนี้จะเก็บคุณสมบัติบางอย่างและมีแหล่งข้อมูลที่เกี่ยวข้องอย่างน้อยหนึ่งรายการ ซึ่งเป็นระดับบนสุดของข้อกําหนดคิวรี
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) กับฐานข้อมูลต่างประเทศ