この記事は1年以上前に投稿された記事で現在は正しい情報とは限りません。

前回はGoogleAppsScriptを使ってSalesforceのaccess_token取得まで行いました。

今回は実際にレコード取得してセルに入れたり、データを更新したり

MetadataAPI使ってカスタムオブジェクト作っちゃったりと色々とやってみます!

 

1. レコード取得してデータを格納

コードはこんな感じ。

UserPropertyの”session_info”にはaccess_token等を格納しています。

checkAuthorizationはaccess_tokenの有効期限が切れたらrefresh_tokenで更新する関数。

getFieldsFromQueryResultでヘッダ用にQueryResultから取得した

項目のAPI参照名のリストを取得してます。

 

レコード数多い場合はレスポンスのnextRecordsUrlを使ってループさせることになります。

 

2. データ更新

選択したセルの取引先(SalesforceIDで判別)を更新する役立たないサンプル↓

 

UrlFetchApp.fetchメソッドがPATCHに対応していないため、そのままではPATCHのAPIは叩けませんが

Salesforce様はサーバーサイドでPATCHに対応していないアプリケーションに対して考慮してくれていて

URLパラメータに_HttpMethod=PATCHというのを付与してPOSTすれば

PATCHとして処理を行ってくれるみたいです。(→リファレンス

 

3. カスタムオブジェクト作成

今回はCRUDベースではなくFileベースのMetadata APIを使いました。

XMLファイル作成→Zip圧縮→httpコール→ポーリング

という流れになります。

 

 

注意点としてはzipの階層を

-hogehoge/objects/GAS__c

-hogehoge/package.xml

というように任意のディレクトリ(ここではhogehoge)をrootに持っていかないといけないところ。

root直でpackage.xmlを置いても No package.xml foundというエラーが出ちゃいます。

それさえ気をつければ、あとはforce.com IDEでよく見る階層構造でXMLを詰め込んでいくだけ!

 

上記サンプルはがっつりハードコーディングしてますが、スプレッドシートから値を引っ張ってきたり

GドライブにあるzipファイルをデプロイしたりGAS自体Googleのサービスと相性が良いので色々と応用は効きそう。

 

また、GASはチョー簡単にcronが出来るので、MetadataAPIを使えばretrieveして

GoogleDriveに突っ込んで任意の環境に自動デプロイするといったCIチックなことも出来ます(多分)。

 

ただし、一応制限あるっぽいので、SFDCと同じように注意が必要。

https://developers.google.com/apps-script/guides/services/quotas