Salesforce を kintone に移行する際のメモ

Salesforceのオブジェクトのデータをkintoneに移行する際のメモです。
管理者設定のデータエクスポートを使った方法になります。

* 一旦完了。(2021-03-27)
* ~~書きかけですが。備忘録として一旦上げておきます。(2021-03-07)~~

# 準備

## Salesforceの管理者アカウントの払い出し

管理者権限が付与されたログインアカウントが無いとSalesforceのデータをエクスポートしたり、オブジェクト毎の設定を確認するのが困難なのでこれは必須。
移行作業を受ける条件としたい。


## オブジェクト定義書

オブジェクト定義書を出力できるChrome拡張。データ移行に必須。

* [Salesforce DevTools](https://chrome.google.com/webstore/detail/salesforce-devtools/ehgmhinnhggigkogkbhnbodhbfjgncjf)

# データ移行

## データ型

Salesforceのデータ型は下記参照
https://help.salesforce.com/articleView?id=sf.custom_field_types.htm&type=5



# データマイグレーション

## データ移行方針
Salesforceのデータをデータ移行する方法は主には下記の方法があります。

1. 管理者設定からのデータのエクスポートを利用
2. DataLoaderツールを利用

※その他にも、APIを利用した方法があるが調査できていない。

注意点は、1のデータのエクスポートは、最短で週1回のスケジュールとなる点です。
例えば、2021-03-05にエクスポートした場合、次は７日後の2021-03-12となります。

また、エクスポートは時間指定ができるが、エクスポートを受け付けた順のバッチ処理と思われ、指定時間に直ぐエクスポートできる状態にはならないのでこちらも注意が必要です。

Salesforceのデータ量によりエクスポートデータが用意されるまでどのくらいかかるかは利用状況によります。
例えば大量の添付ファイルも同時にエクスポートする場合は、オブジェクトのデータだけよりも余計に時間がかかります。



## Salesforce システム更新日時、作成日時の移行方法

Salesforceにはシステムで自動設定される下記の項目があります。

1. 作成日(CreatedDate)
2. 最終更新日(LastModifiedDate)
3. System Modstamp

上記の内、データ移行時に移行先システムに読み込みが必要なものは、1.と2.になります。
移行先に読み込んだ際に移行元のデータのタイムスタンプが必要になる状況を考えて、この２つの項目は移行先システムに別項目を作成して読み込むようにします。


Salesforceの日時形式の項目をエクスポートすると、内部的に持っているUTCでダウンロードされるようです。
kintoneに読み込む場合は、１つの案として下記のようにすれば読み込めそうです。

Salesfoceの日時形式：
`YYYY-MM-DD hh:mm:ss` を
kintoneの日時形式：
`YYYY-MM-DDThh:mmZ` に変換する。


### Salesforce日時形式のkintone日時形式への変換方法
例えば前段の形式に変換する方法としては sed を利用する方法があります。
サンプルとして下記の通りです。

```
$ echo "2021-03-26 00:00:00" | sed 's/\([12][0-9]\{3\}[-][01][0-9][-][0-3][0-9]\)\( \)\([0-2][0-9]:[0-5][0-9]\)\(.*\)/\1T\3Z/'
2021-03-26T00:00Z
```


## 添付ファイルの移行
添付ファイルは、データエクスポート時に「添付ファイルを含める」にチェックすることでダウンロードできる。
添付ファイルは、ダウンロードしたZipファイルを展開したAttachmentsフォルダに入っているので、後はAttachment.csvのデータと紐付けてファイルを展開すると元のファイル名に展開できる。

~~もしくは、DataLoaderが使える場合は、添付ファイルオブジェクト(Attachment)に添付ファイルの情報が入っているので、選択して全レコードをエクスポートする。~~

※DataLoaderでは添付ファイルの情報が上手く抜き出せないようでした。(2021-03-12)

## インポート対象の項目
kintoneに移行する主な項目は下記の通り。

* "Id" 添付ファイルのID（ユニークキー）
* "ParentId" 親ID（参照先のレコードID）
* "Name" 添付ファイル名
* "CreatedDate" 作成日
* "LastModifiedDate" 最終更新日

## 添付ファイル移行方針
添付ファイルはデータエクスポート機能でエクスポートしたZipファイルのAttachmentsフォルダに入っている。
Attachmentsフォルダ内のファイルは18桁の Salesforce ID になっているのでAttachment.csvのName項目と紐付けて元のファイル名に復元する。

* Attachments 添付ファイルが入っているフォルダ（ファイル名は18桁のコード）
* Attachment.csv 添付ファイルのレコード情報（IDとNameで元のファイル名に復元する）

その他にも、ContentVersionフォルダにもアップロードしたファイルが保存されてるので、ContentVersion.csvの情報を利用してファイル名を復元する。


※添付ファイルの移行に関しては別の記事を書きました。
https://qiita.com/sy250f/items/147af9159ebac368e2a5

---
# 参考

## Salesforce

https://trailhead.salesforce.com/ja/content/learn/modules/lex_implementation_data_management/lex_implementation_data_export

https://help.salesforce.com/articleView?id=000312715&type=1&mode=1

https://developer.salesforce.com/docs/atlas.ja-jp.dataLoader.meta/dataLoader/data_loader.htm

データローダおよび API の 「日付」 または 「日付/時間」形式
https://help.salesforce.com/articleView?id=000325035&type=1&mode=1

エクスポートされた添付ファイル/ドキュメントファイルの名前の変更
https://help.salesforce.com/articleView?id=000326721&type=1&mode=1

Salesforce からバックアップデータをエクスポートする
https://help.salesforce.com/articleView?id=admin_exportdata.htm&type=0

エクスポートされた添付ファイル/ドキュメントファイルの名前の変更
https://help.salesforce.com/articleView?id=000326721&type=1&mode=1

ファイル、Salesforce CRM Content、Salesforce ナレッジ、ドキュメント、添付ファイルの違い
https://help.salesforce.com/articleView?id=sf.collab_files_differences.htm&type=5

[メモ＆添付ファイル] 関連リストの [新規メモ] および [ファイルをアップロード] ボタンに関する変更
https://help.salesforce.com/articleView?id=000329029&type=1&mode=1


## kintone

https://jp.cybozu.help/k/ja/user/using_app/import_records/import_csv.html

https://jp.cybozu.help/k/ja/user/using_app/import_records/create_csv.html

https://developer.cybozu.io/hc/ja/articles/202957070


## 日時関連の移行参考資料

https://help.salesforce.com/articleView?id=000325035&type=1&mode=1

https://developer.salesforce.com/docs/atlas.ja-jp.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_select_dateformats.htm

https://help.salesforce.com/articleView?id=000327824&type=1&mode=1

https://linuc.org/study/knowledge/333/

https://developer.cybozu.io/hc/ja/articles/202166330

https://jp.cybozu.help/k/ja/user/app_settings/form/autocalc/date_time.html

https://jp.cybozu.help/k/ja/user/app_settings/form/autocalc/date_format.html#autocalc_date_format_20

https://jp.cybozu.help/k/ja/user/using_app/import_records/create_csv.html