概要
kintoneでは、クラフテクス社のデータシンカーやクロス・ヘッド社のメル箱など、メールの受信を感知して自動でkintoneのレコードに流入させる機能を持つプラグインはありますが、メール本文がそのまま一つのフィールドの値として存在するだけだと使いにくいことも。
データシンカーはjson設定にて分割できるが、流入するメールの種類が複数でシステムの安定稼働を考えると、分岐せずそのまま流入させた方がいいケースもある。
そこで今回は、kintoneのフィールドに入力されたテキストから情報を抽出し、他のフィールドに自動的に振り分けるJavaScriptの実装方法を紹介します。
事前準備
フィールド設定
-
入力元フィールド:
-
フィールドコード:
inputField
-
フィールドコード:
-
スペースフィールド:
-
フィールドコード:
pullOutButton
-
フィールドコード:
-
抽出したデータを格納するフィールド:
-
情報元: フィールドコード
source
-
名前: フィールドコード
name
-
電話番号: フィールドコード
phone
-
メールアドレス: フィールドコード
email
-
住所: フィールドコード
address
-
情報元: フィールドコード
想定データフォーマット
下記のようなデータが文字列(複数)フィールド
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);
}
})();
結果
ぶじに動作しました。
まとめ
kintoneアプリ内でのデータ抽出と整理を自動化できるようになりました。
単調なのに間違えることができない抜き出し作業がある場合に、
ぜひこの方法を試してみてください。
正規表現を適宜調整することで、
他のフォーマットにも柔軟に対応可能です。