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

失礼いたします。

コミュニティにて投稿されて居た、「ルックアップで添付ファイルフィールドをコピー」と言うものとその内容に寄せられたコメントを元に、テーブル内にルックアップの添付ファイルをコピーしたいと思い導入させて頂こうとした者です。

使用しているフィールド、フィールド名はそのままで、テーブル内に入れなければ導入が成功しているのですが、テーブル内に入れる為のコードを使用し、テーブル内に入れた際に、以下三点の様な状況になってしまいます。

Javascriptに不慣れな為、コードの何処をどのように修正すれば良いのかわかりません。

宜しければお詳しい方から見ての、アドバイスやご指摘などをいただければ幸いです。

nagashimaさん

こんにちは。

 

江田さんが投稿された初回のコードではなく、その後にテーブル用に投稿されたコードを使用されていますか?

テーブル用コード

 

また、テーブルが画像のような構成になっていますでしょうか。

 

koichi様こんにちは、お世話になっております。

はい、その通りです。初回のコードではなく、その後にテーブル用に投稿されたコードを使用させていただいています。

テーブルの画像につきましては、その画像そのままの構成です。相違ありません。

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

エラー画像(コンソール画面)の「download.do?app=43~~~」をクリックしてください。

エラーになったコード箇所が表示されるはずです。

undefined (reading value)ですので、フィールドコードが存在しないなど、value値が取れないエラーと思われます。

ありがとうございます、ご指摘の通りにクリックした所、

  return kintone.Promise.all(originRecord.record[originAttachmentsField].value.map(function(originFileInfomation){

(コード内30行目)

の部分がハイライトされました。この部分がエラー部分だと思われるのですが、どうでしょうか?

「originAttachmentsField」を冒頭で定義していると思うのですが

その値とコピー元アプリの添付ファイルフィールドのフィールドコードは一致していますか?

一致していませんでした、修正致しました。

その上でもう一度試みてみたところ、次はこういったエラーコードが出ます。

デベロッパーツールのNetworkタブを開いてください。

以下画像のように、「update.json」から始まるものがあるはずです。

エラーのため恐らく赤文字になっていると思います。

それをクリックし、「Response」タブを開くと横長の文字列と思いますが、途中にエラーの原因が記載されているはずです。

 

此方でしょうか?

そちらです。

「編集中に、ほかのユーザーがレコードを更新しました」とありますので

自レコードの保存成功後に、同時に複数の更新処理が重なっているものと思われます。

 

この添付ファイルの処理とは別に、自レコードに対してPUTする処理が入っていないでしょうか?

自作のJavaScriptでなくて、プラグインでの処理の可能性もあります。

なるほど・・・!

自作のJavaScriptはこの江田様とそのコメント欄で行われた際のコードしか入れておりませんので、恐らくプラグインかと思われます。

「JSEdit for kintone」「kintone ルックアップ動的絞り込みプラグイン」「タブ表示試用版」の3つが入って居るのですが、この中だと2つ目の絞り込みプラグインでしょうか?

それらのプラグインは関係ない気がします。

先ほどのNetworkの「update.json」よりも上に、同じく「update.json」や「record.json」から始まるものはありますか?

あれば、それが先に実行されているPUT処理です。

「update.json」と「record.json」が先にありました。

同じ処理が2回走っているように思います。

コード内に「client.record.updateRecord」の記述が2回以上登場したり

アプリ設定のJavaScript / CSSでカスタマイズに類似したソースコードが2個以上参照されていたりしないでしょうか。

コード内に「client.record.updateRecord」の記述は一度だけでした。

また、アプリ設定のJavaScript / CSSのカスタマイズには江田様の所で導入した物しか入っておりません。

こちらでも動作を確認したいので、お手数ですがnagashimaさんのコードを載せていただくことは可能ですか?

江田さんのコードをもとにされているとは存じますが、その後のやり取りまで反映された部分もあるかもしれませんので、お願いいたします。

寧ろこんなにも親身にお話し頂いてありがとうございます。大変助かっております・・・!

こうなっております。

ありがとうございます。違いが見当たらないですね。。

47行目からのコードを以下に変えていただけますか?

 

保存後にコンソールに画像のようなログが出るか、確認をお願いします。

※新規登録ではなく、既に登録したものを編集保存でお願いします。

 

また、最初の画像でテーブルが3つあるかと思いますが

他2つのテーブルについては、コード上は何も処理をしないものでしょうか。

 

})).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'); // ★
    });
});

 

画像の方のログの方は出ませんでした。

他2つのテーブルに関しては何も処理をする予定がありません。

追加で2点確認をお願いします。

 

①全てのプラグインを無効状態にして動作確認お願いします。

 

②23行目付近を以下に変更して、再度コンソールのログを確認してください。

※先ほどと同様に新規登録ではなく、既存のレコードの編集保存でお願いします。

kintone.events.on([
        'app.record.create.submit.success',
        'app.record.edit.submit.success',
    ], function(event) {
        console.log(event);
        var client = new KintoneRestAPIClient();

 

③お使いのブラウザはChromeですか?

あまり考えにくいですが、ブラウザによって挙動が変わるかもしれませんので、別のブラウザがありましたら、そちらでも動作を試してみてください。