Mark Hammer's Blog

SalesforceやTrailheadに関する情報を投稿しているブログです。

Lightningでユーザを力技でコピーしたい

はじめに

今回の検証のきっかけはこちらの投稿です。 sf.forum.circlace.com

ユーザはLightningでコピーできるのか、機能を試すという意味で興味を持ったのでやってみることにしました。

検証

実現可否の確認

※以下Salesforce URLは https://mydomain.lightning.force.com/... とします。実際に使用する際はURLはご自身の組織URLに読み替えてください。

まず前提として、LightningでcloneURLパラメータは使えません
以前業務で必要になってSalesforce社に問い合わせたのですが、「無理」という回答でした。

そのため、Lightningでコピーをするには defaultFieldValues を用いて必要な項目を1つずつ指定する必要があります。
参考:Salesforceヘルプ:デフォルト項目値を含むレコード作成ページの起動

次に、ユーザ新規作成画面で defaultFieldValues URLパラメータが使えるかを検証します。
一般的にユーザを新規作成する際は 設定|ユーザ|ユーザ の画面から「新規ユーザ」をクリックしますが、その時のURLは以下のように独特です。

https://mydomain.lightning.force.com/lightning/setup/ManageUsers/page?address=%2F005%2Fe%3FretURL%3D...

試しにこのURLに defaultFieldValues URLパラメータを追加したのですが、全く効きませんでした。

次に、先述したブログの「検証 2 カスタムリンクの作成→Lightningの場合」に記載された新規ユーザ画面に注目します。
この画面は https://mydomain.lightning.force.com/lightning/o/User/new にアクセスすれば表示されます。

もう1つの新規ユーザ画面

しかし、この画面にはユーザ作成に必要なプロファイル等の項目が配置されていないので、ユーザを作ろうとしてもエラーになります。

エラー画面

項目がないならページレイアウトで追加すればいいじゃない、ということで該当ページのページレイアウトを探します。
すると、ユーザオブジェクト設定にある「ユーザプロファイルページレイアウト」が該当ページのページレイアウトであることを確認しました。

ユーザプロファイルページレイアウト編集画面

ここまで確認できれば、このページレイアウトに必要な項目を配置し、 defaultFieldValues URLパラメータで必要項目を設定すればできるのでは、ということで試してみることにしました。

ユーザコピーを行う

まず、ユーザプロファイルページレイアウトに以下項目を配置します。

  • 名前
  • 別名
  • メール
  • ユーザ名
  • ニックネーム
  • プロファイル
  • メールの文字コード
  • タイムゾーン
  • 地域
  • ロール(必須ではない)
  • 有効(必須ではない)
  • その他必要な項目

なお、ユーザ作成には上記項目の他「言語」項目も必要ですが、ユーザプロファイルページレイアウトにはなぜか配置できません。
そのため、この画面からユーザを作成することはできません。

エラー画面

しかし、defaultFieldValues URLパラメータで「言語」項目を指定すればユーザ作成できるかもしれません。

次に、このユーザ作成画面にdefaultFieldValues URLパラメータを使ってアクセスするカスタムリンクを作成します。
作成したカスタムリンクURLは以下になります。

/lightning/o/User/new?defaultFieldValues=
FirstName={!URLENCODE(User.FirstName)},
LastName={!URLENCODE(User.LastName)},
Alias={!URLENCODE(User.Alias)},
Email={!URLENCODE(User.Email)},
Username={!URLENCODE(User.Username)},
CommunityNickname={!URLENCODE(User.CommunityNickname)},
ProfileId={!User.ProfileId},
TimeZoneSidKey={!URLENCODE(TEXT(User.TimeZoneSidKey))},
LocaleSidKey={!URLENCODE(TEXT(User.LocaleSidKey))},
LanguageLocaleKey={!URLENCODE(TEXT(User.LanguageLocaleKey))}

ちなみにメールの文字コード(User.EmailEncodingKey)、ロール(User.UserRoleId)はカスタムリンクの差し込み項目として使用できなかったため加えていません。
しかし言語(LanguageLocaleKey)は指定できました。

このリンクをクリックして表示された画面が以下になります。

コピーリンクをクリックした際の画面

メールの文字コードはデフォルト値が使用されていました。
そしてこの画面で保存をクリックすると…無事保存できました。

保存後の画面

おわりに

今回力技でユーザコピーを試しましたが、以下の理由で実用性がないと考えます。

  • カスタムリンクの時点でメールの文字コード、ロールがコピー対象から抜け落ちる。
  • マーケティングユーザ等の機能ライセンスを割り当てられない。
  • ユーザ設定画面から作成した場合には使える「パスワードをリセットしてユーザに通知する」が使えない。

個人的にはユーザをコピーするならデータローダを使うと思います。
理由は上記欠点のうち「パスワードをリセットしてユーザに通知する」が使えない点以外に対応できること、また複数コピーが同時にできるためです。