新規作成でルックアップ取得クリック時に情報を取得して、表に反映させるには

javascriptなどでいろいろ調べていますが、なかなか答えが見つかりません。

いい方法があれば教えていただけますでしょうか。よろしくお願いします。

toshiharu takahashi様

 

お世話になっております。
cstapの江田と申します。

 

テーブルのコピーはこちらの記事のやり方が参考になると思います。
https://qiita.com/RyBB/items/8798062cd84b32e59e0e

 

ただし、今回の案件ではC_appとD_appとで、テーブル内のフィールドが完全一致しないと思うので、

event.record['Table'].value = resp.record['Table'].value;

の部分はD_appのテーブルに合うように右辺を調整する必要があると思います。

 

例えば、C_appのテーブル内フィールドが(「数値1」、「数値2」)、D_appのテーブル内フィールドが(「数値1」、「数値2」、「合計」)だとしたら

event.record['Table'].value = resp.record['Table'].value.map(function(row){
row.value.合計.value = Number(row.value.数値1.value) + Number(row.value.数値2.value);
});

のような記述で実装できるかと思います。

CSTAP 江田様

 

返信ありがとうございます。

テーブルコピーする件ありがとうございます。

参考にさせていただきます。

 

実は、今作成しているアプリは見積書と受注表のアプリを作成したいと思っております。

A_APP:商品

B_APP:商品オプション

C_APP:見積書

D_APP:受注表

 

になります。

 

A_APP、B_APPには、仕入価格などの詳細も入っていますが、

C_APPはお客様も見ることがあるので

表示したくありません。

B_appについては、お客様毎に内容が変わりますので、テーブルが無難だと思っています。

 

当初は、D_APPからC_APPの参照がいいのかと思っていましたが、いろいろ調べてみると、

APIを使うことで、C_APP作成成功時にD_APPを作成して、C_APPの情報をある程度、送ることは

可能ではないかと考えています。

 

第9回 kintone REST APIを利用したレコード追加

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

 

ここからヒントを経て、

 

(function() {

    “use strict”;

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

        var record = event.record;

 

        var params = {

            “app”: 1,  

            “record”: {

WEBを見る限りでは、値を定義してここに入れるようなイメージです。

 

                ここで、B_APPのテーブルのデータをどのように記載すればよいのかわかりません。

また、A\_APP、B\_APPの詳細情報もごっそりとることができるのでしょうか?

            }

        };

 

        // kintone REST API リクエスト ~ レコードの登録(POST)

        kintone.api( ここは、何となくPROMISEを使わないといけないような気がしますが、まだよく理解

していないので、調査中です。

            kintone.api.url(‘/k/v1/record’, true), // - pathOrUrl

            ‘POST’,                                // - method

            params,                                // - params

            function(resp) {                       // - callback

                

            },

            function(resp) {                       // - errback

                

            }

        );

    });

})();

 

 

これを使ってある程度の情報を送れるのであれば、これで情報をD_APPに送って、D_APPは編集を使って

足らない情報補い最終的な合計をだすのでもいいのかなと思っております。

 

もし、C_APPで商品と商品オプションの情報をある程度取得して、D_APPに情報を送れば、

APIで無理にA_APP B_APPの詳細を持ってこなくても、D_APPにアクションを設定して

A_APP B_APPの情報を取ってこれるのではないかと考えています。

 

良い助言があれば、ご教授よろしくお願いいたします。

またアプリのフィールド設定の仕方などでも参考になる内容があればご教授お願い致します。

例えば、商品は商品で作り、仕入などの表は別アプリで作ってそれを紐づけして、受注表に反映させた方がよいのでしょうか?

kinotneがどこまでできるのか、把握できていないのであれこれ試しています。

 

今の考えでは、D_APPは基本的に計算を使って、A_APP、B_APP、C_APPの価格や個数などを計算して

合計を出すようにする予定です。

D_APPとC_APPには関連をつけたいと思っています。

toshiharu takahashi様

お世話になっております。

見積もりの時点で全データを保持しておくアプリ(E_app)を用意するのがよいと思います。
見積もりの際は、E_appを操作してレコードを作成して、APIを使ってお客様に見せる情報だけをC_appに自動コピーすればよいと思います。
受注したら、E_appからD_appにレコードをそのままコピーすればよいと思います。

また、E_appとD_appはカラムが一緒なので、アプリを分けずにプロセス管理で運用するのも良いかと思います。
https://jp.cybozu.help/k/ja/user/app_settings/process.html
見積もりの際は、D_appを操作してレコードを作成して、APIを使ってお客様に見せる情報だけをC_appに自動コピーする。(このときD_appのレコードのステータスは「見積もり」)
受注したら、D_appのレコードのステータスを「受注」に変える。

江田様

ご教授ありがとうございます。

試しに全データで仮アプリを作成してみました。

私の感覚としては、これが一番いいのではないかと思っています。

複雑でないため、使いやすいと思います。

 

ただ、上からは海外の現地営業にもkintoneで見積を作れるようにしたいとのことで、

ここで問題になるのが、現地営業には仕入価格などはオープンにしたくないとのことです。

A_appは問題ないですが、B_app(テーブル)の一部の値を管理者と営業で表示・非表示にするこはできないでしょうか?

 

いろいろ注文が多いですが、ご教授いただければ幸いです。

よろしくお願いいたします。

toshiharu takahashi様

お世話になっております。

その場合ですとやはり、管理者も営業もC_appを操作する運用にするのが良いと思います。
C_appのルックアップで、「レコード番号」などルックアップしたレコードが一意に決まる値をコピーしておけば、あとからAPIでD_appのレコードを自動作成することは可能だと思います。
見積もり時にC_appを操作してレコードを作成し、受注時に管理者がC_appに設置された「受注表作成」ボタンを押してD_appのレコードを自動作成する運用が良いと思います。

また、B_appの「仕入価格」などのオープンにしないフィールドについては念のためアクセス制限をかけた方が良いと思います。
https://jp.cybozu.help/k/ja/user/app_settings/rights/field_rights.html

江田様

連絡ありがとうございます。

ご教授ありがとうございます。

 

作成してわからないことがあれば、またスレッドを立てて質問いたします。

とりあえず、この仕様で作成していくことにします。

 

一つ質問なのですが、

「見積もり時にC_appを操作してレコードを作成し、受注時に管理者がC_appに設置された「受注表作成」ボタンを押してD_appのレコードを自動作成する運用が良いと思います。」

とありますが、例えばプロセス管理で受注になった物件を管理者アカウントだけに「受注表作成」ボタンを表示するということはできますか?

 

私の感覚では、JSをいじればできそうな気がしますがいかがでしょうか?

細かいやり方などは、自分で試して見て、わからなければ質問しようと思いますが、

ざっくりで、できるかできないか分かればいいなと思います。

 

よろしくお願いいたします。

江田様

質問があります。

(function() {
“use strict”;

kintone.events.on(‘app.record.detail.show’, function(event){
var record = event.record;
var companyname = record[‘COMPANY_NAME’].value;
var stq = record[‘STQ’].value;
var productname = record[‘Lookup’].value;
var unit = record[‘UNIT’].value;
var price = record[‘PRICE’].value;
var amount = record[‘AMOUNT’].value;
var options = event.record[‘OPTIONS’].value;
var subtotal = record[‘SUB_TOTAL’].value;
var discount = record[‘DISCOUNT_PRICE’].value;
var subtable = [];
for (var i=0; i < options.length; i++ ){
subtable.push({
value:{
“Lookup_0”: { value: options[i].value[‘Lookup_0’].value },
“OPTION_PRICE”: {value: options[i].value[‘OPTION_PRICE’].value },
“OPTION_AMOUNT”: {value: options[i].value[‘OPTION_AMOUNT’].value },
“OPTION_UNIT”: {value: options[i].value[‘OPTION_UNIT’].value },
}
});
}

var params = {
“app”: 31, // ← 参照ログを格納するアプリのIDに書き換えてください
“record”: {
“COMPANY_NAME”: { “value”: companyname },
“STQ”: { “value”: stq },
“PRODUCT_NAME”: {“value”: productname },
“OPTIONS”: {“value”: subtable },
“UNIT”: {“value”: unit },
“PRICE”: {“value”: price },
“AMOUNT”: {“value”: amount },
“SUB_TOTAL”: {“value”: subtotal },
“DISCOUNT_PRICE”: {“value”: discount },

}
};
kintone.api(
kintone.api.url(‘/k/v1/record’, true), // - pathOrUrl
‘POST’, // - method
params, // - params
function(resp) { // - callback
// (特に何もしない)
},
function(resp) { // - errback
// (特に何もしない)
}
);
});
// });
})();

 

詳細を開いたときに、新規作成をかけるように設定したつもりですが、

このようなエラーがでます。

修復方法を教えてください。

 

よろしくお願いいたします。