Salesforceの標準のCaseオブジェクトを使用しています(いくつかのカスタムフィールドがありますが、問題はないようです)。ケースには、そのコメントに対するリンクされたサブクエリがあり、SOAP APIでCaseCommentsとして複製されています。Salesforce upsertがINVALID_FIELDエラーで失敗しました
レコードを更新するためのテストケース(NUnitテスト)は、ケース番号ごとに1つずつクエリ()し、ケース自体を変更して、そのレコードをもう一度アップセットします。私は新しいコメントや何も追加していません。 upsert呼び出しが消えると、クラウドのCaseテーブルにCaseCommentsが存在しないことを示すINVALID_FIELDエラーが発生します。もちろん、存在しないし、APIがよりよく知っている必要があります。または、私は何かを言っていないかもしれません。助けて?
関連するコード:
[Test]
public void TestUpsertOfExistingRecord()
{
var existingCase = sfRepository.GetCaseByNumber("00235452");
var siteState = existingCase.Site_State__c;
existingCase.Site_State__c = "Arkansas";
//Tried the below line; the API didn't even recognize my Case as a valid object
//existingCase.CaseComments = null;
sfRepository.Save(existingCase);
...
}
//In the repository
public void Save<T>(T unboundInfo) where T : sObject
{
service.Upsert(new sObject[]{unboundInfo});
}
//in a wrapper for the websevice
public void Upsert(sObject[] unboundInfo)
{
//webService is the actual SOAP service client created by VS
webService.upsert(unboundInfo.First().Id, unboundInfo);
}
UPDATE:いくつかの提案を1として、代わりにクエリによって生成ケースインスタンスを使用しての、私は新しいケースを作成しています。それは許可エラーで失敗しています。私が修正しようとしていたフィールドは、別の関連オブジェクト(アカウントのアドレス)からの投影でした。それは分かりました。私はそれを離れて打ち明けるつもりです。その間に、検索されたケースの関連するすべてのクエリを消去するときに、なぜ同じ情報で新しいケースを作成するのか教えてもらえますか?
もうひとつ注意すべきことは、更新(および更新となるupsert)が部分的な更新をサポートしていることです。既存の行を最初に読み取る理由はありません。必要なフィールドだけを更新する呼び出しを作成できます更新。 – superfell
最後に、読んだデータが関連するデータを読み込んでいるためにエラーが発生し、後続の書込みがそのデータを送信しているため、サポートされていません。 – superfell
@superfell:実際は、実際のアプリケーションにはあります。これらのレコードを更新するウィンドウは、新しいレコードが作成されている場合を除いて、最初に取得されたものであることが保証されています(これはまだわかりません)。 2番目のメッセージまで、取得したオブジェクトの返送はサポートされていません。すばらしいです。どのように答えで起こらなければならないかを教えてください。 – KeithS