画面フロー内の「ファイルのアップロード」コンポーネントを使うことで、ユーザにファイル添付をさせることができます。
ただし「ファイルのアップロード」コンポーネントが思いのほか癖があり、使いづらいという声が多いので検証したいと思います。
方法①レコード作成後に別途ファイルアップロード
一番シンプルなファイルアップロードの仕組みになります。完成イメージは下記。
同時にアップするファイル数は、今回は1ファイル想定とします。
ポイントはファイル添付先の取引先を最初に作成しておき、その後で画面要素内のファイルアップロードコンポーネントで「関連レコード」にその取引先IDを指定する点です。
ファイルアップロードコンポーネント「FileUpload」にアップされたファイルのファイル名は{!FileUpload.fileNames}へ保存されるので別途下記のようにテキスト表示できるようにしておきます。
ファイルをアップすると下記のようにファイル名が表示できました。このテキスト表示を設定しないと、ユーザがファイルアップを実行した際に画面に変化がないため「本当にアップできたのか?」と不安に思われることがあります。今回の検証と直接関係はないですが意識したいところです。
さて、ここまで「取引先名入力」と「ファイルアップロード」の画面が分かれてしまうことを見てきました。お気づきかと思いますが、ユーザは2画面に渡って入力が求められますので不便です。
このようにファイルアップロードコンポーネントの「関連レコードID」にファイル添付したいレコードを指定することでファイル添付が実現できますが、
すでに保存済みのレコードしか指定できないという致命的な欠点があります。
方法➁レコード作成と同時にファイル添付
ここまでファイルアップロードコンポーネントの「関連レコードID」を使う方法ではユーザビリティが低下することを確認できました。
次に「取引先名入力」と「ファイルアップロード」を1画面内で実現できないかを検討します。
そもそもですが、レコードへのファイル添付は「コンテンツドキュメントリンク」オブジェクトが担っていることは下記の別記事で検証しました。
この方法を使い、ファイルアップロードされたコンテンツドキュメントID(=アップされたファイルのID)で検証してみます。
同時にアップするファイル数はこのパターンでも1ファイル想定としますが、複数ファイルであっても同じ仕組みで可能です。
1画面要素内に取引先名入力とファイルアップロードの2コンポーネントを配置することで、ユーザは1画面内の入力で完結できます。
先ほどと同じように、下記にアップされたファイル名が表示されるように{!FileUp.fileNames}を表示しておきます。
入力された取引先名を使い、次に取引先レコードの作成をします。これも問題なさそうです。
最後にコンテンツドキュメントリンクレコードを作成します。
リンク済みエンティティID項目に作成した取引先のSalesforceID、
コンテンツドキュメントID項目にファイルアップロードコンポーネントで取得した{!FileUp.contentDocIds}を指定、、しようと思いましたが下記のように選択肢に出ません。
コンテンツドキュメントリンクレコードの「コンテンツドキュメントID」は単一テキスト型である一方、{!FileUp.contentDocIds}はテキストコレクション型のため選択肢に出ないようでした、、
仕方がないので{!FileUp.contentDocIds}をループにて単一テキスト型に事前変換する処理を挟みます。
無事「contentsDocumentID」という単一テキスト型にコンテンツドキュメントIDを取得できたので、再度コンテンツドキュメントリンクレコードに割り当てます。
改めて、
リンク済みエンティティID項目に作成した取引先のSalesforceID、
コンテンツドキュメントID項目に「contentsDocumentID」変数を指定します。
コンテンツドキュメントリンクレコードを作成する=取引先へのファイル添付を完了する意味となります。
さて、思いのほか複雑になりましたが完成形は下記となりました。
「取引先名入力」と「ファイルアップロード」を1画面で実現できたので、ユーザは下記のように入力すれば良いだけになります。
余談
余談ですが、ファイルアップロードコンポーネントの[詳細]にある「手動で変数を割り当て」を使うことも検討しました。
ただし「手動で変数を割り当て」を使うと、ここまで検証時に使っていた「アップ済みファイル名の表示」ができなくなります。
検証した範囲では「手動で変数を割り当て」にメリットはなく、「アップ済みファイル名の表示」ができなくなるデメリットしかないように感じました。
まとめ
レコード作成画面とは別にファイルアップ画面を設ける、というのは多くの場合で不便です。
よって今回検証したようにコンテンツドキュメントリンクを作成することになりそうですが、複数ファイルをアップする際はともかく、今回のように1ファイルをアップするだけなのにループなどを挟むのはスタイリッシュなロジックとは言えません。
他にいい方法があれば、ぜひコメントで教えてください。