FIND,LEFT,MID関数
月: 2022年3月
[Salesforce]Apexバッチで集計関数
Apexバッチで集計関数
//バッチクラス
global class SampleAggregateBatch implements Database.Batchable<AggregateResult> {
// The batch job starts
global Iterable<AggregateResult> start(Database.BatchableContext bc){
String query = 'SELECT COUNT(Id) cnt, AccountId FROM Contact GROUP BY AccountId';
return new SearchResultIterable(query);
}
// The batch job executes and operates on one batch of records
global void execute(Database.BatchableContext bc, List<sObject> scope){
for(sObject sObj : scope) {
AggregateResult ar = (AggregateResult)sObj;
System.debug('>>>> COUNT : ' + ar.get('cnt'));
}
}
// The batch job finishes
global void finish(Database.BatchableContext bc){ }
}
//インタフェースIterable Apex class
public class SearchResultIterable implements Iterable<AggregateResult>{
private String query;
public SearchResultIterable(String soql){
this.query = soql;
}
public Iterator<AggregateResult> Iterator(){
return new SearchResultIterator(this.query);
}
}
//インタフェースIterator
public class SearchResultIterator Implements Iterator<AggregateResult>{
public AggregateResult [] results {get;set;}
public Integer index {get;set;}
public SearchResultIterator(String query){
this.index = 0;
results = Database.query(query);
}
public boolean hasNext(){
return results !=null && !results.isEmpty() && index < results.size();
}
public AggregateResult next(){
return results[index++];
}
}
// Run batch apex
SampleAggregateBatch batch = new SampleAggregateBatch();
Database.executebatch(batch, 200);
// Debug log output
>>>> COUNT : 1
>>>> COUNT : 3
>>>> COUNT : 2
[Salesforce]SOQL文のHAVINGの使い方
SOQL文のHAVING
HAVINGではGROUP BYでグルーピングした結果に対して、絞込みの条件を入れることが出来ます。
絞込み条件という意味ではWHEREと似ていますが、WHEREではグルーピングする前、HAVINGはグルーピングした後です。
次のサンプルは商談のリードソースでグルーピングし、同じ値のレコード数が1以上のリードソース別金額を表示します。
AggregateResult[] results = [SELECT LeadSource, SUM(Amount) summary
FROM Opportunity
GROUP BY LeadSource
HAVING Count(LeadSource) > 1];
for(AggregateResult ar: results){
System.debug('LeadSource='+ ar.get('LeadSource')
+ ':Amount='+ ar.get('summary'));
}
デバッグの結果
LeadSource=LeadSource1:Amount=2
LeadSource=LeadSource2:Amount=3
[Technical Method]Encode & Decode Tools
Encode & Decode Tools
[Salesforce]日本時間に合わせる
日本時間に合わせることで共有します。
時型の項目はTIMEVALUE関数で時間型に変換できます。
日本時間に合わせるために9時間ずらす必要があります。
「 + 3600000 * 9」で9時間ずらすことができます。
HOUR( TIMEVALUE(CreatedDate) + 3600000 * 9)
[Salesforce]サインインエラー: 「ログイン数超過」
サインインエラー: 「ログイン数超過」
・ログイン数とは、一定の期間内に 1 人のユーザが Salesforce へのログインを試みた回数です。
・ログイン数を制限することにより、Salesforce ではユーザあたりのログイン試行回数を制限してサービスのパフォーマンス低下を回避し、Salesforce へのログイン時のセキュリティを強化することができます。
・
ログイン数の超過エラーの原因は?
ユーザあたり 3,600 回/時を超えるログイン要求はブロックされ、組織のログイン履歴に LOGIN_RATE_EXCEEDED エラーが記録されます。
・ログイン数の超過エラーをトラブルシューティングする方法 (例を参照)
組織 API インテグレーションのユーザログイン履歴を監視および確認して、ユーザあたり 3,600 回/時を超える Salesforce へのログインコールを何度も生成しているユーザを特定することをお勧めします。
1 時間待ってから再度ログインを試みる。
問題が解消されない場合は、カスタムインテグレーションまたはサードパーティアプリケーションが原因と考えられる。
インテグレーションユーザのユーザ名やパスワードが間違っている。
[Salesforce]取引開始済みのリードを表示するレポートを作成する方法
取引開始済みのリードを表示するレポートを作成する方法
Salesforce Classic:
- [レポート] タブをクリックします。
- [新規レポート] をクリックします。
- [リード] フォルダの隣にある + の記号をクリックします。
- [取引開始済みのリード情報が関連するリード] レポートタイプを選択します。
- [作成] をクリックします。
- 必要に応じて、追加する項目を [プレビュー] セクションにドラッグします。
- [追加] のメニューをクリックします。
- [項目の絞り込み] を選択します。
- 「取引開始済み 次の文字列と一致する True」の条件を入力します。
- [レポートを実行] をクリックします。
Lightning Experience:
- [レポート] タブをクリックします。
- [新規レポート] をクリックします。
- [リード] をクリックします。
- [取引開始済みのリード情報が関連するリード] レポートタイプを選択します。
- [続行] をクリックします
- 必要に応じて、[アウトライン] タブから項目を追加します。
- [検索条件] タブに切替えます。
- [検索条件] を選択します。
- 「取引開始済み 次の文字列と一致する True」の条件を入力します。
- [レポートを実行] をクリックします。
- [保存] をクリックします。