カスタムスケジューラルールの作成

特定の SyteLine のフォームでは、スケジューラルールのいくつかの位置がユーザー定義として示されています。たとえば、順位設定ルールの位置 24 ~ 39 は、ユーザ定義ルールのために予約されています。ユーザ定義のルールとは、1 つまたは複数のカスタム C++ 関数で書かれたカスタム論理のことです。ユーザ定義ルールを使用すると、標準のルールで扱えない可能性のあるユニークなスケジューリング状況をモデリングできます。

たとえば、以下に示した初期化関数 ucini1 の断片は、順序設定ルール 39 の負荷順位付機能をインストールします。


double myrule39(LOAD*);
void ucini1()
{
 sedfrk(39, myrule39);
 /* Install other user-defined rules here. */
}
double myrule39(LOAD*)
{
 /* Insert your custom logic for myrule39 here. */
}

各ユーザのスケジューラ機能の完全な解説については、当社サポートサイトからダウンロード可能である 『Scheduling Customization Guide』 (スケジューリングカスタマイズガイド)を参照してください。

命名規則、引数、および戻り値

カスタム関数が正しく実行されるためには、それらが適切な引数を受け入れ、ルールの区分に従った正しい値を返す必要があります。これらの関数の名前は、ユーザによる呼び出し可能な標準の関数の 名前 と競合しないようにする必要があります。初期化関数 ucini1 のインストール関数を呼び出すことにより、カスタム関数がスケジューラにアクセスできるようにしてください。これらのルールに関する詳細については、これらのトピックを参照してください。

ユーザコードディレクトリ

スケジューラに対してコンパイルされたユーザコードは、データベース内の全ての 代替案 に適用します。インストール手順により、ユーザコードサポートファイルを格納する USERCODE というサブディレクトリが作成されます。さらにこのサブディレクトリの下に、SQL データベースと同じ名前のサブディレクトリを作成し、ユーザコードソースファイルを格納してください。スケジューラは、このディレクトリでユーザコード DLL ファイル(USER.DLL)を探します。

UNICODE 用の作成

スケジューラでは Unicode を使用して国際文字列の問題をサポートしています。Unicode または MBCS 用に条件付でコンパイルできるコードを作成するには、以下のプログラミングガイドラインに従ってください。

  • リテラル文字列を条件付でコード化して、Unicode にポートするには、_T マクロを使用します。例: psqlda = dboptab (_T("MYBOM"), p_ssgvar->sgctrl.scprtds, DB_FETCH)
  • 文字列を渡す際、関数の引数が文字数による長さを必要とするか、バイトによる長さを必要とするかに注意してください。Unicode 文字列を使用する場合、この違いが重要になります。
  • C ランタイム文字列処理関数のポータブルバージョンを使用してください。関数の一覧および詳細については、Microsoft Visual C/C++ マニュアルの「String Manipulation(文字列操作)」のセクションを参照してください。

    例:

    • strcpy の代わりに _tcscpy
    • strncpy の代わりに _tcsncpy
    • strcmp の代わりに _tcscmp
    • strncmp の代わりに _tcsncmp
    • strcat の代わりに _tcscat
    • strncat の代わりに _tcsncat
    • strchr の代わりに _tcshr
    • sprintf の代わりに _stprintf
  • 文字および文字ポインタには以下のデータタイプを使用してください。
    • TCHAR(char を使用する代わり)
    • LPTSTR または TCHAR *(char* を使用する代わり)
    • LPCTSTR(char* を使用する代わり)

カスタムルールのスケジューラへの統合

カスタムルールを作成したら、それらを標準のシステムにリンクする必要があります。