Salesforceのアプリケーション別ナビゲーションメニューへのタブ追加方法がわからない

前提

セールスアプリケーションを選択したときのナビゲーションメニューに「売上予測」タブを追加したい場合を想定。

現象

「Salesforce ナビゲーション タブ追加」とGoogleで検索すると以下がHITするが、目的のタブ追加できない。

ナビゲーションメニューにタブを追加する

原因

設定場所が異なる。

対応

設定方法はアプリケーションマネージャより実行する。
操作は以下がわかりやすい。

売上予測タブの追加

アプリケーションマネージャで「セールス」の▼から「編集」を実行する。

売上予測を追加する。

売上予測タブが追加された。

その他(カスタムオブジェクト新規作成時)

もし、カスタムオブジェクトを新規作成した後にタブが表示できない場合は、カスタムタブを作成し忘れている可能性あり。タブを作成しないと表示ができない仕組みになっている。

カスタムオブジェクトの新規作成時に「カスタムオブジェクトの保存後、新規カスタムタブウィザードを起動する」というのを選択できるため、これにチェックを入れておくと、自動的にカスタムタグに遷移することができる。

もし、チェックを入れ忘れた場合は、設定から「タブ」と検索して、カスタムタグを表示して設定すればよい。

参考:【Salesforce】作成したカスタムオブジェクトのタブ表示ができない。カスタムタブの作成

Salesforce Trailheadで「プロセスビルダーを使用したプロセスの作成」が動かない

現象

以下の手順通りに設定すると、カスタムオブジェクト作成の「First Contact Made (初回連絡日)」のみ、型が指定されていない。

Salesforce Trailhead - プロセスビルダーを使用したプロセスの作成

動画を見ると日付にチェックを入れていたが、プロセスビルダーのアクションはBoolean型のtrue判定で設定するため、日付型だと動かない。

対策

実際はチェックボックスにする必要がある。最終的に以下のようになる。

商談のカスタムオブジェクト

プロセスビルダー

備考

正しく設定されているかの確認方法

Trailheadの最下部の「ステップを確認して100ポイントを獲得」ボタンを押すと、おかしい箇所をデバッグのような形で指摘してくれる。

プロセスビルダーの反映タイミング

プロセスビルダー側で設定するが、Trailheadのコースだと「レコードを作成または編集したとき」がトリガーになっているため、カスタムオブジェクトやプロセスビルダーの設定変更をしたら、商談を編集して保存すれば即時反映される。
もし、即時反映されない場合は、設定が誤っている可能性あり。

プロセスビルダーが動作しているかデバッグ

設定で「デバッグログ」と検索して、そこからデバッグ設定ができる。
デバッグは以下の進め方になる

  1. ユーザ追跡フラグでデバッグを出力定義する
  2. 商談を編集して保存する
  3. デバッグログをDLして閲覧する

今回、プロセスビルダーが正常に動いた場合のデバッグログは以下のとおり(商談名:プロセスビルダー、プロセスビルダー名:Opportunity Stage to Qualification)。
情報が少ないと感じる場合は、デバッグログ設定にてデバッグ出力をさらに詳細化していく。

51.0 APEX_CODE,FINEST;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;NBA,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WAVE,INFO;WORKFLOW,INFO
16:20:55.0 (267046)|USER_INFO|[EXTERNAL]|0055h000000Qyjf|xxx@example.com|(GMT+09:00) 日本標準時 (Asia/Tokyo)|GMT+09:00
16:20:55.0 (390810)|EXECUTION_STARTED
16:20:55.0 (406994)|CODE_UNIT_STARTED|[EXTERNAL]|Workflow:Opportunity
16:20:55.0 (11596870)|WF_RULE_EVAL_BEGIN|ワークフロー
16:20:55.0 (11706951)|WF_CRITERIA_BEGIN|[商談: プロセスビルダーテスト 0065h000001u6zi]|Opportunity_Stage_to_Qualification3015h000000g5R9|01Q5h000000Ckb1|ON_ALL_CHANGES|0
16:20:55.0 (11926618)|WF_FORMULA|Formula:ENCODED:[treatNullAsNull]true|Values:
16:20:55.0 (11980464)|WF_CRITERIA_END|true
16:20:55.0 (12182469)|WF_SPOOL_ACTION_BEGIN|ワークフロー
16:20:55.0 (12228591)|WF_ACTION| フロートリガ: 1;
16:20:55.0 (12240593)|WF_RULE_EVAL_END
16:20:55.15 (15249130)|FLOW_CREATE_INTERVIEW_BEGIN|00D5h000000JFBN|3005h000000wt0K|3015h000000g5R9
16:20:55.15 (16132032)|FLOW_CREATE_INTERVIEW_END|6350455f8201b07320d0252baba317877a72802-431e|Opportunity Stage to Qualification
16:20:55.0 (16201401)|WF_FLOW_ACTION_BEGIN|09L5h000000DGUu
16:20:55.16 (16724962)|FLOW_START_INTERVIEWS_BEGIN|1
16:20:55.16 (16761265)|FLOW_START_INTERVIEW_BEGIN|6350455f8201b07320d0252baba317877a72802-431e|Opportunity Stage to Qualification
16:20:55.16 (19239755)|FLOW_START_INTERVIEW_END|6350455f8201b07320d0252baba317877a72802-431e|Opportunity Stage to Qualification
16:20:55.16 (19271603)|FLOW_START_INTERVIEWS_END|1
16:20:55.16 (19287965)|FLOW_INTERVIEW_FINISHED|6350455f8201b07320d0252baba317877a72802-431e|Opportunity Stage to Qualification
16:20:55.0 (20903047)|WF_FLOW_ACTION_END|09L5h000000DGUu
16:20:55.0 (21025898)|WF_ACTIONS_END| フロートリガ: 1;
16:20:55.0 (21050128)|CODE_UNIT_FINISHED|Workflow:Opportunity
16:20:55.0 (21063736)|EXECUTION_FINISHED

Salesforceで商談に商品が追加できない

現象

Sales Cloud(Salesforce Developer Editionアカウント)で新しく商品を追加したあとに、商談で紐付けようと思ったら追加した商品が表示されず、紐付けできなかった。

原因

商品を追加するときに「価格表:Standard」と指定されているため、その価格表に紐付いていない商品は表示されない。
そのため、商品を登録しただけでは紐付けできない。

商談で商品を追加すると

「価格表:Standard」になっているため、紐付けたい商品が表示されない

対策

商品を「価格表:Standard」に紐付ける。

全体像

  1. 商品を追加
  2. 追加した商品に価格表を紐付ける
  3. 商談から商品を追加

1.商品を追加

商品オブジェクトより、商品を追加する。この場合、サービスAを追加。

2.追加した商品に価格表を紐付ける

商品「サービスA」の関連タブをクリックしたあと、「標準価格を追加」を実行。

Standard Price Bookを指定して、リスト価格を入力して保存。

次に「価格表に追加」を実行。

Starndard、JPYを選択して次へ。

価格表「Stanrdard」を指定し、価格を入力して保存。

以上で「価格表:Standard」に商品が追加される。

3.商談から商品を追加

これで「サービスA」が商品紐付けできるようになった。

参考

[Salesforce]商品は価格表に登録しないと使用できません。 - uhuruカスタマーサポートチーム

Salesforceで商談と売上予測のBest CaseやCommitと連動されない

Sales Cloudで売上予測を管理する方法。
売上予測のPipeline項目には売上が載っていたが、Best CaseやCommitには売上が表示されず、若干ハマったのでその時の設定メモ。

手順は基本的に以下のとおりになる(要ログイン)。

参考:売上予測分類のカスタマイズと調整の有効化

用語

以下が標準で設定できるが、いずれも商談のフェーズと連動させて管理する。

  • Pipeline:パイプライン(商談のフロー)
  • Best Case:最善達成予測
  • Commit:達成予測(確約できる商談)
  • Closed:クローズ済み(商談クローズ)

全体像

  1. Sales Cloudで売上予測を有効化する
  2. 商談のフェーズと売上予測を連動設定する
  3. 売上予測を管理する

設定手順

Sales Cloudで売上予測を有効化する

冒頭のリンクを参考に売上予測を有効化する。

商談のフェーズと売上予測を連動設定する

これが若干わかりにくかったが、冒頭のリンクを参考に商談のフェーズを編集する。
そうすると、「売上予測分類」という列が表示されるため、これを商談のフェーズと連動設定する。

たとえば、以下の例だと「Negotiation/Review」フェーズにある商談は、「Best Case」に変更してみた。

売上予測を管理する

売上予測タブで確認するとBest Caseに金額が載っている。
もし、ここに表示されていない場合は、商談の完了予定日と売上予測の会計年度が合致するかをチェックする。

Salesforceで商談分割がよくわからない・設定できない

Sales Cloudを使って、複数人で収益を分配したい場合に利用する機能が商談分割。
イメージとしては以下が把握しやすい。(要ログイン)

Salesforce Trailhead - チームでの販売とクレジットの分割

商談分割の考え方

プログラムとプロジェクトという考え方があるが、商談分割はそれとは異なる。

【補足】
一般的には複数のプロジェクト(=案件=商談)を束ねたものをプログラムと呼ぶ。
大規模な商談だと、まずプログラムとして大きな塊で扱って、そこから各プロジェクトを複数に切り出して、それぞれ活動・体制・金額をもとに個別契約(=商談)として、切り出して推進することになる。

【システムデリバリーを商談として扱う場合のプログラムとプロジェクトの関係性の例】
 EC事業改善プログラム(ECを主軸に売上拡大や効率化を図るという場合)
  ├ (商談1)マーケティング導入プロジェクト
  ├ (商談2)ECシステムリプレースプロジェクト
  ├ (商談3)在庫管理システム導入プロジェクト
  ├ (商談4)EC・店舗在庫情報統合プロジェクト

Salesforceの商談分割は、あくまで1つの商談の中で収益分配したい場合に利用するため、商談自体が複数にわかれるわけではなく(プログラムとプロジェクトのような関係性ではない)、1つの商談の中で収益分配者を設定するだけとなる。
また、売上の按分や請求管理とも考え方自体が異なるため、それらの代替機能として利用することはできない。

全体像

大きく以下のステップになる。

  1. 商談チームの有効化
  2. 商談分割の有効化
  3. 商談の中で商談分割を設定

参考:Salesforce Trailblazer Community - 商談分割の有効化

設定手順

商談チームの有効化

設定から「商談チームの設定」で検索して、「チームセリング設定の有効化」を実行するだけ。これが有効になっていないと商談分割ができない。

参考:Salesforce Trailblazer Community - 商談チームを有効にしてチームセリングを促進

商談分割の有効化

手順は以下になるが、若干うまくいかない部分もあったため、以降に実行手順どおりのスクリーンショットを掲載。

参考:Salesforce Trailblazer Community - 商談分割の有効化

商談分割設定から、「商談の分割の設定」を実行。

分割種別の設定で「保存」を実行。

商談分割を有効にしたいページレイアウトを選択する。不明な場合は全部選択する。
補足:以降の手順で商談の中で商談分割を設定が出てくるが、「商談」にて「商談の分割」が表示されない場合がある。その時はここの設定が一番あやしい。
有効対象とするページレイアウトを選択できているか、要確認。

「有効化」を実行。

処理中になるため、数分待つ(おそらくデータ量と処理時間は比例する)。

商談の分割が有効化される。

商談の中で商談分割を設定

商談分割したい商談を開くと、関連メニュー(右下)に「商談チーム」と「商談の分割」が表示される。

補足:商談分割は、自分自身を分配先に指定できないため、まず商談チームに分配者を追加する必要がある。▼を選択して「商談チームメンバーを追加」で、分配者を追加する。
(その追加手順はスクリーンショット上からは省略)

関連メニュー(右下)の「商談の分割」の▼をクリックして「商談の分割を編集」を選択すると以下の画面が表示される。
分配したい人を選択してパーセントが100%になるように調整する。
補足:自分自身を分配先に指定すると「エラーのあるレコードは保存できません。商談分割 所有者。」というエラーが表示される。また、商談チームに追加されていない人は指定できない。

保存すると、商談の関連メニュー(右下)の「商談の分割」に分配者が表示される。

Visual Studio for Macで入力ソースが変更できない

環境

  • macOS Big Sur 11.2.1(20D74)
  • Visual Studio for Mac 8.8.10
  • Macの「システム環境設定 > キーボード > ショートカット > 入力ソース」で以下2つを設定済み(つまり、英語/日本語を切り替えるショートカット)
    • 前の入力ソースを選択:control + space
    • 入力メニューの次のソースを選択:command + space
  • キーボードの入力ソースの設定は以下

  • キーボードはUS配列を適用

現象

Visual Studioで英語/日本語を切り替えるショートカットとして、command + spaceを割り当てていたが、それが動作しない。
コミュニティで起案されているが解決しておらず、もしかしたら放置されている可能性が高い。

Developer Community - Switching input source using Cmd + Space does not work

原因

Visual Studio上で「入力メニューの次のソースを選択」が動作しないことがわかった。

- 前の入力ソースを選択 ← 動作する
- 入力メニューの次のソースを選択 ← 動作しない

対策

「入力メニューの次のソースを選択」の使用はあきらめて、「前の入力ソースを選択」のみを使用することで暫定的に回避した。入力ソースを2つしか使用していないため、特に支障がなく運がよかった。

(最終的な設定)Macのキーボードショートカットは以下

(最終的な設定)Visual Studioのキーバインドは特に変更していないが、「入力候補」に割り当てられているショートカットは以下

補足

Macの「英数」キーと「かな」キーによる切り替えはできるため、それを利用することでも回避可能(おそらくこれが一般的かと)。

しかし、 40%キーボード やUSキーボードを使っている場合、キーが足りないため、入力ソースの切り替えショートカットが必要。
その場合は、Macのキー配列をカスタマイズできるアプリ「Karabiner」を利用して、新しいショートカットを作ることで、「英数」キーと「かな」キーを割り当てることもおそらく可能(こちらは未検証のため推測)。

Microsoft Excel 2016 for Macで文字入力が遅い問題

環境

  • macOS Bis Sur 11.2.1(20D74)
  • Microsoft Excel 2016 for Mac (バージョンは確認漏れだが2021年1月時点の最新版)

現象

以下2つの問題が発生。

  1. Microsoft AutoUpdateが正しく機能せず、Excelが最新にならない
     右下のMicrosoft AutoUpdateアイコンに更新通知(3件)が常に表示され、更新を実行してもこれが消えない。

  2. Excelでウィンドウ枠の固定をすると文字入力が遅くなる

原因

Excelが最新バージョンではなかったために現象が発生していたと推測。
Microsoft AutoUpdateが正しく機能しなくなった経緯は、たしか不要なアプリケーションを削除したときに発生(Outlookの削除だった気がする)。

対策

一般的な対策

以下を実行したがいずれも解決できず。
- Microsoft AutoUpdate:再インストールする
- Excel:キャッシュの削除、構成ファイルの削除、重複フォントの削除、設定の微調整(アニメーションを切るなど)

Excelを再インストールして最新版にするのを試したかったが、諸事情により断念。

解決策

Microsoft Excel 2016 for Macの最新化はあきらめて、Microsoft Excel 2019 for Macにアプリケーションを入れ替えて問題解決。

代替案

ウィンドウの固定枠を利用しない、という暫定対策もあるが、 LibreOffice というアプリケーションを利用する案もある。
LibreOfficeは非常に優秀で、Excel互換も完璧。デザインが古臭いため敬遠している方も多そうだが、動作も軽快で使い勝手もよく、いまだに更新され続けていて、無料で利用可能。
Excelに問題が起きたときの一時的な対策としておすすめ。
(仕事用には会社から提供されたExcelを利用し、プライベート用にはLibreOfficeを利用している)

WordPressプラグイン開発者による「テストされていません」の更新方法

現象

WordPressプラグインを開発し、公開したあとに、WordPressのバージョンアップがあると、プラグインのページに以下のようなメッセージが表示される。

このプラグインは WordPress の最新3回のメジャーリリースに対してテストされていません。もうメンテナンスやサポートがされていないかもしれず、最新バージョンの WordPress で使用した場合は互換性の問題が発生する可能性があります。

原因

開発したプラグインのテストを行い、動作することをreadme.txtに記載していないため、このようなメッセージが表示される。

対策

WordPress.orgに公開している svn > trunk > readme.txt のバージョンを動作テストした上で(WordPress最新版でテストするとわかりやすい)更新する。

Tested up to: x.x.x

自分の場合はこちら(WordPress.orgのリポジトリ)

そのあとWordPress.orgにコミットしたら完了。

Bluetoothスピーカーが音飛びする

Bluetoothスピーカー(ANKER SOUNDCOREやSONY SRS-X1)に接続して音楽を聞いているが、たまに音飛びする現象が発生。
結論として、Bluetoothスピーカーの接続先を複数デバイス設定されていると、そういう現象が起きることがわかった。

現象

Bluetoothスピーカーで音楽を聞いていると、たまに音飛びというか、プツプツと音楽が聞こえたり聞こえなかったり、という現象が発生。まるで80年代のテレビのアンテナのように不安定。
不思議なことに、自分の頭や体を動かしたり、Bluetoothスピーカーの置き場所や位置を変えると直ることがある。ただし、しばらく経つとまた再発する。

以下を試して、いずれも直らず。
- 再生元デバイスを変える
→ MacBookPro(macOS Catalina経由)、iPhone6で試したがNG
- Bluetoothスピーカー自体を変える
→ ANKER SOUNDCOREとSONYで試したがNG

【備考】
iPhone6は音楽再生用にしているため、音楽再生以外のアプリしか入っていない。SIMカードも抜いていて、WiFi接続となっている。

原因

Bluetoothスピーカーの接続先デバイスが、MacBook ProとiPhone6の2デバイスに接続設定をしていて、音楽再生するときは、どちらか一方のみに接続していた。また、どちらも手元に置いてある。

おそらく、Bluetoothスピーカーが手元にある2デバイスに対して、Bluetoothが探しに行く/接続しにいく/干渉していることが原因と思われる。
MacBook ProとiPhone6の2デバイスがあまりにも近すぎるのも原因かもしれない。

対策

MacBook ProとiPhone6に設定したBluetooth接続を一旦リセットし、iPhone6にしかBluetooth接続設定をしないようにしたら直った。

備考

MacBook ProとBluetoothのマウスとヘッドセットを使っているが、同様の現象が発生。マウスの移動が飛んだり固まったり、ヘッドセットのほうも音が聞こえたり聞こえなかったり、といった現象になった。この場合は、Bluetoothをヘッドセットの1つだけにしたら直った。おそらく干渉しあっていることが原因と思われる。

SwiftUIのWebViewでFatal error: Unexpectedly found nil while unwrapping an Optional value

SwiftUIでWebView表示しようとしたところエラーが発生。

現象

Xcodeのシミュレーターで日本語を含むURLを読み込むと、以下のエラーが発生して強制的に落ちる。

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

エラーが発生したソースコード

import SwiftUI
import WebKit

struct WebView: UIViewRepresentable {
    let loadUrl: String

    func makeUIView(context: Context) -> WKWebView {
        return WKWebView()
    }

    func updateUIView(_ uiView: WKWebView, context: Context) {
        uiView.load(URLRequest(url: URL(string: loadUrl)!))
    }
}

struct WebView_Previews: PreviewProvider {
    static var previews: some View {
        WebView(loadUrl: "https://example.com/")
    }
}

原因

URLに日本語が含まれていると強制的にnilになってしまうらしい。

対策

URLエンコードを行う。
具体的にはURLに .addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)! をつけてURLエンコード化する。

実装したソースコード

import SwiftUI
import WebKit

struct WebView: UIViewRepresentable {
    let loadUrl: String

    func makeUIView(context: Context) -> WKWebView {
        return WKWebView()
    }

    func updateUIView(_ uiView: WKWebView, context: Context) {
        let loadUrlEncoding = loadUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
        uiView.load(URLRequest(url: URL(string: loadUrlEncoding)!))
    }
}

struct WebView_Previews: PreviewProvider {
    static var previews: some View {
        WebView(loadUrl: "https://example.com/")
    }
}

参考