Spring'17リリースノート輪読会 API By フレクト

Post on 20-Mar-2017

784 views 4 download

Transcript of Spring'17リリースノート輪読会 API By フレクト

API  spring’17By flect

サクッと自己紹介:フレクトから来ました3人組です!ヤー

KANAMORI NAKAYAMA SAITO

・ Chatter API・ Chatter ストリーミング・非同期オブジェクト・ Rest API Composite・ SOSL WITH HIGHLIGHT

・ Bulk API・ Tooling API

Chatter REST APIWhat's chatter REST API

Chatter REST API とは• 特にモバイルアプリで Saleseforce データを利用するための REST API

• Facebook や Twitter の REST API に近い位置づけ• Chatter 以外 ( ファイル , 通知 ,Data.com の購入など ) にもアクセス可

Chatter REST API 開発者ガイド「 Chatter REST API の概要」より・・・ REST API とは別物?

Chatter REST API <> REST API

• Web サイト、モバイルデバイス用にデータが構造化される• ユーザーのタイムゾーンと言語にローカライズされる• レート制限の単位が違う

Chatter REST API : ユーザ、アプリケーション、および時間ごとREST API : 組織ごと

Chatter REST API 開発者ガイド「 Chatter REST API を使用するケースの決定」より

データの構造化{  "aboutMe" : " 自己紹介 ",  "additionalLabel" : null,  "address" : {    "city" : "Fujimino",    "country" : "JP"     …………  },  "bannerPhoto" : {    "bannerPhotoUrl" : "https://…    "bannerPhotoVersionId" : null,  "chatterActivity" : {  … }}

Chatter REST API/services/data/v39.0/chatter/users/userId

{  "attributes" : {    "type" : "User",    "url" :"/services/data/v38.0/sobjects/User/xxx"  },  "Id" : "00528000003heOUAAY",  "Username" : "xxx@sample.com",  "LastName" : " 金森 ",  "FirstName" : " 政雄 ",  "Name" : " 金森 政雄”………}

REST API/services/data/v39.0/sobjects/user/userid 

構造化されている  filterGroup,  exclude,  include で絞り込みも可能   

属性が並んでいる

Chatter REST API と REST API の使い分けChatter REST API モバイルアプリケーションなどクライアントアプリ向け例 ) スマホ向けのオリジナル Chatter クライアントアプリ作成REST API

SF とその他のシステムのシステム間連携向け例 )BtoC 向けの Web サービスから SF のレコードを操作する

Chatter REST APISpring'17 Overview

Chatter REST API Spring'17 概観①• 活動アラーム• 非同期クエリ (Pilot)• Chatter

• 絵文字• ストリーム (new!!)

• Chatter フィード• いいね!• 投稿の共有 (new!!)• ダイレクトメッセージ (new!!)• コミュニティの上位の未回答の質問のリスト ( 機能改善 )• 確認待機中のフィード

Chatter REST API Spring'17 概観② • コンテンツワークスペース:ユーザ権限の取得• メール差し込み項目サービス• ファイル• 複数の組織、コミュニティ、コンテンツワークスペースと共有• ファイル画像の情報取得

• Files Connect• 外部ファイル URI からファイル参照を作成

• グループ• 管理トピック• キャプチャした活動 (new!) の共有

Chatter REST API Spring‘17 概観:感想• 新しい機能は最初から API を用意しているものが結構ある• Chatter のストリーム、投稿の共有、ダイレクトメッセージ• キャプチャした活動の共有 など

• 既存改善系はより細かく、かつまとめて処理できるように• Chatter の絵文字、いいね!など• ファイルを複数の対象に共有できるように

• 使えなくなっちゃうパラメータもある、、、( ファイル共有の shareWith とかは残しても良かったんじゃ、、、 )

Chatter REST API Spring'17 概観• 活動アラーム• 非同期クエリ (Pilot)• Chatter

• 絵文字• ストリーム (new!!)

• Chatter フィード• いいね!• 投稿の共有 (new!!)• ダイレクトメッセージ (new!!)• コミュニティの上位の未回答の質問のリスト ( 機能改善 )• 確認待機中のフィード

この二つに注目してみます!!

Chatter REST APIAsync Query(Pilot)

非同期クエリ (Pilot) : Spring’17 での追加内容• Boolean 項目によって BigObjects を絞り込む• MIN() と MAX() を使用してデータをクエリする• CALENDAR_YEAR() と CALENDAR_MONTH() を使用してデータをクエリする• 結果を対象の sObject に更新 / 挿入する

非同期クエリ (Pilot) : Spring’17 での追加内容• Boolean 項目によって BigObjects を絞り込む• MIN() と MAX() を使用してデータをクエリする• CALENDAR_YEAR() と CALENDAR_MONTH() を使用してデータをクエリする• 結果を対象の sObject に更新 / 挿入する

非同期クエリ (Pilot) とは• Winter’16 で追加• sObject,BigObjects, 外部オブジェクトなどのデータに SOQL クエリをバックグラウンドで実行する• 結果は呼び出し側で選択したオブジェクトに格納

スライド引用元: https://www.slideshare.net/developerforce/analyze-billions-of-records-on-salesforce-app-cloud-with-bigobject

BigObjects• Summer’15 で追加• Apache Hbase による NOSQL データストア• Apache Phoenix によって SQL で利用可能に ( ユーザーが使うのは

SOQL?)

外部のデータなどを NOSQL で取り込み、SF 上で利用できるようにする

スライド引用元: https://www.slideshare.net/developerforce/analyze-billions-of-records-on-salesforce-app-cloud-with-bigobject

Chatter REST APIChatter Stream

Chatter ストリーム : Spring’17 での追加内容 • ストリームフィードへの URL の取得• ストリームのすべてのフィード要素の取得• コンテキストユーザのストリームの取得• ストリームの作成• ストリームに関する情報の取得• ストリームの更新• ストリームの削除→CRUD ができる

・・・・ストリーム???

ストリームAPI??

ストリームAPI??

Chatter ストリームChatter ストリームを使用したカスタムフィードの作成• 最大 25個のエンティティをまとめてストリーム ( 情報のグループ ) を作れる• ストリームは 1 人最大 5個まで• 作成、編集、削除は自由に可能• フォローしなくても追加可能→フォロー数制限を受けない• Lightning Experience 限定

Chatter ストリーム私の上位の関心事•デフォルトのストリーム•  Einstein AI で各ユーザ向けに役立つと思われるフィードを表示• 5 つのストリームのうちの 1 つとしてカウント•削除も可能

SOSLWITH HIGHLIGHT

SOSL : WITH HIGHLIGHT• WITH HIGHLIGHT 句を使用した検索結果での 一致する語の強調表示Salesforce Object Search Language とは・・・・1回のクエリですべてのオブジェクトを検索できる・テキスト検索が得意・グローバル検索を想像するとイメージしやすいかも

SOSL : そもそも SOSL の使い方とは<Apex>FIND ’Salesforce‘ IN ALL FIELDS RETURNING Account(Name),Contact(FirstName,LastName,Department)

<開発者コンソール>FIND {Salesforce} IN ALL FIELDS RETURNING Account(Name), Contact(FirstName,LastName,Department)

オススメ! TrailHead【 SOSL クエリの作成】https://trailhead.salesforce.com/ja/modules/apex_database/units/apex_database_sosl

Apex と API では記載が少し異なる。初めて知りました。。

SOSL : WITH HIGHLIGHT の使い方( 例)

ハイライトをつけて、 Salesforce という語を含む取引先 (Account) と取引先責任者 (Contact) を検索します。

FIND {Salesforce} IN ALL FIELDS RETURNING Account(Name), Contact(FirstName,LastName,Department) WITH HIGHLIGHT

<mark> タグで囲ってくれます

SOSL : 開発者コンソールで実行最後に WITH

HIGHLIGHT をつける

FirstName が‘Salesforce’ なのに、ハイライトされないのはなぜ!?

ハイライトの対象は、テキスト項目のみ。取引先責任者の姓名は複合項目だからでないんだろうなー。

SOSL : リファレンスを読む

SOSL : WITH HIGHLIGHT まとめ•ハイライトは別項目に <mark></mark>付きで返ってくる• サポートしてるのは、 REST API か SOAP API•1回のクエリでハイライトは25レコードまで• 対応している項目は、テキスト系のみ(メール、テキスト、テキストエリア、ロングテキストエリア)

外部にコミュニティーサイトとか構築してたりすると、使えそう

ロングテキストエリアもハイライトできたよ!

REST APIComposite

REST API : Composite• Composite リソースを使用した複数の要求の 一度での実行 : 正式リリース

REST API : Composite フレンドリーな説明文モバイルアプリケーションを作成しているところを想像してみてください。クライアントと Salesforce の間を往復する回数を減らすために、複数の REST API 要求を 1 回のコールで実行する必要があります。 Batch リソースを検討しましたが、 Batch ではサブ要求間で情報が渡されません。これまでならあきらめるところですが、もうその必要はありません ! Composite リソースを使用すると、 1 回のコールで複数の要求を実行でき、あるサブ要求の結果を後のサブ要求で参照できます。

REST API : Composite( リファレンスをチェックする )リリースノートは、さらっとしか書いていないのでリファレンスをチェックしましょう!https://developer.salesforce.com/docs/atlas.ja-jp.206.0.api_rest.meta/api_rest/resources_composite.htm

REST API : Batch と Composite の比較Batch Composit <NEW!!>

サブ要求上限 25個 25個 (内 10個クエリ操作 OK)

コミット単位 サブ要求単位 サブ要求か、全体のロールバック選べる、サブ要求ごとに指定ができる

リソース Limits,sObject,Query,Query ALL,Search,Connect,Chatter,Actions

sObject,Query,QueryALL

その他 リクエストボディの順番で実行制限は10分

あるサブ要求の結果を、後のサブ要求で参照できる

用途 1 回の要求でレコードを更新してその名前と請求先の郵便番号をクエリする

取引先を作成してその情報を取得します。次に、取引先データおよび Composite リソースの参照 ID 機能を使用して取引先責任者を作成し、取引先データに基づいて項目に値を入力します。その後、要求文字列でクエリパラメータを使用して、取引先の所有者に関する特定の情報を取得します。最後に、特定の日付以降メタデータが変更された場合は、取引先のメタデータを取得します。

REST API : Composite の使い方(例)取引先を作成し、

その取引先責任者を1回の REST で作成する。{"compositeRequest" : [{ "method" : "POST”, "url" : "/services/data/v38.0/sobjects/Account", "referenceId" : "refAccount", "body" : { "Name" : "Sample Account" } },{ "method" : "POST”, "url" : "/services/data/v38.0/sobjects/Contact", "referenceId" : "refContact", "body" : { "LastName" : "Sample Contact”, "AccountId" : "@{refAccount.id}" } }]}

取引先を作成するサブ要求

取引先責任者を作成するサブ要求

取引先を作成してから、その IDを使って取引先責任者を作る

REST API : Composite( 取引先と取引先責任者を作成 )

Query の select2回してみた

REST API : Composite( 複数のクエリ実行 )

REST API : Composite( エラー時のロールバック制御 )リクエストボディに AllOrNone を true に指定することで、要求全体をロールバックすることができる。

allOrNone ・・・ true の場合、 Composite 要求全体がロールバックされます。最上位レベルの要求は HTTP 200 を返し、各サブ要求の応答が含まれます。

REST API : Composite( エラー時のロールバック制御 )

本当は refAccount.id で取引先 ID を指定するところを true値を指定してみる。

取引先責任者の作成に失敗し、1つ目のサブ要求もロールバックしている。

REST API : Composite まとめ• サブ要求25個まで OK• サブ要求の結果を次のサブ要求で再利用できる• トランザクションの制御ができる• モバイルアプリケーションを作る際に、わざわざ Apex クラスで

Service をクラスを作らなくても標準の REST API で良いところまで実装できる•1画面に複数のオブジェクトから情報を取得する際に1コールで取得できる

Bulk APIBulk API Now Supports More Complex QueriesIntroducing Bulk API 2.0 (Pilot)

BulkAPI Update•一括クエリ操作での queryAll, リレーションクエリが可能に• Bulk API 2.0 ( パイロット ) の導入

BulkAPI Update•一括クエリ操作での queryAll, リレーションクエリが可能に• Bulk API 2.0 ( パイロット ) の導入

BulkAPI:Update#1Bulk API でより複雑なクエリをサポート•一括クエリ操作での queryAll が可能に

BulkAPI で使える演算子OperationEnum 説明 DataLoader 対応query IsDeleted=True のレコードは含めな

い。Export

queryall IsDeleted=True のレコードも含めて query できる。

ExportAll

upsert ー Upsertupdate ー Updatedelete 論理削除その 1。 IsDeleted=True

となり、ゴミ箱へ移動Delete

hardDelete 論理削除その 2。物理削除待ちとなり、プラットフォーム側で自動削除される。物理削除ではない、というかSalesforce 上でユーザ側での物理削除はできない

Hard Delete

NEW!

DataLoader での使い方Setting「 Use Bulk API 」= True

Export All を選択

コマンドラインでの使い方ログインジョブ作成バッチ追加ジョブ終了バッチ状況の確認バッチ結果の取得

BulkAPI での queryAll 操作の使い所•論理削除済みレコード・アーカイブ済み活動のバックアップ?• 特に「活動」レコードは大きくなりやすい( AppExchange等を入れると機能で活動が生成され、数十万件になることがある)うえ、アーカイブされた活動も組織のデータ使用量に含まれるため、定期的に消し込みしたいときがある

BulkAPI:Update#2 BulkAPI/一括クエリでのSOQL リレーションが可能に(?)• リレーションクエリはこういう感じの

SELECT Account.Name FROM Contact

SELECT Id, (SELECT LastName FROM Contacts) FROM Account

SELECT o.Id,o.StageName,a.PersonContactId

FROMOpportunity o,o.Account a

• https://developer.salesforce.com/docs/atlas.ja-jp.206.0.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_relationships_query_using.htm#sforce_api_calls_soql_relationships_query_using

BulkAPI:Update#2 BulkAPI/一括クエリでのSOQL リレーションが可能に(?)

BulkAPI:Update#2 BulkAPI/一括クエリでのSOQL リレーションが可能に(?)•試してみたけど、うまくいかず・・・

BulkAPI:Update#2 BulkAPI/一括クエリでのSOQL リレーションが可能に(?)• curl で BulkAPI を叩いてみたけど、やはり成功せず•↑の update が成功した方いたら教えてください• https://releasenotes.docs.salesforce.com/ja-jp/spring17/release-

notes/rn_api_bulk.htm#rn_api_bulk_queries

BulkAPI

Tooling APINew and Changed Objects

ToolingAPI Update• ToolingAPI でコールできるオブジェクトに追加 /変更あり

•今回は ToolingAPI が何かをご紹介します

ToolingAPI とは• 開発者向けの他 API では参照しにくい情報を公開している API• 例• ApexClassMember• FormulaFunction• SandboxProcess• GlobalValueSet

•基本的に、 SF ユーザよりも開発者が利用する情報を取れる

ToolingAPI とは• curl してみる

/services/data/v39.0/tooling/query?q=SELECT+name,+label,+value+FROM+FormulaOperator+WHERE+durableId='PLUS'

ToolingAPI の使い所

• 使い所  SF 組織のモニタリングするアプリ(管理者用)を作る、など  AppEx で多数 SF 組織へアプリ提供している場合に便利かも

•取れる情報• クラスのカバレッジ• Apex 実行時のヒープ情報• セキュリティヘルスチェックなど

今回 ToolingAPI での変更点•新しいオブジェクトFormulaFunction特定の用途に使用できる関数を取得します。たとえば、このオブジェクトを使用して、フローまたは Visualforce ページで使用できる関数を検索します。FormulaOperatorSTAR ( 乗算 )、 AND など、使用可能なすべての数式演算子を取得します。GlobalValueSetグローバル値セットまたはローカルのカスタム選択リストで使用される値の定義を表します。StandardValueSet標準選択リスト項目の値のセットを表します。

今回 ToolingAPI での変更点変更されたオブジェクトSecurityHealthCheck次の項目が追加されました。CustomBaselineID項目の一意の識別子。設定のインポートとスコアの計算を行うために使用するベースラインを特定します。FlexiPage次の項目が追加されました。EntityDefinitionIdLightning ページが関連付けられている標準オブジェクトの名前またはカスタムオブジェクトの ID 。種別が AppPage または HomePage の Lightning ページでは、この項目は null です。 SobjectType 項目を置き換えます。次の項目が廃止されました。SobjectTypeAPI バージョン 39.0 で廃止されました。代わりに EntityDefinitionId を使用してください。