ルックアップの自動更新について。レコード番号以外のフィールドコードでの更新をしたい。

ご質問失礼致します。

https://developer.cybozu.io/hc/ja/articles/204537310

こちらを参考にルックアップの自動更新を試しているのですが、下記のエラーが出てしまっております。

 

更新元アプリでは、レコードの削除を行ったことがある為、

レコード番号に相違が生じることが原因だと考えました。

 

ですので、レコード番号ではなく、ルックアップのキーとなっている対象である

フィールド名:ID

フィールドコード:ID

こちらを元に更新したいと思いました。

 

//  更新したいレコードデータ「createPutRecords」関数を作成

createPutRecords関数にて、ルックアップ先のルックアップ対象であるIDフィールド(フィールドコードもID)のフィールドコード(id)とその値(record.lookup.value)取得。

 

 

// レコードの一括取得(100件まで)

コピー元のIDの情報を取得

 

// ルックアップの更新

createPutRecords関数で得た情報をもとにコピー先のレコードを更新

 

このように考えて下記のスクリプトにしてみたのですが、うまくいっていない状態です。

根本的な理解も不足している状態かと思いますが、参考になる情報など、ご教授頂けま線でしょうか。

 

宜しくお願いします。

 

// 本javascriptを導入するのはルックアップ元のアプリケーション

// ルックアップ元アプリ appid32 :開発テスト_Master

// ルックアップ先アプリ appid34 :開発テスト_Branch(IDでルックアップ)

/*

 * ルックアップ更新のサンプルプログラム

 * Copyright (c) 2019 Cybozu

 *

 * Licensed under the MIT License

 */

(function() {

    ‘use strict’;

    // ルックアップ先のアプリID

    var updateAppId = 34;

    /**

     * kintone REST APIで一括更新するrecordsデータを作成する関数

     * @param records kintone REST APIで一括取得したrecordsデータ

     * @returns {Array} kintone REST APIで一括更新するrecordsデータ

     */

    //  更新したいレコードデータ「createPutRecords」関数を作成

    function createPutRecords(records) {

        var putRecords = [];

        for (var i = 0, l = records.length; i < l; i++) {

            var record = records[i];

            putRecords[i] = {

                id: record.$id.value,

                record: {

                    lookup: {

                        value: record[‘ID’].value

                    }

                }

            };

        }

        return putRecords;

    }

    // 保存成功後イベント

    kintone.events.on([‘app.record.edit.submit.success’, ‘app.record.index.edit.submit.success’], function(event) {

        // レコードの一括取得(100件まで)

        var paramGet = {

            ‘app’: updateAppId,

            ‘query’: 'lookup = ’ + event.record[‘ID’].value

        };

        return kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, paramGet).then(function(resp) {

            // ルックアップの更新

            var records = resp.records;

            var paramPut = {

                ‘app’: updateAppId,

                ‘records’: createPutRecords(records)

            };

            return kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘PUT’, paramPut);

        }).then(function(resp2) {

            // 処理成功

            alert(‘ルックアップの更新が完了しました!’);

            return event;

        }).catch(function(error) {

            // エラー表示をする

            alert(‘ルックアップの更新でエラーが発生しました。’ + error.message);

            return event;

        });

    });

})();

 

 

こんにちは!

ルックアップのIDの元となるアプリのフィールドに「重複禁止」の設定をされていますでしょうか?

juridon様

コメント頂きありがとうございます><

一応、こちらが対象のフィールドなのですが、重複禁止の設定はされております。

手動でルックアップをする場合は、問題なく動作する状態です。

追加で失礼致します。

こちらがルックアップされる側のアプリです(アプリID32)

 

こちらでJsファイルを読み込み、レコードの内容

(ルックアップ対象は「自動ルックアップ1」のフィールド)を修正→保存すると、

「ルックアップの更新でエラーが発生しました。指定されたフィールド(lookup)が見つかりません。

というようになってしまいます。

こちら、エラーのコンソール画面になります。

Failed to loadのエラー内容は

GETのエラーは

という状態でございます。

 

 

lookupというフィールドコードのフィールドがないというエラーですね。
自動ルックアップ1フィールドのフィールドコードはlookupにしていますでしょうか?

まさに同じエラーメッセージが出ていたのですが、エラーが出ていたアプリに仕込んであるルックアップのフィールドコードを「lookup」にすることで修正できました。

もともとアプリに仕込んでいたJSを理解していなかったのですが、こちらの書き込みのものとほぼ同じだったため、下記の記事も参考にしつつ調べていったら動きが理解でき、修正にこぎつけることができました。

ありがとうございます。

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