dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

Apex

[Salesforce]UserRecordAccessでレコードの参照・編集権限をチェックする

こんなことやりたい Apex で SOQL を実行してレコードを取得するとき、実行ユーザが編集権限のあるレコードだけ返したい。 このとき、レコードに対し参照権限だけあると SOQL では取得できてしまうため適宜フィルターする必要がある。 先にまとめ UserRecord…

[Salesforce]スケジュール済みApexやトリガでVisualforceをpdfファイルに変換する方法(後編)

これの続きです。 前回までは Visualforce ページの(より正確には、PageReference クラスの)getContent() で pdf を取得しようとしてましたがだめそうなので Visualforce テンプレートを使う方法を試してみた。 TL;DR メールテンプレートのうち、Visualfor…

[Salesforce]スケジュール済みApexやトリガでVisualforceをpdfファイルに変換する方法(前編)

以前の記事で、Visualforce ページを pdf ファイルとして添付してメール送信する方法について書いた。 この時、問題点として PageReference クラスの getContent() メソッドは スケジュール済み Apex(Apex スケジューラ?)やトリガなどの非同期処理内では…

[Salesforce]Apexで添付ファイルつきのメールを送信する

ちょいメモ。 Saleforce の添付ファイルを取ってくる方法と、Visualforce ページを pdf 化して送る方法。

[Salesforce]行動を削除した時の UNSUPPORTED_APEX_TRIGGER_OPERATON について

エラー名でググってもちゃんとした情報が出てこなかったのでメモ。 Apex で複数件の行動を削除(delete)しようとした時、以下のようなエラーが出ることがある。 System.DmlException: Delete failed. First exception on row 0 with id 00U1000000k5j6vEAA;…

[Salesforce]ApexでCSVファイルをアップロードする

この記事を参考に。 SFDCで大容量CSVアップロード作ってみました。 - SHANON Engineer's Blog ほぼほぼこの通りでいいのですが、 parser でやろうとしている処理が parser という名前と一致しない " (ダブルクォート)で囲った値があった時に対応できない …

[Salesforce][Apex] CreatedDate はアテにならないという話

テストをしていてハマったので、メモ。 CreatedDate がアテにならないというか、SOQL で ORDER BY に CreatedDate を使うとき は注意した方がいいです。

[Salesforce] 入力規則で「行動」の名前/関連先に特定のSObjectしかひもづけられないようにする

Apex 無しで実現できるか?と思って調べてみたらできた。 やり方 入力規則にこんな感じで入力する。 # 例) 名前にリードを指定した時にエラーにしたい場合 LEFT(WhoId, 3) = '00Q'

[Salesforce]削除済みのレコードをSOQLで取得する

ずいぶん前に調べて解決したんだけど、まとめてなかったのでメモ。 削除したレコードを、開発者コンソールのクエリエディタ(Query Editor)でさっと確認したかった。のですが。。。

[Salesforce]メール送信のエラー検知あれこれ (不達管理など)

今日は Salesforce World Tour Tokyo ということで 久しぶりの Salesforce ネタです。 (内容はイベントとか最近の技術と全く関係ないです) 今回はメール送信について。 Apex では Messaging.sendEmail() メソッドでメールを送信できますが、 存在しないメー…

自作したVisualforceページに入力規則エラーを表示する

自分で作成したVisualforceページについては、コントローラ側でDmlExceptionを明示的にcatchしてあげないとシステムエラー画面が表示されてしまい、 開発組織にメールがとんでしまったりして何かと面倒なことになります。 で、そのための書き方。

[Salesforce]Httpコールアウトを行うバッチのテスト

はじめに Apexから外部Webサービスを利用するためのHttpコールアウトを実装したクラスがある時、 そのテストにはHttpCalloutMockインターフェースを実装したクラス(いわゆるモックオブジェクト)が必要です。 ところが、このHttpコールアウトがバッチクラス…

[salesforce]Apexでのメール送信時に送信元(From)を変更する

変更する方法あるのかなと思って調べてみたら、ありました。 「組織のメールアドレス」という設定を使った方法です。 はじめに SalesforceのEmailクラス(Messaging.SingleEmailMessageやMassEmailMessageの親クラス)には、メールの送信者の名前に任意の文字…

[Salesforce]活動履歴(ActivityHistory)がテストで取得できない?

ややこしかったのでメモ。 はじめに メール通知を行うクラスのメソッドをテストしたい時、 「送信したメールのアサーションとして何を比較するか」というのにちょっと悩みました。 メールの内容をテストする方法がないので。

[Salesforce]Apexでリードの「取引の開始」を実行

前に書いた記事のように、リードが取引開始になった時のトリガなどを実装した場合 このトリガのテストメソッドってどうやって書くんだろう?と思って調べてみました。 Database.LeadConvertクラスのオブジェクトを使って Database.convertLead(Database.Lead…

[Salesforce]メールのガバナ制限まとめ

すぐ忘れるのでメモ。 Salesforceのメールに関連する制限です。 (2014/07/09追記) こんなの見つけた。 https://na7.salesforce.com/help/pdfs/en/salesforce_app_limits_cheatsheet.pdf これのEmail Limitsという項はガバナ制限のリファレンスのところに書…

[Salesforce]Apexで日付から曜日を取得する

ちょいメモ。 ある日付から、その曜日を取得する方法。 Datetime dt = Datetime.now(); // 'EEE'を使うと略称(例:Fri) // 'EEEE'を使うと略さない曜日(例:Friday) String weekdayStr = dt.format('EEE'); これで曜日が文字列(ただし英語)として取得…

Basic認証とDigest認証のまとめと、Salesforceでの実現方法

非常に基本的な話ですが、認証方式についてちょいメモ。 また、ApexでどうやってBase64エンコードやMD5ハッシュ化を行うかについては おまけ程度に。

[Salesforce]VisualforceのvalueにMapを使う

ちょいメモ。 VisualforceでMapオブジェクトの値を表示したい時は {!Mapオブジェクト名[キー名]} で取得可能。 以下はサンプル。 Apex側 public class MapValueSampleController { public Map<String,String> sampleMap { get { return new Map<String, String> { 'foo' => 'bar', 'hoge' =></string,></string,string>…

[Salesforce]関連リストのレコードを一括更新する方法〜その3〜

第1回、第2回に引き続いて、第3弾。 javascriptだけで実装する Apex + Visualforce で実装する Apex Web Serviceを使って実装する のうちの、「3. Apex Web Serviceを使って実装する」です。 今回でラスト。

[Salesforce]関連リストのレコードを一括更新する方法〜その2〜

前回の記事に引き続いて、第2弾。 javascriptだけで実装する Apex + Visualforce で実装する Apex Web Serviceを使って実装する のうちの、今回は「2. Apex + Visualforce で実装する」です。

[Salesforce]関連リストのレコードを一括更新する方法〜その1〜

やりたいことはこんな感じ。 とあるオブジェクトの詳細レコードから、参照関係にあるオブジェクトのレコードを関連リストとして表示する。 リストの各レコード左側にチェックボックスが表示されて、チェックを入れたレコードについて一括処理をする。 今調べ…

[Salesforce]参照関係にあるオブジェクトをSOQLで取得する

メモ。 標準オブジェクトの場合と、カスタムオブジェクトの場合について整理。 こちらの公式ドキュメントが参考になる。 Salesforce Developers

[Salesforce]Apexコールアウトを利用して、ケース登録時にGitHubのIssueにも登録する

Apexから外部サービスを利用するための方法としてApexコールアウトというのがあります。 今回はこれを使って、GitHubと連携するサンプルを作ってみたという話。 Salesforceでケースが新規作成された時に、指定したGitHubのリポジトリにIssueも登録されるとい…

[Salesforce]リードの「取引の開始」時にトリガを実行する方法

リード(Lead)オブジェクトの「取引の開始」を実行すると リードの色々な項目の情報を引き継いで新たに取引先(Account)、取引先責任者(Contact)、商談(Opportunity)が作成される。 このとき、 特定のカスタム項目の値を作成されたオブジェクトのどこかに引き…

[Salesforce]Apexでメールを送信した時に「活動履歴」に残す方法

メモ。 ここに書いてた。 http://nanostuffs.com/Blog/?p=1602 ApexでMessaging.SingleEmailMessageを使ってリードや取引先責任者にメールを送信する場合も setSaveAsActivity(true)を使うと活動履歴に残すことができる。 ただし、こちらにあるように 宛先の…

[Salesforce]翻訳機能を使って多言語化する〜カスタムラベル編〜

タイトル通り、Salesforceの翻訳機能を使って、ユーザの言語設定によって表示される内容が変わるようにしてみる。 Salesforceにはタブやオブジェクトなど様々な項目があり、それぞれについて多言語化の方法も異なるので、何回かに分けて紹介していけたら。 …

[Salesforce]選択リストの全ての値をApexで取得する

ドンピシャの記事がこちらにあったので、メモ。 参考になります。 たいていのことは、「気合い」と「根性」で乗り越えられるものだ!!:【salesforce】Apexcodeで選択リスト型の値を取るゼイ。 コードはこちら。 (元の記事から、変数名などを若干変更してお…

[salesforce]商談の「取引先責任者の役割」や「パートナー」をコピーする

商談に限らず取引先、ケース、契約などの項目にある 「取引先責任者の役割」や「パートナー」ですが、 これをApexでコピーする方法。 特に、「パートナー」をコピーするあたりで色々ハマったのでメモ。 それぞれどんなもの?というのはこのあたりを参考にし…

[Salesforce] Apexのプロパティの挙動がよくわかってなかったのでメモ

これの話です。 Salesforce Developers基本的な使い方はわかっていて、 ある変数に対するgetter/setter(アクセサメソッドと呼べばいいのかな)を定義すると 呼び出し側からは // TestClassというクラスにmyPropertyというプロパティを定義した場合 TestClas…