SalesforceのREST APIを利用してノートオブジェクトのレコードを作成する|Offers Tech Blog
こんにちは、overflow でビジネスシステムアナリストとして Salesforce の開発を担当している marreta27 です。副業メンバーです。
突然ですが質問です。皆さんは、Salesforce Platform にノートという便利な機能あることをご存じでしょうか?ノートはリッチテキストを利用できる非常に便利な機能です。今回は開発者目線でノートを利用してみようと思います。
お題の紹介
今回のお題は『Salesforce の REST API を利用して、ノートオブジェクトのレコードを作成する』です。このお題の応用例として『取引先情報取得 API 実行時の Response の RAW Data を保存する』というものがあります。
例えば取引先の詳細な企業情報を、データプロバイダーの API で取得した内容で補足する場合です。この時に API で取得した Response の RAW Data は永続化せずに破棄してしまうことが多いと思います。この Response をログとして、取引先レコードのノートとして保存していけば問題発生時にトラッキングがしやすくなりますね。
実行環境の説明
今回の実行環境は以下の構成で進めたいと思います。
- Python 3.9
- Simple Salesforce 1.14
実行環境に含まれている Simple Salesforce を初めて知る方もいるかもしれません。このライブラリーは Salesforce rest API のラッパーとして利用できます。トークンの管理や API の URI の隠蔽かなどさまざまなメリットがあります。ライブラリの利用方法は github 上の README をご覧ください。
やってみよう
Simple Salesforce は便利
では実際にやってみましょう。Simple Salesforce は以下の様なソースコードでレコードを追加できます。
sf.Contact.create({'LastName':'Smith','Email':'example@example.com'})
今回はノートオブジェクトにレコードを追加します。ノートオブジェクトの API 名は ContentNote です。上記ソースコードの『Contact』を『ContentNote』に、引数に ContentNote オブジェクトに適した JSON をすれば実行できるはずですね。
今回は以下のような内容を記載してみましょう。
title = 'SalesforceのREST APIを使ったプログラミングでのTipsと解説'
content = 'simple-salesforceを活用してNoteオブジェクトのレコードを挿入しましょう'
この内容をノートオブジェクトのレコードにして実行してみます。
sf.ContentNote.create({'Title': title, 'Content': content})
できましたね。次に実際に面からオブジェクトの内容を確認してみましょう。
おかしいぞ、文字化けだ
ところがおかしいですね。ほげほげと書かれているはずのノートレコードは、実際には文字化けしてしまっています。
ノートオブジェクト作成時のポイント
実はノートオブジェクトのレコードを API 経由で作成する際には、BASE 64 でエンコードしてあげる必要があります。
ContentNote | Object Reference for Salesforce and Lightning Platform | Salesforce Developers
ソースコードを以下のように変更して実行してみましょう
encoded_content = base64.b64encode(content.encode())
sf.ContentNote.create({'Title': title, 'Content': bytes.decode(encoded_content)})
実行したら、改めて画面からレコードを確認してみましょう。
今度は文字化けせずに表示されましたね。これでノートオブジェクトに API 経由でレコード作成をできました。
終わりに
今回はノートオブジェクトに癖があったためにエンコードが必要でした。実際には Simple Salesforce のおかげで非常に簡単に Salesforce のデータを操作できます。今回のエントリをきっかけに、Salesforce と他のシステムとのデータ統合を進めていただけたら幸いです。
関連記事
副業転職の Offers 開発チームがお送りするテックブログです。【エンジニア積極採用中】カジュアル面談、副業からのトライアル etc 承っております💪 jobs.overflow.co.jp
Discussion