カレンダ更新API(Mp_SetCalendar3)について説明します。
記述形式
int Mp_SetCalendar3 (char *APL_name, |
機能説明
Mp_SetCalendar3関数は、カレンダ情報の更新(指定したカレンダが存在しない場合は、新規登録として扱う)を行います。第何週目の何曜日といった、年ごとに日付が変動する休日、振替休日の情報、およびジョブネットへの反映開始日も更新できます。
SYSTEM_CALENDARについては、更新できません。
反映開始日を指定しない場合は、すべての日付が反映対象となります。
また、過去の日付は、設定できません。
パラメタの説明
APL_name
要求元アプリケーション名(64バイト以内)の格納領域アドレスを指定します。
終わりはNULLを指定してください。“Mp_”および“_CAL_”の文字列で始まる名前は、使用しないでください。
cal_name
更新するカレンダ名(24バイト以内)の格納領域アドレスを指定します。終わりはNULLを指定してください。
cal_dat3
カレンダ更新情報構造体(CALENDAR_WDAT3)のアドレスを指定します。
復帰値
復帰値 | 意 味 | 対 処 |
---|---|---|
0 | 正常終了しました。 | - |
-5 | SYSTEM_CALENDARが指定されました。 | SYSTEM_CALENDAR以外を指定してください。 |
-6 | システム管理者(Administratorsグループに属するユーザまたはスーパーユーザ)ではありません。 | システム管理者(Administratorsグループに属するユーザまたはスーパーユーザ)で実行してください。 |
-8 | カレンダ情報に誤りがあります。 | 指定したカレンダ情報(カレンダ更新情報構造体(CALENDAR_WDAT3))を見直してください。 |
-10 | カレンダサービス/カレンダデーモンが動作していません。 | カレンダサービス/カレンダデーモンを起動してください。 |
-11 | メモリ不足です。 | 以下の方法などで、使用できるメモリを増やしてください。 |
-15 | カレンダ名に指定できない文字を指定しました。 | カレンダ名に使用できない文字を指定しないでください。 |
-16 | ファイル操作に失敗しました(writeエラー)。 | ハードディスクの空き容量があるか確認してください。ハードディスクに異常がないか確認してください。 |
-17 | カレンダ名長が不当です。 | カレンダ名を24バイト以内で指定してください。 |
カレンダ更新情報構造体(CALENDAR_WDAT3)の形式
typedef struct CALENDAR_WDAT3_TAG { short year ; // 本年の年4桁 short sub_holiday ; // 振替休日の有無を指定 unsigned char holiday_w[12] ; // 毎年の曜日情報(12カ月分) unsigned long holiday_d[12] ; // 毎年の日付情報(12カ月分) unsigned char holiday_m[12][6] ; // 毎年の週情報(12カ月分×6週分) short cal_dat[3][12][31] ; // 3年分(year年から)のカレンダ情報 short start_y ; // 反映開始日の年4桁 short start_m ; // 反映開始日の月(1~12) short start_d ; // 反映開始日の日(1~31) }CALENDAR_WDAT3 ;
year
3年分のカレンダ情報を設定する基準の年(3年分の先頭の年)を西暦4桁で設定します。
sub_holiday
振替休日が有効かどうかを指定します。以下の値を指定してください。
値 | 振替休日の有効/無効 |
---|---|
0 | 無効 |
1 | 有効 |
holiday_w
毎年の曜日情報(12カ月分の配列)です。毎年の休日にする曜日を指定します。先頭から1ビット目を日曜日、2ビット目を月曜日とし、以降3ビット目から7ビット目まで順に、それぞれ火曜日から土曜日までに対応します。毎年、配列に指定した月のビットをオンにした曜日が休日になります。
holiday_d
毎年の日付情報(12カ月分の配列)です。毎年の休日にする日付を指定します。先頭から1ビット目を1日、2ビット目を2日とし、以降3ビット目から31ビット目まで順に、それぞれ3日から31日までに対応します。毎年、配列に指定した月のビットをオンにした日付が休日になります。
holiday_m
毎年の週情報(12カ月分×6週分の配列)です。第何週目の何曜日といった、毎年日付が変動する休日を指定します。1番目の配列を何月(1~12)、2番目の配列を何週目(1~5は第1~第5週目、6は最終週)として対応します。先頭から1ビット目を日曜日、2ビット目を月曜日とし、以降3ビット目から7ビット目まで順に、それぞれ火曜日から土曜日までに対応します。毎年、1番目の配列に指定した月の2番目の配列に指定した週のビットをオンにした曜日が休日になります。
cal_dat
yearで指定した年から3年分のカレンダ情報です。毎年の休日の情報を反映したものを指定します。以下の値を指定してください。
値 | カレンダ情報 |
---|---|
0 | あり得ない日(2月30日など) |
1 | 休日とする日 |
2 | 運用日とする日 |
start_y
反映開始日の年(現在から2年後まで)を西暦4桁で設定します。
反映開始日を指定しない場合は、0を指定してください。
start_m
反映開始日の月(1~12)を設定します。
反映開始日を指定しない場合は、0を指定してください。
start_d
反映開始日の日(1~31)を設定します。
反映開始日を指定しない場合は、0を指定してください。
プログラム例
カレンダ更新APIのプログラム例を以下に示します。
#include <stdio.h> #include <string.h> #include <f3crhcap.h> int main( int argc,char** argv) { /*..........変数宣言........ */ int ret ; int count ; CALENDAR_WDAT3 cal_dat3 ; /*..........初期化 ..........*/ memset( &cal_dat3, 0x00, sizeof( CALENDAR_WDAT3) ) ; /*..........カレンダ情報の設定 ..........*/ /*今年を設定 */ cal_dat3.year = 2006 ; /* 振替休日を有効にする */ cal_dat3.sub_holiday = 1 ; /*毎週土日を休日にする */ for ( count = 0 ; count < 12 ; count++ ){ cal_dat3.holiday_w[count] = (unsigned char)0x82 ; } /* 反映開始日の設定(2006/08/09から反映を開始する。) */ cal_dat3.start_y = 2006 ; cal_dat3.start_m = 8 ; cal_dat3.start_d = 9 ; /*カレンダの更新 */ ret = Mp_SetCalendar3( "Test Pro", "calendar_1", &cal_dat3 ) ; printf( "ret= %d\n", ret ) ; return 0 ; }