文字列A、文字列Bを結合し、文字列Cに表示させる場合は自動計算やプラグインで行えますが、以下のような編集は可能でしょうか。
・文字列Cに入れる際に文字列A・Bに含まれるカタカタ・アルファベットを半角にする
・文字列Cに文字数制限をかけ、結合文字列が制限文字数を超えてしまう場合は制限文字数内での表示とする
・結合文字列は編集可能フィールドにする
上記が可能となるプラグインや、JSでのカスタマイズが必要ということであれば具体的なソースを教えていただきたいです。
よろしくお願い致します。
文字列A、文字列Bを結合し、文字列Cに表示させる場合は自動計算やプラグインで行えますが、以下のような編集は可能でしょうか。
・文字列Cに入れる際に文字列A・Bに含まれるカタカタ・アルファベットを半角にする
・文字列Cに文字数制限をかけ、結合文字列が制限文字数を超えてしまう場合は制限文字数内での表示とする
・結合文字列は編集可能フィールドにする
上記が可能となるプラグインや、JSでのカスタマイズが必要ということであれば具体的なソースを教えていただきたいです。
よろしくお願い致します。
入力した文字列の結合の制御でしたら、JSカスタマイズで’app.record.edit.change.フィールドコード’ のイベントが利用できそうです。
参考)https://developer.cybozu.io/hc/ja/articles/202166270-レコード編集イベント
コードはキレイではありませんが、以下に例を記載しますのでご参考ください。
例)A、Bにキーボードで入力したら、結合をしてCに10文字までで表示する
フォーム設定では、フィールドコードはA,B,Cで設定してみてますがご利用の環境に合わせて読み替えてください。
(function () {
‘use strict’;
//編集画面でA、Bの値が変更された場合に呼ばれるイベント
kintone.events.on([‘app.record.edit.change.フィールドコードA’, ‘app.record.edit.change.フィールドコードB’], function (event) {
// 現在のフィールドの入力値を取得する
var record=event.record;
//(1)文字列A、文字列Bを結合
let strA=record[‘フィールドコードA’][‘value’] ||“”;
let strB=record[‘フィールドコードB’][‘value’] ||“”;
var str=strA+strB;
//(2)文字列A・Bに含まれるアルファベットを半角にする
str=str.replace(/[A-Za-z]/g, function (s) {
return String.fromCharCode(s.charCodeAt(0)-0xFEE0);
});
//(3)全角カナを半角カナに変換する ※関数を定義して使ってます
str=toHalfkana(str);
//(4)結合文字が制限文字数を超える場合は制限文字数内で文字を切り取り
let START=0;
let LENGTH=10; //10文字の制限の場合
str=str.substr(START, LENGTH);
//(5)Cへ値を入力表示
record[‘フィールドコードC’][‘value’] =str;
//イベント終了(変更した値を反映する)
return event;
});
// 全角カナを半角カナに変換する関数
function toHalfkana(str) {
let before=newArray(‘ァ’,‘ィ’,‘ゥ’,‘ェ’,‘ォ’,‘ャ’,‘ュ’,‘ョ’,‘ッ’,‘ー’,‘ヴ’,‘ガ’,‘ギ’,‘グ’,‘ゲ’,‘ゴ’,‘ザ’,‘ジ’,‘ズ’,‘ゼ’,‘ゾ’,‘ダ’,‘ヂ’,‘ヅ’,‘デ’,‘ド’,‘バ’,‘ビ’,‘ブ’,‘ベ’,‘ボ’,‘パ’,‘ピ’,‘プ’,‘ペ’,‘ポ’,‘ア’,‘イ’,‘ウ’,‘エ’,‘オ’,‘カ’,‘キ’,‘ク’,‘ケ’,‘コ’,‘サ’,‘シ’,‘ス’,‘セ’,‘ソ’,‘タ’,‘チ’,‘ツ’,‘テ’,‘ト’,‘ナ’,‘ニ’,‘ヌ’,‘ネ’,‘ノ’,‘ハ’,‘ヒ’,‘フ’,‘ヘ’,‘ホ’,‘マ’,‘ミ’,‘ム’,‘メ’,‘モ’,‘ヤ’,‘ユ’,‘ヨ’,‘ラ’,‘リ’,‘ル’,‘レ’,‘ロ’,‘ワ’,‘ヲ’,‘ン’);
let after=newArray(‘ァ’,‘ィ’,‘ゥ’,‘ェ’,‘ォ’,‘ャ’,‘ュ’,‘ョ’,‘ッ’,‘ー’,‘ヴ’,‘ガ’,‘ギ’,‘グ’,‘ゲ’,‘ゴ’,‘ザ’,‘ジ’,‘ズ’,‘ゼ’,‘ゾ’,‘ダ’,‘ヂ’,‘ヅ’,‘デ’,‘ド’,‘バ’,‘ビ’,‘ブ’,‘ベ’,‘ボ’,‘パ’,‘ピ’,‘プ’,‘ペ’,‘ポ’,‘ア’,‘イ’,‘ウ’,‘エ’,‘オ’,‘カ’,‘キ’,‘ク’,‘ケ’,‘コ’,‘サ’,‘シ’,‘ス’,‘セ’,‘ソ’,‘タ’,‘チ’,‘ツ’,‘テ’,‘ト’,‘ナ’,‘ニ’,‘ヌ’,‘ネ’,‘ノ’,‘ハ’,‘ヒ’,‘フ’,‘ヘ’,‘ホ’,‘マ’,‘ミ’,‘ム’,‘メ’,‘モ’,‘ヤ’,‘ユ’,‘ヨ’,‘ラ’,‘リ’,‘ル’,‘レ’,‘ロ’,‘ワ’,‘ヲ’,‘ン’);
for(var i=0; i<before.length; i++) {
str=str.replace(newRegExp(before[i], ‘g’), after[i]);
}
return str;
}
})();
>Tguchi様
ありがとうございます。 初めてjsを作るので本当に初歩的な質問になりますが、教えていただいた構文のA、B、Cには
実際のフィールドコードを単純にあてはめて大丈夫ですか?
はい、ご利用の環境に合わせてフィールドコードを書き換えてご確認ください。
前回投稿のフィールドコードの部分を、フィールドコードA、フィールドコードB、フィールドコードCと書き直しました。
また、この実装にはいろいろ不十分な部分がありますのでご利用の用途に合わせて、引き続き実装を工夫して頂けますようお願いします。
1.編集画面のイベントのみ実装しているので、レコード作成画面では処理が働かない。
→ https://developer.cybozu.io/hc/ja/articles/201941984 app.record.create.change.<フィールドコード> の実装が必要。
2.Cへの直接入力については、カナやアルファベットの半角変換を処理しない。
Cへ直接編集する際は、10文字以上入力できてしまう。(レコード保存操作時に制限がかかって保存ができない)
→ app.record.edit.change.フィールドコードC での半角変換や文字数制限の実装が必要