見出し画像

Salesforceの活用:SUBSTITUTE関数で全角を半角にしよう!

みなさんこんにちは。
日中はまだ暖かい日が続きますが、夜は寒くなってきましたね。どうもNです。
日頃から営業部の支援業務としてSalesforceを触ることが多いのですが、今回は実際に対応した、オブジェクト間での「半角変換」についてシェアしていこうと思います。前回の記事とはだいぶテイストが変わりますが最後まで読んでいただけると喜びます。


Salesforceあるある?部署連携やデータ移行での苦労。

弊社ではSalesforceを使用しているのですが、営業部と経営管理部とで使用するオブジェクトを分けており、営業部が登録した情報をもとに経営管理部が売上の本登録を行い、見積書を作成するフローとなっているので、部署間の連携も大切になってきます。
それぞれのメンバーが使いやすいように、Salesforceの改修をかけたりするのが私の業務の一つだったりします。

そんな中でも、他のシステムからのデータ移行の際に数字・記号がうまく変換されずに苦労するケースや、参照項目の数字・記号を参照先で半角に統一したいけど、修正にかける工数がもったいない、というようなことはあるあるではないでしょうか?

弊社は後者のパターンで、見積オブジェクトが一部契約情報オブジェクトの参照項目となっていることから、見積書を作成した時に電話番号に全角・半角が混在していて見栄えが悪くなってしまう、と相談がありました。

前置きが長くなりましたが、今回の私のミッションはこちらです。
【契約情報の参照項目を含む、見積オブジェクトで作成する見積書の見栄えをよくしたい!】
ということで、見積オブジェクト側で関数を使って全部半角にできないかなぁと思い、いろいろ調査してみました。

そんなことわざわざしないで参照元の数字・記号入力を最初から半角入力に固定すればいいじゃん!と思ったそこのあなた。仮にそうしたとして、設定前の過去のデータを使用する場合などは修正の手間があるわけです。例えば契約期間が延びただけとかだと過去のデータをコピー作成することがあるのですが、イメージ沸くかしら?
そんなときに保存しようとしたら、エラーで保存できない。こういうの地味にストレスではないでしょうか?なのでそういった手間を省くためにも「それなら見積オブジェクト側で変換できれば万事解決なのでは?」という結論に至ったわけです。
過去データを全部半角に変換した上で、チェック処理を追加するとういう作戦もありですが、時間がかかりそうなのでこれは別の機会にやってみましょうかね(;^ω^)

Salesforceの関数、どれつかう?

さて本題です。まずは今回の要件をまとめます。


  • 契約情報オブジェクトで登録した情報をもとに見積オブジェクトで見積書を作成したい、且つ、作成する見積書では数字と記号(ハイフン)を半角に統一したい。※見積書作成の前に売上の本登録がありますが今回は直接関与しないためこのプロセスは省きます。

  • 見積オブジェクトの再委託先情報の電話番号は契約情報オブジェクト、パートナー情報の参照項目である。


そんなこんなで、まずはいつもお世話になっている、Salesforceのヘルプページで探してみます。
すべての数式の演算子と関数 (salesforce.com)
文字変換、置き換え系の関数は以下の9種類。全角↔半角変換の関数は意外にもないことが判明しました。ありそうなのにね。
こんなことを書いてしまうと怒られてしまいそうですが、Salesforceユーザーの皆さんもいろいろいじってる中で「あれ?この関数ないの?!」なんてことはないですか?

CASESAFEID
15 文字の ID を大文字と小文字を区別しない 18 文字の ID に変換します。
HTMLENCODE
大なり記号 (>) などの HTML で予約されている文字を > などの HTML エンティティ文字に置き換えて、HTML で使用するテキスト文字列や差し込み項目値を符号化します。
JSINHTMLENCODE
HTML で予約されている文字を HTML エンティティ文字に置き換えて、エスケープ文字を安全でない JavaScript 文字の前に挿入し、HTML タグ内の JavaScript で使用するテキスト文字列や差し込み項目値を符号化します。
LOWER
指定したテキスト文字列内のすべての英字を小文字に変換します。英字でない文字は、この関数の影響を受けません。地域が適用されている場合は地域ルールが適用されます。
SUBSTITUTE
テキスト文字列中の元のテキストを新規のテキストで置き換えます。
TEXT
数式を使用するすべての場所で、パーセント、数値、日付、日付/時間、または通貨の各項目のデータ型をテキストに変換します。また、承認ルール、承認ステップルール、ワークフロールール、エスカレーションルール、割り当てルール、自動レスポンスルール、入力規則、数式項目、項目自動更新、およびカスタムボタンとカスタムリンクで、選択リスト値をテキストに変換します。
UPPER
指定したテキスト文字列内のすべての英字を大文字に変換します。
URLENCODE
RFC 3986, Uniform Resource Identifier (URI): Generic Syntax での定義に従って、URL では不正な空白スペースなどの文字を、これらの文字を表すコードに置き換えて、URL で使用するテキスト文字列や差し込み項目値を符号化します。
VALUE
テキスト文字列を数値に変換します。

Salesforceヘルプページ>すべての数式の演算子と関数
より一部抜粋

さて困った。なにやらApexでMapを使った全半角変換関数を作成すれば、できないこともないらしいんですが、まだまだ未熟な私は読んでるだけでしんどくなったので()初心者さんでもより手軽にできる方法でやってみたいと思います。

上記で挙げた関数の中から使えそうなものを探して対応していくことにしました。

「SUBSTITUTE」。これ、使えそうじゃないですか?
数式はとんでもなく長くなりそうだけど、表に見えるわけではないのでそこは気にせず、やってみましょう。

SUBSTITUTE関数とは?

具体的にどんなことをしていくか、というところなんですが、まずは「SUBSTITUTE」について考えてみます。

使用方法
SUBSTITUTE(text, old_text, new_text)。text に、値の代入をする項目か値を指定します。old_text に、置換対象となるテキストを指定します。new_text に old_text を置換するテキストを指定します。

ヒント
引用符で囲んだ用語は、大文字と小文字が区別されます。
old_text が複数回出現する場合は、結果的に重複が発生することになっても、出現するたびに new_text の値で置き換えられます。
文字列の例
SUBSTITUTE(Name, "Coupon", "Discount") は、商談の名前に「クーポン」という語を含む商談名を返し、「Coupon」という語があればすべて「Discount」で置き換えます。

SUBSTITUTE(Email, LEFT(Email, FIND("@", Email)), "www.") は、個人のメールアドレスから @ マークの位置を検索し、「www」で置き換えるテキスト長を割り出します。この処理によって Web サイトアドレスを抽出できます。

Salesforceヘルプページ>すべての数式の演算子と関数
>SUBSTITUTEより抜粋

これに当てはめると、このようにあらわすことができます。
SUBSTITUTE(参照元(契約情報)オブジェクト, 参照元(契約情報)項目名,”変換対象テキスト”,”変換後テキスト”)
ただし置き換えるのは「0~9」までの10個の数字と「ハイフン」。ですが、「ハイフン」と見間違ってしまう可能性のあるものもすべて対象としたいので、「―/ー/‐/-/ ̄/—/⁻/₋/ー」の9個で数字と合わせると19個にもなりました(;'∀')
なのでSUBSTITUTEを19個重ねていく必要があります。さらっと言いましたが19個って(笑)ただ、SUBSTITUTE関数が理解できれば単純なものなので、そんなに難しく考える必要はありません。
例えば再委託先電話番号であれば以下のようになります。

SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(KeiyakujouhouID__r.BP2_Comp_Tel__c , "0", "0"),"1","1"),"2","2"),"3","3"),"4","4"),"5","5"),"6","6"),"7","7"), "8","8"), "9","9"),"―","-"),"ー","-"),"‐","-"),"-","-")," ̄","-"),"—","-"),"⁻","-"),"₋","-"),"ー","-")

な、長い(笑)
ちなみに「text, old_text, 」にあたる参照元が、今回のように別のオブジェクトの場合は事前にオブジェクト、項目のAPI参照名を確認しておくことをお勧めします!見積オブジェクトの設定画面のため、「項目の挿入」にはほかのオブジェクトが含まれていないので注意が必要です。

設定してみよう!

上記を踏まえて早速設定してみましょう。ではいつものように、Salesforceホーム画面の右上歯車マークより設定画面にうつります。
オブジェクトマネージャタブをクリックし、クイック検索で「見積」を選択。設定する項目を編集します。
注目するのは「数式オプション」です。ここにさきほどの数式をいれればよいのです。

見積書として表示させたいのですが、数式だけ入れるとただの参照項目の羅列になってしまいます。ということで見積書としての文面も必要になってきますので、それも含めて入力していきます。

数式オプションへの入力が完了したら、必ず構文の確認をしましょう。
問題なければ保存します。

設定したらまずテスト!

設定が完了したので、続いてはテストをして確認してみます。うまくできてるかな?( ^ω^)

契約情報オブジェクトのパートナー情報の各電話番号欄に、数字とハイフンをそれぞれ全角で入力しました。

では見積オブジェクトの方をのぞいてみましょう。

しっかり半角になってますね!大成功です。ヨカッター!!統一感あってきれいですね。

まとめ

今回のように適切な関数がない場合は、「使えそうな関数」で代用してみても意外といけるということがわかりました。全角半角ではなくても、特定の文字を空白にしたい、とかでも使えそうですね。
他にも有効な方法はあるのかもしれませんが、今回の方法は初心者でもパパっとできちゃうので、ぜひ皆さんも活用してみてください。


◆ソシオネット株式会社について◆

弊社では、Salesforceの運用・導入、および、DX化推進に関するご相談を承っております。
お気軽に弊社お問い合わせサイトより、ご相談などをお寄せいただければと思います。
ソシオネット株式会社ホームページ:https://www.socionet.co.jp/
DXサポーターズ:https://socionet.co.jp/dx-supporters/




この記事が参加している募集

企業のnote

with note pro

この記事が気に入ったらサポートをしてみませんか?