Salesforce Reports and Dashboards REST API  Curlコマンド偏

[CURLコマンドをSalesforceで活用するに戻る](https://qiita.com/Keiji_otsubo/items/51b46b9539af7edef85e)


Idしか分かっていないレポートが300件ほどあって、どうやって消したらいいかという質問がありました。

[report deleting](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000ECFS8SAP)

色々考えたのですが、CURLコマンドでSalesforce Reports and Dashboards REST API を使うスクリプトを作って一気に消す方法がいいと思いました。ただ、提案しただけでは使い方が分からないということで私もチャレンジです。

レポートを削除するコードは以下のようです。さて、どうやって認証して使うのか。

```
/services/data/v34.0/analytics/reports/00OD0000001cxIE
```

[Delete Reports](https://developer.salesforce.com/docs/atlas.en-us.api_analytics.meta/api_analytics/sforce_analytics_rest_api_delete_report.htm)

# REST APIの認証の事前準備
いつもはBulk APIをCURLコマンドから操作しているので同じ方法と思いましたが、どうもセッションIdでは機能しなかったです。
仕方ないのでOAuth 2.0 による認証を試します。

手順はこちら

[接続アプリケーションおよび OAuth 2.0 による認証](https://developer.salesforce.com/docs/atlas.ja-jp.234.0.api_rest.meta/api_rest/intro_oauth_and_connected_apps.htm)

これも参考にしました。
[クイックスタートの前提条件](https://developer.salesforce.com/docs/atlas.ja-jp.234.0.api_rest.meta/api_rest/quickstart_prereq.htm)

1. 接続アプリケーションの作成。(Consumer KeyとConsumer Secretを後で使います）
2. 「API の有効化」権限があることを確認する 
3. API インテグレーション用の OAuth 設定の有効化 

ここまでセット出来たら、アクセストークンを取得します。

[ステップ 1: 認証を設定する](https://developer.salesforce.com/docs/atlas.ja-jp.234.0.api_rest.meta/api_rest/quickstart_oauth.htm)

実際には改行しないで1行で作って下さい。

```shell
curl -s -S --tlsv1.2 https://MyDomainName.my.salesforce.com/services/oauth2/token 
-d 'grant_type=password' 
-d 'client_id=consumer-key' 
-d 'client_secret=consumer-secret' 
-d 'username=my-login@domain.com' 
-d 'password=my-password'
-d 'format=xml'
```

+ client_idの後に先ほど取得したconsumer-keyをセットします。
+ client_secretの後に先ほど取得したconsumer-secretをセットします。
+ usernameの後にこの環境にログインするためのユーザ名をセットします。
+ passwordの後にこの環境にログインするためのパスワードをセットします。
+ -d 'format=xml'は標準のJson出力をXml形式に変更するオプションです。なくても構いません。私がXmlの方が扱いやすいというだけの理由です。

このコマンドを実行すると以下のような結果が返ってきます。


内容は少し改変しています。

```
access_token 00D2x000006QA3P!ARcAQJoF13Gv0RnHAQHPFQTeml_xz.KxT_u7wTLleQu.DPDszPZAE6PHVYhUkGM4QOySONvtCKKCZ19Po4HjT3m5Q6AXGmRl
instance_url https://xxxxxx-3moqt3-dev-ed.my.salesforce.com
id https://login.salesforce.com/id/00D2x000006QA3PEAW/0052x000002rxxxxAU
token_type Bearer
issued_at 164429477eerr6
signature 5YPgl1m0FggjT1mSKUy/cFg7sv4b9Jr6LYv4pQ2G0eA=
```
この後で　access_token とinstance_urlを使います。

# 実際のCurl での処理


```shell
curl -s -S --tlsv1.2 $instance_url/services/data/v53.0/analytics/reports/00O2x000003lQBlEAM 
-H "Authorization: Bearer $access_token" 
-H "X-PrettyPrint:1" 
-X DELETE
```

+ $instance_urlに先ほどのinstance_urlの値をセットします。
+ $access_tokenに先ほどのaccess_tokenの値をセットします。
+ 00O2x000003lQBlEAM は消したいレポートのIdです。

これでレポートが消せました。

後は一気に消すシェルを作れば大丈夫です。

こんな感じのシェルを作れば可能だと思います。レポートのIdの部分はExcel等で数式を使って差し込み印刷みたいにすれば簡単に作成できると思います。

report_delete.sh

```shell
#!/bin/bash
access_token='00D2x000006QA3P!ARcAQJoF13Gv0RnHAQHPFQTeml_xz.KxT_u7wTLleQu.DPDszPZAE6PHVYhUkGM4QOySONvtCKKCZ19Po4HjT3m5Q6AXGmRl'
instance_url='https://xxxxxx-3moqt3-dev-ed.my.salesforce.com'

curl -s -S --tlsv1.2 $instance_url/services/data/v53.0/analytics/reports/reportId_01 -H "Authorization: Bearer $access_token" -X DELETE

curl -s -S --tlsv1.2 $instance_url/services/data/v53.0/analytics/reports/reportId_02 -H "Authorization: Bearer $access_token" -X DELETE

curl -s -S --tlsv1.2 $instance_url/services/data/v53.0/analytics/reports/reportId_03 -H "Authorization: Bearer $access_token" -X DELETE

```

# 同じようなCURLを使ったREST APIの呼び出しの質問

+ [Access Token don't find about curl](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000FUs0j)
+ [Automate CSV Report Export](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007X6X8v)