kintoneの「その他の設定」にある「カテゴリ」を使用しているのですが、この値をkviewerで検索機能の項目に使用したいのですが、標準機能だとフィールドにない項目を対象とすることが、出来ないようです。
kintoneの「カテゴリ」の値をkintoneの「文字列フィールド」代入する方法をご存じでしたらご教示ください。
カテゴリーは複数選択もできるようなのですが、複数選択した場合はどうなるのが良いですか?複数選択は絶対に発生しない?
過去に入力したレコードは、csvにエクスポートして、文字列フィールドに読み込むことになりそうです。
今後発生した分は、どのタイミングでコピーをしますか?定期的にみるのか?登録・更新時にデータをカテゴリーからコピー・文字列フィールドにするか?
aaa様
・複数選択された場合、複数のカテゴリがフィルード内に表示されるようにしたいです。尚、複数表示が出来ない場合は、複数選択の運用は行わないようにします。
・タイミングは、登録更新時にデータをカテゴリーからコピーし、文字列フィールドに反映したいと思っています。
1)
カテゴリー機能を普段つかったことがなかったので知らなかったのですが
階層に分かれている場合、同名があると区別が付かないようです。
A->CCC
CCC
というカテゴリーが区別が付かない
(CSV出力も改行で区切られている)
カテゴリーを2つ以上登録があった場合に文字列フィールドにコピーすると
カテゴリーA,カテゴリーB
のようになります。kviewerで検索時にカテゴリーAを含むという検索はできますでしょうか?
むしろ、コピーするのはカテゴリーの数にもよりますが、チェックボックスの方がいいのではないでしょうか?
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;
});
})();
MutationObserverとか必要なんですか?
ほかに何かしようとしている?
複数カテゴリーをチェックボックスではなく
文字列フィールドにいれるということで理解しました。
たとえば、mutationobserverを使わない場合
カンマでつなぐとしたら
event.record.文字列__1行_.value = event.record.カテゴリー.value.join(",")
のようになると思います。
質問者のやりたいことを完全に理解できておりません。
aaa様
ご回答ありがとうございます。
event.record.文字列__1行_.value = event.record.カテゴリー.value.join(“,”)
は、追加するのでしょうか?
現状、希望通りの動作とのことですので、追加は不要と思われます。
AAA様
現状は、複数カテゴリがある場合、最後に選択したものだけが文字列に追加されてしまい、最初に選択されているものが消えています。
処理
let recordData = kintone.app.record.get(), record = recordData.record;
record[‘setcategory’].value =rec.target.innerText;
kintone.app.record.set(recordData);
のロジックに追加するのでしょうか?
または、上記をご指摘の内容に修正するのでしょうか?
下記のコードで出来るようになりました。
ただし、登録した「カテゴリ-」を変更し、フィールド「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’);
// 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;
});