お世話になります。渡邊です。
「kintone.events.on のインベントハンドラ内で kintone.app.record.set および kintone.mobile.app.record.set を実行することはできません。」という事になってますが、PCでは下記のコードの実行が可能です。
kintone.events.on('app.record.edit.show', function (event) {
…
contactUpdateFieldButton.onclick = function () {
var record = kintone.app.record.get();
…
kintone.app.record.set(record);
}
kintone.mobile.app.getHeaderSpaceElement().appendChild(contactUpdateFieldButton);
});
スマホでは下記の表現では「Uncaught TypeError: Cannot read property ‘getYear’ of null」エラーが表示されてしまいます。「kintone.mobile.app.record.set(record);」の引数recordを外すと、「Uncaught Error: Usage: kintone.mobile.app.record.set(record)」というエラーが出ていて、edit.jsの「You cannot call kintone.mobile.app.record.set() in handler or during processing a handler.」から発生しているようです。
kintone.events.on('mobile.app.record.edit.show', function (event) {
contactUpdateFieldButton.onclick = function () {
var record = kintone.mobile.app.record.get();
kintone.mobile.app.record.set(record);
}
kintone.mobile.app.getHeaderSpaceElement().appendChild(contactUpdateFieldButton);
});
また下記のフィールドの値を書き換えるコードは「PC用のみで利用できます。」とあり、スマートフォンでは使えません。
varrecord = event.record;
スマートフォンでレコードに値をセットするためには、どうすれば良いのでしょうか?
渡邊さん
最初のコードでkintone.app.record.setが実行できる理由としては、kintone.events.onのイベントハンドラーの実行中に実行することが不可能なだけであり、上記最初のコードで行っているのは実行ではなく、kintone.app.record.setを処理に含む関数の定義なので問題ありません。
おそらくですが、エラーの内容を読む限り、getYearメソッドを呼び出しているあたりで何らかのコードの間違いがあるためなのではないかと思います。(getYearを参照しているオブジェクトがnullになってしまっている)
何も問題がなければ、ボタンのクリックイベントでのレコードの変更はできるかと思います。
ボタンを使わない場合は、setTimeoutメソッドなどによって強引にイベントハンドラーの外でレコードを操作するような方法しかなさそうです
参考になりますでしょうか?
瀧ヶ平さま
ご回答ありがとうございます!
>kintone.events.onのイベントハンドラーの実行中に実行することが不可能なだけ
とのご回答ありがとうございます。実際はクリック時に実行されるので問題ないのですね。
問題がなければレコードの変更可能とのことで、下記までソースを削ぎ落とし、他のjsも削除したのですが、「kintone.mobile.app.record.set」の箇所で、同様の「Uncaught TypeError: Cannot read property ‘getYear’ of null」エラーが発生してしまいます。現状、レコードの変更も行っていない状態にはなっているのですが。
(function () {
"use strict";
// モバイル用
kintone.events.on('mobile.app.record.edit.show', function (event) {
// 任意のスペースフィールドにボタンを設置
var contactUpdateFieldButton = document.createElement('button');
contactUpdateFieldButton.id = 'contact\_update\_button';
contactUpdateFieldButton.innerHTML = '更新!';
contactUpdateFieldButton.onclick = function () {
window.alert('データ挿入');
// フィールドのリセット
var record = kintone.mobile.app.record.get();
console.log(record.record);
var array = [];// 空配列
kintone.mobile.app.record.set(record);
}
// モバイル用
kintone.mobile.app.getHeaderSpaceElement().appendChild(contactUpdateFieldButton);
});
})();
win7でChromeの検証(スマホのエミュレーション)を利用しているのが問題なのでしょうか。スタックトレースは下記のようなものです。お忙しいところすみませんが、よろしくお願いいたします。
edit.js:843 Uncaught TypeError: Cannot read property 'getYear' of nulle.N @ edit.js:843e.Gi
@ edit.js:833fE @ edit.js:452dE
@ edit.js:451(anonymous function)
@ edit.js:451G @ edit.js:38eE
@ edit.js:451(anonymous function)
@ edit.js:760contactUpdateFieldButton.onclick
@ add_rireki.js:27
瀧ヶ平さま
問題解消してませんが、
他のアプリにjsを付加し、実行させたところ、エラーは発生しませんでした。
フォーム上の項目によるのかと思いますので、
もう少し調べて見ようと思います。
ありがとうございます。
瀧ヶ平さま
結局日時フィールドが空の状態で「kintone.mobile.app.record.set」を行うと、エラーが発生するようでしたので、
事前に避けるようにしようと思います。
このたびは、アドバイスありがとうございました。