0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaScriptでkintone上の長文から正規表現で単語を抜き出し、各フィールドに振り分ける

Last updated at Posted at 2024-10-25

概要

kintoneでは、クラフテクス社のデータシンカーやクロス・ヘッド社のメル箱など、メールの受信を感知して自動でkintoneのレコードに流入させる機能を持つプラグインはありますが、メール本文がそのまま一つのフィールドの値として存在するだけだと使いにくいことも。

データシンカーはjson設定にて分割できるが、流入するメールの種類が複数でシステムの安定稼働を考えると、分岐せずそのまま流入させた方がいいケースもある。

そこで今回は、kintoneのフィールドに入力されたテキストから情報を抽出し、他のフィールドに自動的に振り分けるJavaScriptの実装方法を紹介します。

事前準備

フィールド設定

image.png

  1. 入力元フィールド:

    • フィールドコード: inputField
  2. スペースフィールド:

    • フィールドコード: pullOutButton
  3. 抽出したデータを格納するフィールド:

    • 情報元: フィールドコード source
    • 名前: フィールドコード name
    • 電話番号: フィールドコード phone
    • メールアドレス: フィールドコード email
    • 住所: フィールドコード address

想定データフォーマット

image.png

下記のようなデータが文字列(複数)フィールド
inputField に入力されていると仮定します:

情報元: ウェブサイト
名前: 山田 太郎
電話: 080-1234-5678
メール: taro@example.com
住所: 東京都渋谷区渋谷1-1-1

JavaScript コードサンプル

以下のコードを kintone のカスタマイズ JavaScript として追加します。
※フィールドコードは事前に用意したものと一致させてください。

divisionText.js
(function() {
    'use strict';

    // レコードの作成・編集画面が表示されたときに発生するイベント
    kintone.events.on(['app.record.create.show', 'app.record.edit.show'], function(event) {
        // ボタンがすでに画面上に存在するか確認し、存在する場合は追加しない
        if (document.getElementById('extractButton') !== null) {
            return event;
        }

        // 情報抽出用ボタンの生成
        const extractButton = createExtractButton();

        // ボタンの配置(指定されたスペースフィールドに追加)
        kintone.app.record.getSpaceElement('pullOutButton').appendChild(extractButton);

        // ボタンがクリックされたときの情報抽出処理
        extractButton.onclick = function() {
            extractInformationAndSetFields();
        };

        return event;
    });

    // 情報抽出用のボタンを生成する関数
    function createExtractButton() {
        const button = document.createElement('button');
        button.id = 'extractButton';
        button.innerText = '情報を抽出';
        return button;
    }

    // レコードから情報を抽出し、各フィールドに値を設定する関数
    function extractInformationAndSetFields() {
        // レコード情報の取得
        const record = kintone.app.record.get();
        const textValue = record.record.inputField.value;

        // 各情報のパターンを定義(正規表現による抽出)
        const patterns = {
            // 情報元を抽出する: 改行で終わる「情報元:」以降のあらゆる文字列
            source: /情報元:\s*(.+?)\n/,
    
            // 名前を抽出する: 改行で終わる「名前:」以降のあらゆる文字列
            name: /名前:\s*([^\n]+)\n/,
    
            // 電話番号を抽出する: 改行で終わる一般的な日本の電話番号フォーマット(数字とハイフン)
            phone: /電話:\s*(\d{2,4}-\d{2,4}-\d{3,4})\n/,
    
            // メールアドレスを抽出する: 「メール:」から始まる正当なメールアドレス
            email: /(?:メール:)\s*([^\s]+@[^\s]+)\n/,
    
            // 住所を抽出する: 改行または文末で終わる「住所:」以降のあらゆる文字列
            address: /住所:\s*(.+?)(?:\n|$)/
        };

        // 各パターンに基づいて情報を抽出し、対応するフィールドに値を設定
        for (const fieldCode in patterns) {
            const match = textValue.match(patterns[fieldCode]);
            if (match) {
                record.record[fieldCode].value = match[1];
            }
        }

        // レコードの変更を保存
        kintone.app.record.set(record);
    }

})();

結果

ぶじに動作しました。

image.png

まとめ

kintoneアプリ内でのデータ抽出と整理を自動化できるようになりました。

単調なのに間違えることができない抜き出し作業がある場合に、
ぜひこの方法を試してみてください。

正規表現を適宜調整することで、
他のフォーマットにも柔軟に対応可能です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?