# kintoneのカテゴリの値をフィールドとして取得する方法

**URL:** <https://community.cybozu.dev/t/topic/8573>\
**Category:** kintone 開発相談\
**Created:** [2024 年 1 月 17 日午前 2:29 UTC](https://community.cybozu.dev/t/topic/8573 "2024-01-17T02:29:46Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![sisido](https://avatars.discourse-cdn.com/v4/letter/s/b5ac83/32.png) [@sisido](https://community.cybozu.dev/u/sisido)\
**Post date:** [2024 年 1 月 17 日午前 2:29 UTC](https://community.cybozu.dev/t/topic/8573/1 "2024-01-17T02:29:46Z")

</div>

kintoneの「その他の設定」にある「カテゴリ」を使用しているのですが、この値をkviewerで検索機能の項目に使用したいのですが、標準機能だとフィールドにない項目を対象とすることが、出来ないようです。  
kintoneの「カテゴリ」の値をkintoneの「文字列フィールド」代入する方法をご存じでしたらご教示ください。

---

<div class="post-metadata">

**Author:** ![aaa](https://sea1.discourse-cdn.com/flex015/user_avatar/community.cybozu.dev/aaa/32/277_2.png) [@aaa](https://community.cybozu.dev/u/aaa)\
**Post date:** [2024 年 1 月 18 日午前 2:59 UTC](https://community.cybozu.dev/t/topic/8573/2 "2024-01-18T02:59:41Z")

</div>

カテゴリーは複数選択もできるようなのですが、複数選択した場合はどうなるのが良いですか？複数選択は絶対に発生しない？  
過去に入力したレコードは、csvにエクスポートして、文字列フィールドに読み込むことになりそうです。  
今後発生した分は、どのタイミングでコピーをしますか？定期的にみるのか？登録・更新時にデータをカテゴリーからコピー・文字列フィールドにするか？

---

<div class="post-metadata">

**Author:** ![sisido](https://avatars.discourse-cdn.com/v4/letter/s/b5ac83/32.png) [@sisido](https://community.cybozu.dev/u/sisido)\
**Post date:** [2024 年 1 月 18 日午前 4:26 UTC](https://community.cybozu.dev/t/topic/8573/3 "2024-01-18T04:26:40Z")

</div>

aaa様  
・複数選択された場合、複数のカテゴリがフィルード内に表示されるようにしたいです。尚、複数表示が出来ない場合は、複数選択の運用は行わないようにします。  
・タイミングは、登録更新時にデータをカテゴリーからコピーし、文字列フィールドに反映したいと思っています。

---

<div class="post-metadata">

**Author:** ![aaa](https://sea1.discourse-cdn.com/flex015/user_avatar/community.cybozu.dev/aaa/32/277_2.png) [@aaa](https://community.cybozu.dev/u/aaa)\
**Post date:** [2024 年 1 月 18 日午前 5:59 UTC](https://community.cybozu.dev/t/topic/8573/4 "2024-01-18T05:59:00Z")

</div>

1)

 ![image](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/67bc55ebec8c07661fc612eb3bc4384c11ac4037.png)

カテゴリー機能を普段つかったことがなかったので知らなかったのですが  
階層に分かれている場合、同名があると区別が付かないようです。  
A-\>CCC  
CCC  
というカテゴリーが区別が付かない  
(CSV出力も改行で区切られている）

1. 

カテゴリーを2つ以上登録があった場合に文字列フィールドにコピーすると  
カテゴリーA,カテゴリーB  
のようになります。kviewerで検索時にカテゴリーAを含むという検索はできますでしょうか？  
むしろ、コピーするのはカテゴリーの数にもよりますが、チェックボックスの方がいいのではないでしょうか？

---

<div class="post-metadata">

**Author:** ![sisido](https://avatars.discourse-cdn.com/v4/letter/s/b5ac83/32.png) [@sisido](https://community.cybozu.dev/u/sisido)\
**Post date:** [2024 年 1 月 18 日午前 6:31 UTC](https://community.cybozu.dev/t/topic/8573/5 "2024-01-18T06:31:59Z")

</div>

aaa様 同名のカテゴリーは、無いように設定しております。  
なお、下記の内容でカテゴリーを文字列フィールドに代入することが  
できました。複数のカテゴリーを文字列フィールドに設定する方法を  
ご教示願います。  
(function(){  
‘use strict’;  
kintone.events.on([‘app.record.create.show’,‘app.record.edit.show’],function(event){

```
  const ele = document.querySelectorAll('.input-category-cybozu');
  
  //MutationObserver（インスタンス）の作成
  var mo = new MutationObserver(function(moRecords) {
    moRecords.forEach((rec) => {
      if (rec.target.className.indexOf('tree-node-select-cybozu') != -1) {
        //処理
        console.log(rec);
        console.log(rec.target.innerText);
    
        let recordData = kintone.app.record.get(), record = recordData.record;
      record['setcategory'].value =rec.target.innerText;
      kintone.app.record.set(recordData);

      }
    });
  });
  //監視する対象の指定
  var config = {
    attributes: true,//「属性」の変化
    attributeFilter: ['class'],
    subtree: true,//孫以降のノードの変化も検出
  };
  
  //監視の開始
  mo.observe(ele[0], config);

return event;

```

});  
})();

---

<div class="post-metadata">

**Author:** ![aaa](https://sea1.discourse-cdn.com/flex015/user_avatar/community.cybozu.dev/aaa/32/277_2.png) [@aaa](https://community.cybozu.dev/u/aaa)\
**Post date:** [2024 年 1 月 18 日午前 7:02 UTC](https://community.cybozu.dev/t/topic/8573/6 "2024-01-18T07:02:37Z")

</div>

MutationObserverとか必要なんですか？  
ほかに何かしようとしている？

複数カテゴリーをチェックボックスではなく  
文字列フィールドにいれるということで理解しました。

たとえば、mutationobserverを使わない場合  
カンマでつなぐとしたら

```javascript
event.record.文字列__1行_.value = event.record.カテゴリー.value.join(",")

```

のようになると思います。

質問者のやりたいことを完全に理解できておりません。

---

<div class="post-metadata">

**Author:** ![sisido](https://avatars.discourse-cdn.com/v4/letter/s/b5ac83/32.png) [@sisido](https://community.cybozu.dev/u/sisido)\
**Post date:** [2024 年 1 月 22 日午前 5:16 UTC](https://community.cybozu.dev/t/topic/8573/7 "2024-01-22T05:16:44Z")

</div>

aaa様  
ご回答ありがとうございます。  
event.record.文字列\_\_1行\_.value = event.record.カテゴリー.value.join(“,”)  
は、追加するのでしょうか？

---

<div class="post-metadata">

**Author:** ![aaa](https://sea1.discourse-cdn.com/flex015/user_avatar/community.cybozu.dev/aaa/32/277_2.png) [@aaa](https://community.cybozu.dev/u/aaa)\
**Post date:** [2024 年 1 月 22 日午前 5:28 UTC](https://community.cybozu.dev/t/topic/8573/8 "2024-01-22T05:28:17Z")

</div>

現状、希望通りの動作とのことですので、追加は不要と思われます。

---

<div class="post-metadata">

**Author:** ![sisido](https://avatars.discourse-cdn.com/v4/letter/s/b5ac83/32.png) [@sisido](https://community.cybozu.dev/u/sisido)\
**Post date:** [2024 年 1 月 22 日午前 6:19 UTC](https://community.cybozu.dev/t/topic/8573/9 "2024-01-22T06:19:54Z")

</div>

AAA様  
現状は、複数カテゴリがある場合、最後に選択したものだけが文字列に追加されてしまい、最初に選択されているものが消えています。  
処理  
let recordData = kintone.app.record.get(), record = recordData.record;  
record[‘setcategory’].value =rec.target.innerText;  
kintone.app.record.set(recordData);  
のロジックに追加するのでしょうか？  
または、上記をご指摘の内容に修正するのでしょうか？

---

<div class="post-metadata">

**Author:** ![sisido](https://avatars.discourse-cdn.com/v4/letter/s/b5ac83/32.png) [@sisido](https://community.cybozu.dev/u/sisido)\
**Post date:** [2024 年 1 月 31 日午前 1:03 UTC](https://community.cybozu.dev/t/topic/8573/10 "2024-01-31T01:03:05Z")

</div>

下記のコードで出来るようになりました。  
ただし、登録した「カテゴリ－」を変更し、フィールド「setcategory」に反映する場合は、一度、保存した後に変更というオペレーションになります。  
kintone.events.on([‘app.record.create.show’,‘app.record.edit.show’],function(event){  
const ele = document.querySelectorAll(‘.input-category-cybozu’);

// Initialize an empty array to store all selected categories  
let allCategories = ;

//MutationObserver（インスタンス）の作成  
var mo = new MutationObserver(function(moRecords) {  
moRecords.forEach((rec) =\> {  
if (rec.target.className.indexOf(‘tree-node-select-cybozu’) != -1) {  
//処理  
let categories = rec.target.innerText.split(‘\n’);

```javascript
// Add the newly selected categories to the allCategories array
categories.forEach(category => {
if (!allCategories.includes(category)) {
allCategories.push(category);
 }
 });

 } else if (rec.target.className.indexOf('tree-node-deselect-cybozu') != -1) {
 //処理
 let categories = rec.target.innerText.split('\n');
    
 // Remove the deselected categories from the allCategories array
 allCategories = allCategories.filter(category => !categories.includes(category));
 }
  
 let recordData = kintone.app.record.get(), record = recordData.record;
 record['setcategory'].value = allCategories.join(',');
 kintone.app.record.set(recordData);
});

```

});  
//監視する対象の指定  
var config = {  
attributes: true,//「属性」の変化  
attributeFilter: [‘class’],  
subtree: true,//孫以降のノードの変化も検出  
};

//監視の開始  
mo.observe(ele[0], config);

return event;  
});
