【Salesforce】The requested resource does not exist

【Salesforce】The requested resource does not exist

REST APIで一度の呼び出しで複数の命令を送る際に、compositeというものを使います。

https://developer.salesforce.com/docs/atlas.ja-jp.api_rest.meta/api_rest/resources_composite_composite.htm

しかし、Salesforceのアップデートがあったタイミングでエラーを返すようになりました。

その際のJSONはこんな感じです。

{
  "errorCode":"NOT_FOUND",
  "message":"The requested resource does not exist"
}

そんな命令は存在しませんって感じですね。

つい先日まで動いていたというのに、無慈悲なメッセージです。

ソースと送信していた命令を見比べていて気が付きました。

compositeのエンドポイントに設定していたAPIバージョンと、compositeRequest内で指定していたURLのAPIバージョンが異なるのです。

JSONの中身はこんな感じです。

{
  "compositeRequest" : 
  [
    {
      "method" : "POST",
      "url" : "/services/data/v42.0/sobjects/Account",
      "referenceId" : "refAccount",
      "body" : 
      {
        "Name" : "Sample Account"
      }
    },
    {
      "method" : "POST",
      "url" : "/services/data/v42.0/sobjects/Contact",
      "referenceId" : "refContact",
      "body" : 
      { 
        "LastName" : "Sample Contact",
        "AccountId" : "@{refAccount.id}"
      }
    }
  ]
}

compositeRequestのURLはv42.0が指定されています。

しかし、compositeのエンドポイントには「/services/data/v41.0/composite/」を指定していました。

compositeのエンドポイントのAPIバージョンは固定の文字列を設定しており、compositeRequestのAPIバージョンは取得したレコードのAPIバージョンを使っていました。

そのため、APIバージョンが食い違ってしまったわけですね。

 

古いAPIバージョンでも動くようですから、どちらも固定のバージョンにするか、compositeのバージョンをレコードに合わせる必要があります。

固定のバージョンにしてしまえば簡単でしょうかね。

No comments.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です