다음을 통해 공유


X++ 클래스 라이브러리

비고

커뮤니티 관심 그룹은 이제 Yammer에서 Microsoft Viva Engage로 이동했습니다. Viva Engage 커뮤니티에 가입하고 최신 토론에 참여하려면 Finance and Operations Viva Engage Community 양식에 대한 요청 액세스 권한을 작성하고 참여하려는 커뮤니티를 선택합니다.

이 문서에서는 X++의 클래스 라이브러리에 대해 설명합니다.

클래스에는 애플리케이션 클래스와 시스템 클래스의 두 종류가 있습니다.

  • 애플리케이션 클래스 – 이러한 클래스는 X++에서 구현됩니다. 애플리케이션 탐색기의 코드 > 클래스 노드에서 사용할 수 있습니다.
  • 시스템 클래스 – 이러한 클래스를 커널 클래스라고도 합니다. 애플리케이션 탐색기의 시스템 설명서 > 클래스 노드 아래에 나열됩니다. 이러한 클래스의 소스 코드는 사용할 수 없습니다. 시스템 클래스 목록은 API, 클래스 및 테이블 참조를 참조하세요.

애플리케이션 클래스의 일반적인 구조

다음 코드 블록 형식은 애플리케이션 클래스에 대한 표준입니다.

  • 클래스 및 변수 선언: 클래스 선언에는 public, privateextends와 같은 한정자가 포함됩니다.
  • 변수 선언: 클래스에서 생성된 개체의 필드 멤버입니다. 클래스 인스턴스 변수에 워드를 입력하면 IntelliSense에서 멤버 목록을 표시할 수 있습니다.
  • new 메서드: 이 메서드는 클래스의 인스턴스를 만듭니다. 생성자는 키워드를 사용하여 호출할 수 있습니다. 파생 클래스는 super 메서드 참조를 호출하여 생성자의 메서드를 호출할 수 있습니다. 자세한 내용은 X++ 상속을 참조하세요.
  • finalize 메서드: 이 메서드는 클래스의 인스턴스를 완료합니다. 이 메서드는 소멸자 메서드입니다. 그러나 규칙에 의해서만 소멸자입니다. 시스템은 가비지 수집 중에 finalize 메서드를 자동으로 호출하지 않습니다.

클래스에 대한 추가 메서드에는 다음과 같은 형식이 있습니다.

  • 인스턴스 메서드
  • 정적 메서드
  • 기본 메서드

메서드는 여러 종류의 항목에 만들 수 있습니다. 다음은 몇 가지 예입니다.

  • 수업
  • Maps
  • Views
  • 데이터 세트
  • 양식
  • Queries

시스템 클래스에 대한 애플리케이션 클래스 대체

확장되는 시스템 클래스 대신 대체 애플리케이션 클래스를 사용해야 합니다.

애플리케이션 탐색기의 시스템 설명서 > 클래스에서 여러 커널 또는 시스템 클래스에는 소문자 x로 시작하는 이름이 있습니다. 이러한 클래스를 x-system 클래스라고 합니다. 이러한 시스템 클래스의 예로 는 xApplicationxVersionControl이 있습니다. 이러한 클래스 중 일부는 애플리케이션 클래스에 의해 확장됩니다. 예를 들어 Application 클래스는 xApplication 시스템 클래스를 확장합니다.

x 시스템 클래스에서 파생되는 클래스를 대체 애플리케이션 클래스라고 합니다. 애플리케이션 탐색기의 클래스 노드 아래에서 대체 애플리케이션 클래스 옆에 있는 아이콘은 표준 아이콘과 다릅니다.

x-system 클래스

대체 애플리케이션 클래스 중 일부는 클래스의 인스턴스를 나타내는 특수 전역 변수와 연결됩니다. 예를 들어 appl 변수는 Application 클래스에서 미리 인스턴스화된 개체를 참조합니다. appl 변수의 장점은 시스템이 세션 범위 전체에서 개체를 유지 관리한다는 것입니다. 새 Application() 구문을 반복적으로 사용하여 Application 클래스의 인스턴스를 가져오는 경우 코드의 효율성이 떨어집니다. xApplication 시스템 클래스를 사용하면 안 됩니다. 대신 애플리케이션 대체 애플리케이션 클래스를 사용합니다.

Application::checkForNewBatchJobs()라는 표준 구문을 사용하여 Application 클래스의 정적 멤버를 참조할 수 있습니다. 그러나 Application 클래스의 인스턴스 멤버를 참조하려면 해당 클래스의 appl 변수(있는 경우)를 사용해야 합니다. 이 패턴은 대부분의 x 시스템 클래스에 적용됩니다. 세션 대체 애플리케이션 클래스는 세션에 대한 특별한 전역 변수가 없기 때문에 예외입니다.

다음 표에서는 해당 대체 애플리케이션 클래스가 있는 x 시스템 클래스를 나열합니다. 특수 전역 변수는 해당 클래스가 있는 클래스에 대해서도 표시됩니다.

애플리케이션 클래스 x-system 클래스 전역 변수
매개변수(Args) xArgs 해당 없음
Application xApplication appl
ClassFactory xClassFactory classFactory
회사 xCompany appl.company
글로벌 xGlobal 해당 없음
Info xInfo Infolog
MenuFunction xMenuFunction 해당 없음
Session xSession 해당 없음
버전 관리 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."

Batch 처리 클래스

일괄 처리 시스템을 사용하고 RunBase 및 RunBaseBatch 클래스를 확장하여 클래스 를 구현합니다. 일괄 처리 대화 상자에서 되풀이 단추를 제거하려면 Args::p armEnum 메서드를 사용합니다. 서버 바인딩된 일괄 처리 방법으로 실행할 클래스를 지정하는 것이 좋습니다. 서버 바인딩된 일괄 처리 메서드는 다음과 같은 이유로 서버에 바인딩되지 않은 일괄 처리 메서드보다 더 안전합니다.

  • 메서드는 메서드를 제출한 사용자의 사용 권한을 사용하여 실행됩니다.
  • 이 메서드는 특정 InfoGlobal 클래스 메서드만 사용하여 처리 중인 클라이언트와 상호 작용할 수 있습니다. 이 제한은 클라이언트와의 상호 작용을 제한합니다.

클래스를 서버 바인딩된 일괄 처리 메서드로 실행하도록 설정

  1. RunBaseBatch 클래스를 확장하는 클래스를 만듭니다.

  2. 다음 예제와 같이 True 값을 반환하도록 RunBaseBatch.runsImpersonated 메서드를 재정의합니다.

    public boolean runsImpersonated()
    {
        return true;
    }
    
  3. 클래스가 다음 InfoGlobal 클래스 메서드만 호출하는지 확인합니다.

    • add
    • Info.copy
    • Info.cut
    • Info.import
    • Info.export
    • Info.line
    • Info.num
    • Global::error
    • 전역::info
    • Global::warning

    Info.lineInfo.num 메서드는 xInfo 클래스에서 상속됩니다.

일괄 처리 대화 상자에서 되풀이 단추 제거

일괄 처리 시스템을 사용하여 클래스를 구현하는 경우 Args.parmEnum 메서드를 호출하고 NoYes::Yes 시스템 열거형 값을 전달하여 되풀이 단추를 제거할 수 있습니다. NoYes 시스템 열거형은 대화 상자에서 되풀이 단추를 제거할지 여부를 결정합니다. 기본값은 NoYes::No입니다.

다음 예제에서는 InventTransferMultiShip 클래스가 구현됩니다. BatchDialog::main 메서드는 Batch 처리 대화 상자를 만듭니다.

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 – 이 클래스를 사용하면 크기 및 투명도 색과 같은 공통 속성이 있는 이미지 집합을 사용할 수 있습니다. ImageListAppl 애플리케이션 클래스에서 사용되는 이미지 목록을 볼 수 있습니다.

쿼리 개체 모델

쿼리 개체 모델에는 쿼리를 정의하고 실행하는 데 사용되는 클래스가 포함되어 있습니다. 쿼리 개체는 쿼리 데이터 원본, 반환되는 필드, 레코드 범위 및 자식 데이터 원본과의 관계를 정의하는 데 사용됩니다. 쿼리 클래스는 코드에서 동적 쿼리를 만들 때 더 잘 표시되지만 애플리케이션 탐색기에서 정적 쿼리를 만들 때 백그라운드에서 사용됩니다.

다음 표에서는 쿼리 개체 모델의 클래스에 대해 설명합니다.

시스템 클래스 Description
QueryRun 이 클래스는 쿼리를 실행하고 데이터를 가져옵니다.
Query 이 클래스에는 일부 속성이 있으며 하나 이상의 관련 데이터 원본이 있습니다. 쿼리 정의의 최상위 수준입니다.
QueryBuildDataSource 이 클래스는 쿼리의 단일 데이터 원본에 대한 액세스를 정의합니다. 쿼리에서 동일한 수준에 둘 이상의 데이터 원본이 있는 경우 별도의 SQL 문이 생성되고 순차적으로 실행됩니다. 한 데이터 원본이 다른 데이터 원본의 자식인 경우 두 데이터 원본 간에 조인이 만들어집니다.
QueryBuildFieldList 이 클래스는 데이터베이스에서 반환되는 필드를 정의합니다. 기본적으로 필드 목록은 동적이며 모든 필드는 데이터 원본 테이블, 맵 또는 뷰에서 반환됩니다. 각 데이터 원본에는 하나의 QueryBuildFieldList 개체만 있습니다. 이 개체는 선택한 모든 필드에 대한 정보를 포함합니다. 필드 목록 개체에서 SUM, COUNTAVG와 같은 집계 함수를 지정할 수 있습니다.
QueryBuildRange 이 클래스는 단일 필드를 기반으로 반환되는 레코드의 하위 집합을 정의합니다. 범위는 쿼리 SQL 문의 WHERE 절로 변환됩니다. 쿼리(WHERE 절)를 제한하는 데 둘 이상의 필드를 사용하는 경우 데이터 원본에는 둘 이상의 범위가 포함됩니다.
QueryBuildDynalink 이 클래스에는 외부 레코드에 대한 관계(제한 사항)에 대한 정보가 포함되어 있습니다. 쿼리가 실행되면 이 정보는 쿼리 SQL 문의 WHERE 절에 있는 추가 항목으로 변환됩니다. 이 클래스는 쿼리의 부모 데이터 원본에만 존재할 수 있습니다. 폼은 두 데이터 원본이 동기화될 때 이 함수를 사용합니다. 자식 데이터 원본에는 부모 데이터 원본에 대한 하나 이상의 DLL이 포함됩니다. 이 함수는 두 데이터 원본이 서로 다른 두 가지 형식으로 배치되지만 여전히 동기화된 경우에도 사용됩니다.
QueryBuildLink 이 클래스는 조인에서 두 데이터 원본 간의 관계를 지정합니다. 이 클래스는 자식 데이터 원본에만 존재할 수 있습니다.

SysDa API를 사용하여 데이터를 쿼리할 수도 있습니다.

시스템 클래스 개요

시스템 클래스의 원본을 사용할 수 없습니다. 시스템 클래스는 다음과 같은 특성을 가질 수 있습니다.

  • 정적 메서드(또는 클래스 메서드)
  • 동적 메서드
  • 속성 – 이러한 속성은 속성을 설정하는 데 사용되는 멤버 함수입니다. 예를 들어 LeftMargin이 있습니다.

시스템 클래스 메서드는 재정의할 수 없습니다. 시스템 클래스를 사용하여 애플리케이션 개체를 처음부터 디자인하는 것은 아닙니다. 대신 애플리케이션 탐색기에서 기본 기능을 확장하거나 수정하는 데 사용합니다. 예를 들어 기존 보고서에 추가 정보를 동적으로 추가할 수 있습니다. 또는 이전 페이지에서 사용자의 선택에 따라 페이지에서 사용할 수 있는 옵션을 변경할 수 있습니다.

컬렉션 클래스

컬렉션 클래스를 사용하면 목록, 집합, 구조체, 맵 및 배열을 만들 수 있습니다.

애플리케이션 개체 클래스

이러한 시스템 클래스는 애플리케이션 탐색기를 사용하여 애플리케이션을 만들 때마다 활성화되는 함수를 보유합니다. 예를 들어 애플리케이션 탐색기의 디자인 노드에서 양식의 레이아웃을 정의할 때 시스템에서 FormDesign 클래스 사용합니다. 이러한 클래스를 사용하면 애플리케이션 개체를 만들고 수정할 수도 있습니다.

통합 클래스

환경과의 통합은 일반적으로 클래스에 의해 구현됩니다. 다음은 이 범주의 클래스에 대한 몇 가지 예입니다.

  • COM – COM 개체의 메서드 호출입니다.
  • DLL – Microsoft Windows DLL 함수의 호출입니다.
  • IO – 외부 파일을 읽고 씁니다.
  • ODBCConnection – 외부 데이터베이스에 대한 ODBC(Open Database Connectivity) 인터페이스입니다.