この記事の目次
update()とは?

更新の基本的な手順

注意点
SalesforceのAPIコールである「update()」ですが、利用する前に注意しておかなければならないことがいくつかあります。 まず一つ目は、更新可能なオブジェクトはすべてではない、ということです。一部のレコードはAPIを使用して更新することができないため、update()コールからレコードを更新するには、更新を試みるオブジェクトが更新可能に設定されている必要があります。 そのオブジェクトが更新できるかどうか確認する方法は、オブジェクトに対し、describeSObjects()コールを実行することで、updateableプロパティを調べることが可能です。 二つ目は、クライアントアプリケーションには、指定されたオブジェクトと、そのオブジェクトの中の個々の項目に対し、update()を実行するための権限が付与された状態でログインする必要がある、ということです。 これがなければupdate()を使用して更新することはできません。 三つ目は、特定のオブジェクトや、そのオブジェクトの中にある特定の項目には、特別な処理や権限が必要となる、ということです。場合によっては、オブジェクトの親オブジェクトへのアクセス権限が必要となることもあります。 四つ目は、必須項目を更新する場合は、値をnullにすることはできず、何かしら入力する必要がある、ということです。しかし、オブジェクトの説明で必須に設定されていない項目は、省略でき、nullに設定することが可能です。 五つ目は、項目値をnullにリセットするには、sObjectのfieldsToNullの配列に項目名を追加し、必須項目(nillableがfalse)をnullに設定することはできない、ということです。 そして、最後の六つ目は、最大オブジェクトの更新数についてです。クライアントアプリケーションは、一回のコールで最大200レコードを変更できますが、これを超える更新要求があれば、操作全体が失敗となります。ID項目について
名前にIdが含まれている項目については、オブジェクトの主キーか外部キーのいずれかで、クライアントアプリケーションは、主キーを更新することはできません。しかし、外部キーを更新することは可能となっています。 たとえば、「OwnerId」は取引先レコードを所有するユーザーを参照する外部キーとなるため、クライアントアプリケーションはAccountのOwnerIdを更新することができます。これは、describeSObjecs()を使用して、更新が可能かどうかを確認することができます。更新が自動で行われる項目
APIは、LastModifiedDateとLastModifiedById、SystemModstampなどのある特定の項目を自動的に更新するため、これらの値をupdate()コールで支持することができなくなっています。項目値と文字列値について
項目値は、英字が不可となっており、項目のデータ型に対して有効な値を整数で入力する必要があります。 また、String項目に値を保存する場合には、APIは先頭と末尾の空白文字を削除するようになっています。例として名前項目の値に「 Salesforce 」と入力されたとすると、データベースには「Salesforce」と保存されます。 過去のバージョンのAPIでは、大きすぎる値は切り捨てられてコールは正常に終了していました。しかし、APIバージョン15.0以降では、文字列を含む項目に値を指定し、値が項目に対して大きすぎるとコールが失敗となりエラーが出ます。ロールバック
APIバージョン20.0以降で使用可能な、AllOrNoneHeaderを使用すると、すべてのレコードが正常に処理されず、エラーが起きる限り、すべての変更をロールバックすることが可能となっています。Chatterフィードへの登録

オブジェクト種別が異なる場合

update()と外部キー

update()を利用してガバナ制限対策を!
