Salesforce1を新興国で導入してみての所感

##はじめに

最近とあるお客様でSalesforce1の導入プロジェクトを担当しました。

この案件は、タイ・マレーシアという新興国ユーザへの導入でしたので、
国内とは異なる事情もあり、興味深いプロジェクトとなりました。

![yellow-1208-8-main.jpg](https://qiita-image-store.s3.amazonaws.com/0/44044/2ef363b1-4ce5-3ac2-e6df-dcd522f77d28.jpeg)

本記事では、導入に際してのトピックをいくつか紹介いたします。

<dl>
  <dt>お客様の事業内容</dt>
  <dd>製造業</dd>
  <dt>目的</dt>
  <dd>新興国(タイ・マレーシア)において見込み客の管理がしたい</dd>
  <dt>導入期間</dt>
  <dd>3ヶ月間 (週1回の訪問)</dd>
  <dt>開発方式</dt>
  <dd>標準設定のみ</dd>
</dl>

##トピック1：新興国の人はモバイルが好き

タイやマレーシアの現地の方々は、日本人よりモバイルが好き。

日本の社員の方が現地ディーラーにSalesforce1を紹介すると、思いのほかウケがよく
「こんなに簡単に仕事ができるなら是非使ってみたい」と言われたとのこと。

![whatsapp-line.jpg](https://qiita-image-store.s3.amazonaws.com/0/44044/9431a667-1169-aa09-ef77-e7c124d2beb3.jpeg)


また日本ではLINEが流行ってますが、マレーシアではWhatsAppというアプリが使われています。
BtoCにおける顧客とのコミュニケーションにおいても、メールはあまり使わず、
WhatsAppでメッセージを送るか直接会話するようです。

このように日本人よりもモバイル利用に抵抗が少ない為、
今後O2Oマーケティングなども日本より早く普及するのではないかと思いました。

##トピック2：新興国ではAndroidのユーザが多い

![android-vs-apple.jpg](https://qiita-image-store.s3.amazonaws.com/0/44044/6f9dd0db-d9f7-fb87-bea5-5fe31cd41f85.jpeg)

iPhoneのシェアが多いのは日本だけです。
日本以外ではAndroidが圧倒的なシェアを占めています。

特に新興国では簡単に機種変更できる程の余裕を持つ方ばかりではないので、
OSのバージョンも古い状態の方が多い状況です。

残念ながらSalesforce1のアプリ版は、Android4.2未満ではChatterしか利用できません。
その場合にSalesforce1を利用頂くには、以下のいずれかの対応が必要です。

1. Android4.2以上にOSをアップデート
2. Android4.2以上の機種に変更
3. モバイルブラウザ版をご利用頂く（Salesforceサポート対象外）

3.の場合、古い端末だとスペック不足で実用的な操作ができないケースがあります。
また、そもそもAndroid4.2未満はブラウザでのご利用であってもSalesforceのサポート対象外となりますので要注意です。

>Salesforce1 アプリケーションの使用の要件
>https://help.salesforce.com/HTViewHelpDoc?id=sf1_requirements.htm&language=ja


##トピック3：タイは回線が細すぎる

タイでは、未だGSM方式が殆どで3G回線すら普及していません。
その為、Salesforce1を立ち上げてから画面が表示されるまでに数分かかる場合があり、
Wi-fi環境でないと使うのが辛い状況です。

一方マレーシアでは、日本ほど早くはないものの、
実用に耐えられる程度のレスポンスで利用できているようです。

##トピック4：FlexiblePageが便利

すみません、急に実装ネタになります。

Salesforce1でリストビューを参照するには
"見たいリストビューをPCで一度参照しておかないといけない"
という制約？があります。

しかしそれだと各ユーザに、
"一度PCでログインしてリストビューを開く作業"
をお願いする必要があり、大変面倒です。

この問題を解決する方法としては、
従来であればVisualforceページを実装するケースもありましたが、
本プロジェクトではFlexiblePageを活用しました。

![dev_flexible_page_s1_with_data_250x428.png](https://qiita-image-store.s3.amazonaws.com/0/44044/20dd86a0-27e9-bbb5-2ac1-082f776ec8c2.png)
※写真は実際の実装ではありません

FlexiblePageで「ホーム」という名前の画面を作り、
各オブジェクトの「私の○○」というリストビューを
1画面上に集約して表示しました。

これでユーザは一度のPCでログインすることなく、
Salesforce1をインストールし起動だけで、
自分自身に関係する全ての情報にアクセスできます。

##トピック5：S1モバイルブラウザでメールURLからレコードを参照する

"レコードが更新された際に、利用者にメール通知をレコードURLを付けて送る"
という要望がありましたので、ワークフローメールアラートで対応しました。

その際に記載するURLが
https://ap.salesforce.com/XXXXXXXXXXXXXXX
の場合、メールからモバイルブラウザで参照すると
フルサイト(PC版)で表示されてしまう問題が発生しました。

これではモバイルブラウザでしか利用できないユーザが困ってしまうので、
Salesforce1画面にアクセスできるURLを生成しました。

モバイルブラウザでレコードを参照するには、
SFIDを加工したハッシュタグを生成する必要があります。

ハッシュタグについてはTomitaさんの下記の記事がとても参考になりました。
>Salesforce1におけるレコードへのダイレクトアクセス方法
>http://qiita.com/stomita/items/79ec9c4b6273f7970d3e

####今回の対応方法
まず、対象のオブジェクトにカスタム項目(テキスト255)を用意しました。
この項目はハッシュ文字列を格納するために使用します。

次に下記のApexクラスと、このクラスを呼び出すトリガを用意しました。

```
public with sharing class LeadTriggerHandler {
    public LeadTriggerHandler(){}
    public void OnBeforeUpdate (List<Lead> oldLeads, List<Lead> newLeads) {
        for (Integer i=0; i<newLeads.size(); i++) {
            newLeads[i].S1IdHash__c = createS1IdHash(newLeads[i].id);
        }
    }
    private String createS1IdHash(String sfid) {
        String StrJson = '{"componentDef":"force:recordHome","attributes":{"values":{"recordId":"'+sfid+'"}},"t":1}';
        String StrBase64 = EncodingUtil.base64Encode(Blob.valueOf(StrJson));
        return '#'+ StrBase64;
    }
}
```
これでレコード更新時にSFIDを元にハッシュタグが生成されるので、
メールアラートにハッシュタグを転記すれば、モバイルブラウザでもアクセスできます。

ただし、この方法には２つの問題があります。

1. メールにURLを２種類記載する必要がある
2. レコード作成時にメールを配信する場合には対応できない(Insert時はSFIDがnullの為)

2.については今回はたまたまレコード更新時のみメール送付する要件だったので問題ないですが、
今後はより良い方法を検討する必要があると思いました。
誰か良い案があれば教えて下さい。

##おわりに

今回のプロジェクトでは製品の問題に沢山遭遇しました。
Community×Mobileというキーワードは要注意です。
あとは、早くAndroid版7.0が正式リリースされることを祈っています。