Salesforce

2/4ページ

FlowからApex呼び出し

  • 2019.07.19

概要 宣言的型の開発(UIベースでの実装)であるFlowからApex(プログラムベースでの実装)を呼び出して実行するプログラムの実装方法を記載します。特にApexの呼び出しで複数のパラメータを引数として渡したいパターンについて整理します。 InvocableMethod アノテーション まず、Flowから呼び出すApexクラスのメソッドには、InvocableMethodアノテーションをつけて、staticでpublicまたはglobalで宣言します。InvocableMethodアノテーションをつけたメソッドは、クラスに1つのみが宣言可能となります。 InvocableVariable アノテーション InvocableMethodのメソッドで入力もしくは出力のクラス変数のパラメータを定義する際には、InvocableVariable アノテーションを使用します。なので、InvocableMethodのメソッドで複数のパラメータを渡したい場合等には、入力用のクラスを宣言して、そのクラス変数としてInvocableVariableアノテーションをつけます。 サンプル サンプルでは、複数の取引先と親ケースのIDと件名をFlow等から呼び出しの引数として渡して、それらに紐付けたケースを一括作成するような処理を行なっています。 参考 InvocableMethod アノテーションhttps://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_InvocableMethod.htm InvocableVariable アノテーションhttps://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_InvocableVariable.htm

Salesforce CLIを整理してみた

  • 2019.06.02

概要 本記事は、Salesforce CLIで使用可能なコマンドを整理したものとなります。筆者が気になったコマンドついては、個別に実行してどのような結果となるかを試してみました。ただし、これらのコマンドは毎リリースで仕様が更新されているので最新情報は下記のURLで確認してください。https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference.htmなお、本記事に記載の情報は、summer’19(Ver46)時点のものとなります。 コマンド整理 alias Commands alias:list CLIのコマンドで使用できる別名をリスト表示 alias:set CLIのコマンドで使用できる別名を設定 sfdx force:alias:listローカルで使用しているユーザIDに対する別名をリストで確認することができます。sfdx force:alias:set YourAlias=username@example.com別名を設定することもできます。 apex Commands apex:class:create Apexクラスの作成 apex:execute Apexクラスの実行 apex:log:get 最後のデバックログを取得 apex:log:list デバックログIDのリストを表示 apex:log:tail ターミナルでデバックログのテイルを有効化 apex:test:report 特定のテストを実行した結果を表示 apex:test:run Apexのテストを実行 apex:trigger:create Apexトリガーの作成 sfdx force:apex:class:create -n sfdxCliApexTest -d ./classes/クラス名とローカルのディレクトリを指定してApexクラスを作成します。 sfdx force:apex:execute -f ./classes/sfdxCliApexTest.clsローカルのApexクラスをファイルを実行することができます。 sfdx force:apex:log:list auth Commands auth:jwt:grant JWTフローで組織へ認証 auth:list 認証済の接続情報をリストで表示 auth:logout 認証済みの組織からログアウト auth:sfdxurl:store SFDXの認証URLを使用して組織へ認証 auth:web:login ブラウザのログイン画面経由で認証 sfdx force:auth:web:login -a <別名> -r <インスタンスURL>通常のWEBのログイン画面でユーザID、パスワードで認証できます。 sfdx force:auth:listローカルでSalesforce組織に対して認証済の接続情報をリストで表示します。 config Commands config:get デフォルトのスクラッチ組織/DebHub/インスタンスURLの設定を取得 config:list CLIのための設定変数をリストで表示 config:set CLIのためのLocalとGlobalの設定変数を更新 sfdx force:config:listローカルでCLIのための設定変数をリストで表示します。 data Commands data:bulk:delete CSVファイルのレコードリストをバッチで削除 data:bulk:status BulkAPIのJob/バッチステータスをポーリング data:bulk:upsert BulkAPIによるUPSERTのJobかバッチを作成 data:record:create レコードをINSERT data:record:delete 単一レコードをDELETE data:record:get 単一レコードを表示 data:record:update 単一レコードをUPDATE data:soql:query SOQLを実行 data:tree:export sObjectとツリーフォーマット(json)で組織からデータをエクスポート data:tree:import sObjectとツリーフォーマット(json)で組織へデータをインポート sfdx force:data:record:update -s Account -i 0017F00000ezMN3QAM -v “Name=GenePoint-Update”-sでオブジェクト名、-iでID、-vで更新カラムと値を引数で渡すことでUPDATEできる sfdx force:data:record:update -s Account -w “Name=’GenePoint'” -v “Name=’GenePoint-Update'”-wでWHERE句のように条件を指定することもできる sfdx force:data:soql:query -q “SELECT Id, Name FROM Account”SOQLを実行して結果を表示する sfdx force:data:tree:export -q “SELECT Id, Name FROM Account”SOQLを実行してjson形式でデータをエクスポートする doc Commands doc:commands:display コマンドのヘルプを表示 doc:commands:list コマンドのリスト表示 sfdx force:doc:commands:listforce名前空間のCLIコマンドを全て一覧で表示 lightning Commands lightning:app:create Lightningアプリケーションを作成 lightning:component:create AuraコンポーネントかLWCの枠を作成 lightning:event:create Lightningイベントの枠を作成 lightning:interface:create Lightningインターフェースの枠を作成 lightning:lint Auraコンポーネントコードに対して静的解析、または「lint」ツールを実行 lightning:test:create Lightningテストを作成 lightning:test:install Lightning Testing Serviceに非管理パッケージを組織にインストール lightning:test:run Auraコンポーネントのテストを実行 limits Commands limits:api:display APIコールやイベントの制限について最大数と残数を表示 sfdx force:limits:api:display mdapi Commands mdapi:convert メタデータAPIで取得したメタデータをDXプロジェクトで利用できるソース形式に変換 mdapi:deploy 作成、更新したコンポーネントを組織にデプロイ mdapi:deploy:cancel 非同期のデプロイをキャンセル mdapi:deploy:report 非同期のメタデータのデプロイ状況をチェック mdapi:describemetadata 組織で有効なメタデータタイプを表示 mdapi:listmetadata 特定のメタデータタイプのプロパティを表示 mdapi:retrieve 対象の組織からメタデータをxmlファイルのZipを取得 mdapi:retrieve:report 非同期のメタデータの取得状況をチェック sfdx force:mdapi:describemetadata sfdx force:mdapi:listmetadata -m CustomObject org Commands org:clone (Beta) 設定ファイルかkey-valueのペアで指定された値を使ってSandbox組織をクローン org:create 設定ファイルかkey-valueのペアで指定された値を使ってSandbox組織かスクラッチ組織を作成 org:delete スクラッチ組織を削除 org:display 対象の組織の説明を表示 org:list CLIで作成したもしくは、認証した組織をリスト表示 org:open ブラウザで組織を表示 org:shape:create […]

SOQLの基礎

  • 2019.05.26

概要 本記事では、SOQLの基礎的な事項を実行のサンプルコードをベースにして整理しております。まずSOQLとは、Salesforce Object Query Languageの略であり、データベース(オブジェクト)から必要となるデータを取得する際に利用するものとなります。一般的なSQLとの違いは、いくつかありますが一つはSQLでは複数のテーブルを自由に条件指定することで結合してデータを抽出することができますが、SOQLではオブジェクト同士にリレーションがある場合にのみ結合することができます。また、SQLの’UPDATE’や’DELETE’のようなDMLはSOQLでは使用できないので、Apexで実行する必要があります。 Apexの中でSOQLを実行する2つの方法(静的SOQL、動的SOQL)から紹介します。 静的SOQL(インラインSOQL) Apexでは[ ]句によって、静的なSOQLを記載することができます。[ ]句の中では、 下記のようにバインド変数を使用することで条件を指定できます。 動的SOQL Apexの処理の中で実行するSOQLを動的に編集することができます。実行するSOQL文をStringでDatabase.queryに渡すことができます。SOQLの中で一つのレコードの取得に限定しているのであれば、sObjectで受けることができます。 複数件以上のレコードを取得するのであれば、sObjectのリストで受けます。 サンプルは下記の通りとなります。 また、バインド変数を使用しない例では下記のようにSOQL文を組み立てることもできます。 SOQLの構文(演算子) SOQLで使用することができる各構文(演算子)を記載していきます。 =(等号) >,<,>=,<=(不等号) INCLUDES/EXCLUDES 複数選択リストでの条件を指定する際に使用します。下記の例では、PassportおよびAadhar Card、もしくはPAN Cardのレコードを抽出する条件となります。 LIKE SQLで使用するのと同じように部分一致の検索を行う際に使用します。% と _ がワイルドカードしてサポートされています。%は、0文字もしくは複数の文字列を表します。_は、1文字を表します。 IN SQLで使用するのと同じように複数の項目をOR条件で一致する値を指定する際に使用します。 NOT IN SQLで使用するのと同じように複数の項目をOR条件で一致しない値を指定する際に使用します。 SUBQUERY IN句/NOT IN句には、リレーションがある子オブジェクト、または親オブジェクト条件で指定することができます。 子オブジェクトを条件に指定 親オブジェクトを条件に指定 LIMIT 取得するレコードの上限を指定できます。 OFFSET 取得するレコードの開始行を指定することができます。 GROUP BY ある項目で集計することでCOUNT/SUM/MAX/MIN関数を使用することが集計単位ごとの値を算出できます。 GROUP BY ROLLUP GROUP BYにの機能に加えて、実行結果に小計行を出力されることができます。 [実行結果イメージ] [実行結果イメージ] HAVING GROUP BYで集計した結果に対して、取得するレコードの条件を付与します。 リレーションを使用した値の取得、および条件指定 子から親へのアクセス 子オブジェクトから親オブジェクトをSOQLで使用したい場合は、対象の子オブジェクトで定義されている主従関係もしくは参照関係の項目により辿って親オブジェクトの所定の項目を指定できます。 カスタムオブジェクトの場合には、項目のAPI参照名の__cの部分を__rに変換して記載することになります。 親から子へのアクセス 親オブジェクトから子オブジェクトをSOQLで使用したい場合は、対象の子オブジェクトで定義されている主従関係もしくは参照関係の項目の子リレーション名により辿って子オブジェクトの所定の項目を指定できます。contactsが子リレーション名になります。 カスタムオブジェクトの場合には、子リレーション名に__rを付与して記載することになります。 参考 動的SOQLhttps://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_dynamic_soql.htm複数選択リストのクエリhttps://developer.salesforce.com/docs/atlas.ja-jp.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_querying_multiselect_picklists.htm

Spring’19の認定資格を更新

  • 2019.05.19

概要 本記事は、Salesforceに置けるSpring’19のリリース内容について各種認定資格を更新するためのTrailheadで学習したもののサマリとなります。なお、更新を行ったのは、下記の3つの認定資格となります。アドミニストレーター認定資格の更新 (Spring’19)https://trailhead.salesforce.com/ja/content/learn/modules/administrator-maintenance-spring19Platform アプリケーションビルダー認定資格の更新 (Spring ’19)https://trailhead.salesforce.com/ja/content/learn/modules/platform-app-builder-maintenance-spring19Platform デベロッパー資格の更新 (Spring ’19) https://trailhead.salesforce.com/ja/content/learn/modules/platform-developer1-maintenance-spring19 アドミニストレーター セールスプロセス全体のカスタマイズ リードと商談のフェーズをカスタマイズできるため、リードがどこでどのように商談に変更されたかを確認できる。 Lightning Experience の結合レポート 最大 5 つのブロックを含めた結合レポートを使用して、さまざまな種類の情報を 1 つのレポートに表示できる。各ブロックには、1 つの標準レポートタイプまたはカスタムレポートタイプからデータを表示できる。結合レポートは、複数のレポートタイプをまたがって Salesforce データを分析するのに適している。1つのオブジェクトの複数のビューを同時に取得することもできる。 Lightning Experience での取引先チームの削除取引先チームのメンバーを一括で削除することができる。 パートナー取引先のリレーションとデータ共有ルールの作成 パートナー取引先間のデータ共有において、取引先データリレーショナル共有ルールを作成して、取引先リレーションで対象レコードと関連づけることで実現できる。取引先リレーションデータ共有ルールは、取引先、取引先責任者、キャンペーン、ケース、リード、商談、注文、カスタムオブジェクトに適用できる。 マクロでの相対日付を使用した正確な日時の設定マクロで設定する 日付で具体的な日付ではなく、実行日から特定の日数が経過した相対日付を指定することできる。 Lightning ページから別のテンプレートへの切り替え Lightning アプリケーションビルダーで Lightning ページのプロパティを表示するときに、[テンプレート] 項目の横にある [変更] からできる。 アプリケーションビルダー Flow Builder を使用したより直感的なフローの作成 クラウドフローデザイナから大幅にUIが改善されたFlowビルダーで作成できるようになった。Flowビルダーでは、Adobe Flashをインストールする必要がない。 Lightning Web コンポーネントの作成 Lightning Web コンポーネントと Aura コンポーネント (元のモデル) の 2 つのプログラミングモデルを使用して、Lightning コンポーネントを作成できるようになった。Lightning Web コンポーネントは、HTML と最新の JavaScript を使用して作成されたカスタム HTML 要素である。Lightning Web コンポーネントと Aura コンポーネントは 1 つのページで共存および相互運用できる。どちらも Lightning コンポーネントとしてシステム管理者やエンドユーザに表示されます。現時点では、開発者コンソールで作成、編集することはできず、Salesforce CLIによりデプロイする必要がある。 VSCodeのExtensionを使うと良い。 リッチテキストコンポーネントは Quill テキストエディタを使用 リッチテキストコンポーネントは Quill テキストエディタを使用リッチテキストコンポーネントが Lightning Locker とスムーズに連携するように、テキストエディタを CKEditor から Quill に変更となった。CKEditor・・・WYSIWYG※1の一種で、ワードのような操作でHTMLが記述できるツールである。※1What You See Is What You Get(見たままが得られる)Quill・・・オープンソースのWYSIWYGエディタで、JavaScriptで作られていて、Webサイト上で手軽にWYSIWYG対応のテキスト編集機能を提供することができる。 標準およびカスタムユーザ権限に基づくコンポーネントの表示の設定ページを表示する ユーザの権限を基にコンポーネントの表示条件を設定して、Lightning ページをより動的にすることができるようになった。 デベロッパー Auth.VerificationResultクラスSystem.UserManagement.verifySelfRegistration メソッドの結果を保存する。このメソッドは、独自の検証ページを作成したときに呼び出す検証の結果を返す。ユーザが正常に作成された場合、検証状況とセッション ID が含まれる。 System.OrgLimitクラスインスタンスの名前、現在の値、および最大制限を返すメソッドが含まれます。getName() – 制限の名前を返す。getValue() – 使用制限値を返す。getLimit() – 制限の最大値を返す。 System.OrgLimits クラスすべての組織制限のリスト、またはすべての組織制限の名前と値の対応付けが含まれる。getAll() – OrgLimit インスタンスのリストを返す。getMap() – すべての OrgLimit インスタンスと制限名の対応付けをキーとして返す。 AppLauncher.LoginFormController クラスloginGetPageRefUrl(username, password, startUrl)メソッドこのメソッドは、特定のユーザ名とパスワードを使用してユーザをログインする。Lightning 環境でログインに成功した場合、ユーザは startUrl で指定されたページにリダイレクトされます。非 Lightning 環境では、メソッドによって返される startUrl を使用してリダイレクトをプログラムする。ログインに失敗すると、エラー文字列が返される。 Auth.AuthConfiguration クラスgetCertificateLoginEnabled(domainUrl)メソッド証明書ベースの認証が [私のドメイン] の URL で有効になっている場合、true を返す。getCertificateLoginUrl(domainUrl, startUrl)メソッド組織で証明書ベースの認証が有効になっている場合、[私のドメイン] の URL の証明書ベースの認証エンドポイントを返す。 Auth.SessionManagement クラスfinishLoginDiscovery(method, userId)メソッド[私のドメイン] のログイン検出ログインプロセスを完了する。 System.SObject クラスisSet(fieldName)メソッドクエリ対象の sObject 項目に関する情報を返す。sObject 項目が直接割り当てか SOQL クエリへの追加によって入力されている場合、true を返す。sObject 項目が設定されていない場合、false を返します。無効な項目が指定されている場合、SObjectException が発生する。isSet(field)メソッドクエリ対象の sObject 項目に関する情報を返す。sObject 項目が直接割り当てか SOQL クエリへの追加によって入力されている場合、true を返す。sObject 項目が設定されていない場合、false を返します。無効な項目が指定されている場合、SObjectException が発生する。 System.UserManagement クラスinitSelfRegistration(method, user)メソッドコミュニティセルフ登録用の独自の検証ページを作成するときに、このメソッドを使用して検証を呼び出す。sendAsyncEmailConfirmation(userId, emailTemplateId, networkId, startUrl)メソッドユーザのメールアドレスに検証用のメールメッセージを送信する。このメッセージには、ユーザが後でメールアドレスを検証するためにクリックする検証リンク (URL) が含まれます。メール検証を一括で送信できる。verifySelfRegistration(method, identifier, code, startUrl)メソッドコミュニティセルフ登録用の独自の検証ページを作成するときに、このメソッドを使用して検証を完了する。登録を行っている人が検証コードを正常に入力すると、ユーザが作成されてログインされる。 System.Test クラスstopTest()メソッドレコード変更プロセスとイベントプロセス (プロセスビルダーで作成) のスケジュール済みアクションを実行し、時間ベースの再開イベントを待機しているフローを再開します。 System.String クラスformat(stringToFormat, formattingArguments)メソッドformattingArguments パラメータ種別は、パラメータとして非文字列オブジェクトを許可するために List<String> の代わりに List<Object> を使用するようになった。第 1 引数をパターンとして扱い、第 2 引数を置換および形式設定に使用して文字列を返す。この置換および形式設定は、apex:outputText および Java MessageFormat クラスと同じ方法である。第 2 引数の List の非文字列型は、その型に存在する […]

VSCodeでSalesforceのPackage.xmlを作成

  • 2019.05.17

概要 本記事では、VSCodeのExtensionを使うことでSalesforceの対象組織のメタデータを抽出するのに必要となるPackage.xmlを作成する方法を記載します。 Extension 使用するExtensionは下記になります。なので、まずはこれをVSCodeにインストールします。Salesforce Package.xml Generator Extension for VS Codehttps://marketplace.visualstudio.com/items?itemName=VignaeshRamA.sfdx-package-xml-generator Usage SFDXのプロジェクトを作成 コマンドパレット(Cmd+Shift+P)を開き、 SFDX: Create Project with Manifestを実行します。下記のように空のプロジェクトが作成されます。 SFDXで対象の組織を認証 コマンドパレット(Cmd+Shift+P)を開き、 SFDX: Authorize an Orgを実行します。ProductionかSandboxかを選択するとログイン画面遷移するので、ログインIDとパスワードでログインを実施します。下記のOAuthの認可画面で許可することで、VSCodeから組織の情報にアクセスできるようになります。 package.xmlを作成 コマンドパレット(Cmd+Shift+P)を開き、SFDX Package.xml Generator: Choose Metadata Componentsを実行します。Eclipse Force.com IDEと同じような感じの下記の画面が表示されるので必要なメタデータを選択して、Update Package.xmlを押下することでpackage.xmlが更新されます。 package.xmlを元にメタデータを取得 コマンドパレット(Cmd+Shift+P)を開き、SFDX: Retrieve Source in Manifest from Orgを実行します。 まとめ Force.com IDEと同じようにPackage.xmlを作成することがVSCodeでできるようになったのはとても良いと思いました。ただ、公式ではないので実務での使用には注意が必要そうです。 参考 Org Development Model with VS Codehttps://forcedotcom.github.io/salesforcedx-vscode/articles/user-guide/org-development-model Github(vignaesh01/sfdx-package-generator)https://github.com/vignaesh01/sfdx-package-generator

JavaのアプリからSalesforceのREST APIをコールする方法

API
  • 2019.04.30

概要 Javaのアプリケーション等の外部システムからSalesforceのREST APIをコールするには、事前にSalesforceの対象組織に対してログイン認証をする必要があります。本記事ではその部分をJavaのSpring Bootのフレームワークでどのように実装するかについて、サンプルコードを交えて整理しております。また、そのアプリでSalesforceとのOAuthでの認証を実現する方法、Herokuへのデプロイする方法も簡単に記載しております。 構成 今回は下記のような構成で外部システムにあたる部分を実装します。 アプリ:Spring Boot(Java) 基盤:Heroku Javaアプリの作成 最初にSpring Initializr(https://start.spring.io/)からスケルトンを作成します。今回は、ビルドツールはMavenを使用します。 pom.xmlファイルの作成 今回使用するライブラリをpom.xmlファイルに定義します。 ポイントは下記を使用する点となります。spring-security-oauth2・・・SpringにおいてOAuthの認証を実現するために使用します。spring-security-oauth2-autoconfigure・・・Spring Security OAuth2の設定をシンプルに実現するために使用します。 SSOでのOAuth認証を実装 OAuth2 コンシューマがアクセストークンを取得するためには、OAuth2 コンシューマが動作するアプリケーションを利用するユーザーによる OAuth2 プロバイダ認証がとおる必要があります。そのため、取得したアクセストークンで OAuth2 プロバイダのリソースサーバから確かにユーザーの情報が取得できることを確認することを、現在 OAuth2 コンシューマが動作するアプリケーションを利用しているユーザーの Sign On 処理に代えることができます。ユーザーは OAuth2 コンシューマが動作するアプリケーションではログイン処理を行わず、OAuth2 プロバイダでのみログイン認証を行えばよいため、これは Single Sign On の実現方法のひとつです。この Single Sign On を実現するために OAuth2 コンシューマとして必要な処理は、Spring Security OAuth の@EnableOAuth2Sso アノテーション設定で実現できます。 設定ファイルを読み込みREST APIをコール application.propertiesに定義した設定を読み込み、SalesforceのREST APIをコールします。コンシューマ鍵とコンシューマの秘密鍵はHerokuの環境変数で設定するようにします。 REST APIのレスポンスを変換 REST APIのレスポンスのJSON文字列を変換するために下記のクラスを定義しておきます。 Salesforceで接続アプリケーションを作成 設定メニューのクイック検索で”アプリケーションマネージャ”を検索します。※”接続アプリケーションを管理する”のメニューからは新規での作成ができないので注意が必要です。 接続アプリケーション名、API参照名、メールアドレスを入力します。 OAuthを有効化して、スコープとコールバックURLを入力します。なお、コールバックURLには、Herokuにデプロイ後に決まる下記のURLを設定します。https://YOUR_HEROKU_APP_NAME.herokuapp.com/login これでコンシューマ鍵とコンシューマの秘密が発番されるので、後ほどHerokuの環境変数に設定します。 Herokuへアプリをデプロイ まずはHerokuでアプリケーションを作成します。ここで入力したアプリ名がデフォルトのURLに含まれます。 アプリケーションを作成すると下記のようなHeroku Gitが作成されるので、こちらにアプリをPushします。https://git.heroku.com/YOUR_HEROKU_APP_NAME.git デモ アプリケーションのURLへアクセス→Salesforceのログイン画面へ遷移→OAuthの認可→REST APIのコール結果を表示となります。 参考 Spring Boot and OAuth2https://spring.io/guides/tutorials/spring-boot-oauth2/ Deploying Spring Boot Applications to Herokuhttps://devcenter.heroku.com/articles/deploying-spring-boot-apps-to-heroku 最後に 今回のサンプルコードは、下記にありますのでよかったら確認してください。こちらから直接Herokuへデプロイすることもできます。https://github.com/yhayashi30/restapi-salesforce-sso

VisualforceでreCAPTCHAを実装

  • 2019.04.21

概要 SalesforceのCommunityやSites等で外部へ公開するページをVisualforceで実装する場合にBotによる標準型攻撃を受けないようにするための対策としてGoogle社が提供するreCAPTCHA(リキャプチャ)を使用して認証を実装するサンプルコードと手順を紹介します。 Googleへサイトの登録とAPIキーを発行 まず、下記のURLからGoogleへサイトの登録とAPIキーの発行を行います。右上のAdmin Consoleから登録できます。https://www.google.com/recaptcha/intro/v3.html 現在、Google社が提供しているreCAPTCHAには最新のv3と旧のv2がありますが、v2も引き続き使用できるようですので、そちらを使用したいと思います。また、ドメインには、公開サイトとなるCommunityやSitesのドメインを指定するようにしてください。今回は、テストで動作確認するのみなので、force.comを指定しておきます。 ここまでの入力が完了すると、Public KeyとSecret Keyが発行されます。こちらを実装するときに使用します。 Salesforceでリモートサイトへ登録 Apexでサーバー側で認証する際に、Googleのサーバーへリクエストする必要があるので、SalesforceのリモートサイトへURLを登録しておく必要があります。 Visualforceの実装 Visualforceでの実装サンプルは下記の通りとなります。チェックボックスの押下により発行されたトークンをhiddenの項目に保持しておき、サーバー送信時にPostします。 サーバー側(Apex)の実装 サーバー側(Apex)の実装サンプルは下記の通りとなります。クライアントからポストされたトークンとSecret Keyをパラメーターにして、所定のGoogle社のURLへPOSTして認証を実施して、レスポンスで結果を確認します。 デモ 下記のようの動作となりました。 参考 Adding CAPTCHA to Force.com Siteshttps://developer.salesforce.com/index.php?title=Adding_CAPTCHA_to_Force.com_Sites&oldid=27283 reCAPTCHA v2https://developers.google.com/recaptcha/docs/display Verifying the user’s responsehttps://developers.google.com/recaptcha/docs/verify 最後に 下記に今回のサンプルコードは格納しておりますので、よければ参考にしてください。https://github.com/yhayashi30/reCAPTCHA-salesforce-visualforce

SalesforceのメールをSendGrid経由で送信する

  • 2019.04.20

概要 Salesforceから送信するメールは、Salesoforceのメールサーバから送られます。スパムや迷惑メールの対策のためにSalesforce外のメールサーバーを経由して送信する為には、メールリレーの機能を使用することで実現可能となります。本記事では、メールリレーを使用してクラウドでメール送信のサービスを提供しているSendGridを経由するように設定する方法を紹介します。メールリレーを使用するよくあるシチュエーションは、なりすましメールの対策として自社のメールサーバーを経由させることで、送信元のメールアドレスのドメインと一致させるような場合となります。SendGridを経由させることのメリットとしては、SendGridはメールのBlockやバウンス、送達率などが管理コンソールで確認する機能がSalesforceよりも優れているという点が考えられます。 SendGridのアカウント作成 SendGridは、テスト用であれば本家でこちらから登録できます。https://sendgrid.com/実際に運用で使用する場合は、構造計画研究所が正規代理店となっている下記から登録が必要となります。https://sendgrid.kke.co.jp/ メールリレーの設定 設定の[クイック検索]ボックスからメールリレーで検索します。 メールリレーを作成します。SendGridのホスト名とポートは下記の通りに指定します。 https://support.sendgrid.kke.co.jp/hc/ja/articles/204187885-SMTP%E3%81%AE%E6%8E%A5%E7%B6%9A%E6%83%85%E5%A0%B1%E3%82%92%E6%95%99%E3%81%88%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84-ホスト名:smtp.sendgrid.netポート番号:25TLS設定:検証して必須SMTP認証を必須:チェックユーザ名:SendGridのアカウントを入力 メールドメイン検索条件の設定 設定の[クイック検索]ボックスからメールドメイン検索条件の指定で検索します。 この設定では、メールリレーを使用する送信者と受信者のドメインを指定することができます。 以上で設定は完了です。これで試しにSalesforceからメールを送信するとSendGrid経由でメールが送信されているはずです。 メールログで送信履歴を確認 設定で[クイック検索]ボックスからメールログファイルを検索します。 ダウンロードしたCSVファイルにテストで送信したメールがメールリレーでSendGrid経由で送信されていることを確認できます。 SendGridの管理画面で確認 SendGridの管理画面にアクセスして送信履歴を確認することもできます。 https://app.sendgrid.com 参考 メールリレーの設定https://help.salesforce.com/articleView?id=email_relay.htm&type=5 メールドメイン検索条件の指定https://help.salesforce.com/articleView?id=emailadmin_email_domain_filter.htm&type=5 メールログのリクエストhttps://help.salesforce.com/articleView?id=email_logs_edit.htm&type=

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

  • 2019.04.02

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

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

  • 2019.03.30

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

1 2 4