お世話になっております。
アプリ名「添付元」からアプリ名「添付先」へ添付ファイルのPUTを行いたいと思っております。
手順としては
1.アプリ名「添付元」のレコードの詳細画面を開く。
2.詳細画面に出力されている「添付ファイルの同期」ボタンをクリックする。
3.アプリ名「添付先」のレコードを確認する
※今回は検証のため、アプリ名「添付先」のレコードID「1」にPUTする形にしております。
1つのみのPUTは成功しておりますが、複数は成功しておりません。
下記コードのfunction名「SyncExecute」をfor文で回せばいいのかと思っておりましたが、非同期なのか1回しか実行されていません。
どなたかご教授お願いします
1つのみのPUT成功コードは下記の通りです。
(function () {
“use strict”;
kintone.events.on(‘app.record.detail.show’, function (event) {
var event = event.record;
var id = event[‘$id’][‘value’];
// メニュ右側の空白部分にボタンを設置
var myIndexButton = document.createElement(‘button’);
myIndexButton.id = ‘my_index_button’;
myIndexButton.className = ‘kintoneplugin-button-normal’;
myIndexButton.innerHTML = ‘添付ファイルの同期’;
myIndexButton.onclick = function () {
SyncExecute(event);
};
kintone.app.record.getHeaderMenuSpaceElement().appendChild(myIndexButton);
});
})();
function SyncExecute(record) {
console.log(‘record’);
console.log(record);
console.log(‘record’);
//添付先アプリのアプリID
var AppId = 148;
//PUT先のレコードID
var ID = 1; //test
//ファイル情報の設定
//fileData[0] ファイルキー
//fileData[1] ファイル名
//fileData[2] ファイル形式
var fileData = [];
for (key in record[‘添付ファイル元’][‘value’][0]) {
fileData.push(record[‘添付ファイル元’][‘value’][0][key]);
}
// ファイルダウンロード & アップロード
return fileDownload(fileData[0]).then(function (resp) {
// file upload
fileUpload(fileData[1], fileData[2], resp);
}).then(function (resp) {
console.log(resp);
});
// File Download
function fileDownload(fileKey) {
return new Promise(function (resolve, reject) {
var url = kintone.api.url(‘/k/v1/file’, true) + ‘?fileKey=’ + fileKey;
var xhr = new XMLHttpRequest();
xhr.open(‘GET’, url);
xhr.setRequestHeader(‘X-Requested-With’, ‘XMLHttpRequest’);
xhr.responseType = ‘blob’;
xhr.onload = function () {
if (xhr.status === 200) {
// successful
resolve(xhr.response);
} else {
// fails
reject(Error(‘File download error:’ + xhr.statusText));
}
};
xhr.onerror = function () {
reject(Error(‘There was a network error.’));
};
xhr.send();
});
}
function fileUpload(fileName, contentType, data) {
var blob = new Blob([data], { type: contentType });
var formData = new FormData();
formData.append(“__REQUEST_TOKEN__”, kintone.getRequestToken());
formData.append(“file”, blob, fileName);
xmlHttp = new XMLHttpRequest();
xmlHttp.open(“POST”, encodeURI(‘/k/v1/file.json’), false);
xmlHttp.setRequestHeader(‘X-Requested-With’, ‘XMLHttpRequest’);
xmlHttp.responseType = ‘multipart/form-data’;
xmlHttp.send(formData);
var key = JSON.parse(xmlHttp.responseText).fileKey;
//PUTパラメータ
var PutPara = {
“app”: AppId,
“id”: ID,
“record”: {
“添付ファイル先”: {
“value”: [{
“fileKey”: key
}]
}
}
};
console.log(PutPara);
kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘PUT’, PutPara, function (resp) {
// success
window.alert(‘データの更新に成功しました’);
}, function (error) {
// error
window.alert(‘データの更新に失敗しました’);
});
}
}