i4087
1
お世話になっております。
標記の件について、過去ログを漁ってみたのですが、該当しそうな投稿が見つからず、新しいトピックで失礼します。
kintoneレコードに対してバーコードリーダーで読み込んだ際、10桁の数字を拾います。
ただ、この10桁の数字を強制で9桁(削るのは最後の1桁)にしたいです。
なおこの数字はルックアップフィールドに入ります。
またさらに強制半角にできたら、なお最高なのですが。(こちらは最悪手動選択できるので、出来たら…レベルです)
javascript,css問わないのですが、こちら実現可能でしょうか…。
恐縮ですが、宜しくお願いします。
tanemaki
(たねまき)
2
末尾1文字を削るのも半角変換もJavaScriptで実現可能です。
但し、ルックアップフィールドは値変更イベントを検知できないので、別途バーコード貼り付け用の文字列フィールドを用意し、それの値変更イベントで文字列を整形してからルックアップフィールドにコピーするのが良いと思います。
【末尾1文字を削除】
JavaScriptにはslice()メソッドというものがあり、こちらを使用することで文字列の一部の切り出しが可能です。
【半角変換】
こちらは正規表現の知識が必要で少し難しいですが、以下のサイトにコーディング例がありますので参考にしてみてください。
1 Like
i4087
3
ご教示頂き、ありがとうございます!
但し、ルックアップフィールドは値変更イベントを検知できないので、別途バーコード貼り付け用の文字列フィールドを用意し、それの値変更イベントで文字列を整形してからルックアップフィールドにコピーするのが良いと思います。
やっぱりルックアップフィールドだと制限があるんですね…。
文字列からルックアップに自動反映(コピー?)することもできるんでしょうか?
それともやはり手動コピペしかないでしょうか…。
tanemaki
(たねまき)
5
event.record['lookup'].value = event.record['string'].value;
このように記述することで、文字列(上記のstring)からルックアップ(上記のlookup)へ値をコピーすることができます。
※string及びlookupはフィールドコードの例なのでご自身のアプリの設定に合わせて変更してください
これだけではルックアップの取得ボタンを押した扱いにはならないので、自動で取得ボタンを押すようにされたい場合はもみじ様が貼ってくださっているリンクをご覧ください。
1 Like
i4087
6
もみじ様、たねまき様
アドバイスありがとうございます。
まずは自動反映(コピー)できるように色々試行錯誤してみてるんですが、
'app.record.edit.show’イベントだと希望のタイミングではないので、
'app.record.create.change.'イベントで実現してみたいんですが、
ルックアップは非対応なのでしょうか。
お恥ずかしながらですが、とりあえず作成してみたコード下記させて頂きます。
kintone.events.on('app.record.edit.change',(event) => {
const record = event.record;
record['number_choise'].value = record['test'].value; // ルックアップフィールドの値
record['number_choise'].lookup = true; // またはrecord['ルックアップ_0'].lookup = 'UPDATE';
return event;
});
[‘number_choise’]→ルックアップフィールド
[‘test’]→文字列1列フィールド
です。
Maple
(もみじ)
7
レコード追加画面でフィールドの値を変更したときのイベントを見ればわかりますが
app.record.create.change.フィールドコード
と書かないと駄目です。
今回の場合は app.record.create.change.test
になります。
また、さっき私が貼ったページのレコード追加画面の部分から、ルックアップの自動取得は
追加画面でフィールドの値が変わったときにも対応してるのを確認できます。
1 Like
i4087
8
フィールドコード漏れてました汗
こちらの自動反映は出来ました、ありがとうございます!!
i4087
9
次に先頭から9文字を切り出す機能を追加するために、
下記のようにコードを入れてみたのですが、
自動反映含めて止まってしまいました。
そもそもの構文がおかしいのか、
変数指定がうまくいってないのでしょうか・・・?
kintone.events.on('app.record.create.change.test',(event) => {
const str = record['test'].value;
console.log(str.slice(0,9));// 先頭から9文字切り出し
const record = event.record;
record['number_choise'].value = record['test'].value; // ルックアップフィールドの値
record['number_choise'].lookup = true; // またはrecord['ルックアップ_0'].lookup = 'UPDATE';
return event;
});
puppet
10
4行目での
const record = event.record;
の前に2行目でいきなり
const str = record['test'].value;
しちゃってるので、recordオブジェクトが無いよってエラーかなと
2 Likes
Maple
(もみじ)
11
これだと number_choise に9桁に削った後の値が入らないし
const slicedStr = str.slice(0, 9);
record['number_choise'].value = slicedStr;
という感じに書かないと駄目ですね。
1 Like
i4087
12
たぶんpupeet様のコメントがjs初心者故に理解できていないのが問題だと思っているのですが、constには順番や決まった法則があるのでしょうか?汗(おそらくとんでもなく知識不足なお恥ずかしい質問をしていると思います、すいません。)
(そもそもconstって何をしているのかというのを勉強するために、「変数宣言をconst / letにして安全に初期化する」は読んでみました。)
なおもみじ様からのアドバイスもふまえ、
一旦下記コードに修正してみたのですが、案の定(?)動作していません。
kintone.events.on('app.record.create.change.test',(event) => {
const slicedStr = str.slice(0, 9);// 先頭から9文字切り出し
const record = event.record;
record['number_choise'].value = slicedStr;
record['number_choise'].value = record['test'].value; // ルックアップフィールドの値
record['number_choise'].lookup = true; // またはrecord['ルックアップ_0'].lookup = 'UPDATE';
return event;
});
Maple
(もみじ)
13
const slicedStr = str.slice(0, 9);// 先頭から9文字切り出し
ここに str が含まれているので、この行の前から
const str = record['test'].value;
str を宣言しているこれを消してはいけません。
────────────────────────────────────────────────────────────
record['number_choise'].value = slicedStr;
record['number_choise'].value = record['test'].value; // ルックアップフィールドの値
これだと[number_choise]へ、9桁に削った値を入れた後で
9桁に削る前の値を入れてしまうので
record['number_choise'].value = record['test'].value; // ルックアップフィールドの値
は消さないといけません。
────────────────────────────────────────────────────────────
全部の処理にコメント付けてみましたが、これでわかるでしょうか?
// レコード追加画面で[test]の値が変わったときに処理を開始
kintone.events.on('app.record.create.change.test', (event) => {
// これ以後 record と書いたら event.record と書いた場合と同じ扱いになる
const record = event.record;
// [test]の値を取得
const str = record['test'].value;
// 取得した[test]の値から最初の9字を切り出したものを slicedStr という定数に格納
const slicedStr = str.slice(0, 9);
// [test]の値から最初の9字を切り出したものを、[number_choise]に入力
record['number_choise'].value = slicedStr;
// 上で入力した値を基に[number_choise]でルックアップの自動取得をする
record['number_choise'].lookup = true;
// ここまでの処理を画面に反映する
return event;
});
2 Likes
i4087
14
もみじ様
とてもよく理解できました!!
ありがとうございます。
またpuppet様、たねまき様もありがとうございました。
重ねて御礼申し上げます。
半角全角は自力でやってみようと思います。
また何かございましたら、どうぞ宜しくお願いします。
1 Like
system
(system)
Closed
15
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。