app.record.detail.showイベントにて特定の条件を満たした場合にapiのrecord/PUTにて添付ファイルを削除しようとしています。
PUTリクエストのファイル削除仕様
https://cybozudev.zendesk.com/hc/ja/articles/201941784-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%9B%B4%E6%96%B0-PUT-#step3
によると、「ファイルを削除する場合には、そのファイルのfileKeyをリクエストに渡さなければそのファイルは削除されます。」と記載されています。
そこで、以下のようなコードを記載して更新を試みています。
// ファイルキーを削除
for (var i = 0; i < rec[‘添付ファイル’].value.length; i++)
{
rec[‘添付ファイル’].value[i] = {‘fileKey’: ‘’};
}
// 更新データ作成
var json = {};
json[‘app’] = kintone.app.getId();
json[‘id’] = kintone.app.record.getId();
json[‘record’] = { ‘添付ファイル’: rec[‘添付ファイル’] };
// APIで更新
kintone.api(‘/k/v1/record’, ‘PUT’, json, function (resp) {
location.reload();
}, function (error) {
alert(error.message);
});
ところが、必ずエラーとなり、ブラウザでデバッグしてみると、エラー情報には「IMAGE1.fileKey 必須です」となってしまいます。
他にも添付ファイルのvalueを[]にしてみたり色々試しているのですが、やはり必須ですのエラーとなってしまいます。
JSのapiでファイルとの紐づけを削除することはできないのでしょうか。
masason さん
ご周知の通り、添付ファイルのvalueプロパティは配列ですので、同一の添付ファイルフィールドの全てを落とすのであれば、こちらの最後にもありますが、
rec['添付ファイル'].value = [];
で良いかと思います。今回は不要そうですが、一部のを落とすのであれば、該当する要素({“fileKey”:“********”})を配列から落とすと良いと思います。
コメントありがとうございます。
しかし本文にも記載させていただいているとおり、value=[];にしても同様に必須ですのエラーとなってしまうのです。
具体的にはapiのエラーコールバック関数のerror変数の中をブラウザのデバッグで見ているのですが、record.IMAGE1.valuesに対して「必須です」のエラーが出ていました。
なお、fileKey自体を配列から落とすようにしても同様に必須ですのエラーとなってしまいます。
こちらはrecord.IMAGE1.value[0].fileKeyに対して「必須です」のエラーが出る形となります。
今回の仕様変更で動作が変わってしまったとか・・・?
手元で試したところ、value = [] で、既存の添付ファイルを落とせましたので、アップデートの影響を受ける問題ではないようです。
フィールドの設定として、必須項目に設定されている可能性を感じましたが、いかがでしょうか。
コメント有難う御座います。
ご指摘の通り必須項目になっておりました。盲点でした・・・。
必須解除することで無事解決致しました。お騒がせしてすみません。