スペースフィールドの値の取得

スクリプトを書いたのですが、動かず困っています。

「売上」という文字列(複数行)フィールドに「sub_total_area」というスペースフィールドの値をそのまま記載したいと思っています。

もちろん記載は二重になってしまうので、スペースフィールドは非表示にします。(このスクリプトはできました)

 

ですが、肝心のスペースフィールドの文字列フィールドへの記載ができません。

コンソールを見ていてもよくわからず。。

下記のスクリプトなのですが、ご教授ご指摘願えますでしょうか。

初歩的な質問で申し訳ありませんが、宜しくお願いします。

 


kintone.events.on(‘app.record.edit.show’,‘app.record.create.show’, function(event){
var record = event.record;
var recperson = record[‘売上’].value;
record[‘sub_total_area’][‘value’] = record[‘売上’][‘value’]
return event;
});

左辺に右辺を代入、ですので

record.売上.value = record.sub_total_area.value;

になるかと思われます。

Teruさん

いつもお世話になっております。

逆だったんですね。。

でもスペースフィールドの文言は映らず。

エラーの内容を見てみるとuncaught typeerror b is not a functionと出ています。

そもそもスペースフィールドの文字の取得の仕方が違うとかなのでしょうか?

 

 

お世話になります。

確かにevent,recordにそもそもスペースはデータとして入ってないようですね。

スペースの要素を指定してjqueryで取得するのが早いかもしれません。

 

$(‘#user-js-要素ID’).text(); でおそらく抜き取れるかと。jqueryが必要なのでお忘れなく。

これで取得できないでしょうか?(HTMLタグ付きで取れるかもしれませんが)

スペースフィールドの要素を取得する
https://developer.cybozu.io/hc/ja/articles/201942014#step6

asagaさんありがとうございます。

完全にそっちのほうが良いですね。

Teruさん

前回のテーブルを複数行へ映すような感じの構文を真似て作成をしてみました。

jQuery.noConflict();
(function($) {
“use strict”;
kintone.events.on(‘app.record.edit.show’,‘app.record.create.show’,‘app.record.detail.show’, function(event){
var record = event.record;
var recperson = record[‘売上’].value;
$(‘#user-js-要素ID’).text();
record[‘売上’][‘value’] = record[‘sub_total_area’][‘value’]
return event;
});

調べてみていたのですが、要素IDとはそのまま記載するのですよね?

すみません。。

 

asagaさん

アドバイスありがとうございます。

ただちゃんとした使い方がよくわからず。。

勉強不足すみません。

asagaさんの手法を用いるとこんな感じになるはずです。

(function() {
"use strict";
kintone.events.on('app.record.edit.show','app.record.create.show','app.record.detail.show', function(event){
var record = event.record;
var spaceVal = kintone.app.record.getSpaceElement("sub_total_area").textContent;
record['売上']['value'] = spaceVal;
return event;
})();

Teruさん、asagaさん

お世話になっております、こもるーです。

上記スクリプトを試した結果、終わりのかっこがなかったみたいだったので、付け足しました。

それでもう一度読み込んでみたのですが、またエラーでuncaught typeerror b is not a functionを言われるようになってしまいました。

見直したのですが、お手上げ状態でして、アドバイス頂けますでしょうか?

kintone.events.on('app.record.edit.show','app.record.create.show','app.record.detail.show',function(event){

ここのイベントを指定している箇所が配列になっていないからでは無いでしょうか。

kintone.events.on(['app.record.edit.show','app.record.create.show','app.record.detail.show'],function(event){

こうしたらいけそうな気がします。

 

ところで、スペースフィールドの値を文字列(複数行)に転記しようとされていますが、
スペースフィールドに値をセットしている処理をやめて、文字列(複数行)に直接入れるようにしたら駄目なのでしょうか?
(個人的な疑問なので、何か特別な理由があったら無視頂いて大丈夫ですー)

asagaさん

いけましたー!でもエラーが出ないのに、内容が売上に映らないです。。

>ところで、スペースフィールドの値を文字列(複数行)に転記しようとされていますが、
スペースフィールドに値をセットしている処理をやめて、文字列(複数行)に直接入れるようにしたら駄目なのでしょうか?

特別な理由はないのですが、自分のしたいことの例を探しているときにスペースのを文字列(複数行)に出していると記載があったので、できないと思ってしまっています。

できるのであればやりたいことなのですが、

表示させたい内容で、

上の画像だと、その他、とパンとあるカテゴリについていくらとしているのですが、実際はその横にある文字列についての計算が行いたいのです。

(スクリプトを応用すればこのへんはOKだと思っています。)

 

カテゴリ/文字列(1行)/数量

1その他/おかかぱん/1

2その他/おかずぱん/2

3食パン/しょくぱん/1

4その他/おかかぱん/2

というデータに対して、文字列(複数)に

・おかかぱん:3個

・おかずぱん:2個

・しょくぱん:1個

と記載されてほしいです。

パンの名前はカテゴリじゃなく文字列ですので、重複があれば一緒に集計してほしく。。

これってなんとかなりますか??

こもるーさん

恐らくですが、現状カテゴリごとに集計している部分を商品名ごとに集計するように変えれば良いのでは無いかと思います。

現状のソースを改良した方が早そうなのですが、ソースを貼って頂く事は可能でしょうか?

asagaさん

お早いご回答ありがとうございます。

試しのアプリでいつも試しているので、問題ないです。

developerにあるコードそのままですが下記となります。

 

(function() {
“use strict”;
kintone.events.on(‘app.record.detail.show’, function(event) {
var subTotals = {};
var tableRecords = event.record.order_items.value;

// テーブル内の各レコードをカテゴリごとに集計する
for (var i = 0; i < tableRecords.length; i++) {
var category = tableRecords[i].value[‘カテゴリ’].value;
if (!subTotals[category]) {
subTotals[category] = 0;
}
var number = tableRecords[i].value[‘個数’].value;
var price = tableRecords[i].value[‘単価’].value;
subTotals[category] += price * number;
}

// 集計結果をスペースフィールドに表示する
var myTotalSpace = document.createElement(‘ul’);
for (var category in subTotals) {
var categorySpace = document.createElement(‘li’);
categorySpace.innerText = category + ': ’ + subTotals[category] + ‘円’;
myTotalSpace.appendChild(categorySpace);
}

kintone.app.record.getSpaceElement(‘sub_total_area’).appendChild(myTotalSpace);
});
})();

 

※上の画面に単価しか見せてなかったのはCCSそのままにしてる為です。

お願いします!

こんな感じでしょうかー。(ちゃんとテストしていないので確認はお願いします)

詳細画面を表示した時(app.record.detail.show)にフィールドの値を書き換えるのは手間がかかるので、
保存時に処理するようにしています。

(function() {

    'use strict';

    kintone.events.on(['app.record.create.submit','app.record.edit.submit'], function(event) {

        var subTotals = {};

        var tableRecords = event.record.order_items.value;

        // テーブル内の各レコードを商品名  ごとに集計する

        for (var i = 0; i < tableRecords.length; i++) {

            var itemname = tableRecords[i].value['商品名'].value;

            if (!subTotals[itemname]) {

                subTotals[itemname] = 0;

            }

            var number = tableRecords[i].value['個数'].value;

            var price = tableRecords[i].value['単価'].value;

            subTotals[itemname] += price * number;

        }

        // 集計結果を文字列(複数行)に表示する

        var uriage = '';

        for (var item in subTotals) {

            // 改行を入れる

            if(uriage) {

                uriage += '\r';

            }

            uriage += item + ': ' + subTotals[item] + '円';

        }

        event.record['売上']['value'] = uriage;

        return event;

    });

})();

asagaさん

ありがとうございます!

すごい、できました!!したかった処理になりました!

ありがとうございます。

 

Teruさん

別の投稿でもお世話になり、今回の投稿もお世話になり、ありがとうございました!

思い込みすぎてた私のやりたい処理のスクリプトを考えてくださってありがとうございました。

エラーが出ないけど映らなかったのはすごく疑問なので、今後自分の力で原因を探るための勉強にします。

 

お二方のお陰で、とても助かりました。

お二方に少しでも近づいていけるよう勉強もしていきます。

長い時間本当にありがとうございました。

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