# 2つのフィールドの値の重複チェック

**URL:** <https://community.cybozu.dev/t/topic/3979>\
**Category:** kintone 開発相談\
**Created:** [2019 年 4 月 19 日午前 12:09 UTC](https://community.cybozu.dev/t/topic/3979 "2019-04-19T00:09:58Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account1072](https://avatars.discourse-cdn.com/v4/letter/l/b9e5f3/32.png) [@Legacy\_Account1072](https://community.cybozu.dev/u/Legacy_Account1072)\
**Post date:** [2019 年 4 月 19 日午前 12:09 UTC](https://community.cybozu.dev/t/topic/3979/1 "2019-04-19T00:09:58Z")

</div>

現在、日報をアプリで作っています。  
文字列フィールド(自動計算の式有り)を対象にアプリ内レコードを参照してチェックを行うソースをほかのサイトの投稿を参考に書いてみましたがqueryの書き方がよく分かっていません。現在動かない状態です。  
(参考サイトは以前参考にしたのでURLが添付できませんでした…)  
プラグインで解決したかったのですが、モバイル版にも対応したいのでスクリプトでの解決をしたいと思っています。  
エラー部分は日付フィールド(date)に表示しています。  
文字列フィールドコード：Date\_Name\_Mobile

//以下ソースコード

(function() {  
“use strict”;

kintone.events.on([  
‘app.record.create.submit’,  
‘app.record.edit.submit’,  
‘mobile.app.record.create.submit’, // 追記箇所  
‘mobile.app.record.edit.submit’ // 追記箇所  
], function(event) {  
console.log(event);  
var record = event.record;  
var key\_field = ‘Date\_Name\_Mobile’;  
var own\_id = event.recordId ? event.recordId : null; // 新規でnull、編集時には値がセットされる/修正箇所  
var query = ‘’;

// フィールドが空の場合にはここで、return  
if (record[key\_field].value.length === 0) {  
return event;  
}

for (var i = 0; i \< recor.key\_field.value.length; i++) {  
query += key\_field + ’ in (“’ + record[key\_field].value + '”) or ';  
}

// 新規登録（null）と編集（自レコード除外）に対応  
if (own\_id) {  
query = query + ’ and $id != ’ + own\_id;  
}

// 検索対象のレコードは0または1個なので、limit 1で絞り込み  
query = query + ’ limit 1’;

// 重複チェック  
return kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, {  
app: event.appId, // 修正箇所  
query: query  
}).then(function(resp) {  
// レコードの重複をフィールドエラーにセット  
if (resp.records.length === 1) {  
record.date.error = ‘この日付の日報は登録済みです’;  
}  
return event;  
}).catch(function(err) {  
event.error = ‘既存レコードの取得に失敗しました。’;  
return event;  
});  
})

})();

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1804](https://avatars.discourse-cdn.com/v4/letter/l/ecd19e/32.png) [@Legacy\_Account1804](https://community.cybozu.dev/u/Legacy_Account1804)\
**Post date:** [2019 年 4 月 23 日午前 6:35 UTC](https://community.cybozu.dev/t/topic/3979/2 "2019-04-23T06:35:46Z")

</div>

for (var i = 0; i \< recor.key\_field.value.length; i++) の中の、最後が"or"で終わっているせいでエラーになっている気がします。  
Date\_Name\_Mobileがサブテーブル等繰り返す必要があるもので無ければ、forを使わずに正直に  
query += key\_field + ‘= "’ + record[key\_field].value + ‘"’;  
で良いと思うのですが、如何でしょうか？

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1665](https://avatars.discourse-cdn.com/v4/letter/l/f07891/32.png) [@Legacy\_Account1665](https://community.cybozu.dev/u/Legacy_Account1665)\
**Post date:** [2019 年 4 月 23 日午前 6:46 UTC](https://community.cybozu.dev/t/topic/3979/3 "2019-04-23T06:46:09Z")

</div>

そもそもなのですが、

重複チェックはkintoneの標準機能で「フィールドの重複禁止制約」を使った方が

良い気がします。

&nbsp;

文字列に計算式を入力すると重複禁止制約がつけられなくなりますが、

（それをkintoneの機能として何とかして欲しいところではありますが）

その場合のアプローチとして以下の2通りあると思うんです。

・文字列の計算をkintoneに任せて、重複チェックを自力でやる

・文字列の計算を自力でやって、重複チェックをkintoneに任せる

&nbsp;

K-OKZさんは前者でやろうとされていますが、

僕だったら後者でやりますね。

REST APIを使ってゴリゴリ重複チェックのロジックを書くよりも、

自動計算の処理をJavaScript APIで書いた方が全体的にシンプルになりませんか？

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1072](https://avatars.discourse-cdn.com/v4/letter/l/b9e5f3/32.png) [@Legacy\_Account1072](https://community.cybozu.dev/u/Legacy_Account1072)\
**Post date:** [2019 年 4 月 23 日午後 11:14 UTC](https://community.cybozu.dev/t/topic/3979/4 "2019-04-23T23:14:45Z")

</div>

FMさん

ありがとうございます、自分がやりたいもので実装することが出来ました。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1072](https://avatars.discourse-cdn.com/v4/letter/l/b9e5f3/32.png) [@Legacy\_Account1072](https://community.cybozu.dev/u/Legacy_Account1072)\
**Post date:** [2019 年 4 月 23 日午後 11:19 UTC](https://community.cybozu.dev/t/topic/3979/5 "2019-04-23T23:19:03Z")

</div>

赤座久樹さん

ありがとうございます。  
プログラミングを深く勉強していないせいで一度考えたことで実装しようとしてしまうことが多いです。  
シンプルにやる方が綺麗で今後見る人もわかりやすいと思います。

アドバイス、今後の参考とさせていただきます。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2024 年 12 月 3 日午前 5:30 UTC](https://community.cybozu.dev/t/topic/3979/6 "2024-12-03T05:30:52Z")

</div>

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。
