旧デザインでのjsの動作について

お世話になっております。
井狩です。
押下すると、テーブルに初期値を設定するボタンをjsで作成しています。
新デザインでは、上記の動作をしますが、旧デザインだと以下の異常な動作をします。
・初期値は設定される。
・以下のメッセージが表示される。
「このページから移動すると、入力したデータは保存されません。このページから移動してもよろしいですか?」
→「はい」をクリックすると、以下のメッセージが表示される。
「データの読み込みに失敗しました。
指定したレコード(id: xxx)が見つかりません。
(GAIA_RE01 1505999166-426812653)」

なお、お客様の強い要望により、新デザインにはしたくないと言われております。
来年には本当に変わってしまうのですが・・・

上記の対応方法についてご教授ください。
何卒、よろしくお願い致します。

井狩華奈美さん

 

ボタンクリックのイベントで発火してるのはわかりましたが、その中の処理はどのような書き方をされていますでしょうか。また、kintoneのどの画面に付されたボタンでしょうか。

この辺の情報が揃わないとちょっと状況がわかりにくく、よろしければイベント周辺のスニペットくらい付けてもらえると、皆さん反応しやすく手戻りが少なそうに思います(ボタンでテーブルにセットと一言にも、編集画面のイベントでsetする方法もあれば、実は詳細や一覧画面からRESTで更新しようとしている等kintoneでの実現方法も多岐に渡りますので)。

 

また、書き出して頂いた情報だけで何とも言いがたいところがありますが、・・・目前の問題はデザインの差異で顕在化しているのかもしれませんが、根っこにあるのは別の問題のような気がします(基本的にはデザインの差異で本来動作の際にはなりえないという点からです)。

山下様

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

早々のご回答、ありがとうございました。

情報が少なく、申し訳ございませんでした。

ボタンは、新規作成画面に設置しております。

jsの内容は、下記の通りです。


(function() {
‘use strict’;
var evts = [‘app.record.create.show’];
kintone.events.on(evts, function(event) {
var myIndexButton = document.createElement(‘button’);
myIndexButton.id = ‘my_index_button’;
myIndexButton.innerHTML = ‘初期見積の明細初期値設定’;
kintone.app.record.getHeaderMenuSpaceElement().appendChild(myIndexButton);

//ボタンを押した後の処理開始
myIndexButton.onclick = function(){
// 行の作成
var newRow1 = createValue1_(‘料理1’,‘お料理’, ‘’,‘0’,‘’,‘’);

var newRow2 = createValue2_(‘ケーキ1’,‘ウエディングケーキ’, ‘’,‘0’,‘’,‘’);

// Tableに初期値を定義する
var rec = kintone.app.record.get();
rec.record.料理.value = [newRow1];

rec.record.ケーキ.value = [newRow2];

kintone.app.record.set(rec);

return event;
};
});

function createValue1_( code, p_name, price, quantity, cal, memo ) {//料理
return {
‘value’: {
‘ルックアップ_1’: {
‘type’: ‘SINGLE_LINE_TEXT’,
‘value’: code
},
‘文字列__1行__70’: {
‘type’: ‘SINGLE_LINE_TEXT’,
‘value’: p_name
},
‘num_price_cuisine’: {
‘type’: ‘NUMBER’,
‘value’: price
},
‘num_qty_cuisine’: {
‘type’: ‘NUMBER’,
‘value’: quantity
},
‘num_amount_cuisine’: {
‘type’: ‘CALC’,
‘value’: cal
},
‘文字列__1行__87’: {
‘type’: ‘SINGLE_LINE_TEXT’,
‘value’: memo
}
}
};
}

function createValue2_( code, p_name, price, quantity, cal, memo ) {//ケーキ
return {
‘value’: {
‘ルックアップ’: {
‘type’: ‘SINGLE_LINE_TEXT’,
‘value’: code
},
‘文字列__1行__69’: {
‘type’: ‘SINGLE_LINE_TEXT’,
‘value’: p_name
},
‘num_price_cake’: {
‘type’: ‘NUMBER’,
‘value’: price
},
‘num_qty_cake’: {
‘type’: ‘NUMBER’,
‘value’: quantity
},
‘num_amount_cake’: {
‘type’: ‘CALC’,
‘value’: cal
},
‘文字列__1行__88’: {
‘type’: ‘SINGLE_LINE_TEXT’,
‘value’: memo
}
}
};
}

})();


お手数おかけ致しますが、ご教示お願いいたします。

新規登録画面にボタントリガーだとすると、setとしては記載頂いた内容で問題ないと思います。大変失礼しました。

return event;

の書き場所がややきにはなりますが、恐らくこれは原因ではないように思います。

 

メッセージの出方等不可解に感じまして、手元で試したところ、デザイン変更も影響を受けました。ただ、chromeでボタン押下後にアラートが出たのは旧デザインでした。また、セット直後そのままレコード保存されてしまいました。事象としては出方が違う再現という感じに思います。

 

>「このページから移動すると、入力したデータは保存されません。このページから移動してもよろしいですか?」

これは計算フィールドに関連している可能性がありそうです。

 

いくらかコンソールでブレイクポイントを打ったり調べてみると、むき出しには出来ませんでしたが他のイベントも紐付いているようでした。このような事象が生じる条件(サブテーブル、計算フィールド、ボタンの設置箇所あたりが関係していそうですね)もまたあぶり出せていませんが、スペースフィールドに同じように設置する際には他のイベントが走りだす様子はありませんでした。スッキリしない感がありますが、ひとたびそのような方法で回避頂いてはと思いました。

山下様

お世話になっております。井狩です。

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

計算フィールドを使用せず、文字列と数値で作成したテーブルのみでテーブルに初期値追加のjsを実装してみたのですが、

同様の事象が発生しました。

画面キャプチャと実装したjsを下記に添付します。

何か問題ありそうでしょうか。

 

(function() {
‘use strict’;
var evts = [‘app.record.create.show’];

kintone.events.on(evts, function(event) {
var myIndexButton = document.createElement(‘button’);
myIndexButton.id = ‘my_index_button’;
myIndexButton.innerHTML = ‘初期見積の明細初期値設定’;
kintone.app.record.getHeaderMenuSpaceElement().appendChild(myIndexButton);

//ボタンを押した後の処理開始
myIndexButton.onclick = function(){
// 行の作成
var newRow1 = createValue1_(‘りんご’,‘1’);

var rec = kintone.app.record.get();
rec.record.Table.value = [newRow1];

kintone.app.record.set(rec);

return event;
};
});

function createValue1_( txt, num ) {
return {
‘value’: {
‘txt’: {
‘type’: ‘SINGLE_LINE_TEXT’,
‘value’: txt
},
‘num’: {
‘type’: ‘NUMBER’,
‘value’: num
},
}
};
}

})();

お手数おかけ致しますが、よろしくお願い致します。

井狩

すみません。

> スペースフィールド

は、

 

var el = kintone.app.record.getSpaceElement('');

 

で取得する方の意図でした。計算フィールド周辺の動きも私とちょっと動きが違いそうですね。ブラウザの影響もあるかもです。

具体的にはこういう感じです。

 

var myIndexButton = document.createElement('button');
myIndexButton.id = 'my_index_button';
myIndexButton.innerHTML = '初期見積の明細初期値設定';
//kintone.app.record.getHeaderMenuSpaceElement().appendChild(myIndexButton);
kintone.app.record.getSpaceElement('button').appendChild(myIndexButton);

//ボタンを押した後の処理開始
myIndexButton.onclick = function() {
// 行の作成
var newRow1 = createValue1_('料理1', '100', '2', '200', '', '');

var newRow2 = createValue2_('ケーキ1', '100', '1', '100', '', '');

// Tableに初期値を定義する
var rec = kintone.app.record.get();
rec.record.料理.value = [newRow1];

rec.record.料理_0.value = [newRow2];

kintone.app.record.set(rec);
};
return event;

山下さん

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

教えて頂いた方法で実装したところ、動作を確認することが出来ました。

ありがとうございます。

今後とも、どうぞよろしくお願い致します。

 

井狩