次の方法で共有


X++ セッション ランタイム関数

コミュニティの関心グループが Yammer から Microsoft Viva Engage に移行されました。 Viva Engage コミュニティに参加し、最新のディスカッションに参加するには、「 Finance and Operations Viva Engage Community へのアクセスを要求する 」フォームに入力し、参加するコミュニティを選択します。

この記事では、セッション ランタイム関数について説明します。

curExt

現在の会社が使用する拡張機能を取得します。

str curExt()

戻り値

現在の会社の内線電話番号。

static void curExtExample(Args _arg)
{
    str s;
    // Sets s to the extension of the current company.
    s = curExt();
    print "Current extension is " + s;
}

curUserId

現在のユーザーを表す数値以外の ID を取得します。

str curUserId()

戻り値

現在のユーザーを表す数値以外の ID を取得します。

static void curUserIdExample(Args _arg)
{
    str s;
    s = curUserId();
    print "Current user ID is " + s;
}

funcName

現在の関数コンテキストを含む文字列を取得します。

str funcName()

戻り値

このメソッドを実行しているメソッドの名前。

備考

実行がテーブルまたはクラス メンバー内に現在ある場合は、メソッドの名前に、そのテーブルまたはクラスの名前が付けられます。

static void funcNameExample(Args _arg)
{
    print "Current function context is " + funcName();
}

getCurrentPartition

現在のパーティションの短い名前を取得します。

str getCurrentPartition()

戻り値

現在のパーティションの短い名前。

備考

返されるデータ パーティション名の最大の長さは 8 文字です。

次のコード例は、X++ 言語の getCurrentPartition 関数、および関連する関数またはメソッドへの呼び出しおよび出力を示しています。

static public void Main(Args _args)  // X++ method.
{
    int64 iPartition;
    str sPartition;
    SelectableDataArea oSelectableDataArea;  // System ExDT.
    iPartition = getCurrentPartitionRecId();
    sPartition = getcurrentpartition();
    oSelectableDataArea = Global::getCompany( tableNum(BankAccountTable) );
    Global::info( strFmt(
            "getCurrentPartitionRecId =%1 , getCurrentPartition =%2 , getCompany =%3",
            iPartition, sPartition, oSelectableDataArea) );
}
/**** Pasted from Infolog window:
Message_@SYS14327 (03:42:38 pm)
getCurrentPartitionRecId =5637144576 , getCurrentPartition =initial , getCompany =ceu
****/

getCurrentPartitionRecId

現在のパーティションの RecId フィールドを取得します。

int64 getCurrentPartitionRecId()

戻り値

現在のデータ パーティションの RecId フィールド。

備考

getCurrentPartitionRecId 関数に依存するコード例を参照するには、[パーティションのフィルターを直接 Transact-SQL に含める方法] を参照してください。

次のコード例は、X++ 言語の getCurrentPartitionRecId 関数、および関連する関数またはメソッドへの呼び出しおよび出力を示しています。

static public void Main(Args _args)  // X++ method.
{
    int64 iPartition;
    str sPartition;
    SelectableDataArea oSelectableDataArea;  // System ExDT.
    iPartition = getCurrentPartitionRecId();
    sPartition = getcurrentpartition();
    oSelectableDataArea = Global::getCompany( tableNum(BankAccountTable) );
    Global::info( strFmt(
            "getCurrentPartitionRecId =%1 , getCurrentPartition =%2 , getCompany =%3",
            iPartition, sPartition, oSelectableDataArea) );
}
/**** Pasted from Infolog window:
Message_@SYS14327 (03:42:38 pm)
getCurrentPartitionRecId =5637144576 , getCurrentPartition =initial , getCompany =ceu
****/

getPrefix

setPrefix 関数が連続して呼び出された後、現在の実行接頭辞を取得します。

str getPrefix()

戻り値

現在の実行接頭語。

備考

接頭語メカニズムを使用すると、アプリケーションが実行したトランザクションについての正確なエラー メッセージの書き込みがより簡単になります。 情報ログでは階層表示が作成されるため、各エラーの原因を特定するのが容易になります。

static void getPrefixExample(Args _arg)
{
    setPrefix("Prefix");
    setPrefix("Another prefix");
    print getPrefix();
}

sessionId

現在のセッションのセッション番号を取得します。

int sessionId()

戻り値

現在のセッションの数値 ID。

備考

クライアントを起動し、Application Object Server (AOS) に接続するときにセッション番号を割り当てます。 クライアントの有効期間中にこの関数を呼び出すたびに、同じ整数値が返されます。 返された値は、SessionID 拡張データ型と互換性があります。 contains メソッドは、個々のユーザー セッションに関する情報を返します。

static void sessionIdExample(Args _arg)
{
    int session;
    session = sessionId();
    print "This session ID is number " + int2Str(session);
}

prmIsDefault

現在のメソッドの指定されたパラメータに既定値があるかどうかを判定します。

int prmIsDefault(anytype argument)

パラメーター

パラメーター 説明
引数 テストするパラメータ。

戻り値

パラメータの既定値が使用された場合 1、それ以外の場合は、0 (ゼロ)。

static void prmIsDefaultExample(Args _arg)
{
    void fn(boolean b = true, int j = 42)
    {
        if (prmIsDefault(b) == 1)
        {
            print "First parameter is using the default value.";
        }
        else
        {
            print "First parameter is not using the default value.";
        }
    }
    fn();
    fn(false);
}

runAs

別のユーザーのセキュリティ コンテキストで、X++ メソッドを実行する呼び出し元を有効にします。 この関数は、バッチ処理で最もよく使用されます。

container runAs(
    str userId,
    int classId,
    str staticMethodName
    [,
    container params,
    str company,
    str language,
    str partition
    ])

パラメーター

パラメーター 説明
userId 偽装するユーザー。
classId 偽装セッションで呼び出すクラス。
staticMethodName 新しいユーザー コンテキストで呼び出すクラス メソッド。
params メソッドに渡すパラメーター (省略可能)。
会社 偽装セッション用に選択された会社 (オプション)。
言語 偽装セッション用に選択された言語 (オプション)。
パーティション getCurrentPartition 関数によって返されるタイプのパーティション キー。省略可能です。

戻り値

runAs 関数が呼び出すメソッドの戻り値を保持するコンテナー (値が返された場合)。

備考

この関数を使用すると、別のユーザーとしてコードを実行できます。 この機能はセキュリティ上の脅威です。 したがって、この関数は、コード アクセス セキュリティで実行されます。 サーバー上でこの関数を呼び出すには、RunAsPermission クラスからのアクセス許可が必要です。 このアプリケーション プログラミング インターフェイス (API) を使用するたびに、脅威なモデル化とする必要があります。 セキュリティの脆弱性が見つかった場合は、この API への入力を検証します。 デバッガーは、 runAs 関数が呼び出すメソッド内にあるブレークポイントを無視することがあります。 runAs 関数が実行する X++ コードは、Microsoft .NET Framework 共通中間言語 (CIL) として実行する必要があります。 ターゲットの静的メソッドに対して CIL が生成されない場合は、メソッドが見つからないことを示すエラー メッセージが表示されます。 PartitionKey システムの型は、partition パラメーターの正確な型です。 PartitionKey は最大長が 8 文字の文字列です。

次の例では、EventJobDueDate クラスの runDueDateEventsForUser メソッドを呼び出します。 このコードは、ユーザーのセキュリティ コンテキストで実行されます。 新しいクラスのメソッドに適用することによって、このコードを実行します。

server static public void Main(Args _args)
{
    RunAsPermission perm;
    UserId runAsUser;
    SysUserInfo userInfo;
    userInfo = SysUserInfo::find();
    runAsUser = userInfo.Id;
    perm = new RunAsPermission(runAsUser);
    perm.assert();
    runAs(runAsUser, classnum(EventJobDueDate), "runDueDateEventsForUser");
    CodeAccessPermission::revertAssert();
}

setPrefix

現在の実行スコープの接頭語を設定します。

int setPrefix(str _prefix)

パラメーター

パラメーター 説明
_prefix 現在の実行スコープの接頭語。

戻り値

プレフィックスが正常に設定された場合は 0

備考

getPrefix 関数を使用して、実行の完全なプレフィックスを取得します。 スコープが終了すると、プレフィックスは自動的に前のレベルにリセットされます。 プレフィックス メカニズムを使用すると、アプリケーションが実行するトランザクションに関する正確なエラー メッセージを簡単に記述できます。 たとえば、AA メソッドは BB メソッドを呼び出し、各メソッドは setPrefix 機能を呼び出します。 BB メソッドが情報ログに書き込んだメッセージは、階層内で入れ子になって表示されます。 BB メソッドが終了し、コントロールが AA メソッドに戻ると、BB メソッド セットのプレフィックスは後続のメッセージにアタッチされません。

static void setPrefixExample(Args _arg)
{
    int i;
    i = setPrefix("Prefix");
    print i;
}