You need to sign in to do that
Don't have an account?
ms-hase-q23ee
親オブジェクトIDを指定したINSERTが必ず失敗する
お世話になっております。
掲題の通り、親オブジェクトIDを指定したAttachmentへのINSERTが必ず失敗します。
次のコードのどこが悪いか、わかる方はいらっしゃいますか?
***コード
@HttpPost
global static String handlePostRequest ( String call, String type, String Body, String Description, String Name, String ParentId )
{
Id convId = Id.valueOf(ParentId);
try {
Attachment a = new Attachment(
Body = Blob.valueOf(Body),
Name = Name,
Description = Description,
ParentId = convId
);
insert a ;
} catch (Exception e) {
system.debug(e.getMessage()+convId);
}
*** 実行結果
Insert failed. First exception on row 0; first error: INVALID_CROSS_REFERENCE_KEY, invalid cross reference id: []a1G10000001TxNREA0
※a1G10000001TxNREA0が関数に渡したParentIDです。
SELECT count() FROM AcTestData__c
where id = 'a1G10000001TxNREA0'
の実行結果にて、親となるテーブルにレコードが存在することは確認できています。
何故INVALID_CROSS_REFERENCE_KEYとなるのか、謎です。
また、reference id: []部分は、SOQLを実行したときのパラメータを表示しているのではないか?と思うのですが、
何故、配列?([ ])を表示するのか、これもわかりません。
ご存知の方は教えてください。
よろしくお願いいたします。
掲題の通り、親オブジェクトIDを指定したAttachmentへのINSERTが必ず失敗します。
次のコードのどこが悪いか、わかる方はいらっしゃいますか?
***コード
@HttpPost
global static String handlePostRequest ( String call, String type, String Body, String Description, String Name, String ParentId )
{
Id convId = Id.valueOf(ParentId);
try {
Attachment a = new Attachment(
Body = Blob.valueOf(Body),
Name = Name,
Description = Description,
ParentId = convId
);
insert a ;
} catch (Exception e) {
system.debug(e.getMessage()+convId);
}
*** 実行結果
Insert failed. First exception on row 0; first error: INVALID_CROSS_REFERENCE_KEY, invalid cross reference id: []a1G10000001TxNREA0
※a1G10000001TxNREA0が関数に渡したParentIDです。
SELECT count() FROM AcTestData__c
where id = 'a1G10000001TxNREA0'
の実行結果にて、親となるテーブルにレコードが存在することは確認できています。
何故INVALID_CROSS_REFERENCE_KEYとなるのか、謎です。
また、reference id: []部分は、SOQLを実行したときのパラメータを表示しているのではないか?と思うのですが、
何故、配列?([ ])を表示するのか、これもわかりません。
ご存知の方は教えてください。
よろしくお願いいたします。
All Answers
-----------------------------------------------------------------------------------------------------------------------------------------------
An invalid foreign key can't be set on a field. For example, if an object share such as AccountShare can't be deleted because the share row is a result of a sharing rule.
-----------------------------------------------------------------------------------------------------------------------------------------------
無効な外部キーをフィールドに設定することはできませんというような意味らしいのですが、ID自体は存在しているみたいなので、権限周りの可能性が考えられます。
一番簡単な確認方法として画面から添付ファイルの保存を実行してみる方法があります。
https://xxx.salesforce.com/ + レコードID で詳細ページを表示できるのでそこから添付ファイルが保存できるか確認してみるのがいいと思います。標準画面から保存出来る場合はApexの処理部分に間違いがあると判断できると思います。
また、INSERT時のエラーメッセージの確認方法としてDmlExceptionが用意されています。
こちらの方がより詳細なエラーメッセージを確認できるかもしれません。
例)