新規投稿
フォローする

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

ご質問失礼致します。

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('ルックアップの更新でエラーが発生しました。\n' + error.message);
            return event;

        });
    });
})();

 

 

0

4件のコメント

Avatar
juridon

こんにちは!

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

1
Avatar
Haruka

juridon様

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

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

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

0
Avatar
Haruka

追加で失礼致します。

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

 

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

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

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

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

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

Failed to loadのエラー内容は

GETのエラーは

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

 

 

0
Avatar
juridon

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

0
サインインしてコメントを残してください。