見出し画像

Kintone 文字列にセパレート記号の挿入

Kintoneの標準機能では、半角英数字の「部分一致検索」ができません。
フィールド値と完全一致、又はセパレータ記号で区切られた文字単位でしか検索することができないのです。
例えば、文字列一行フィールド値「A123B456」を「キーワードを含む」条件で「A123」で検索してもヒットしません。
半角英数字がセパレータ記号「半角スペース、-(ハイフン)、/(スラッシュ)」等で区切られていれば、区切り記号単位で検索が可能になります。
例:「A123 B3456」「A123-B3456」「A123/B3456]
なお、セパレータ記号に使えない特殊文字もありますので注意が必要です。
例:_(アンダースコア)と#(シャープ)は、単語の一部とみなされます。

中小企業では、製品や部品のコードを入力や検索に使うことが有りますが、上記の制限はなかなか悩ましい問題です。
膨大な製品や部品リストを検索するのに桁数の多いコードを入力する運用は検索ミスを誘発するのであまり実用的ではありません。
製品や部品コードを検索したい桁毎に区切って入力するという運用も考えられますが、入力ミスが発生し易いので、原票のコードに区切り記号があっても省略して入力する運用している会社が多い様です。
例:原票「A12-B345-C6789」⇒入力方法「A12B345C6789」

製品や部品コードでは、前2桁や3桁が分類(カテゴリ)を表していることが多いので、分類コードの、前3桁だけを別フィールドに入力すると検索できる様になりますが、2重入力となりミスが発生し易くなります。
対応策として、入力されたコードをセパレータ記号を挿入した形式にフォーマットして検索用の別フィールドに保存するという方法を考えてみました。
例:入力「A12B345C6789」⇒検索用「A12-B345-C6789」

文字列のフォーマット

上記の様な文字列のフォーマットは、エクセルだと文字列関数を用いて簡単に実現することが出来ますが、Kintoneには文字列関数がありません。
よって、Javascriptカスタマイズで実現する方法を考えました。

文字列の書式変換(フォーマット)のJavascript

/*文字列を3分割してセパレート記号でフォーマットする処理*/
(function() {
    'use strict';

    // 初期設定
    const SOURCE_FIELD = '入力文字列';
    const OUTPUT_FIELD = '出力文字列';

    const events = ['app.record.create.change.' + SOURCE_FIELD, 'app.record.edit.change.' + SOURCE_FIELD];

    kintone.events.on(events, function(event) {
        const record = event.record;
        const sourceValue = record[SOURCE_FIELD].value;

        // 文字の分割と整形
        const part1 = sourceValue.substring(0, 3);	//先頭3桁まで
        const part2 = sourceValue.substring(3, 7);	//先頭4桁目から7桁まで
        const part3 = sourceValue.substring(7);		//先頭7桁目以降全て
        const formattedString = `${part1}-${part2}-${part3}`;;

        // 整形後の文字列を別のフィールドにセット
        record[OUTPUT_FIELD].value = formattedString;

        return event;
    });

})();

Kintone のフォームに文字列一行で入力文字列と出力文字列のフィールド(名前は任意)を作成し、各フィールドコードを上記JavaScriptの初期設定欄にある「SOURCE_FIELD」と「OUTPUT_FIELD」に指定してアップロードすることで、入力文字列をセパレータ記号で分割した検索用の文字列を自動生成して保存することが出来るようになります。
セパレートしたい文字の桁数を調整したいときは「文字の分割と整形」のコメント以降3行の「・・・substring(0, 3)」の数値を調整します。

よろしければサポートお願いします! いただいたサポートは、note記事制作の活動費に使わせていただきます!