複数の添付ファイルを別アプリへPUTしたい

お世話になっております。

アプリ名「添付元」からアプリ名「添付先」へ添付ファイルの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(‘データの更新に失敗しました’);

        });

    }

}

 

OKADA さん

"添付ファイル先": {
"value": [{
"fileKey": key
}]
}

PUT時に、1ファイルのキーしか設定していません。

これだと、何回PUTしても1ファイルです。

複数のファイルをアップロードした後に、まとめてファイルキーをセットして PUT しましょう。