0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

salesforce 日付 数式でハマったこと

Last updated at Posted at 2023-10-01

どうもフリーランスエンジニアのTABEです。

salesforceの構築要件で
毎月ある一定の日付のレコードを作成して欲しいという要望がありました。

その際の基準となる
日の設定が厄介だったので記録しておきます。

salesforceとして日付の日は数式で Day(Today())の形で今日が何日かを簡単に出せます。
ただ、上記のToday()の部分が日付型ではなく、数値や文字列の場合は
DATE関数の中でDay()関数を使うと存在しない日付を指定した時にエラーになります。

例えば 指定日(SpecifiedDate__c とAPI名につけたと仮定します。)という項目があり
選択リスト型で1から31を選択できるとします。

その場合指定日がレコード上で31を選択されていた場合
になった時にフローで自動的に9/31のレコードを作ろうとした時
9/31は存在しない為
数式で今月の指定日を設定する場合、以下の様に数式を作るのですが
DATE(YEAR(Today() ),MONTH(Today() ),VALUE(TEXT({!$Record.SpecifiedDate__c} )

この数式だと、9/31は存在しない為、DATE関数がエラーで数式が何も帰ってこない状態になります。

ですので、IF分で場合分けをして31日がある月ない月、また2月の閏年の考慮をIF分で、しなくてはならないことがありました。

実際の数式が以下の数式になります。
(選択リストには、必ず「末日」になるように「末」という選択リスト値もあったので、「末」の分岐も組み込まれています。

また、「末」を選択した場合、対象月の次の月に設定してから日付を-1にするという計算で、末日を割り出しているのですが、1月1日から-1をするとエラーになってしまう仕様の様でする。
なのでその分のIF分も入れてあります。

IF(
OR(
AND(OR(MONTH(Today())=4,MONTH(Today())=6,MONTH(Today())=9,MONTH(Today())=11), TEXT({!$Record.SpecifiedDate__c}) = '31')
, AND(MONTH(Today())=2, OR(TEXT({!$Record.SpecifiedDate__c}) = '29', TEXT({!$Record.SpecifiedDate__c}) = '30',TEXT({!$Record.SpecifiedDate__c}) = '31')))
, DATE(YEAR(Today() ),MONTH(Today() ) + 1,1)-1
, IF(AND(TEXT({!$Record.SpecifiedDate__c} ) = "末",MONTH(Today() )=12)
    , DATE(Year(Today() ) + 1, 1, 1) - 1
    , IF (AND(TEXT({!$Record.SpecifiedDate__c} ) != "末", TEXT({!$Record.SpecifiedDate__c} ) != null)
      , DATE(YEAR(Today() ),MONTH(Today() ),VALUE(TEXT({!$Record.SpecifiedDate__c} )))
      , DATE(YEAR(Today() ),MONTH(Today() ) + 1,1)-1
    )
  )
)

単純に末かどうか?を判定して対応すればいいと思ったのですが、、、
これだけで結構多めの処理になってしました。

同じ様な要件で困った方がいて、力になれれば幸いです!

salesforceの解説用動画をUdemyで作っています。
興味のある方は見てもらえたら嬉しいです。
よろしくお願いします!

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?