テーブル内にルックアップで添付ファイルのコピーをしたい

ご返信遅れまして申し訳ございません。

①、②を行った状態で動作確認をした所、エラーメッセージは発生しませんでしたが、添付ファイルにコピーされるべきオリジナルのデータが表示されませんでした。

また、③に関しましては使用して居るブラウザはChromeです。

ご確認ありがとうございます。

 

②を反映した状態でコンソールのログのキャプチャを頂けますか?

以下画像のようなログが出るはずです。

 

また、以前の投稿で「Network」にupdate.jsonが二回登場するということでご回答いただいていました。

それぞれをクリックした際の「Payload」の中身のキャプチャもお願いします。

 

※赤枠以外はマスキングしていただいて問題ありません。

これがありました。

また、update.jsonが2つあった件ですが、今は見当たりませんでした。

1つあった方の中身はこの様になっていました。

ありがとうございます。

白文字の「download.do?~~~」をクリックすると、エラーになったコード箇所が表示されます。

 

恐らく、コード全体の最後の括弧が足りない(あるいは多い)可能性があります。

括弧の有無をご確認ください。

この部分かと思われます。

閉じ括弧が無いのかもしれないです。

私が確認したコード全文を貼ります。

(function() {
    "use strict";
    var table = 'テーブル';
    var lookupField = 'ルックアップ';
    var lookupIdField = 'ルックアップID';
    var originAttachmentsField = '添付ファイル';
    var copyAttachmentsField = '添付ファイル';
    kintone.events.on([
        'app.record.detail.show',
        'app.record.create.show',
        'app.record.edit.show',
    ], function(event) {
        kintone.app.record.setFieldShown(lookupIdField, false);
        event.record[table].value.forEach(function(row) {
            row.value[copyAttachmentsField].disabled = true;
        });
        return event;
    });
    kintone.events.on([
        'app.record.create.submit.success',
        'app.record.edit.submit.success',
    ], function(event) {
        console.log(event);
        var client = new KintoneRestAPIClient();
        return kintone.Promise.all(event.record[table].value.map(function(row) {
            if (!row.value[lookupIdField].value) return [];
            return client.record.getRecord({
                app: kintone.app.getLookupTargetAppId(lookupField),
                id: row.value[lookupIdField].value
            }).then(function(originRecord) {
                return kintone.Promise.all(originRecord.record[originAttachmentsField].value.map(function(originFileInfomation) {
                    return client.file.downloadFile({
                        fileKey: originFileInfomation.fileKey
                    }).then(function(fileData) {
                        return {
                            file: {
                                name: originFileInfomation.name,
                                data: new Blob([fileData], { type: originFileInfomation.contentType })
                            }
                        };
                    });
                }));
            }).then(function(files) {
                return kintone.Promise.all(files.map(function(files) {
                    return client.file.uploadFile(files);
                }));
            });
        })).then(function(copyFileInfomationsChunks) {
            console.log('start');
            return client.record.updateRecord({
                app: event.appId,
                id: event.recordId,
                record: {
                    [table]: {
                        value: event.record[table].value.map(function(row, index) {
                            return {
                                value: {
                                    ...row.value,
                                    [copyAttachmentsField]: {
                                        value: copyFileInfomationsChunks[index]
                                    }
                                }
                            }
                        })
                    }
                }
            }).then(function() {
                console.log('end');
            });
        });
    });
})();

全文のコードをお借りさせて頂いた上で仮運用してみました。

 

 

ルックアップのコピー元にレコード番号が指定されてますでしょうか?

行えて居ます

レコード番号であれば重複しない値なので、そのエラーが出ないはずなのですが不思議な現象ですね。

デベロッパーツールでブレークポイントを打って、上から順に実行した際にどこで止まるかご確認ください。

ブレークポイントを設定する

 

再三の確認で申し訳ありませんが

先ほどのルックアップの設定画像は、テーブル内に設置したルックアップでお間違いないでしょうか。

 

加えて、コード冒頭の変数値がテーブル内のフィールドコードと一致しているか、今一度ご確認お願いします。

var table = 'テーブル';
var lookupField = 'ルックアップ'; // ★テーブル内
var lookupIdField = 'ルックアップID';   // ★テーブル内
var originAttachmentsField = '添付ファイル'; // コピー元アプリのフィールド
var copyAttachmentsField = '添付ファイル';   // ★テーブル内

ルックアップ先を選択→保存までは一時停止されませんが、(保存しようとすると他の人がレコードを編集した、というエラーは出ています)レコードを編集しようとしたり編集を終わらせレコードの一覧に戻ろうとすると止まってしまう様です。

また、もう一度フィールドコードとテーブルの設定を再確認いたしてみましたが、相違ございませんでした。

レコード編集の右側の時計アイコンから変更履歴が見れます。

保存ボタンを押した後、画面を一度リロードいただき、当時刻の変更履歴があるかご確認ください。

どのような履歴になっているか合わせてご確認ください。

 

また、試しに以下からアプリテンプレートをダウンロードして

他の方に見えない非公開スペースなどにアプリを作成いただくことは可能でしょうか。

中身は「ファイル」アプリと「テーブル」アプリです。

アプリテンプレート(Googleドライブ)

(右上の ↓ からダウンロードできます)

 

このアプリでも症状が出れば、お使いの端末やブラウザやネットワークなどに起因するもの

症状が出なければアプリに起因するものといえます。

保存ボタンを押した後、画面を一度リロード致しました所、当時刻の変更履歴がございませんでした。

また、お送り頂いたファイルを設定し試してみた所、テーブル内に添付ファイルをルックアップ出来ましたので、アプリに起因した物かと思われます。

ご確認ありがとうございます。

アプリ起因ですと、お手数ですが双方のアプリを比べていただき、違いがあれば修正お願いします。

既にご確認いただいた箇所もありますがご了承ください。

 

①コピー元アプリのフィールドの設定

・レコード番号

・添付ファイル

 

②コピー先アプリのフィールドの設定

・テーブル

・ルックアップ(テーブル内)

・ルックアップID(テーブル内)

・添付ファイル(テーブル内)

 

③コピー先アプリのJavaScriptの設定

https://js.cybozu.com/kintone-rest-api-client/3.1.3/KintoneRestAPIClient.min.js

・添付ファイルコピー用スクリプト

ご返信遅くなり申し訳ありません、koichi様から頂いたデータと、元あったデータの違いを細かに修正し直してみていった所、当初の目的であった動きになりました。

数日間に渡りご相談に乗って頂き、誠にありがとうございます。大変助かりました。

ご確認いただきありがとうございます。解決に繋がり何よりです。

もっと早い解決に繋がるようご回答できれば良かったですが、色々とお手数おかけしました。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。