概要 Lightning Web Componentで複数のコンポーネント間でパラメータを引き渡して連動して動作するための通信を行う仕組みについて整理してみました。Custom EventとLightning Message Serviceの方法を用いて、下記のように殆ど同じ動作をするサンプルを作ってみたので、それぞれでどのような実装になるかを記載します。 デモ ソースコードはこちらhttps://github.com/yhayashi30/lwc-pub-sub Custom Event デモ Lightning Message Service デモ Custom Event Custom Eventは標準のDOMイベントとなります。Custom Eventは、コンポーネント間が階層になっている場合に上位と通信する際に使用することができます。detailパラメータであらゆる型のデータを引き渡すことができます。 Custom EventのPublisher サンプルコード Custom Eventを作成するには、CustomEvent() コンストラクタを使用します。Custom Event() コンストラクタでは、第一引数のイベント名を表す文字列のみが必須のパラメータとなります。(サンプルでは”selected”を使用。onは付けなくて良いので注意。)Custom Eventをディスパッチするには、EventTarget.dispatchEvent() メソッドを引数に作成したCustom Eventをセットして実行します。Custom Event自体にパラメータを設定したい場合には、detailプロパティを用いてJSONで自由に定義して、受信側でeventリスナーを通じてアクセスすることができます。サンプルコードでは選択したContactのSalesforce IDを渡すようになっております。 Custom EventのSubscriber サンプルコード subscriberとなるコンポーネントでは、publisherのコンポーネント(c-custom-event-publisher)を子コンポーネントとして設置します。publisherで作成したCustom Eventのイベント名に”on”を付与して(今回のサンプルコードでは”onselected”となる)リスンします。 Lightning Message Service Lightning Message Serviceを使用することで、Lightningページ内のコンポーネント間でフラットに通信を行うことができます。同じ Lightning ページに組み込まれた Visualforce ページ、Aura コンポーネント、および Lightning Web コンポーネント間で通信を行うこともできます。Lightning Message Serviceを使用するには、各コンポーネントから呼び出すLightning メッセージチャネルが必要となります。Lightning メッセージチャネルを作成するには、LightningMessageChannel メタデータ型を使用します。LightningMessageChannel を作成するには、SFDX プロジェクトを用いて、force-app/main/default/messageChannels/ ディレクトリにXMLの定義を含める必要があります。LightningMessageChannelのファイル名は、messageChannelName.messageChannel-meta.xml 形式とします。これを作成して、対象の組織にデプロイします。 Lightning メッセージチャネルのサンプル SFDXプロジェクトの以下のディレクトリに作成します。/force-app/main/default/messageChannels Record_Selected.messageChannel-meta.xml LMSのPublisher サンプルコード PublisherのコンポーネントからメッセージチャネルでメッセージをPublishするには、範囲設定されたモジュール @salesforce/messageChannel をコンポーネントの JavaScript ファイルに含め、Lightning Message Service の publish() 関数をコールします。 Publisherのコンポーネントの JavaScript ファイルでは、メッセージチャネルと、メッセージチャネルを操作するために必要な Lightning Message Service 関数をインポートします。 上記でインポートした@wire(MessageContext) を使用して MessageContext オブジェクトを作成します。 handleContactClick() メソッドは、Publishするメッセージコンテンツを作成します。Lightning Message Service の publish() 関数は、メッセージコンテキスト、メッセージチャネルの名前、メッセージペイロードの 3 つのパラメータを取ります。メッセージペイロードには自由にパラメータを設定することができるので、今回のサンプルコードではContactのSalesforceIDを設定します。 LMSのSubscriber サンプルコード Subscriberのコンポーネントでも、メッセージチャネルでメッセージの登録および登録解除を行うには、メッセージチャネルを @salesforce/messageChannel 範囲設定されたモジュールから Lightning Web コンポーネントにインポートします。 Lightning Message Service の subscribe() 関数と unsubscribe() 関数をJavaScriptファイルの中で呼び出すことで制御します。@wire(MessageContext) を使用してコンテキストオブジェクトを作成します。 connectedCallback()でコンポーネントの初期化処理で、Lightning Message Service の subscribe() メソッドをコールして subscription に割り当てます。subscribe() メソッドは、メッセージコンテキスト、メッセージチャネルの名前、公開されたメッセージを処理するリスナーメソッドの 3 つの必須パラメータを取ります。 disconnectedCallback()でコンポーネントの削除処理の中で、Lightning Message Service からのメッセージの受信を停止するためにお、登録参照を渡して unsubscribe() をコールします。 Custom Event vs LMSの比較 参考 Communicate with Eventshttps://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.events Message Servicehttps://developer.salesforce.com/docs/component-library/bundle/lightning-message-service/documentation Lightning Message Service を使用した DOM 間の通信https://developer.salesforce.com/docs/component-library/documentation/ja-jp/lwc/lwc.use_message_channel ライフサイクルフックhttps://developer.salesforce.com/docs/component-library/documentation/ja-jp/lwc/lwc.reference_lifecycle_hooks
概要 本記事では、Salesforceの主に外部サイトの構築のログイン認証で使用するソーシャルサインオンを整理します。ソーシャルサインオンではSalesforceがRP(Relying Party)となり、認証/認可はソーシャル(Facebook/Google/Twitter etc)で行います。基本的にはOpenID Connectを用いたシングルサインオンとなるため、内部ユーザというよりExperience Cloudなどの外部ユーザのログインに使用されるケースが多いかと思います。 内部ユーザ向けに利用されるSAMLの認証フローについては下記の記事を参考にしてください。 OpenID Connectとは RESTベースで実装されており、クラウド系のサービス、アプリケーションに向いた仕組みである。OpenIDに対応した実装を作るプログラマ視点で見るとSAMLよりも容易に実装を構築できる。先にRPにアクセスするユースケースしかサポートしていないため、ログインポータルを作ることはできない。OpenID ConnectはOAuthの技術をベースにしている。OAuthは厳密にはSSOではなく、権限移譲のためのプロトコルである。 OpenID ConnectやOAuthについて、詳細の流れやフローについては下記の記事を参考にしてください。 ソーシャルサインオンの認証フロー ソーシャルサインオンの認証フローはOpenID Connectを用いており、下記のようなシーケンスとなっております。 ソーシャルサインオンの設定 Facebookに認証用のアプリを作成 Facebookの開発者サイトから自分のアカウントにログインしてアプリ作成を行います。https://developers.facebook.com/ アプリIDとapp secretを取得します。 認証プロバイダの作成 FacebookをIDPとする認証を行うためにSalesforceの認証プロバイダを作成します。プロバイダタイプは「Facebook」を選択し、取得したアプリID→コンシューマ鍵、app secret→コンシューマの秘密を入力します。登録ハンドラは、一旦[登録ハンドラテンプレートを自動作成]を選択しておきます。 登録ハンドラーを更新 開発者コンソールから自動生成されたApexを下記のGitHubのサンプルコードで上書きします。なお、プロファイル名やアカウント名などはサンプルなので組織の情報に合わせてアップデートする必要があります。https://github.com/salesforceidentity/IdentityTrail-Module3/blob/master/SimpleFacebookRegistrationHandler.cls 外部サイトへの紐付け Experience Cloudのワークスペース – 管理 – ログイン&登録の設定で先ほど作成した認証プロバイダを有効化します。 FacebookのアプリにリダイレクトURIを登録 動作検証 外部サイトにアクセスしてログイン画面に表示されているFacebookのアイコンを押下します。 Facebookのログイン画面にリダイレクトされます。 Facebookへのログインが成功すると、Facebookの認可の画面が表示されます。 許可するとContactやUserが自動生成されてサイトへログインしている状態となりました。 参考 ソーシャルサインオンの設定https://trailhead.salesforce.com/ja/content/learn/modules/identity_external/identity_external_social 認証プロバイダhttps://help.salesforce.com/articleView?id=sf.sso_authentication_providers.htm&type=5 登録ハンドラーhttps://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_auth_plugin.htm
概要 本記事ではSAML認証フローを用いてシングルサインオンを実現する流れをSalesforceのプラットフォームでの設定を用いて仕組みを整理します。 主な用語の内容は以下の通りになります。 Idp Identity Provider。ユーザーのIDやパスワードなどの認証情報を提供する役割を果たす。 SP Service Provider。IdPに認証を委託し、IdPによる認証情報を信頼してユーザーにサービスを提供する。OpenID Connectの場合には、RP (Relying Party) ともいう。 SAMLとは SAMLは、Security Assertion Markup Languageの略であり、Webサービスベースのシングルサインオンプロトコルである。認証情報のやりとりなどにXMLを利用。企業向けの従来型のソフトウェア製品などで採用されているケースが多い。利用者先にIdpにアクセスするユースケース(Idp Initiated)と、先にSPにアクセスするユースケース(SP Initiated)の両方をサポートしている。 OpenID Connectとの使い分け SAMLはOpenID Connectとは違いIdpとSPが直接通信を行う必要がないという点が一番大きな違いであるため、大体の使い分けは以下の通りになります。 SAML・・・エンタープライズ向け OpenID Connect・・・コンシューマーサービス向け SAMLフロー種類 Idp-Initiated Idp-Initiatedフローは、Idp側が起点となるのでユーザがIdpのログイン画面等にアクセスする処理から始まり、認証を行った後にSAMLレスポンスに含むSAMLアサーションをSPで検証してログイン状態とします。 SP-Initiated SP-Initiatedフローは、SP側が起点となり未ログインであった場合にはIdpへリダイレクトしてIdpで認証を行った後にSAMLレスポンスに含むSAMLアサーションをSPで検証してログイン状態とします。 SalesforceでのSAML SalesforceでのSAML認証フローを用いたシングルサインオンの設定を確認していきます。 統合IDを設定する シングルサインオンでログインするSalesforceのユーザに保持する統合IDを設定します。 SSOプロバイダを作成する シングルサインオン設定で『SAMLを有効化』をチェックします。 SAMLシングルサインオン構成を作成します。 上記のシングルサインオン設定に対してIDプロバイダから返されるSAMLアサーションのサンプルは以下の通りとなります。 Salesforceのログイン画面へIDPを追加 [私のドメイン]の認証設定で上記のIDPを認証サービスとして選択することで、IDPのログイン画面へリダイレクトさせることができるようになります。 参考 内部ユーザのシングルサインオンの設定https://trailhead.salesforce.com/ja/content/learn/modules/identity_login/identity_login_sso SAML シングルサインオンを使用するサービスプロバイダとして Salesforce を設定https://help.salesforce.com/articleView?id=sf.sso_saml.htm&type=5 [私のドメイン] ログインページへの ID プロバイダの追加 https://help.salesforce.com/articleView?id=sf.domain_name_login_id_prov.htm&type=5
概要 SalesforceのLightning Web Component(LWC)をローカルサーバーで動かせる機能がBeta版でリリースされていたので、どんなものかを触って確かめてみました。 準備 Local Dev Server用のCLIをインストール 最終的にはSalesforce CLIのパッケージに含まれるようですが、現在はBeta版なので含まれていないので、個別にインストールする必要があります。 組織の認証 Devhub組織と認証して、Scratch組織を作成しておきます。どうやら接続先はSandboxではなくScratch組織である必要があるみたいです。この辺は結構前に書いた記事ですが、下記をご参照ください。 Salesforce DXの基礎の基礎https://qiita.com/yhayashi30/items/80dd868f2e15aac67072 ローカルサーバーを起動 下記のコマンドを実行することでnode.jsがローカルサーバーを起動してくれます。 また、VSCodeのコマンドパレットで下記を実行して操作することもできます。 起動して開くSFDX: Open Local Development Server 起動SFDX: Start Local Development Server 停止SFDX: Stop Local Development Server 表示(選択したLWCのソースコードを右クリック)Preview Lightning Web Components in VS Code これで準備ができたので、localhostにアクセスすると画面が表示されるはずです。 http://localhost:3333/ 特徴 ローカルのLWCを画面描画 最初、localhostにアクセスすると自分のローカルプロジェクトに含まれているLWCがリンクでリスト表示されます。 リンクをクリックすると、LWCがローカルサーバー上で表示されます。また、画面右上にある”View in VS Code”のボタンを押下すると、画面で表示しているLWCのソースコード をVS Code上で表示してくれます。VS Code上でLWCのソースを修正すると即時にローカルサーバーにデプロイが行われて画面が最新化されるようになっているようです。 コンパイルチェックしてくれる 今までSalesforceの開発ではSandboxやScratch組織にソースコードをアップロードしないとコンパイルのチェックはできませんでしたが、ローカルサーバーを使う事でLWCの構文チェックを行ってくれて、どこでエラーが発生しているかを表示してくれます。ちなみにエラー画面は下記のようなイメージで、どこでエラーが起きているかやエラーメッセージも表示されます。 データ表示 LWCはローカルサーバーで動いているのですが、Apexの処理は接続しているScratch組織上で実行するようになっているので、組織のデータを検索したり、登録/更新することも可能なようです。 参考 Local Development (Beta)https://developer.salesforce.com/tools/vscode/en/lwc/localdev Announcing LWC Local Development Betahttps://developer.salesforce.com/blogs/2019/10/announcing-lwc-local-development-beta.html
概要 本記事では、業界標準であるOAuth2.0とOpenID Connectの概要を紹介した後に、Salesforceではそれらをどのように実装することができるのかを簡単に記載していきたいと思います。 本記事のベースとなるOAuth2.0やOpenID Connectの技術的な事項はこちらの本で学習しました。クライアント、認可サーバー、保護対象リソースのそれぞれについてサンプルのソースコードでどのように動作するかが詳細に記載されており理解するのに非常に役に立ちました。おすすめです。 認証・認可とは それぞれ詳細を説明すると非常に長くなるのですが、あえて一言で言うと下記で表せます。 認証 通信の相手が誰(何)であるかを確認すること 認可 とある特定の条件に対して、リソースアクセスの権限を与えること Salesforceにおける認証・認可とは Salesforceで実現可能な認証・認可の仕組みは下記が上げられます。 # 名称 概要 機能名 1 フォーム認証 Webブラウザでユーザ名とパスワードを入力する最も基本的な認証方式 標準ログイン画面 2 2要素認証 認証に2つ目の要素を追加することでセキュリティを強化する Salesforce Authenticator 3 SSO 一回の認証で複数のサービスを利用できる仕組みSalesforceは、IdpとSPのどちらになることもできる SAMLシングルサインオン 4 証明書認証 PCもしくはモバイルデバイスに配布されたクライアント証明書でログイン認証を行う 証明書認証 5 OAuth/OpenID Connect ←本記事ではこれを解説 外部アプリケーションにSalesforceのデータへのアクセスする際にその認可を与える仕組み 接続アプリケーション 6 Social Sign on ソーシャルアカウントで認証を行う 認証プロバイダ 7 代理認証 ユーザの認証を外部サービスで行う外部サービスはSalesforceが指定するWSDLに合わせたインターフェースを実装する必要がある 代理認証 OAuth2.0とは 概要 OAuth2.0は、業界標準でありRFCに下記のように定義されております。RFC6794(The OAuth 2.0 Authorization Framework)https://tools.ietf.org/html/rfc6749 ‘OAuth 2.0 は, サードパーティーアプリケーションによるHTTPサービスへの限定的なアクセスを可能にする認可フレームワークである. サードパーティーアプリケーションによるアクセス権の取得には, リソースオーナーとHTTPサービスの間で同意のためのインタラクションを伴う場合もあるが, サードパーティーアプリケーション自身が自らの権限においてアクセスを許可する場合もある. 本仕様書はRFC 5849に記載されているOAuth 1.0 プロトコルを廃止し, その代替となるものである.’ 言い換えると、下記のように表せます。 リソース所有者の代わりとして対象のリソースへのアクセスを許可するための手段 サード・パーティー製のアプリケーションがHTTPサービスへの制限されたアクセス権を取得できるするようにするためのもの OAuthとはシステムを構成しているある要素から別の構成要素にアクセス権を渡すためのもの では、なんのためにOAuthを使用して認可をするかというと サード・パーティ製のアプリケーションにユーザーの ID & パスワードを渡さない となります。 概要イメージ 0. まずユーザであるリソース所有者がクライアントのアプリケーションを使用します。1. クライアントは、保護対象リソースへアクセスするために一旦認可サーバーへリクエストを行います。2. 認可サーバーはリソース所有者との間でユーザ認証および認可を行います。3. 認可サーバーはユーザとの認証・認可が完了しているので、クライアントへアクセストークンを返却します。4. クライアントは、保護対象リソースへアクセストークンを利用してAPIアクセスを行います。 各構成要素 クライアント ・・・ ソフトウェアであり、リソース所有者の代わりとして保護対象リソースへのアクセスを行うもの 認可サーバー ・・・ OAuthの仕組みの中心的な役割を担うHTTPサーバーのこと. リソース所有者にクライアントを認可するための仕組みを提供し、トークンをクライアントに発行するもの リソース所有者 ・・・ クライアントにアクセス権を委譲する権限を持つ存在. ソフトウェアでなくユーザー. 保護対象リソース ・・・ HTTPサーバーから提供されており、そのリソースにアクセスするにはOAuthのトークンが必要となる. 保護対象リソースは提示されたトークンを検証して、リクエストに応えるかを判定する アクセストークン ・・・ 認可サーバーによってクライアントへ発行され、クライアントに権限が委譲されたことを示すもの スコープ ・・・ 保護対象リソースでの権限を表すものであり、クライアントに付与されるアクセス権限を制限するための仕組み リフレッシュトークン ・・・ 新しいアクセストークンを発行するために使用する 認可コードフロー(Authrorization Code Grant Type) OAuthのいくつかあるフローの中で最も標準的なフローである認可コードフローは下記のようになります。 認可リクエスト/認可レスポンスのイメージ response_type=codeで認可コードフローを指定 codeの値が発行された認可コード トークンリクエスト/トークンレスポンスのイメージ grant_type ・・・ authorization_codeで認可コードフローを指定。 その他のフロー # フロー名 概要 1 認可コードフロー(Authorization Code Type) 最も標準系のフロー。クライアントが認可コードを経由してアクセストークンを取得する。 2 インプリシットフロー(Implicit Grant Type) JavaScriptアプリケーション等で完全にブラウザ内で動作している場合に使用する。クライアントは認可エンドポイントから直接アクセストークンを取得する。 3 クライアント・クレデンシャルフロー(Client Credentials Grant Type) ユーザに関係なくクライアントアプリへ直接アクセストークンを発行する。 4 リソースオーナー・パスワード・クレデンシャルズフロー(Resource Owner Password Credentials Grant Type) 基本的に非推奨。(アンチパターン)アプリケーション側でID、PWを入力させて、それをトークンエンドポイントへ送り直接アクセストークンを取得する。 5 リフレッシュトークンフロー(Refresh Token Grant Type) リフレッシュトークンを使用して、アクセストークンの再発行を行う。 OpenID Connectとは 概要 OpenID Connect Core1.0https://openid.net/connect/ OpenID Connect 1.0 は, OAuth 2.0 プロトコルの上にシンプルなアイデンティティレイヤーを付与したものである. このプロトコルは Client が Authorization Server の認証結果に基づいて End-User のアイデンティティを検証可能にする. また同時に End-User の必要最低限のプロフィール情報を, 相互運用可能かつ RESTful な形で取得することも可能にする. これらをわかりやすく言い換えると下記のように表せます。 OAuth 2.0 + Identity Layer = OpenID Connect Identity Layer = ID Token + UserInfo […]
概要 本記事は、Salesforceのデザイナー資格であるData Architecture and Managementを受験するにあたって勉強した際の簡単なメモとなります。私が受験した時のバージョンはWinter’20でしたので、その時点での試験範囲に基づいております。 試験範囲 試験範囲については、リリースごとに変わる可能性があるので最新情報を確認する必要があります。詳細は下記から参照してください。http://tandc.salesforce.com/examguide_cert_data_archi_manage_designer.pdf 勉強内容 基本的な勉強方法は、上記の試験範囲に沿って必要な情報が公開されているヘルプサイトやブログ、Trailheadを参考にインプットをしました。 Data Modeling (20%) BigObject https://developer.salesforce.com/docs/atlas.en-us.bigobjects.meta/bigobjects/big_object.htm https://developer.salesforce.com/docs/atlas.en-us.bigobjects.meta/bigobjects/big_object_example_queueable.htm Roll up summary https://help.salesforce.com/articleView?id=fields_about_roll_up_summary_fields.htm&type=5 https://help.salesforce.com/articleView?id=fields_defining_summary_fields.htm&type=5 Relation https://help.salesforce.com/articleView?id=overview_of_custom_object_relationships.htm&type=5 External Object https://help.salesforce.com/articleView?id=external_object_define.htm&type=5 https://help.salesforce.com/articleView?err=1&id=ext_data_sync_database.htm&type=5 Data Skew https://trailhead.salesforce.com/content/learn/modules/large-data-volumes/design-your-data-model Person Account https://help.salesforce.com/articleView?id=account_person.htm&type=5 Custom Index https://help.salesforce.com/articleView?id=000325247&language=en_US%C2%A0&type=1&mode=1 Data Archiving Strategy http://www.salesforce.org/ask-architect-5-steps-effective-salesforce-data-management-strategy/ Data Storage https://help.salesforce.com/articleView?id=overview_storage.htm&type=5 https://help.salesforce.com/articleView?id=000318951&type=1&mode=1 Set Audit Field https://help.salesforce.com/articleView?id=000334139&type=1&mode=1 Outbound Message https://help.salesforce.com/articleView?err=1&id=workflow_managing_outbound_messages.htm&type=5 Conceptual Design(15%) Lightning Data https://appexchange.salesforce.com/appxStore?type=Data Data.com vs Lightning Data Service https://help.salesforce.com/articleView?id=000317679&type=1&mode=1 Merge https://help.salesforce.com/articleView?id=contacts_merge_classic.htm&type=5 Data.com Prospector and Clean https://help.salesforce.com/articleView?id=000318293&type=1&mode=1 Duplicate Rule https://help.salesforce.com/articleView?id=duplicate_rules_map_of_reference.htm&type=5 Translation workbench https://help.salesforce.com/articleView?id=customize_wbench.htm&type=5 Mater Data Management(10%) 特に参考サイトなし・・・ Metadata Management(7%) Event monitoring https://trailhead.salesforce.com/en/content/learn/modules/event_monitoring/event_monitoring_intro Custom Metadata Types https://help.salesforce.com/articleView?id=custommetadatatypes_package_install.htm&type=5 Package Custom Metadata Types and Record https://help.salesforce.com/articleView?id=custommetadatatypes_package_install.htm&type=5 Define Custom Settings https://help.salesforce.com/articleView?id=custommetadatatypes_package_install.htm&type=5 Metadata API https://help.salesforce.com/articleView?id=custommetadatatypes_package_install.htm&type=5 Audit Trail https://help.salesforce.com/articleView?id=custommetadatatypes_package_install.htm&type=5 Data Archiving(10%) Export Buckup data from Salesforce https://help.salesforce.com/articleView?id=admin_exportdata.htm&type=5 https://developer.salesforce.com/blogs/2015/03/salesforce-backup-and-restore-essentials-part-1-backup-overview-api-options-and-performance.html Outbound Message Actions https://help.salesforce.com/articleView?id=workflow_managing_outbound_messages.htm&type=5 Field Set https://help.salesforce.com/articleView?id=fields_about_field_sets.htm&type=5 Buckup and restore https://developer.salesforce.com/blogs/2015/03/salesforce-backup-and-restore-essentials-part-1-backup-overview-api-options-and-performance.html PK Chunking https://developer.salesforce.com/blogs/engineering/2015/03/use-pk-chunking-extract-large-data-sets-salesforce.html Field History Tracking https://help.salesforce.com/articleView?id=tracking_field_history.htm&type=5 Suspend Event https://developer.salesforce.com/blogs/engineering/2013/05/extreme-force-com-data-loading-part-3-suspending-events-that-fire-on-insert.html Deferred Sharing Calculation https://developer.salesforce.com/blogs/engineering/2013/08/extreme-force-com-data-loading-part-6-taking-advantage-of-deferred-sharing-calculation.html Dataloader CLI https://help.salesforce.com/articleView?id=command_line_intro.htm&type=5 Data backup and recovery Best Practice https://help.salesforce.com/articleView?id=000334121&language=en_US&type=1&mode=1 Data Governance(7%) Data Covernance Best Practice https://www.salesforce.com/video/1779731/ Reporting and Analytics(10%) Performance Turning https://developer.salesforce.com/blogs/engineering/2013/03/long-and-short-term-approaches-for-tuning-force-com-performance.html Custom Index https://developer.salesforce.com/blogs/engineering/2015/06/know-thy-salesforce-field-indexes-fast-reports-list-views-soql.html Run Report Faster https://developer.salesforce.com/docs/atlas.en-us.salesforce_reportperformance_cheatsheet.meta/salesforce_reportperformance_cheatsheet/reportperformance_cheatsheet.htm Improve Report Performance https://help.salesforce.com/articleView?id=improving_report_performance.htm&type=5 Sales Dashboard https://www.salesforce.com/blog/2019/01/sales-management-dashboards.html Report Consideration https://help.salesforce.com/articleView?id=platform_connect_considerations_reports.htm&type=5 Schedule Dashboard https://help.salesforce.com/articleView?id=dashboards_schedule_refresh.htm&type=5 Limit of Custom ReportTypes https://help.salesforce.com/articleView?id=reports_report_type_guidelines.htm&type=5 Data Migration(10%) Duplicate Rules https://help.salesforce.com/articleView?id=duplicate_rules_map_of_reference.htm&type=5 Data loading https://developer.salesforce.com/blogs/engineering/2013/06/extreme-force-com-data-loading-part-4-sequencing-load-operations.html Data aggregation https://developer.salesforce.com/docs/atlas.en-us.salesforce_large_data_volumes_bp.meta/salesforce_large_data_volumes_bp/ldv_deployments_case_studies_data_aggregation.htm Limits and allocation […]
概要 Salesforceのソースコードベースの開発を行う際には、VSCodeとその拡張機能(Extension)を使用しますが、その中にOrg Browserという便利な機能が追加されていたので紹介したいと思います。Org Browserを使用すると、manifest file(package.xml)を作成せずにSandbox等の組織からローカルにソールコードを取得することができます。 VSCodeの基本設定やSalesforceのExtensionについてはこちらに記載していますので、本記事では割愛します。 使用方法 SFDXプロジェクトを作成する VSCodeのコマンドパレットでSFDX: Create Project with Manifestを実行してSFDXプロジェクトを作成します。 接続対象の組織を認証する VSCodeのコマンドパレットでSFDX: Authorize an Orgを実行して対象組織の認証により接続を行います。認証するとVSCodeの一番左のアイコンにSalesforceマークが表示されます。こちらが、Org Browserの機能となります。 対象のメタデータを選択 Salesforceマークを選択すると、接続した組織のメタデータの一覧が表示されます。その中からローカルのプロジェクトにダウンロードしたいメタデータを選び、ボタンを押すとダウンロードされます。 ダウンロードしたファイルは、ソース形式でデフォルトでは下記のパスに格納されます。sfdx project > force-app > main > default これでソースコードによる開発をVSCode上で容易に行うことができます。これまでは、package.xmlを作成しないと対象のメタデータをダウンロードできかったのと比較すると非常に簡単になったと思います。 ちなみに、package.xmlの作成方法については、公式のExtensionではありませんが、下記の記事に記載しているものを使用すればVSCodeのUIベースで作成することもできます。 参考 Org Browserhttps://developer.salesforce.com/tools/vscode/articles/user-guide/org-browser
概要 本記事はSalesforceにおけるリリースにおいて、CLIを使用する場合にソース形式(メタデータ形式ではなく)で直接、本番組織へデプロイする方法を記載します。これまで(Spring’19以前)もSandboxへはソース形式でもデプロイすることができましたが、本番組織には一度メタデータ形式に変換したのちにデプロイする必要がありました。Summer’19からは、一度クイックリリースでテストを実行したのちに、そこで発行されるジョブIDを元にデプロイをすることができるようになったようです。 リリース方法(コマンド) まずは、クイックリリースでテストを実行してコードカバー率が要件を満たしていることを確認します。 上記のコマンドでSuccessとなった後に、実行した際に発行されているジョブIDを用いてデプロイを行います。 以上でリリース完了となります。 まとめ いちいちメタデータ形式への変換が不要となったので、個人的にはこちらの方が便利かなと思っています。 参考 本番組織へのアプリケーションのリリースhttps://developer.salesforce.com/docs/atlas.ja-jp.sfdx_dev.meta/sfdx_dev/sfdx_dev_build_mdapi_production.htm 任意の組織に対する開発https://developer.salesforce.com/docs/atlas.ja-jp.220.0.sfdx_dev.meta/sfdx_dev/sfdx_dev_develop_any_org.htm source Commandshttps://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_force_source.htm#cli_reference_deploy
概要 本記事では、Salesforceのオブジェクトのレコードを一覧表示する標準機能のリストビューにて選択したレコードを引数にしてFlowを実行する方法を記載します。リストビューで選択したレコードに対してアクションではできないような少し複雑なロジックをFlowで実装したい場合に利用できるかと思います。 実装方法 Flowを呼び出すVisualforceを作成 事前に呼び出したいFlowは事前に作成しておきます。起点となるリストビューのオブジェクトに対応する標準リストコントーラを定義したVisualforceページを作成します。当該VFページから<flow:interview>タグでフローを呼び出します。finishLocationでは、Flowで完了ボタン押下後の戻り先のURLを指定します。Accoutオブジェクトのサンプルは、以下となります。 カスタムリストボタンを作成 対象のオブジェクトの設定画面で新規ボタンから表示の種類として「リストボタン」-「チェックボックスの表示」を選択します。内容のソースで上記で作成したVisualforceページを選択します。 まとめ 一覧画面で選択したレコードに対してなんらかの処理をしたいという場合のソリューションとして、極力開発する箇所を少なくするための手法として利用できるかと思います。 参考 Visualforce ページへの標準リストコントローラの関連付けhttps://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_controller_sosc_associate.htm Visualforce ページへのフローの埋め込みhttps://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_flows_adding.htm フローの finishLocation 属性の設定https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_flows_finishlocation.htm 標準リストコントローラを使用したカスタムリストボタンの追加https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_controller_sosc_custom_button.htm
概要 本記事ではSalesforceのプラットフォームイベントについての概要や使用方法を簡単に整理します。 イベント駆動型アーキテクチャ イベント駆動型アーキテクチャとは、イベントプロデューサ/イベントコンシューマ/イベントバスから構成されます。イベントプロデューサは、イベント発生時の情報を取得してイベントバスにメッセージとして転送します。転送されたメッセージは、プロデューサとは非同期にイベントコンシューマで受信して処理を実行します。従来の要求-応答通信モデルでは、Webシステムやデータベースに要求を実行して同期で応答を受信していました。したがって、応答するWebシステムやデータベースの可用性に依存していました。イベント駆動型アーキテクチャの使用用途は、外部システムとのインテグレーション等で別トランザクションで非同期に処理を実行したいような場合かと思います。そして、プラットフォームイベントは、Salesforce Platform上でイベント駆動型アーキテクチャを実現する機能となります。 https://developer.salesforce.com/docs/resources/img/ja-jp/220.0?doc_id=images%2Fsalesforce_event_bus.png&folder=platform_events カスタムプラットフォームイベントの定義 カスタムプラットフォームイベントは、カスタムオブジェクト(sObject)と同じように定義することができます。また、カスタムオブジェクトと同様に作成したプラットフォームイベントには、カスタム項目を追加することができます。ただし、レイアウトやLightningレコードページで表示することはできません。プラットフォームイベントのAPI参照名のサフィックスは、__eとなります。(通常のカスタムオブジェクトでは、__cとなる部分です。)例) event__e みたいな感じです。 プラットフォームイベントの公開 上記で定義したプラットフォームイベントに対してレコードを作成することがイベントの公開になります。公開するための方法は以下のいずれかとなります。イベント駆動型アーキテクチャでいうと、イベントプロデュースにあたります。 プロセスビルダー フロー Apex API(SOAP API/REST API/Bulk API etc) それぞれの機能での実装は、通常のカスタムオブジェクトにレコードを作成するのと同じようなイメージとなります。 プラットフォームイベントの登録 上記で公開したプラットフォームイベントのレコードによりメッセージを受信して動作する処理を登録します。登録するための方法は以下のいずれかとなります。イベント駆動型アーキテクチャでいうと、イベントコンシューマにあたります。 プロセスビルダー フロー Apexトリガー Litghtningコンポーネント(empApiコンポーネント) CometDクライアント プロセスビルダーとフローには、プラットフォームイベントを開始のタイミングとして選択することができます。 プロセスビルダー フロー Apexトリガーは、カスタムオブジェクトのトリガーと同様にプラットフォームイベントのオブジェクトに対して作成することができます。処理種別は、after triggerとして実装します。また、通常のカスタムオブジェクトの最大バッチ数は200ですが、プラットフォームイベントは、2000となります。Lightningコンポーネントは、empApiコンポーネントを使用してリスンするプラットフォームイベントを登録することができます。参考(lightning-emp-api)https://developer.salesforce.com/docs/component-library/bundle/lightning-emp-api/documentationCometDは、外部クライアントでプラットフォームイベントの受信を登録できます。CometD クライアントを実装するか EMP コネクタのオープンソースのコミュニティツールを使用して作成することができます。具体的な実装のサンプルは、下記に記載されています。参考(Java クライアントを使用した登録とイベントの再生)https://developer.salesforce.com/docs/atlas.ja-jp.platform_events.meta/platform_events/code_sample_java_client_intro.htm 参考 Platform Events Developer Guide (プラットフォームイベント開発者ガイド)https://developer.salesforce.com/docs/atlas.ja-jp.platform_events.meta/platform_events/platform_events_intro.htm プラットフォームイベントの基礎https://trailhead.salesforce.com/ja/content/learn/modules/platform_events_basics インスタント通知アプリケーションの作成https://trailhead.salesforce.com/ja/content/learn/projects/workshop-platform-events