🐴

Salesforce:コピーボタンをカスタマイズしたい

18 min read

某案件でめっちゃハマったやつ。
残存課題については別途対応する。

要件と制約

  • レコードページ外の項目も選択してコピーしたい
  • ClassicUIなのでLightningレコードページ、コンポーネントは使えない

結論

ボタンクリック→VisualForce呼び出し→フロー呼び出しでレコードコピーすることにした

課題

  • ClassicUIからボタンをクリックさせてレコードコピーするには対象のレコードIDをURLで渡す必要がある
     →変数をフローのものと揃える必要がある
      →Visualforceページを開く際の記載ではだめ。

☓:?id={!CustomObject41__c.Id}

○:?recordId={!CustomObject41__c.Id}

  • ボタンクリック→フロー呼び出し とすることでレコードをコピーさせることはできたが、画面遷移しないのでユーザーからは何も起きてないように見える。
     →これではボタン連打されるし、コピーボタン押下→コピー後のページに遷移するように変更したい。

🤔

ボタン押下→Visualforceを表示→フロー実行→ページ遷移

って感じにする?
Visualforce ページへのフローの埋め込み | Visualforce 開発者ガイド | Salesforce Developers

やってみた

  1. フローを作成

    ※フロー名:QuoteCopy

  2. フローを呼び出すVisualforcePageを作成
    ※フローを呼ぶためだけのVFページ

    <apex:page showHeader="false" applyBodyTag="false" docType="html-5.0"
    	   standardController="CustomObjectXX__c"  >
         <flow:interview name="QuoteCopy"/>
    </apex:page>
    
    
  3. VisualForceページを開くボタンを作成

  4. ボタンのURLを以下に変更

    /apex/Sales_Input_Invoice?id={!CustomObject41__c.Id}?recordId={!CustomObject41__c.Id}
    
    // これだと怒られたので以下に変更
    	/apex/Sales_Input_Invoice?id={!CustomObject41__c.Id}&recordId={!CustomObject41__c.Id}
    
    // 変数値をURLで渡す際は&でつなぐ必要がある。
    

できた!

コピーボタンクリック → ポップアップ表示された画面

...が、完了ボタンをクリックするとウィンドウが閉じない。

(memo)残った問題と調査したこと

ポップアップ表示された画面の[完了]ボタンをクリックした際の挙動を変更したい

finishLocation="{!URLFOR('/home/home.jsp')}"を追加することで解決できる模様。
→できなかった。

フローで作成されるレコードのIDとURLヘッダを組み合わせれば、作成後の新レコードページに遷移させることができる

Apexクラスでフローの変数が使えるらしい

フロー変数の取得 | Apex 開発者ガイド | Salesforce Developers
Visualforce ページへのフロー変数値の取得 | Visualforce 開発者ガイド | Salesforce Developers

試してみたが、VFにてスタンダードコントローラーとコントローラーの両立は出来ないと怒られた。

まぁ一旦はこれで良いか...

参考にしたリンク集

Salesforce画面のカスタマイズ (Lightning版) – ブログ

レコードを作成およびコピーするための UI の作成 単元 | Salesforce Trailhead

レコードの作成要素によるレコードのコピー

フローでレコードの作成または更新を行うときにアクセスできない項目

DML を使用したレコードの操作 単元 | Salesforce Trailhead

コピー機能の制限について

商談をコピーする場合の考慮事項

フォーム登録でレコードタイプを切り替えるには?|Synergy!LEAD | シナジーマーケティング株式会社 SynergyMarketing

dreamevent.secure.force.com

セールスフォースの基本機能レコードタイプ・ビジネスプロセス – ブログ

プロセスビルダーと Flow Builder の機能を組み合わせる 単元 | Salesforce Trailhead

カスタムボタンでのフローの配布 単元 | Salesforce Trailhead

2020/01/17

プロセスビルダーと Flow Builder の機能を組み合わせる 単元 | Salesforce Trailhead

Your session has expired.

レコードを作成およびコピーするための UI の作成 単元 | Salesforce Trailhead

レコードの作成要素によるレコードのコピー

カスタムボタンでのフローの配布 単元 | Salesforce Trailhead

変数値を設定するようにフロー URL をカスタマイズ

レコードをコピー時のコピー元レコード情報の対応付けについて - Salesforce Developer Community

レコードの作成要素によるレコードのコピー

フローでレコードの作成または更新を行うときにアクセスできない項目

フロー要素: レコードを作成

salesforce フロー recordid - Google 検索

SalesforceアプリでVisualWorkFlow - 待ってましたよ。Lightning:flowタグ - - TerraSkyBase

Salesforce女子部 #20 〜ハンズオンで学ぶLightningフロー〜 - connpass

Salesforce World Tour Tokyo 2017 ミニハック解答速報

Salesforceで数式で持ってこられない参照関係のオブジェクトのロングテキスト項目を画面フローを使って表示する方法 | フロッグウェル株式会社

フローアクションの考慮事項

フロー要素: レコードを取得

フローからの Salesforce レコードの作成

フローアクションの考慮事項

フローを起動するオブジェクト固有のクイックアクションの作成

フローへのレコードコンテキストの追加

フローでSalesforceのレコード情報をSlackに投稿する - Qiita

フロー内でのデータの操作

フローからの Salesforce レコードの作成

レコードの作成要素によるレコードのコピー

フロー要素: レコードを作成

レコードをコピー時のコピー元レコード情報の対応付けについて - Salesforce Developer Community

[Salesforce]見積(Quote)をコピーする方法 - dackdive's blog

Salesforceのカスタムリードフォームの作成| Brightcove 学習

ど~する?ど~しよ? Salesforce関連

フロー要素: レコードを取得

qiita.com

「docforce2」salesforceオブジェクト設計書作成ツール - Qiita

Salesforce レコードへのアクセス制御方法(共有設定・共有ルール等)まとめ - Qiita

フロー要素: レコードを作成

レコードの作成要素によるレコードのコピー

フローのリソース: $Flow グローバル変数

フローのベストプラクティス

2020/01/23

完了動作を制御するようにフロー URL をカスタマイズ

提供されるフロー画面コンポーネント

フローをレコードのアクションとして追加 単元 | Salesforce Trailhead

フローの作成

カスタムボタンでのフローの配布 単元 | Salesforce Trailhead

salesforceで、定期的に処理を実行するには? - セールスフォースお助け隊ブログ | Salesforce

[salesforce]バッチスケジュールの一通りの書き方 - KayaMemo

[Salesforce]契約終了の20日前にメールアラートを自動で送信したい – ウフルカスタマーサポート

Lightning フローランタイムと Classic フローランタイムの比較

URL ベースのフロー用のランタイム環境の設定

自動アクションの実行

Visualforce でのフローの表示 | Visualforce 開発者ガイド | Salesforce Developers

Visualforce ページへのフローの埋め込み | Visualforce 開発者ガイド | Salesforce Developers

flow:interview を使用した高度な例 | Visualforce 開発者ガイド | Salesforce Developers

Visualforce ページへのフローの埋め込み | Visualforce 開発者ガイド | Salesforce Developers

効果的なカスタム URL ボタンおよびリンクの作成

Salesforce サイトの URL の書き換え | Apex 開発者ガイド | Salesforce Developers

SFDC:Visualforceページの画面遷移とURLFOR関数 - tyoshikawa1106のブログ

フローの完了動作を制御するように Visualforce コンポーネントをカスタマイズ

フローの finishLocation 属性の設定 | Visualforce 開発者ガイド | Salesforce Developers

フローの finishLocation 属性の設定 | Visualforce 開発者ガイド | Salesforce Developers

Visualforce ページからのフロー変数値の設定 | Visualforce 開発者ガイド | Salesforce Developers

フローが完了した場合の処理

ローカルアクションを使用したフローユーザのリダイレクト

完了動作を制御するようにフロー URL をカスタマイズ

Visualforce ページへのフロー変数値の取得 | Visualforce 開発者ガイド | Salesforce Developers

フロー変数の取得 | Apex 開発者ガイド | Salesforce Developers

フロー変数に関する考慮事項

フローのリソース: $Flow グローバル変数

変数値を設定するようにフロー URL をカスタマイズ

2020/01/24

オブジェクト固有のクイックアクションの作成

Salesforce - $リソース | salesforce Tutorial

新しいフローを試してみた。 - ピヨピヨ奮闘記

yhayashi30.org

フローが完了した場合の処理

ローカルアクションを使用したフローユーザのリダイレクト

Visualforce ページへのフロー変数値の取得 | Visualforce 開発者ガイド | Salesforce Developers

フロー変数の取得 | Apex 開発者ガイド | Salesforce Developers

flow:interview を使用した高度な例 | Visualforce 開発者ガイド | Salesforce Developers

salesforce フロー 画面遷移 レコードページ - Google 検索

LightningComponentの歩き方と、画面遷移にまつわるTips - Qiita

フローの finishLocation 属性の設定 | Visualforce 開発者ガイド | Salesforce Developers

フローの完了動作を制御するように Visualforce コンポーネントをカスタマイズ

フローへの画面の追加 単元 | Salesforce Trailhead

【salesforce】Classic基本知識ーVisualforceページ作成 - Qiita

【Salesforce】標準コントローラを使用したページを作成する – 下っ端の落書き帳

【Apex+Visualforce】標準コントローラの拡張をやってみた。アクションの追加と上書き。 | ガワタリ.com

標準コントローラアクションの使用 | Visualforce 開発者ガイド | Salesforce Developers

getParameters() | Apex 開発者ガイド | Salesforce Developers

関数 | Visualforce 開発者ガイド | Salesforce Developers

SFDC:Visualforceページの画面遷移とURLFOR関数 - tyoshikawa1106のブログ

Salesforce VisualforceでURLパラメータをコントローラのメンバ変数として受け取る方法 | akatukisiden's blog

Visualforceが静的リソースURLをApexに渡します - VoidCC

効果的なカスタム URL ボタンおよびリンクの作成

VFページ タグ - Qiita

グローバル変数

効果的なカスタム URL ボタンおよびリンクの作成

URLパラメータ使用時に気をつけること ~Sandboxと本番環境での違い~ - TerraSkyBase

Salesforce標準ページのURLパラメータまとめ | Xgeek

Discussion

ログインするとコメントできます