Quantcast
Channel: tyoshikawa1106のブログ
Viewing all 1438 articles
Browse latest View live

SFDC:パートナーコミュニティへの参加方法

$
0
0

意外と情報の少ないパートナーコミュニティですが、Trailheadにコミュニティの参加方法などの情報が記載されていました。


パートナーコミュニティのサイトはこちら。
f:id:tyoshikawa1106:20161227121145p:plain

Salesforce Partner Community


SFDC:アプリケーションセキュリティの学習

$
0
0

Trailheadにアプリケーションセキュリティについて学ぶことができるモジュールが用意されています。


セキュリティについて学ぶための専用の組織も用意されています。この組織をつかってTrailheadの課題を進めることでどのようなセキュリティリスクがあるのか把握して対策方法を学ぶことができるようになっていました。
f:id:tyoshikawa1106:20161227130236p:plain


学習用のDE組織にログインするとこのように必要なタブやアプリケーションが用意されていました。
f:id:tyoshikawa1106:20161227130554p:plain


専用の環境があるので安全にかつ簡単に学ぶことができて便利そうです。

SFDC:標準オブジェクトの使い方

$
0
0

セールスフォースには標準オブジェクトがたくさん用意されていますが、どんな情報を入力すればいいか確認するのも大変。。ということで動画でまとめてみました。


下記のオブジェクトについてざっくりとですがまとめてあります。

  • 商品
  • 価格表
  • 取引先
  • 取引先責任者
  • 商談
  • 契約
  • 注文
  • ケース
  • ソリューション
  • 納入商品
  • リード
  • キャンペーン
  • 作業指示


より正確で詳細な情報を確認したい場合はセールスフォースのヘルプページで確認できます。

SFDC:外部URLへのリダイレクトを防止する方法

$
0
0

Visualforceページの開発ではURLパラメータでリダイレクト先のURLを保持してリダイレクトを行うというケースがよくあると思います。もしそこで外部URLを入力されてしまったときにエラーにする方法についてです。


まずは外部URLへのリダイレクトを許可した状態のパターンです。これでsaveボタンの処理を実行するとリダイレクト先はGoogleになります。
f:id:tyoshikawa1106:20161227231851p:plain


f:id:tyoshikawa1106:20161227232025p:plain


続いてリダイレクトを防止する場合です。次のコードを挿入します。

if(finishURL.startsWith('/')){
    finishURL.replaceFirst('/','');
}

savePage = new PageReference('/'+finishURL);

replace処理を追加してPageReferenceのURLの先頭に'/'を付けます。


コードの全体です。

String finishURL = ApexPages.currentPage().getParameters().get('finishURL');

if(finishURL.startsWith('/')){
    finishURL.replaceFirst('/','');
}

savePage = new PageReference('/'+finishURL);

savePage.setRedirect(true);

return savePage;


こうすることでリダイレクト先が相対パス指定になり外部サイトにはリダイレクトできなくなります。
f:id:tyoshikawa1106:20161227232419p:plain


ちなみに内部URLの場合は問題なくリダイレクトできます。
f:id:tyoshikawa1106:20161227232603p:plain


f:id:tyoshikawa1106:20161227232615p:plain


この話についての詳細はこちらです。

SFDC:Live Agentを試してみました

$
0
0

Trailheadを見ながらService Cloudの便利機能、Live Agentを試してみました。


設定画面で有効化することで利用できるようになります。
f:id:tyoshikawa1106:20161228101034p:plain


有効化すると各設定が追加され、エンドポイントが割り当てられます。
f:id:tyoshikawa1106:20161228101314p:plain


Live Agentを利用するにはユーザに権限を付与する必要があります。
f:id:tyoshikawa1106:20161228101459p:plain:w300


エージェントがどのような知識をもっているかのスキル情報を作成します。
f:id:tyoshikawa1106:20161228101624p:plain


名称を入力して対象ユーザまたはプロファイルを指定します。
f:id:tyoshikawa1106:20161228101852p:plain


これでスキルの設定は完了です。
f:id:tyoshikawa1106:20161228101926p:plain


続いてチャット構成の設定です。Live Agent Configurationsで設定します。
f:id:tyoshikawa1106:20161228102035p:plain


細かい設定がいろいろ用意されていますが、ひとまず設定不要です。名称と対象ユーザまたはプロファイルを指定して設定を保存します。
f:id:tyoshikawa1106:20161228102213p:plain

f:id:tyoshikawa1106:20161228102246p:plain


これでLive Agent Configurationsの設定ができました。
f:id:tyoshikawa1106:20161228102333p:plain


次はブランドイメージの設定です。マイドメインの有効化とForce.comサイトの有効化が必要になります。
f:id:tyoshikawa1106:20161228103110p:plain

f:id:tyoshikawa1106:20161228103226p:plain

f:id:tyoshikawa1106:20161228103533p:plain


Trailheadから画像をダウンロードして静的リソースにアップします。
f:id:tyoshikawa1106:20161228103913p:plain:w300


Online, Offline, ChatWindowの3つです。
f:id:tyoshikawa1106:20161228104459p:plain

f:id:tyoshikawa1106:20161228104508p:plain

f:id:tyoshikawa1106:20161228104517p:plain


これができたらチャットボタンの作成を行います。
f:id:tyoshikawa1106:20161228104647p:plain


こんな感じ。
f:id:tyoshikawa1106:20161228105045p:plain


これでチャットボタンのコードが自動生成されます。
f:id:tyoshikawa1106:20161228105150p:plain


次はDeploymentsの設定です。
f:id:tyoshikawa1106:20161228105324p:plain


こんな感じになります。これでDeployment Codeも生成されます。
f:id:tyoshikawa1106:20161228105606p:plain



ここまで設定できたらコンソールにLive Agentを追加します。設定のアプリケーション作成でコンソールアプリケーションを作成します。こんな感じです。
f:id:tyoshikawa1106:20161228110727p:plain


Live Agentを有効化した場合は次の設定が追加されていました。
f:id:tyoshikawa1106:20161228110757p:plain


このような画面が表示されれば大丈夫です。
f:id:tyoshikawa1106:20161228110904p:plain


これで基本的な設定が完了しました。Visualforceページを用意してチャット機能を試してみます。
f:id:tyoshikawa1106:20161228112017p:plain

<apex:page>
  <h1>Let’s start chatting...</h1>
  <br />
  Click the big button to start a chat.
  <br />
  <!--Button Code-->
  <!--Deployment Code-->
</apex:page>

Button CodeとDeveloyment Codeに先程の設定で生成されたコードを差し込みます。すると次のような表示のページができると思います。
f:id:tyoshikawa1106:20161228112447p:plain


画像をクリックするとウィンドウが開きます。
f:id:tyoshikawa1106:20161228112520p:plain


ウィンドウを開いた状態でコンソールアプリを開き右下のLive Agentウィンドウを開きます。ステータスをオンラインにすると対象チャットが表示されます。
f:id:tyoshikawa1106:20161228112702p:plain


Acceptボタンをクリックするとチャットを開始できます。設定によってはチャットの右側に取引先やケースの作成ページを表示できます。
f:id:tyoshikawa1106:20161228112909p:plain


送信したメッセージは相手側に表示されます。
f:id:tyoshikawa1106:20161228113045p:plain:w300


このような感じでやりとりできます。
f:id:tyoshikawa1106:20161228113134p:plain:w300


今回は両方とも内部ユーザとして操作しましたが、コンソール側を内部ユーザ、チャット起動をForce.comサイトなどの外部サイトに配置して利用することになると思います。基本的に複数タブでコンソールを開いてチャットを扱うといった利用の仕方はできないみたいです。接続が切断されました。


以上がLive Agentの基本的な設定の流れです。詳細はTrailheadにまとめられています。
f:id:tyoshikawa1106:20161228113435p:plain

SFDC:Live Agentのその他のオプションを試してみました

$
0
0

Live Agentのその他のオプションを試してみました。基本的な設定は下記に記載してあります。


Trailheadで紹介されている内容です。


Live Agentには下記の主要な機能が用意されています。

  • 1.スキル
  • 2.基本的なブランド
  • 3.訪問者に記録を保存させる
  • 4.スニークピーク
  • 5.ファイル転送
  • 6.アシスタントフラグ
  • 7.チャット転送と会議
  • 8.クイックテキスト

訪問者に記録を保存させる

設定→ DeploymentsにAllow Visitors to Save Transcriptsがあるのでチェックをつけると利用できます。
f:id:tyoshikawa1106:20161228135705p:plain


このように訪問者のチャット画面にSaveボタンが追加されます。クリックするとチャットの内容がtxtファイルでダウンロードできます。
f:id:tyoshikawa1106:20161228140035p:plain:w300

スニークピーク

Live Agent Configurationsの設定です。Sneak Peek Enabledのチェックをつけると利用できます。
f:id:tyoshikawa1106:20161228140346p:plain


対象のナレッジ記事が登録されている場合、入力中に自動補完されるようになるみたいです。

ファイル転送

Live Agent Configurationsの設定です。Agent File Transfer Enabledのチェックをつけると利用できます。
f:id:tyoshikawa1106:20161228140556p:plain


エージェントは顧客からファイルを要求できます。とのことでしたがちょっと使い方はわかりませんでした。

アシスタントフラグ

支援フラグは、エージェントがチャットに援助を必要とするときに、スーパーバイザに仮想フラグを発生させる。彼らがバックアップを呼び出すための最速の方法です。
f:id:tyoshikawa1106:20161228141308p:plain


ここから利用できるみたいです。
f:id:tyoshikawa1106:20161228141415p:plain:w300

チャット転送と会議

エージェントがチャットで一緒に作業する方法です。転送により、エージェントは他のエージェントに直接転送したり、別のスキルに移したり、別のチャット・ボタンに転送したりして、チャットを転送することができます。

たぶんここから設定。
f:id:tyoshikawa1106:20161228141659p:plain

クイックテキスト

クイックテキストでは、エージェントが同じメッセージを何度も繰り返し入力する必要がないように、パッケージ化された応答を作成できます。
f:id:tyoshikawa1106:20161228141835p:plain


タブからレコード登録する形で登録できます。
f:id:tyoshikawa1106:20161228142153p:plain

SFDC:レモネードスタンドアプリ開発をやってみました

$
0
0

Trailheadのレモネードスタンドアプリ開発をやってみました。

はじめに

Developer Edition組織を作成してLightning Experienceを有効化します。
f:id:tyoshikawa1106:20161229162233p:plain

アプリケーションとカスタムオブジェクトを作成する

設定からアプリケーションとカスタムオブジェクトを作成します。Salesforce Clasiccの設定にあるAdd Appボタンで作成します。
f:id:tyoshikawa1106:20161229162629p:plain

  • App: Lemonade Stand
  • Label: Flavor
  • Plural Label: Flavors

f:id:tyoshikawa1106:20161229162707p:plain


Lemonade Standアプリとカスタムオブジェクトを用意できました。
f:id:tyoshikawa1106:20161229162811p:plain


設定メニューからDrink Orderオブジェクトを追加します。

  • Label: Drink Order
  • Plural Label: Drink Orders
  • Object Name: Drink_Order
  • Record Name: Drink Order Name
  • Data Type: Auto Number
  • Display Format: ORDER-{0000}
  • Starting Number: 1
  • Under Optional Features, select Allow Reports
  • Click Save & New to save this object and start creating another one

f:id:tyoshikawa1106:20161229163120p:plain


もうひとつFulfillment Queueオブジェクトを作成します。

  • Label: Fulfillment Queue
  • Plural Label: Fulfillment Queues
  • Object Name: Fulfillment_Queue
  • Record Name: Fulfillment Queue Name
  • Data Type: Text
  • Under Optional Features, select Allow Reports

f:id:tyoshikawa1106:20161229163226p:plain


Drink OrderとFulfillment Queueのカスタムタブを作成します。
f:id:tyoshikawa1106:20161229163707p:plain


Lemonade Standアプリケーションのタブに表示します。
f:id:tyoshikawa1106:20161229163849p:plain


またアプリケーションの編集でShow in Lightning Experienceにチェックをつけます。
f:id:tyoshikawa1106:20161229163936p:plain


ここからはLightning Experienceで進めます。アプリケーションでLemonade Standを選択します。
f:id:tyoshikawa1106:20161229164222p:plain


先程作成したタブが表示されることを確認します。
f:id:tyoshikawa1106:20161229164338p:plain


Flavorタブでレモネードの味を登録します。

  • Flavor Name: Classic Lemonade
  • Flavor Name: Strawberry Lemonade
  • Flavor Name: Black Cherry

f:id:tyoshikawa1106:20161229164527p:plain


このように3つの味を登録しました。
f:id:tyoshikawa1106:20161229164615p:plain

カスタム項目の作成

Flavorオブジェクトに価格を登録するためのカスタム項目を追加します。

  • DataType: Currency
  • Field Label: Price
  • Field Name: Price
  • Length: 4
  • Decimal Places: 0

f:id:tyoshikawa1106:20161229170613p:plain


Drink Orderオブジェクトにも必要な項目を追加します。

  • DataType: Picklist
  • Field Label: Status
  • Field Name: Status
    • Placed
    • Completed
    • Cancelled
  • DataType: Number
  • Field Label: Quantity
  • Field Name: Quantity
  • Length: 2
  • Decimal Places: 0


その他参照関係と主従関係の項目を作成します。
f:id:tyoshikawa1106:20161229172731p:plain


Fulfillment Queueオブジェクトにもカスタム項目を作成します。作成するのは積み上げ集計項目です。
f:id:tyoshikawa1106:20161229173351p:plain


もうひとつ作ります。
f:id:tyoshikawa1106:20161229173454p:plain


2つの積み上げ集計項目を作成しました。
f:id:tyoshikawa1106:20161229173530p:plain

データの登録

カスタム項目を用意したのでデータの登録を行います。Flavorオブジェクトの価格に値を登録します。
f:id:tyoshikawa1106:20161229173656p:plain


Fulfillment Queueオブジェクトには下記2つのデータを登録します。

  • Classic Lemonade Queue
  • Black Cherry and Strawberry Lemonade Queue


こうなります。
f:id:tyoshikawa1106:20161229173853p:plain

数式で自動計算項目を作成

こんな感じ。
f:id:tyoshikawa1106:20161229181138p:plain

ステータス更新アクションを作成

こんな感じ。
f:id:tyoshikawa1106:20161229181458p:plain

ページレイアウトにアクション追加

こんな感じ。
f:id:tyoshikawa1106:20161229181707p:plain

Fulfillment Queueのページレイアウトをカスタマイズ

関連リストに必要な項目を追加します。
f:id:tyoshikawa1106:20161229181933p:plain

カスタムレポートタイプの作成

f:id:tyoshikawa1106:20161229182429p:plain

サンプルオーダーの作成

3件の顧客を登録します。

  • First Name: Juan
  • Last Name: Mendoza
  • First Name: Ayana
  • Last Name: Bello
  • First Name: Emily
  • Last Name: Washington

f:id:tyoshikawa1106:20161229182720p:plain


Ayana Belloにレモネードを販売します。まずは注文の受付です。

  • Contact: Ayana Bello
  • Quantity: 1
  • Flavor: Classic Lemonade
  • Fulfillment Queue: Classic Lemonade Queue

f:id:tyoshikawa1106:20161229183204p:plain


商品を渡した後、Order Completedアクションでステータスを更新します。
f:id:tyoshikawa1106:20161229183225p:plain


ステータスが更新されて、Ayana Belloにレモネードを販売できたことを記録に残せました。
f:id:tyoshikawa1106:20161229183305p:plain

販売記録はレポートで管理します。

・・・このあたりはもう普通につくるだけなのでTrailheadを確認するほうがわかりやすいです。。

f:id:tyoshikawa1106:20161230033023p:plain



これでレモネードスタンドアプリが形になりました。実際にはもっと便利になるようにいろいろカスタマイズしていくことになりますが、オブジェクトの作成からデータ登録、レポート&ダッシュボードの使い方を確認できたと思います。
f:id:tyoshikawa1106:20161230033138p:plain

SFDC:Waveを使用した製品パイプラインダッシュボードの作成をやってみました

$
0
0

TrailheadのWaveを使用した製品パイプラインダッシュボードの作成をやってみました。

WaveにCSVファイルをアップロードする

サンプルデータのCSVファイルはTrailheadからダウンロードできます。
f:id:tyoshikawa1106:20161230115623p:plain


作成→データセットでアップロード画面を表示できます。
f:id:tyoshikawa1106:20161230120211p:plain


データソースを選択でCSVを選択。
f:id:tyoshikawa1106:20161230120236p:plain


先程のCSVファイルを指定してアップロードします。
f:id:tyoshikawa1106:20161230120406p:plain


ファイルサイズによっては少し時間がかかるかもしれません。
f:id:tyoshikawa1106:20161230120443p:plain


ホームでデータセットが作成されたことを確認できます。
f:id:tyoshikawa1106:20161230120524p:plain:w300


このデータセットをつかってダッシュボードを作成します。データセットをクリックすると新規レンズの画面が表示されます。これをカスタマイズします。
f:id:tyoshikawa1106:20161230121137p:plain


グループをクリックしてStage項目を選択。右側に条件ボタンがありますが、左側の項目名をクリックすると一気に設定できます。
f:id:tyoshikawa1106:20161230121239p:plain


グルーピング後のグラフはこのようになります。
f:id:tyoshikawa1106:20161230121411p:plain


画面右上のデザイナにクリップのアイコンを選択します。
f:id:tyoshikawa1106:20161230121504p:plain


すると新規ダッシュボード画面が表示されます。
f:id:tyoshikawa1106:20161230121529p:plain


Stage_1のステップが用意されているのでそれをクリックします。
f:id:tyoshikawa1106:20161230121641p:plain


Stage_1をドラッグ&ドロップで中央に配置するとデータセットで用意したグラフをダッシュボードに設置できます。
f:id:tyoshikawa1106:20161230121822p:plain


タイトルをつけると確認しやすくなります。
f:id:tyoshikawa1106:20161230124517p:plain


保存アイコンで設定内容を保存できます。
f:id:tyoshikawa1106:20161230124713p:plain


続いて地図グラフを表示します。Stage_1をクリックするとステップのコピーができます。
f:id:tyoshikawa1106:20161230125552p:plain

f:id:tyoshikawa1106:20161230125611p:plain


同じようにドラッグ&ドロップで配置してマップグラフとして表示します。
f:id:tyoshikawa1106:20161230130027p:plain


マップグラフではタイトルの指定の他にマップ種別も設定できます。
f:id:tyoshikawa1106:20161230130203p:plain

f:id:tyoshikawa1106:20161230130215p:plain:w300


最後にピラミットグラフを表示してみます。データセットでProductを基準に指定します。
f:id:tyoshikawa1106:20161230130720p:plain


基準を追加で合計→Pipeline Amount を指定します。
f:id:tyoshikawa1106:20161230130804p:plain


このように2つのグラフが表示されました。
f:id:tyoshikawa1106:20161230130828p:plain


歯車アイコンのオプションでソート順を変更できます。
f:id:tyoshikawa1106:20161230130913p:plain


デザイナにクリップでさきほどと同じようにダッシュボードに追加します。
f:id:tyoshikawa1106:20161230131135p:plain


チャートタイプでピラミットを指定します。
f:id:tyoshikawa1106:20161230131510p:plain


Left Axis and set the the title to Opportunities.というのは左軸のタイトルにOpportunitiesを指定するという意味でした。
f:id:tyoshikawa1106:20161230132232p:plain:w300


最後表示サイズなどを調整して見やすいようにします。
f:id:tyoshikawa1106:20161230131712p:plain


Waveを使用した製品パイプラインダッシュボードの作成はこんな感じでした。
f:id:tyoshikawa1106:20161230132402p:plain


SFDC:個人取引先の取引先責任者IDについて

$
0
0

個人取引先を有効化すると取引先オブジェクトで取引先責任者の項目を利用できるようになります。そのため個人取引先レコード1つで取引先と取引先責任者の情報を管理することができます。
f:id:tyoshikawa1106:20161225115108p:plain


個人取引先は取引先責任者のルックアップ項目からも選択できるようになっています。取引先ルックアップ、取引先責任者ルックアップの両方で選択できるので既存の作りを壊さずに利用することができました。


Apexで扱うときはひとつ注意が必要です。取引先責任者参照項目に個人取引先IDをセットしてINSERTやUPDATEを実行するとエラーとなります。個人取引先IDは取引先オブジェクトのIDとなるためです。


個人取引先オブジェクトは裏側で取引先責任者のIDも保持しています。設定画面では確認できませんでしたが検索してみたところ『PersonContactId』項目で保持されているみたいです。


クエリを実行してみたところ取引先責任者IDが保持されていることを確認できました。
f:id:tyoshikawa1106:20170103153507p:plain


Apexから取引先責任者のルックアップ項目に個人取引先IDをセットしたいときは『PersonContactId』の値をセットして登録処理を行えばいいみたいです。


せっかくなのでPersonContactIdが保持している取引先責任者IDをつかってContactオブジェクトにクエリを実行するとどうなるかも確認してみました。問題なく取得することができました。

参考

SFDC:Lightning Loginを試してみました

$
0
0

Winter'17の新機能『Lightning Login』を試してみました。Salesforce Authenticatorと組み合わせて利用する機能でセキュリティを確保したままログインを簡単にすることができる機能です。
f:id:tyoshikawa1106:20170103185130p:plain

Lightning Login を使用してパスワードなしでログイン


この機能を利用するにはセキュリティのコントロールにあるセッションの設定で有効化する必要があります。
f:id:tyoshikawa1106:20170103185359p:plain


またプロファイルか権限セットでユーザの利用を許可する必要があります。
f:id:tyoshikawa1106:20170103185530p:plain


プロファイルで一括有効化するよりも権限セットで各ユーザに割り当てるほうが柔軟なカスタマイズができると思います。
f:id:tyoshikawa1106:20170103185720p:plain


権限追加後は、ユーザの詳細ページで認証キーを登録します。
f:id:tyoshikawa1106:20170103190157p:plain


登録リンクをクリックすると次の画面が表示されます。
f:id:tyoshikawa1106:20170103190235p:plain


モバイル端末のSalesforce Authenticatorで承認画面が表示されます。
f:id:tyoshikawa1106:20170103190618p:plain:w250


承認をタップするとTouchIDの登録画面が表示されます。
f:id:tyoshikawa1106:20170103190728p:plain:w250


これでLightning Loginの利用準備が整いました。登録後に利用停止したい場合はキャンセルリンクが表示されるのでそれをクリックすればいいみたいです。
f:id:tyoshikawa1106:20170103190836p:plain


Lightning Loginをつかってログインするにはログイン時にユーザを保存しておく必要があります。
f:id:tyoshikawa1106:20170103191008p:plain:w300


すると次回ログイン時にこのように対象ユーザが表示されます。
f:id:tyoshikawa1106:20170103191134p:plain:w300



ユーザを選択すると次のログイン承認画面が表示されます。
f:id:tyoshikawa1106:20170103191304p:plain


画面が表示されるとSalesforce Authenticatorアプリ側に通知が届きます。承認をタップしてTouchIDをつかってログインを承認できます。



以上がLightning Loginを利用する際の流れになります。2要素認証+TouchIDをつかった強固なセキュリティを用意することができました。ちなみにLightning Login有効化後でもユーザ名とパスワードでログインできるみたいです。


今まで2要素認証を導入しようとするとログイン時の操作が一手間追加されて少し不便でしたが、Lightning Loginを利用することで2要素認証導入しながらログイン手順をシンプルにできそうです。

Salesforce Authenticator

Salesforce Authenticator

  • salesforce.com
  • ビジネス
  • 無料

SFDC:MavensMate for Salesforce v0.0.11 (beta版)を試してみました

$
0
0

MavensMate for Salesforce v0.0.11(beta版)を試してみました。
f:id:tyoshikawa1106:20170103205325p:plain

Releases · joeferraro/MavensMate-Desktop · GitHub


まだβ版ですがv0.0.11でLightning Design Systemのスタイルが適用されています。
f:id:tyoshikawa1106:20170103213653p:plain


Zipファイルをダウンロードして解凍するとappファイルを取得できます。
f:id:tyoshikawa1106:20170103205604p:plain


これをアプリケーションフォルダに格納して利用します。
f:id:tyoshikawa1106:20170103210109p:plain


起動するとこんな感じです。
f:id:tyoshikawa1106:20170103210236p:plain


プロジェクトを開くときはAuth認証経由でSalesforceにログインできます。
f:id:tyoshikawa1106:20170103211613p:plain

認証ページ

f:id:tyoshikawa1106:20170103211659p:plain


プロジェクトを選択すると次の操作ができるようになります。
f:id:tyoshikawa1106:20170103210807p:plain

f:id:tyoshikawa1106:20170103210838p:plain

PROJECT

f:id:tyoshikawa1106:20170103210959p:plain

METADATA

f:id:tyoshikawa1106:20170103211021p:plain

LIGHTNING

f:id:tyoshikawa1106:20170103211035p:plain

DEPLOY

f:id:tyoshikawa1106:20170103211057p:plain

DEBUGGING & TESTING

f:id:tyoshikawa1106:20170103211111p:plain

EDITORS

f:id:tyoshikawa1106:20170103211132p:plain

SALESFORCE

f:id:tyoshikawa1106:20170103211201p:plain


SALESFORCEのメニューからSalesforce APIの使用数を確認できることがなかなか便利そうです。

参考

SFDC:個人取引先へのデータ変更と所有者の扱い

$
0
0

個人取引先を有効化するときに既存データの変換対応が必要になります。
f:id:tyoshikawa1106:20170104115453p:plain


その際に取引先と取引先責任者の所有者が異なるとどのような扱いになるか確認してみました。

取引先

f:id:tyoshikawa1106:20170104114133p:plain:w300

取引先責任者

f:id:tyoshikawa1106:20170104115230p:plain:w300


変換処理はこんな感じです。

// 個人取引先のレコードタイプ取得
RecordType recordType = [SELECT Id FROM RecordType WHERE DeveloperName = 'PersonAccount'  AND SObjectType = 'Account' LIMIT 1];
// 変換したい法人取引先データを取得
Account account = [SELECT Id FROM Account WHERE Id = '<YOUR ACCOUNT ID>' LIMIT 1];
// 個人取引先のレコードタイプをセット
account.RecordTypeId = recordType.Id;
// 更新
update account;


結果はこちら。
f:id:tyoshikawa1106:20170104114550p:plain


下記エラーが発生して変換できませんでした。

Line: 8, Column: 1
System.DmlException: Update failed. First exception on row 0 with id 001p000000KrybFAAR; first error: INVALID_PERSON_ACCOUNT_OPERATION, account cannot be converted to person-account: []


所有者を同じにして変換処理を実行したところ正常に変換することができました。既存の取引先と取引先責任者を個人取引先に変換する場合は事前に所有者を同じにしておく必要があるみたいです。


個人を管理している場合、取引先責任者はメンテナンスされていても取引先は情報が古いままになっている可能性もあるので注意しておいた方がよさそうです。

SFDC:DreamhouseのFacebook Messenger Botとアプリの公開設定について

$
0
0

ちょっと教えて貰った内容なのですが、DreamhouseのFacebook Messenger Botを動かした時、自分以外のFacebookユーザがメッセージを送ってもBotが動いてくれませんでした。この問題が発生したときはFacebook Developersサイトのアプリ設定で非公開になっていないか確認すればいいみたいです。
f:id:tyoshikawa1106:20170104121937p:plain


デフォルトでは開発者モードで非公開に設定されています。これを公開にすると自分以外のFacebookユーザでもMessenger Botを動かしてみることができるようになるみたいです。
f:id:tyoshikawa1106:20170104122039p:plain


公開済みの場合はこのように表示されます。
f:id:tyoshikawa1106:20170104122118p:plain


必要かはわかりませんが、一部条件のアプリの場合は審査が必要になるみたいなので本格的にアプリ開発するときにはこのあたりのルールも把握する必要がありそうです。
f:id:tyoshikawa1106:20170104122240p:plain


Facebook Developersサイトはこちら。
f:id:tyoshikawa1106:20170104123325p:plain

開発者向けFacebook


Dreamhouseのサイトはこちらです。
f:id:tyoshikawa1106:20170104123420p:plain

DreamHouse JP サンプルアプリケーション | Salesforce Developers

追記

公開したくないときでも開発者やテスターとして追加して利用する設定が用意されているみたいです。
f:id:tyoshikawa1106:20170104125622p:plain

Facebook Messenger Botのデモ動画

関連記事

SFDC:LEXの別組織のユーザ切り替え機能

$
0
0

Lightning Experienceで別組織ユーザに簡単に切り替えることができる機能が利用できるようになっています。ログインセッションが保持されていればクリック1つで切り替えることができました。
f:id:tyoshikawa1106:20170107234528p:plain



この機能を利用するにはログインページでログイン情報を保存しておく必要があります。
f:id:tyoshikawa1106:20170107234847p:plain:w300


ログイン情報が保存されているユーザは次回ログイン時に確認することができます。
f:id:tyoshikawa1106:20170107234902p:plain


確認はしていませんがマイドメインの有効化を行っている必要もあると思います。

SFDC:テストクラスのアンチパターン『ダミークラス大作戦』について

$
0
0

テストクラスのアンチパターン『ダミークラス大作戦』についてです。Apex開発を行うときテストクラスを用意する必要があり、テストのカバー率が組織全体で75%以上になっていないと本番環境にリリースできないようになっています。
f:id:tyoshikawa1106:20170108093305p:plain


その昔テストクラス作るのはコストになるからということでダミークラス大作戦が考えられました。意味のないコードを数万行程度用意してそれをテストで通すことで強制的にカバー率をあげることができるテクニックです。
f:id:tyoshikawa1106:20170108093501p:plain


Developer組織で実際に試してみると確認できると思いますが、状況によっては通常のテストクラスを一切用意しなくてもカバー率を80%近くまで向上させることができると思います。


この方法ですがやってはいけないアンチパターンとなっていて推奨されないテクニックとなっています。
f:id:tyoshikawa1106:20170108093956p:plain


アンチパターンの理由としてダミークラスでテストカバー率を上げる方法はSalesforceに負荷を与えてしまいます。負荷を与えるというと利用者には関係無さそうとなるかもしれませんが、Salesforceではパフォーマンスチェックや組織が正常に利用できる状態かチェックする仕組みがきちんと用意されています。

Salesforce Trust


そのため1つの組織で異常な負荷を発生させていると、異常な負荷が発生しているので確認してください。とチェックが入る...かもしれません。(実際にあるかはわかりませんが..)


負荷を与えるという裏側の理由以外にもダミークラスを用意するやり方で組織を作り込むことで大きなトラブルが発生することも想定されます。


ダミークラスをつかったカバー率向上ですが、無限に対応できるわけではありません。数千行のコードのカバー率を75%以上にするために2万行のダミー処理が必要だったとして、2万行のコードをカバーするため5万行用意しても75%を保持できなくなっていきます。


そのため下記のケースが発生すると思います。


「開発時間短縮のためテストクラスは一切用意しません。そのかわり目視のテストでバグがないかを担保します。」というようなプロジェクトが始まり、予定どおり目視の検証だけでバグのないシステムを完成させて納品できました。


数年後、その組織で新たなプロジェクトが立ち上がることになり、今度はその分野に強い別の会社に依頼して開発を進めることになりました。そのプロジェクトではApexクラス毎にテストクラスを用意して開発した部分についてはきちんとカバーするように進めていきました。ですが組織のコード量が増えたことでダミークラスの効果が薄まり本番環境にリリースできなくなります。


こうなると大変です。新しいプロジェクト側では正しくテストクラスを用意しているのでこれ以上をカバー率を向上させることはできません。組織全体のコード量が多くなったため、ダミークラスの処理を増やす方法でも効果がでません。では最初の会社に依頼して用意してもらうかとなっても数年経っていると対応が難しくなると思います。追加工数を用意してテストクラスをつくり始めても当時気づかれなかった小さなバグがたくさん見つかりApexクラス側の改修が必要になることもあると思います。


このようにダミークラスをつかったやり方は一時的にうまくいくように思えても将来的に大きなトラブルにつながります。また目視のテストには当然時間が必要です。開発フェーズ→テストフェーズときちんと時間がとれるプロジェクト中は問題ありませんが、保守期間にちょっとした機能追加を依頼したくなったときに、目視ですべての機能を再検証する時間を作るのは難しいため、結果として調査しないとその機能の実装をして既存機能に影響がないかわかりません。機能追加後に検証工数がかかりますとなってしまいます。そうなった組織は最終的に何もできなくなり数年後には使えない組織となると思います。セールスフォースは使いづらいね。別のプラットフォームで一から作り変えようという選択しか取れなくなってしまうと思います。


テストクラスを用意したらバグの無いシステムが完成するかというとそうはなりませんが、開発中にちょっとしたバグに気づくことはできますし、将来身動きの取れないシステムが完成するのは回避できると思います。

f:id:tyoshikawa1106:20170108103542p:plain



ということでテストクラス作成工数を省略するダミークラス大作戦を前提としたやり方はやめておくのがオススメです。


SFDC:プロファイル設定で意識しておくこと

$
0
0

Salesforceではアクセス権限まわりの設定はプロファイル設定で管理できるようになっています。プロファイル設定にはたくさんのチェックボックスが用意されているのでよくわからないから全部にチェックをつけて置こうとなるケースがあるかもしれません。


このときデータの管理権限を一般ユーザに対して付与するのはやめておいた方がいいと思います。
f:id:tyoshikawa1106:20170108110252p:plain


データの管理権限はシステム管理者クラスの権限になっています。一般ユーザに付与してしまうとロールや公開グループなどでアクセス権限を制御しようとしたときに制御できなくなってしまいます。


また権限を広げるのは簡単ですが、権限を狭めようとするといままで出来ていたのにできなくなった..といろんなところに影響がでてしまうので検証時間が必要になってしまいます。なので最初は権限を与えないで本当に必要になったときに付与する形がオススメです。


ですが一般ユーザの権限を広げたいときでもデータの管理権限は基本付与する必要はありません。セールスフォースには共有設定や公開グループなど権限を付与させる設定がきちんと用意されています。一部のアクセス権限を付与したいときはデータの管理チェックを気軽に与えるのではなくこうした設定を利用するのがオススメです。

SFDC:プロセスビルダーとレコードID指定について

$
0
0

プロセスビルダーのアンチパターンについてです。プロセスビルダーを利用すると項目自動更新やChatter投稿などの便利な機能をプログラミングなしで実現することができます。ワークフロールールなどでもそうでしたが値更新処理などでレコードIDの直接指定を行うのはオススメしません。
f:id:tyoshikawa1106:20170108113340p:plain


レコードIDは環境依存したデータとなるためSandbox環境と本番環境で値が変わってしまいます。そのためSandbox環境でカスタマイズした内容を本番環境にリリースすると動かなくなってしまいます。


Sandboxと本番環境で別々の設定で管理するのは現実的ではありませんし、プロセスビルダーで値を変更するときは一度別バージョンとして作成して有効化するという少し手間のかかる手順が発生します。数が少なければそれでもなんとかなるかもしれませんが、数が多くなると対応できなくなります。


このときに問題になるのがSandbox環境のリフレッシュをしたときです。本来本番環境と同じ設定内容で最新化できるSandboxのリフレッシュですが、上記対応を行っていると動かない機能がたくさんできてしまいます。このような理由でエラーが発生すると下記のようなメッセージが表示されます。
f:id:tyoshikawa1106:20170108114047p:plain


フローのトリガに失敗しました。というエラーメッセージでは原因が確認できないのでなぜエラーが発生したのか調査するのも大変です。


こうしたトラブルを避けるためにもプロセスビルダーでレコードIDなど環境依存する値を利用するのは避けるのがオススメです。

SFDC:主従関係と参照関係の違いについて

$
0
0

主従関係と参照関係の違いについてです。別のオブジェクトと関連付けを行うときは主従関係もしくは参照関係の項目を用意して対応します。
f:id:tyoshikawa1106:20170108131322p:plain


似たような項目なのでとりあえず主従関係にしとこうとか、なんとなく参照関係にしようといった選択を行うケースがあると思います。基本的に親レコードが存在しているときにのみ作成されるレコードの場合は主従関係という考え方で大丈夫だと思います。


主従関係と参照関係の違いですが、主従関係を選択する大きなメリットがあります。

  • 積み上げ集計項目が作れる
  • 所有者を主オブジェクト側で一元管理できる
  • 主オブジェクト側のレコードを削除すると従レコードもまとめて削除できる


他にもあるかもしれませんが主従関係は上記3つの便利な特徴を備えています。積み上げ集計項目はよく使われる便利な機能で特定の条件で従レコードの件数や合計値などの情報を取得できます。これにより関連レコードが何件といった条件のデータをビューやレポートなどでまとめることも可能です。


所有者を主オブジェクト側で一元管理できることは地味な部分ですが便利な機能です。所有者の移行などが必要になったとき主オブジェクト側を修正して従オブジェクト側を修正して・・とひとつひとつやらなくては行けませんが、主従関係にすれば一箇所の所有者を変更すれば対応が完了します。主と従で所有者を変更しなくてはいけないときには参照関係にする必要がでてきます。


主オブジェクト側のレコードを削除すると従レコードもまとめて削除できる機能は本当に便利です。Salesforceに登録したデータは永久にそのままというわけではなく必要のなくなったデータは削除されると思います。このとき参照関係にしておくと親レコードが削除されても関連する子レコードはそのままになってしまいます。意味のあるデータならそれでも良いのですが大抵の場合役に立たないデータとして残ることになると思います。主従関係ならこの問題を簡単に解決できるのでオススメです。


一度作成した主従関係と参照関係の項目ですが、後からデータ型を変更することも可能です。ですがその場合は所有者項目やレポートタイプに変更が入るので、既存のビューやレポートに影響が出てしまいます。
f:id:tyoshikawa1106:20170108133142p:plain


後から変更することは可能ですが、出来る限り最初に検討してどちらを利用するのか選択した方が良さそうです。

関連記事





SFDC:ビューステートエラーとRemoteActionの送信上限の考慮について

$
0
0

Apexではpublic変数を用意することでページとクラス側で値のやりとりを簡単にできる変数を用意できます。ですが無制限に用意できるのではなく上限をオーバーするとビューステートエラーが発生します。
f:id:tyoshikawa1106:20170108134240p:plain


ビューステートエラーで気をつけなくては行けないのはファイルデータの扱いです。apex:inputFileタグをつかってファイルデータを保持した状態でreRenderなどで値のやりとりを行うと一発で発生します。ファイル添付画面→確認画面→アップロード処理実行というような機能を実装するときはJavaScriptRemotingなどで対応する必要があります。


またビューステートエラーが発生するからapexタグはダメだ。できるかぎりJavaScriptRemotingで対応する。という感じでRemoteActionを利用することがあると思います。実はRemoteActionにもApex側に値を渡すときに上限があります。
f:id:tyoshikawa1106:20170108134801p:plain


このようにJavaScriptRemotingで実装するときもいろいろ考慮する必要があります。


ビューステートエラーとRemoteActionの制限エラーが発生したときの一番の問題ですが、設計レベルで見直しが必要になることです。「NULLチェックが抜けていた」「保存処理がうまく実行できていなかった」という問題の場合はApex処理を修正して本番環境にリリースすれば修正できます。ですがビューステートエラーとRemoteActionの制限エラーの場合はデータの持たせ方から変更する必要がでてきます。場合によっては一から作り直す。オブジェクト構成から考え直すという状況にまでなる可能性があります。


組織に数万件のデータが溜まってきて動かなくなったということはあるかもしれませんが、数千件程度で動かなくなる処理というのは何かがおかしいので、運用が始まる前の開発フェーズで必ずチェックしておいた方が良いと思います。

関連記事




SFDC:ID検証方法がユーザに追加されたときの流れ

$
0
0

ID検証方法がユーザに追加されたときの流れについて確認してみました。2要素認証有効化時の話です。次のように権限セットを用意してユーザに割り当てます。
f:id:tyoshikawa1106:20170108140929p:plain
f:id:tyoshikawa1106:20170108140920p:plain


以前試した時には気にしていなかったのですが、割り当てたタイミングでは特にメール通知等はありませんでした。対象ユーザがログインしたときに2要素認証の設定画面が表示される仕組みとなっているみたいです。(初回ログイン時は除く)
f:id:tyoshikawa1106:20170108141342p:plain


別の検証方法を選択リンクをクリックすることで、アプリ認証か確認コード認証かを選択できるようになっていました。
f:id:tyoshikawa1106:20170108141519p:plain


通知メールは届きませんでしたが、ログイン時に必ず目につくようにメッセージが表示される形となりました。またモバイルアプリを利用できない人のために認証コードを選択できるようにもなっています。


ID検証の利用状況はSummer'16からビューやレポート&ダッシュボードで確認できるようになったみたいです。

ユーザによる ID の検証方法の確認

Viewing all 1438 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>