kintoneUtilityforJavascriptでの在庫管理システムの制作について

kintoneを始めて1カ月の初心者です。現在kintoneUtilityforJavascriptを使用し

出庫アプリで注文した数を在庫アプリから減らす在庫管理アプリを制作しています。

その際にbulkrequestを使い在庫アプリと出庫アプリを同時に操作しているのですが

可能であればこれらの動作をkintoneRESTAPIのbulkrequestではなくkintoneUtilityforJavascriptのレコード操作で行いたいです。恐らく非同期処理かAPIの知識・kintoneUtilityforJavascriptの知識が至らないという点しかわからず現在復習をしています。この変更をしたいのは下記コードでの39行目(// 商品アプリの在庫数を更新し、出庫アプリに出庫情報を登録)からの処理です。宜しくお願い致します。

 

 

(function() {

    ‘use strict’;

    

    kintone.events.on(‘app.record.create.submit’, function(event) {

    var record = event.record;

    

    var pickNum = Number(record.pickNum.value); // 出庫数

    var destination = record.destination.value; // 出庫先

    var itemCode = record.itemCode.value; // 商品コード

    var itemAppId = kintone.app.getLookupTargetAppId(‘itemCode’); // 商品アプリのアプリID

    

    // 商品アプリから在庫数を取得

    return kintoneUtility.rest.getAllRecordsByQuery({

    app: itemAppId,

    query: ‘itemCode = "’ + record.itemCode.value + ‘"’,

    fields: [‘$id’, ‘$revision’, ‘stockNum’]

    }).then(function(getRes) {

    if (getRes.records.length !== 1) {

    event[‘error’] = ‘商品が特定できません。’;

    return event;

    }

    //商品の出庫数が0の場合エラー

    if(pickNum === 0){

        event[‘error’] = ‘出庫数が0になっています。’;

        return event;

}

    

    var stockRecord = getRes.records[0];

    var recordId = stockRecord.$id.value;

    var recordRevision = stockRecord.$revision.value;

    var stockNum = Number(stockRecord.stockNum.value); // 現在の在庫数

    

    var newStockNum = stockNum - pickNum; // 出庫後の在庫数

    if (newStockNum < 0) {

    event[‘error’] = ‘在庫が足りません。今の在庫数は’ + stockNum + ‘です。’;

    return event;

    }

    

39    // 商品アプリの在庫数を更新し、出庫アプリに出庫情報を登録

    var requestParams = {

    requests: [

    {

    method: ‘PUT’,

    api: ‘/k/v1/record.json’,

    payload: {

    app: itemAppId,

    id: recordId,

    // 商品アプリのデータ取得時と更新時でrevisionが異なる場合はエラーにする

    revision: recordRevision,

    record: {

    stockNum: {

    value: newStockNum

    }

    }

    }

    },

    {

    method: ‘POST’,

    api: ‘/k/v1/record.json’,

    payload: {

    app: kintone.app.getId(),

    record: {

    destination: {

    value: destination

    },

    itemCode: {

    value: itemCode

    },

    pickNum: {

    value: pickNum

    }

    }

    }

    }

    ]

    };

    

    return kintone.api(

    kintone.api.url(‘/k/v1/bulkRequest’, true),

    ‘POST’,

    requestParams

    ).then(function(postRes) {

    // bulkRequestで登録した詳細ページに移動

    location.href = ‘/k/’ + kintone.app.getId() + ‘/show#record=’ + postRes.results[1].id;

    

    //登録画面のレコードは保存しない

    return false;

    }).catch(function(error) {

    console.log(error);

    event[‘error’] = ‘出庫に失敗しました。’;

    return event;

    });

    }).catch(function(error) {

    console.log(error);

    event[‘error’] = ‘商品を取得できませんでした。’;

    return event;

    });

    

    });

    })();

な さん

こんにちは!ひよこです。

質問されている内容とは離れてしまいますが、kintone Utility for JavaScript  は https://developer.cybozu.io/hc/ja/articles/115000333223 にあるように、非推奨になっています。
セキュリティアップデートがされなかったり、新しい REST API が追加されたり仕様変更があっても、メンテンナンスされません。

なので、この記事で案内されている通り、今後メンテナンスがされていく kintone JavaScript Client (@kintone/rest-api-client) を使ったほうがよさそうと思いました!

いま kintone Utility for JavaScript で実装されている 13行目の kintoneUtility.rest.getAllRecordsByQuery を実行している部分を @kintone/rest-api-client の getAllRecords() に書き換えることが必要になりますが。

 

> kintone REST APIのbulkrequestではなくkintoneUtilityforJavascriptのレコード操作で行いたいです

kintoneUtilityforJavascriptのレコード操作で行いたい理由は、kintone Utility for JavaScript が bulkRequest に対応していないからでしょうか?
@kintone/rest-api-client では、bulkRequest に対応しています。
bulkRequest を使うと、bulkRequest に指定した処理の一部が失敗しても、それらの処理をロールバックできます。
つまり「商品アプリの在庫数の更新は成功したけど、出庫アプリへ出庫情報の登録は失敗した」ときに、商品アプリの在庫数の更新もなかったことにできます。
kintoneUtilityforJavascriptのレコード操作だと別々のリクエストになるので、出庫アプリの出庫情報は登録されてないのに商品アプリの在庫数は更新された状態になります。
アプリ間でデータの整合性をとるには、bulkRequest は使ったほうが良さそうに思えました。

もし別の理由で bulkRequest を使いたくないのであれば、教えていただけないでしょうか。

ひよこさん
ご回答ありがとうございます。
返信が遅れてしまい誠に申し訳ございません。

ひよこさんの仰る通りkintoneUtilityforJavascriptのレコード操作で行いたい理由は、kintone Utility for JavaScript が bulkRequest に対応していないからです。kintone Utility for JavaScriptは非推奨とされているのは理解した上でkintoneUtilityforJavascriptへの理解を深めるために bulkRequestをつかわずkintoneUtilityforJavascriptの機能だけを使いアプリ間の整合性をとれるようなものが作成したい!というのが主な理由です。