こんにちは、にいるです。
休日マスタを使用した営業日判定のプログラムを作成しました。
ちょっとそれをまとめておきたいと思います。
1.休日マスタの作成
最初はクラスに特定日をハードコーディングしたんですが、ユーザ自信が登録できるようにオブジェクトでデータを持つようにしました。
会社特有の休日があり、オブジェクトの方が利便性が高いかなと思ったので。
作成した項目は下記の7個で、日にち以外、全て数式を組んでいます。
日にちは入力形式がぶれないように日付型を使用しますが、判定用にテキスト型(数式)も作成しておきます。
# | 項目名 | データ型 | API名 |
1 | 休日名 | テキスト | Name |
2 | 日にち | 日付 | Holiday__c |
3 | 年 | 数値(数式) | Year__c |
4 | 月 | 数値(数式) | Month__c |
5 | 日 | 数値(数式) | Day__c |
6 | 曜日 | テキスト(数式) | Week__c |
7 | 週No. | 数値(数式) | Week_No__c |
8 | 日にち(テキスト) | テキスト(数式) | Holiday_Text__c |
各数式項目の数式は下記です。
※項目名が違うとコンパイルエラーになるので、ご注意ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// 年 YEAR( Holiday__c ) // 月 Month( Holiday__c ) // 日 DAY( Holiday__c ) // 曜日 IF ( NOT ( ISBLANK ( Holiday__c ) ), CASE ( MOD ( Holiday__c - DATE (1900, 1, 7), 7 ), 0, "日", 1, "月", 2, "火", 3, "水", 4, "木", 5, "金", "土"), "") // 週No. (Holiday__c - DATE(YEAR(Holiday__c ),1,1)) / 7 // 日にち(テキスト) TEXT( Holiday__c ) |
2.営業日判定のApexクラス
営業日の判定は下記です。
・平日である
・休日マスタに登録された日付でない
・休日マスタに登録された日付でない
下記コードは、今日の祝日が休日マスタにあるかどうかを見ています。
その後にif文で処理を書くことで祝日なら〜、営業日なら〜という処理を書けば問題なくプログラムは動くと思います。
1 2 3 4 5 6 7 8 9 |
// 休日リスト public static List<M_holiday__c> selectList = [SELECT Id FROM M_holiday__c WHERE Holiday__c = :System.today() LIMIT 1]; // 休日でない場合の処理 if (selectList.isEmpty()) { 処理実行 } |
3.まとめ
いかがでしたでしょうか。
営業日判定はどの組織でも使用したい機能だと思います。
こういう汎用的なメソッドやテストメソッドなどはユーティリティクラスに作っておきたいですね。
みなさんもぜひ考えて書いてみてください。
他にも色々と標準機能やSalesforce機能について紹介していますので、ご覧ください。
ではでは!
コメント