Salesforeに基幹システムのデータ、特に売上や受注などの実績データを投入する要望をもらうことはよくあります。
Salesforceへのデータインポートはデータローダを使いますが、データローダはバッチモードで実行できるためこの機能を利用して基幹システムとのデータ連携を実現しています。
バッチファイルの開発方法は他の人がブログに書いていますのでそちらを見てもらえば良いと思います。
https://help.salesforce.com/articleView?id=000331524&type=1&mode=1https://qiita.com/SevenstarsRock/items/203b34f5c577f66b19a6
ここでは要件定義の際に確認すべき点を書きます。
実行環境に関して
- バッチ実行するサーバーがあるか?
このビジネスを始めた頃、開発してからバッチを実行するサーバーがないことが気づいたことがある。バッチを夜間にスケジュール起動するには24時間起動のマシンが必要だが、サーバーがないのでPCで代用してもらった。中小企業はむしろサーバーがないほうが多い。
- インターネット接続はプロキシーサーバー経由していないか?
データローダを利用している人には周知の事実だと思います。お客様の環境よってインターネット接続時プロキシーサーバーを経由しないと外部にでれない環境を構築されていることがあります。
Salesforceをブラウザで利用している時はプロキシーの設定がブラウザに設定済みのため意識する必要がありませんが、データローダから接続しようとすると当然エラーになります。
バッチモードの設定ファイルプロキシーサーバーのIpアドレスを入力すれば接続可能となります。
- データローダのバージョンが最新か?
最近WIndows10だったか、7だったか忘れましたが、ローカルフォルダの構造が変わりました。
それにともないデータローダーをバッチモード実行用ファイル群の場所も変更になりました。古いバージョンのままで開発すると動作しないことがあります。
- JDKは事前にインストールしたか?最近はZULE
Java環境を実行PCにインストールする必要があります。
お客様に訪問しバッチファイルを仕込みに行く前に準備しておくことがベター。
お客様がエンドユーザーの方だとJDKのインストールも少しハードルが高い作業だと思いますので手順を作成しておくことがベターです
出力ファイルに関して
実はバッチデータ連携の開発は基幹システムから出力できるファイル形式や条件など制約があり、これに大きく影響を受けます。当たり前か。。
基幹システムは他社がメンテナンスしているので他社の担当者に仕様を聞くことになるのですが、他社ができないと言われればこちらではどうしようできないので目的実現の大きな障害となることが多々あり注意が必要です。
販売実績を投入したいお客様は日々の売上を見たい方なので、原則インポートする頻度は毎日となりますそれを前提に確認することをあげます。
- 販売実績ファイルは日付指定して出力できるか?
毎日販売実績をインポートするとなると、出力ファイルは当日または昨日の売上実績のみ毎日出力する必要があります。つまり全レコードをインサート処理するということです
これができない販売管理システムがあります。日付指定して自動でファイル出力ができないのです。月、年しか指定できないということもあります。
そのような場合お客様には毎回日付を手入力して頂くしかありません。ただこのようなケースはよくあります。
- 販売実績ファイルにユニークキーがあるか?
販売実績ファイルの出力が月や年しか指定できない場合、その月の累計売上がファイルに出力されることになります。
その場合は販売実績のレコードにユニークキーがあるか確認する必要があります。
累計売上のファイルしか出力できないのなら、出力ファイルには過去に取り込んだデータも含まれるのでデータローダの処理はアップサート、つまり上書きと新規作成を同時に実施する必要があります。
Salesforceにアップサート処理をするにはユニークキーが必要になりますが、販売管理システムの売上実績には一般的にユニークキーはありません。
販売実績データは普通売上ヘッダと明細の2つのテーブルで構成されています。売上ヘッダのユニークキーは伝票番号、明細には明細番号か行番号があるだけで、このテーブル結合した上で、ユニークとするキーを設置することは販売管理には必要のないことです。なので普通はありません。
しかしSalesforce側では一つのテーブル、つまりオブジェクトに投入するためユニークキーが必要となるのです。
アップサートが必要となった時点でインポートバッチの実行前に、インポートファイルを開き、中の値を結合しユニークキーを作成するという処理を追加する必要があるのです。
これを見込んでおかないとコストアップしましお客様に迷惑がかかります。
- 出力ファイルがUTF-8の形式で出力できるか?
Salesforceがインポートできる文字コードはUTF-8のみです。
データローダの機能でShift-JISを変換して読んでくれる機能がありますので、Shit-JISファイルは問題なく読めますただデータローダの定義ファイルの文字コードを記載しておけば問題ありません。
- 出力ファイルがフォルダ場所、ファイル名を自動化できるか?
決めれれた場所に決められた名前でファイル名を出力できなかったらお客様で手動で対応してもらう必要があります。
運用に関して
- システム管理者のパスワードを変更要求をやめてもらう
バッチ処理を実行するユーザーも定義ファイルで指定されています。その方がパスワードを変更するとバッチ処理もエラーで落ちます。仕様書にきちんと書いておきましょう
- エラー発生時の対応
ログを確認しデータを修正して再度インポート実行作業するというのはエンドユーザー様にはハードルの高い作業です。エラー発生時はメールで通知するプログラムを開発し、リカバリー方法は手順書が必要です
最後に
これらのことを確認すべきだと思っています。
軽々しく自動化できると言ってはいけません。
自動化は嘘ではありませんが、実現するには沢山の課題を解決する必要があります。