Salesforceのメールサービスを実装する方法

概要 本記事は、Salesforceのメールサービスを実装する方法を簡単に記載します。 ちなみにメールサービスとは、「Apexクラスを使用して受信メールを処理する自動化されたプロセス」という機能となります。 具体的には、Webサイトやフォームで受け付けた内容をSalesforceへメールとして送信することで、メールの情報を元にApexのプログラムでオブジェクトにレコードを作成したりすることができるものとなります。 作成手順 Messaging.InboundEmailHandlerインターフェースを実装したApexクラスを作成 まずは、メールサービスに必要となるInboundEmailHandlerの実装クラスを作成します。このクラスでhandleInboundEmailメソッドを使用して、InboundEmail オブジェクトにアクセスし、受信メールメッセージの内容、ヘッダー、および添付ファイルの取得と、その他多数の機能を実行します。 下記のサンプルコードでは、受信したメールの内容を元にケースを作成しております。また、受信メールアドレスが一致する取引先責任者があれば、リレーションをはるような考慮もいれております。 メールサービスの作成 メール受信時に呼び出すApexを指定してメールサービスを作成します。 メールアドレスを追加 作成したメールサービスに対して、送信先となるメールアドレスを作成します。 設定するメールアドレスの部分が@より前の部分になり、ドメインは作成時に自動で生成されます。 ■注意点 「コンテキストユーザ」に設定するユーザが、Apexの実行ユーザとなるのでApex内でアクセスするオブジェクト(今回はケースオブジェクト)を更新する権限がないと、オブジェクト登録のApexがエラーになります。 設定完了、メールアドレスの確認 作成したメールアドレスを確認します。 実際にメールを送信して確認 今回のサンプルプログラムでは正常に動作した場合は、メールの件名、本文でケースが作成されているはずです。エラーが発生した場合は、送信元のメールアドレスにメールが届きます。

Continue reading

リストビューにおけるクイックアクションの一括実行

概要 本記事では、リストビューで選択したレコードに対して、用意したクイックアクションを実行することで、通常はレコード単位に行う操作が一括で実行できるようにする方法を記載します。 設定方法 クイックアクションを作成 まずは、オブジェクトのクイックアクションを作成します。 この例では、商談オブジェクトのフェーズ項目を更新するクイックアクションを作成します。 リストビューにクイックアクションを追加 検索レイアウトのリストビューに作成したクイックアクションを追加する。 リストビューでクイックアクションを実行 リストビューにボタンが追加されて、複数行を選択してクイックアクションが実行できることを確認します。 まとめ 本記事で記載した方法を使うことで、標準機能でリストに対して一括で操作を加えるような機能を実現できるようになります。 ぜひ参考にしてみてください。

Continue reading

[Salesforceデザイナー資格]Sharing and Visibilityデザイナー合格まで

概要 本記事では、Salesforceデザイナー資格のSharing and Visibilityデザイナー試験を受験して合格するまでに勉強した内容を簡単にまとめます 試験範囲 試験範囲については、リリースごとに変わる可能性があるので最新を確認する必要があります。 私が受験した時は、Winter’19でしたので、下記の内容となります。 http://tandc.salesforce.com/examguide_cert_sharing_visibility_designer.pdf 宣言的共有(67%) ・与えられた特定の顧客シナリオに従って、異なるタイプの情報へのユーザアクセスを許可および制限するために必要となる、該当するオブジェクトおよび項目レベルセキュリティ設定の適切な使用および制限について説明する ・与えられた特定の顧客シナリオに従って、適切なデータアクセス権をしかるべきユーザに付与する宣言的プラットフォームセキュリティ機能のすべてに必要な関連設定を説明する ・適切な表示およびコラボレーションの要件が満たされるように、取引先チームの使用事例を適切に評価し、取引先チームを実装する能力を示す ・セキュリティに関する考慮事項に留意しながら、グループやロールなどのセキュリティ機能を使用して、異なるグループにビューとフォルダを効果的に区分する方法を示し、レコードレベルのセキュリティに関する考慮事項とどのように異なるかを示す ・与えられた特定の顧客の組織階層に従って、レコード共有に対するロール階層の影響を説明する ・外部ユーザが関与する与えられたシナリオに従って、異なるタイプのコミュニティユーザ (社内、顧客コミュニティ、パートナーコミュニティなど) に適切にレコードを表示するために、セキュリティおよび共有設定をどのように利用できるかを説明する ・特定の顧客シナリオに従って、より複雑なセキュリティ要件に対処するために、Territory Management 2.0

Continue reading

プロファイルのオブジェクト権限「すべて表示」が主従関係で親レコードに連動するか

概要 本記事は、親子の主従関係がある2つのオブジェクトがある場合に、プロファイルで親のオブジェクト権限に「すべて表示」や「すべて変更」が付与されていると、子レコードのデータアクセス権限が親レコードに連動するかどうかを検証してみた結果となります。 ※動作確認は、Developer Editionで行なっております。 検証結果 連動されました。 つまり、プロファイルのオブジェクト権限における「すべて表示」「すべて変更」はレコードのアクセス権が付与されており、主従関係の親に「すべて表示」「すべて変更」が付与されていれば子にアクセス権が継承されるようです。 参考 https://help.salesforce.com/articleView?id=users_profiles_view_all_mod_all.htm&type=5

Continue reading

VSCodeを用いたSalesforce開発で使用するExtension

VSCodeを用いたSalesforce開発で使用するExtension 従来のSalesforceのApexやVisualforceの開発では、Force.com IDE(Eclipse)やMavensMate(SublineやAtom)がローカルの開発環境として使用されていました。現時点(2019年3月)でこれからの開発環境は、VSCodeのExtensionを用いるのが標準となります。本記事では、VSCodeでSalesforceの公式のExtensionについて紹介します。 ソースコード VSCodeのExtesionは、OSSとなっておりGitHubに公開されております。 https://github.com/forcedotcom/salesforcedx-vscode Salesforce Extension Pack 結論からいうと、Salesforceの公式のExtensionは、いくつかありますがこれをインストールすると他の7つのExtensionもインストールされます。 https://marketplace.visualstudio.com/items?itemName=salesforce.salesforcedx-vscode VSCodeの設定(事前準備) ・Salesforce CLIを下記のリンクの手順で導入する。 https://developer.salesforce.com/docs/atlas.en-us.sfdx_setup.meta/sfdx_setup ・A Salesforce DX project でローカルプロジェクトを作成する。

Continue reading

VisualforceとApexにおけるタブ情報の取得

VisualforceとApexにおけるタブ情報の取得 Visualforceでは、JavaScriptの処理でAJAX Toolkitを使ってSOAP APIをコールしてアプリケーションとタブ情報を取得します。 取得されるアプリケーションは、ログインユーザが使用できるアプリケーションが対象となります。 Apexでは、Schema.describeTabs メソッドでDescribeTabSetResultを取得して、getTabs()によりアプリケーションごとのタグ情報を取得します。 サンプルコード Visualforce Apex 参考 AJAX Toolkit Developer Guide – Connecting to the API

Continue reading

VisualforceでJavaScriptを共通化

VisualforceでJavaScriptを共通化 複数のVisualforceで同じようなJavaScriptでの処理を行いたい場合は、共通のVFページにJavaScriptを定義することで関数を共通化することができます。 呼び出しページでは、apex:includeタグのpageName属性で共通VFページを指定します。 サンプルコードは、以下となります。 呼び出しページ 共通ページ 参考 https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_compref_include.htm

Continue reading

複数Visualforceページ間で値の引き継ぎ

複数Visualforceページ間で値の引き継ぎ Visualforceでページを遷移する際に値を引き継ぐ2つの方法をサンプルコードベースで説明します。 ビューステート 複数のVFで同一のコントローラを使用することで、PageReferenceにより遷移するとビューステートの項目を引き継ぐことができます。 サンプルコードでは、TransferController.clsのconfirmメソッドでTest_TransferToState.pageのPageReferenceを返して遷移している部分になります。 Getパラメータ 複数のVFでコントローラを分割する場合には、URLのGetパラメータを使用することで項目を引き継ぐことができます。 サンプルコードでは、TransferController.clsのnextメソッドでTest_TransferToParam.pageのPageReferenceにpr.getParameters().put(”,”)で値を設定し、遷移して受けるVFのコントローラ(TransferReceiveController.cls)でApexPages.currentPage().getParameters().get(”)により値を取得します。 サンプルコード 補足 こちらにもアップしてます。 https://github.com/yhayashi30/visualforce-transfer-sample.git

Continue reading

sforce.oneオブジェクトによるLightning Experienceでのページ遷移

sforce.oneオブジェクトによるLightning Experienceでのページ遷移 Visualforceページはページ遷移する際には通常、遷移先のVFページを指定したPageReferenceをApexから返すことで遷移先へリダイレクトして遷移をさせます。 場合によってはJavaScriptのロジックでページを遷移させる際には、location.hrefでVFページのURLを指定して遷移させる方法もあります。 Lightning Experienceに埋め込まれたVisualforceページでは、location.hrefを使用した遷移は下記の通り推奨されておらず、sforce.oneを使うように記載されております。 window.location を直接設定しない これだけ言えば大丈夫でしょうか。この理由は簡単です。Lightning Experience では、ページに設定する window.location がないためです。Visualforce の「コンテナ」や、iframe でラップされること、Lightning Experience が単一ページアプリケーション (SPA) であることなどはすでに説明しましたが、この点も追記しておく必要があります。Visualforce の

Continue reading

Lightning Experience or Classicを各レイヤーで判定する方法

Lightning Experience or Classicの各レイヤーでの判定方法 VisualforceやApexなどのLightning Experience(以下ではLEXとします)とClassicのどちらからも呼び出される各レイヤーでの処理中で判定する方法を紹介します。 クライアント(Visualforce) 特にVisualforce等でLEXとClassicのどちらからも呼び出される場合に、どちらのモードで動作しているかを判断するスクリプトは、以下となります。 サーバー(Apex,SOQL) 利用しているモードを判定 ApexでSOQLを発行することによりLEXとClassicのどちらを利用しているかを判定する方法は以下となります。 Lightningユーザ権限の有無を判定 ApexでSOQLを発行することによりLightningユーザ権限を保持しているかを判定する方法は以下となります。 ※正確には、付与されている権限セットがあれば、その権限セットの同一カラムを参照する必要もあります。 メタデータ 組織でLEXが有効化されているかを判定する方法は以下となります。 true→有効、false→無効となります。

Continue reading