ログインしたユーザとして実行できるダッシュボード数の制限
ログインしたユーザとして実行できるダッシュボード数の制限に達しました。
classic環境ですが、ダッシュボードを作成して保存したところ、上記エラーが発生しました。
調べたところ、動的ダッシュボードの制限でした。
Enterprise Edition → 最大5個
Unlimited Edition と Performance Edition → 最大10個
困ったこと
どのダッシュボードがログインユーザーで動かしてるかわからない。。。 単純にレポートの一覧ビューをみても判別できない。ダッシュボードを一つ一つ編集状態にして確認はちょっとしんどい。。
解決策
SOQLクエリで
SELECT Id, Type, RunningUserId, Title FROM Dashboard
Type列で「指定ユーザー」か「ログインユーザー」か判別できる。。たすかった。。。
SOQLで使う「ALL ROWS」キーワード
salesforceでは活動オブジェクトが一定の基準でアーカイブされます。
https://help.salesforce.com/articleView?id=000005175&language=ja&type=1
アーカイブされたデータを取得するのには「ALL ROWS」キーワードを使うと。
ALL ROWSキーワードを使用すると削除されたレコードもクエリされる。
実組織を使用して試してみました。
同じ条件のクエリで、ALL ROWSキーワードなし・ありで比較。
ALL ROWS「なし」では4461件でしたが、「あり」だと18748件。そのうち9件が削除済み。
ALL ROWSなしのときは当然削除済みのものは0件ですね。
※削除済みは IsDeleted = true の条件を追加しています。
活動履歴をクエリする場合はアーカイブされたものを対象とするかどうかも検討が必要そうです。
不用意にALL ROWSを使うとガバナ制限にもかかりやすくなるでしょうし。。
※開発者コンソールの「Query Editor」だとALL ROWSキーワードは使えないみたいです。
SOQLの日付リテラル
忙しさを理由に更新を怠っていた… 前回書いていた内容の続きは改めて書こう
今回はSOQLで使える日付リテラルをまとめとく。(リファレンス読めよ) 時々使うのでここに抜粋
SOQL日付リテラル一覧
日付リテラル | 範囲 | 例 |
---|---|---|
YESTERDAY | 昨日の 00:00:00 から、その 24 時間後まで | SELECT Id FROM Account WHERE CreatedDate = YESTERDAY |
TODAY | 本日の 00:00:00 から、その 24 時間後まで | SELECT Id FROM Account WHERE CreatedDate > TODAY |
TOMORROW | 明日の 00:00:00 から、その 24 時間後まで | SELECT Id FROM Opportunity WHERE CloseDate = TOMORROW |
LAST_WEEK | 先週の最初の日の 00:00:00 から、その 7日後までが指定。週の最初の日はロケールによって判断 | SELECT Id FROM Account WHERE CreatedDate > LAST_WEEK |
THIS_WEEK | 今週の最初の日の 00:00:00 から、その 7日後までが指定。週の最初の日はロケールによって判断 | SELECT Id FROM Account WHERE CreatedDate < THIS_WEEK |
NEXT_WEEK | 来週の最初の日の 00:00:00 から、その 7日後までが指定。週の最初の日はロケールによって判断 | SELECT Id FROM Opportunity WHERE CloseDate = NEXT_WEEK |
LAST_MONTH | 先月の最初の日の 00:00:00 から、その月のすべての日が指定 | SELECT Id FROM Opportunity WHERE CloseDate > LAST_MONTH |
THIS_MONTH | 今月の最初の日の 00:00:00 から、その月のすべての日が指定 | SELECT Id FROM Account WHERE CreatedDate < THIS_MONTH |
NEXT_MONTH | 来月の最初の日の 00:00:00 から、その月のすべての日が指定 | SELECT Id FROM Opportunity WHERE CloseDate = NEXT_MONTH |
LAST_90_DAYS | 本日の 00:00:00 から、その 90 日前までが指定 | SELECT Id FROM Account WHERE CreatedDate = LAST_90_DAYS |
NEXT_90_DAYS | 本日の 00:00:00 から、その 90 日後までが指定 | SELECT Id FROM Opportunity WHERE CloseDate > NEXT_90_DAYS |
LAST_N_DAYS:n | 数値n が指定されている場合、本日の00:00:00 から、そのn 日前までが指定 | SELECT Id FROM Account WHERE CreatedDate = LAST_N_DAYS:365 |
NEXT_N_DAYS:n | 数値n が指定されている場合、本日の00:00:00 から、そのn 日後までが指定 | SELECT Id FROM Opportunity WHERE CloseDate > NEXT_N_DAYS:15 |
NEXT_N_WEEKS:n | 数値n が指定されている場合、翌週の最初の日の 00:00:00 から、そのn 週後までが指定 | SELECT Id FROM Opportunity WHERE CloseDate > NEXT_N_WEEKS:4 |
LAST_N_WEEKS:n | 数値n が指定されている場合、前週の最後の日の 00:00:00 から、そのn 週前までが指定 | SELECT Id FROM Account WHERE CreatedDate = LAST_N_WEEKS:52 |
NEXT_N_MONTHS:n | 数値n が指定されている場合、翌月の最初の日の 00:00:00 から、そのn 月後までが指定 | SELECT Id FROM Opportunity WHERE CloseDate > NEXT_N_MONTHS:2 |
LAST_N_MONTHS:n | 数値n が指定されている場合、前月の最後の日の 00:00:00 から、そのn 月前までが指定 | SELECT Id FROM Account WHERE CreatedDate = LAST_N_MONTHS:12 |
THIS_QUARTER | 今四半期の最初の日の 00:00:00 から、今四半期の終わりまでが指定 | SELECT Id FROM Account WHERE CreatedDate = THIS_QUARTER |
LAST_QUARTER | 前四半期の 00:00:00 から、その四半期の終わりまでが指定 | SELECT Id FROM Account WHERE CreatedDate > LAST_QUARTER |
NEXT_QUARTER | 翌四半期の 00:00:00 から、その四半期の終わりまでが指定 | SELECT Id FROM Account WHERE CreatedDate < NEXT_QUARTER |
NEXT_N_ QUARTERS:n |
翌四半期の 00:00:00 から、n 期後の四半期の終わりまでが指定 | SELECT Id FROM Account WHERE CreatedDate < NEXT_N_QUARTERS:2 |
LAST_N_ QUARTERS:n |
n 期前の四半期の最初の日の 00:00:00 から、前四半期の最終日の終わりまでが指定 | SELECT Id FROM Account WHERE CreatedDate > LAST_N_QUARTERS:2 |
THIS_YEAR | 今年の 1 月 1 日 00:00:00 から、今年の 12月 31 日の終わりまでが指定 | SELECT Id FROM Opportunity WHERE CloseDate = THIS_YEAR |
LAST_YEAR | 前年の 1 月 1 日 00:00:00 から、その年の12 月 31 日の終わりまでが指定 | SELECT Id FROM Opportunity WHERE CloseDate > LAST_YEAR |
NEXT_YEAR | 翌年の 1 月 1 日 00:00:00 から、その年の12 月 31 日の終わりまでが指定 | SELECT Id FROM Opportunity WHERE CloseDate < NEXT_YEAR |
NEXT_N_ YEARS:n |
翌年の 1 月 1 日 00:00:00 から、n 年後の 12月 31 日の終わりまでが指定 | SELECT Id FROM Opportunity WHERE CloseDate < NEXT_N_YEARS:5 |
LAST_N_ YEARS:n |
n 年前の 1 月 1 日 00:00:00 から、前年の 12月 31 日の終わりまでが指定 | SELECT Id FROM Opportunity WHERE CloseDate > LAST_N_YEARS:5 |
THIS_FISCAL_ QUARTER |
現在の会計四半期の最初の日の 00:00:00から、その会計四半期の最終日の終わりまでが指定。会計年度は、設定 の会計年度 ページで定義 | SELECT Id FROM Account WHERE CreatedDate = THIS_FISCAL_QUARTER |
LAST_FISCAL_ QUARTER |
前会計四半期の最初の日の 00:00:00 から、その会計四半期の最終日の終わりまでが指定。会計年度は、設定 の 会計年度 ページで定義 | SELECT Id FROM Account WHERE CreatedDate > LAST_FISCAL_QUARTER |
NEXT_FISCAL_ QUARTER |
翌会計四半期の最初の日の 00:00:00 から、その会計四半期の最終日の終わりまでが指定。会計年度は、設定 の 会計年度 ページで定義 | SELECT Id FROM Account WHERE CreatedDate < NEXT_FISCAL_QUARTER |
NEXT_N_FISCAL_ QUARTERS:n |
翌会計四半期の最初の日の 00:00:00 から、n 期後の会計四半期の最終日の終わりまでが指定。会計年度は、設定の 会計年度 ページで定義 | SELECT Id FROM Account WHERE CreatedDate < NEXT_N_FISCAL_ QUARTERS:6 |
LAST_N_FISCAL_ QUARTERS:n |
n 期前の会計四半期の最初の日の 00:00:00から、前会計四半期の最終日の終わりまでが指定。会計年度は、設定の 会計年度 ページで定義 | SELECT Id FROM Account WHERE CreatedDate > LAST_N_FISCAL_ QUARTERS:6 |
THIS_FISCAL_ YEAR |
現在の会計四半期の最初の日の 00:00:00から、その会計四半期の最終日の終わりまでが指定。会計年度は、設定 の 会計年度 ページで定義 | SELECT Id FROM Opportunity WHERE CloseDate = THIS_FISCAL_YEAR |
LAST_FISCAL_ YEAR |
前会計年度の最初の日の 00:00:00 から、その会計年度の最終日の終わりまでが指定。会計年度は、設定 の 会計年度 ページで定義 | SELECT Id FROM Opportunity WHERE CloseDate > LAST_FISCAL_YEAR |
NEXT_FISCAL_ YEAR |
翌会計年度の最初の日の 00:00:00 から、その会計年度の最終日の終わりまでが指定。会計年度は、設定 の 会計年度 ページで定義 | SELECT Id FROM Opportunity WHERE CloseDate < NEXT_FISCAL_YEAR |
NEXT_N_FISCAL_ YEARS:n |
翌会計年度の最初の日の 00:00:00 から、n 年後の会計年度の最終日の終わりまでが指定。会計年度は、設定 の会計年度 ページで定義 | SELECT Id FROM Opportunity WHERE CloseDate < NEXT_N_FISCAL_YEARS:3 |
LAST_N_FISCAL_ YEARS:n |
n 年前の会計年度の最初の日の 00:00:00から、前会計年度の最終日の終わりまでが指定。会計年度は、設定 の会計年度 ページで定義 | SELECT Id FROM Opportunity WHERE CloseDate > LAST_N_FISCAL_YEARS:3 |
意外と多いですね。 LAST_N_DAYS:nとか定期的に取得するような場合は使えそうです。
続 TrailHeadでSalesforceDXをやってみる
前回からの続きでtrailを進めていく
今回は
Create a Salesforce DX Project
まずはローカルにプロジェクトを作成するとのこと。
コマンドウィンドウから任意の場所に移動して以下のコマンドを入力
sfdx force:project:create -n geolocation
-nの後に入力した名前で下記の構成でプロジェクトが作成されました。
「config/project-scratch-def.json」
機能と環境設定がorgの形状を定義することを含むscratch orgの構成を決定します。開発チーム全体が共有できる設定ファイルを作成できます。
google翻訳のままですが、ここにこれから作成するスクラッチ組織の情報を書き込むのかな。。。
Create a Scratch Org
先程作成したプロジェクトのディレクトリに移動して、GeoAppScratchをいうエイリアスをもつscratch orgを作成。
sfdx force:org:create -s -f config/project-scratch-def.json -a GeoAppScratch
-s このスクラッチ組織をプロジェクトのデフォルトに設定
-f スクラッチ組織の設定を行うパスを指定。
-a エイリアスを設定(= GeoAppScratch)
設定が完了しました。
Create a Custom Object
次のステップで取引先にカスタム項目を作ります。
スクラッチ組織の設定をするために次のコマンドを入力
sfdx force:org:open
エラーになりました。。。
調べてみると、スクラッチ組織を作成してすぐはエラーになるようです。数分(デフォルト4分?)ほど待って再度コマンド実行して成功しました。
開いたスクラッチ組織の設定から指示通り、取引先に地理位置情報のカスタム項目、権限セットを作成後、以下のコマンド実行
sfdx force:user:permset:assign -n Geolocation
成功しました。
Metadata Magic: Pull Changes into Your Project
スクラッチ組織で行った変更をローカルプロジェクトと同期させます。と。。。
sfdx force:source:pull
見にくいですが、同期された内容が表示されました。trailと同じような内容です。
スクラッチ組織は一時的(7日間)だそうです。Gitなどで変更履歴の管理をする際には、.sfdxフォルダはリポジトリに追加しないように推奨されていました。
Create Sample Data
スクラッチ組織にサンプルデータを作成します。
そして、Geolocationプロジェクトにdataというディレクトリを作成して、スクラッチ組織で作成したサンプルデータをエクスポートします。
sfdx force:data:tree:export -q
"SELECT Name, Location__Latitude__s,
Location__Longitude__s FROM Account WHERE Location__Latitude__s !=
NULL AND Location__Longitude__s != NULL"
-d ./data
3件のレコードがエクスポートされたようです。
dataディレクトリを確認するとjsonデータがありました。
次のユニットでコードの操作などを行うようです。
ひとまずここまで。
TrailHeadでSalesforceDXをやってみる
salesforceDX....
ひとまず覚えるためにトライしてみる。
・・・日本語化希望します。
めげずに読んで最初の導入はなんとか終了。満点取れず
Salesforce DX Development Model | Salesforce Trailhead
次からが実際の環境を動かすようです。
Dev Hubのサインアップ
こちらの「Dev Hub trial org」から環境の取得ができます。
必要な内容を記入して「サインアップ」
認証メールが入力したアドレスに届くので、そこからパスワードを設定するとログインができました。
続いて、CLI(Command Line Interface)を自分のPCにあわせてインストールするので、Windows 64-bitを選択。デフォルト選択のままインストール。
(Gitもすべてデフォルトでインストールしました)
Trailに沿って進めてみます。
インストールした「Git Bush」を立ち上げて、$にカーソルがあうのでsfdxと入力。
trailの通りに表示されました。追加で「sfdx force --help」と入力
「sfdx force:doc:commands:list」も入力してみました。
Dev Hubにログイン
ログインを試してみます。
「sfdx force:auth:web:login -d -a DevHub」を入力すると、ブラウザが立ち上がるのでそこからログインします。
「-d」がデフォルトになる組織を指定。「-a」が組織のエイリアスを設定?だと思う。。。
ログインが成功するとCLI上は次のようになります。
以下のコマンドを入力することで直接ブラウザを立ち上げてsalesforceを開くこともできました。
「sfdx force:org:open -u DevHub」
SObjectのプレフィックスを取得してみる
そこまで使うこともないのですが、時々オブジェクトのプレフィックスを知りたいときがある。
そこで一覧で取得できるようにしてみました。
<完成イメージとして。。。>
・標準オブジェクトとカスタムオブジェクトを分けて表示
・API名、ラベル名もあわせて表示
<参考にしたのはこの辺>
でもって、visualforceでボタンを押すと一覧を表示する画面を作成
初期表示は下記の状態
ボタンを押すと・・・・
カスタムオブジェクトも表示できた。
そこまで使うのかというと、正直わからないが一覧で取得できたことは良かったかも。
作ったソースはこちらです。
そのまま流用できるとは思いますが、オブジェクトへのアクセス権は考慮していないです。cssもVF内に直接書き込んでいます。
gist1ed14735410c0df223ba0353878def18
gistb4d3e948f717ac2fccb4bc16629463d1
ApexからChatterフィードを作る
取引先責任者の拡張コントローラからChatterフィードをApexで作ってみた。
<やりたいこと>
・定型の内容でChatterに投稿したい。
・投稿は、取引先責任者レコードに関連付けたい。
・メンション先は固定
ワークフローでメールアラートを送るようなイメージだがやりとりの履歴を
salesforceに残すためにChatterの活用を考えている。
ということでリファレンス丸写しですが以下のコードで実現できた。
※メソッド部分のみです。
ConnectApiってのを使うんですね、知らなかった・・・
拡張コントローラ内でVFに設置したボタンを押下するとメソッドを呼び出し。
コード内の注釈
「cont.id」は標準コントローラから受け取った取引先責任者のIdです。
「selected」は別メソッドから受け取った値を格納しています。
chatterグループにメンションする場合などは別途考慮が必要だったりしますが、
とりあえずのテストとしては成功。
いいかげん、Lightningも覚えていかないと
元にしているvisualforce、apexは前回の記事をベースにしています。