テーブル内の最安値を求め、各フィールドに抽出したい

■実現したいこと
発注履歴テーブル内のデータを参照し、一番価格の安い行の情報を別のフィールドに転記したい。

■エラーなど
実行した際に、エラーなどは出ませんが、最安値フィールドに[object Object]と表示され、正しい値が転記されません。

■実行したコード

(function () {
“use strict”;
kintone.events.on([
‘app.record.edit.show’,
‘app.record.create.show’
], function (event) {

    const record = event.record;
    let price_row = (record.最安値.value) ? parseInt(record.最安値.value) : null; //三項演算子(条件式?trueの場合の処理:falseの場合の処理)

    if (price_row == null) {
        price_row = record.発注履歴.value[0].value.発注単価;
    }

    for (let i = 0; i < record.発注履歴.value.length; i++) {
        if (price_row >= record.発注履歴.value[i].value.発注単価) {
            price_row = record.発注履歴.value[i].value.発注単価;

            record.最安値.value = price_row;
            record.登録年月日_最安値.value = record.発注履歴.value[i].value.発注日付;

        }
    }

    return event;

});

})();

1 Like

テーブルの値は、
record.発注履歴.value[0].value.発注単価.value
のようになります。

関係なさそうな一部コードを削っています。

(() => {
    "use strict";

    kintone.events.on(['app.record.edit.show', 'app.record.create.show'], event => {
        const { record } = event;

        let priceRow = parseInt(record['最安値'].value)
            || record['発注履歴'].value[0].value['発注単価'];

        for (let i = 0; i < record['発注履歴'].value.length; i++) {
            const orderPrice = record['発注履歴'].value[i].value['発注単価'].value;

            if (priceRow >= orderPrice) {
                priceRow = orderPrice;
                record['最安値'].value = priceRow;
            }
        }

        return event;
    });
})();

イベントの指定で、app.record.create.showでも動作するのかどうか?よくわかりませんでした。

    let price_row = (record.最安値.value) ? parseInt(record.最安値.value) : null; //三項演算子(条件式?trueの場合の処理:falseの場合の処理)

    if (price_row == null) {
        price_row = record.発注履歴.value[0].value.発注単価;
    }

について
わざと冗長に書いているのか、この場に貼り付けるように書き換えたときに間違えたのか区別が付きませんでした。

質問者の最初のコード
(表示が崩れているので整形して載せておきます)

(function () {
    "use strict";
    kintone.events.on([
        'app.record.edit.show',
        'app.record.create.show'
    ], function (event) {

        const record = event.record;
        let price_row = (record.最安値.value) ? parseInt(record.最安値.value) : null;

        if (price_row == null) {
            price_row = record.発注履歴.value[0].value.発注単価;
        }

        for (let i = 0; i < record.発注履歴.value.length; i++) {
            if (price_row >= record.発注履歴.value[i].value.発注単価) {
                price_row = record.発注履歴.value[i].value.発注単価;

                record.最安値.value = price_row;
                record.登録年月日_最安値.value = record.発注履歴.value[i].value.発注日付;

            }
        }

        return event;

    });
})();

aaa様

返信ありがとうございます。
無事、動作確認できました。

冗長した表現になっていたのは、試行錯誤しているうちに無駄なコードをいれてしまっておりました。

ありがとうございました。

1 Like

前提条件がわからないので、
質問者の環境・データの投入の仕方によっては
はじめの書き方でないとだめかも知れません
という意味でした。

1 Like

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