ルックアップAとルックアップBを作成し、その時に応じて同一コピー先である「文字列A」にルックアップで参照したデータを挿入したいと考えています。
しかし、そうしてしまうと「コピー先のフィールドの設定が重複しています。複数のルックアップフィールドを配置している場合、コピー先のフィールドはほかのルックアップフィールドとも重複できません。」とはじかれてしまいます。
コピー先の重複を無視、または何かしら方法で対応できないでしょうか。
何卒宜しくお願い致します。
ルックアップAとルックアップBを作成し、その時に応じて同一コピー先である「文字列A」にルックアップで参照したデータを挿入したいと考えています。
しかし、そうしてしまうと「コピー先のフィールドの設定が重複しています。複数のルックアップフィールドを配置している場合、コピー先のフィールドはほかのルックアップフィールドとも重複できません。」とはじかれてしまいます。
コピー先の重複を無視、または何かしら方法で対応できないでしょうか。
何卒宜しくお願い致します。
Toshi さん
標準機能では、無理ですね。
スタンダードコースであれば、JavaScript カスタマイズで可能です。
コピー先のフィールドの設定が重複は、解消させるしかありませんので、別の文字列項目を追加します。
フォーム設定
ルックアップA 文字列1 にコピー
ルックアップB 文字列2 にコピー
JavaScript の処理
文字列1 の change イベントで、文字列A に、文字列1の値を設定
文字列2 の change イベントで、文字列A に、文字列2の値を設定
早速のご回答有難う御座います。
現在スタンダートコースを契約しているのでjavascriptの導入は可能です。
例で出させていただいた例Aの数が非常に多いのでレイアウトの事も考えて回避できればと考えておりました。
ご回答いただきましたjavascriptを導入する場合
下記のようなフォームの配置になるのでしょうか。
【ルックアップA】【ルックアップB】
【文字列A】【文字列B】【文字列C】【文字列D】
■ルックアップA用
【文字列1-1 ⇒ change ⇒ 文字列A】
【文字列1-2 ⇒ change ⇒ 文字列B】
【文字列1-3 ⇒ change ⇒ 文字列C】
【文字列1-4 ⇒ change ⇒ 文字列D】
■ルックアップB用
【文字列2-1⇒ change ⇒ 文字列A】
【文字列2-2⇒ change ⇒ 文字列B】
【文字列2-3⇒ change ⇒ 文字列C】
【文字列2-4⇒ change ⇒ 文字列D】
当方、恥ずかしながらjavascriptの経験がほとんど無い為
何か参考になるURL等をいただけましたら幸いです。
ぶしつけなお願いで恐縮ですがご教授頂けますと幸いです。
ルックアップ設定さえあればいいので、フォームへの項目配置は、お好きなようにしてかまいません。
‘文字列1_1’ ~ '文字列2_4’は、グループを追加して、通常は見えなくしてもいいです。
フィールドコードにハイフンは使えませんので、アンダースコアにしています。
下記のようなコードで動作すると思います。
なお、ルックアップA,ルックアップB 両方を指定した場合やクリアした場合など、複雑な組合せの動作は考慮していませんが、基本的には後で取得したルックアップが反映されます。
(function () {
"use strict";
var aFields = [
'文字列1_1','文字列1_2','文字列1_3','文字列1_4',
];
var bFields = [
'文字列2_1','文字列2_2','文字列2_3','文字列2_4',
];
var toFields = [
'文字列A','文字列B','文字列C','文字列D',
];
// 追加、編集画面表示イベント
kintone.events.on(['app.record.create.show','app.record.edit.show','app.record.index.edit.show'], function (event) {
var record = event.record;
for (var i = 0; i < toFields.length; i++) {
record[toFields[i]]['disabled'] = true;
}
return event;
});
// ルックアップ change イベント
var changeType = {};
for (var i = 0; i < aFields.length; i++) {
changeType['app.record.create.change.' + aFields[i]] = i;
changeType['app.record.edit.change.' + aFields[i]] = i;
}
for (var i = 0; i < bFields.length; i++) {
changeType['app.record.create.change.' + bFields[i]] = i;
changeType['app.record.edit.change.' + bFields[i]] = i;
}
var changeEvents = Object.keys(changeType);
kintone.events.on(changeEvents, function (event) {
var record = event.record;
var index = changeType[event.type];
record[toFields[index]]['value'] = event.changes.field.value;
return event;
});
})();
ちょっとコードを整理しました。
こちらの方がフィールドコードを指定しやすいと思います。
(function () {
"use strict";
var fields = [
{ to: '文字列A', a: '文字列1_1', b: '文字列2_1' },
{ to: '文字列B', a: '文字列1_2', b: '文字列2_2' },
{ to: '文字列C', a: '文字列1_3', b: '文字列2_3' },
{ to: '文字列D', a: '文字列1_4', b: '文字列2_4' },
];
// 追加、編集画面表示イベント
kintone.events.on(['app.record.create.show','app.record.edit.show','app.record.index.edit.show'], function (event) {
var record = event.record;
for (var i = 0; i < fields.length; i++) {
record[fields[i].to]['disabled'] = true;
}
return event;
});
// ルックアップ change イベント
var changeType = {};
for (var i = 0; i < fields.length; i++) {
changeType['app.record.create.change.' + fields[i].a] = i;
changeType['app.record.edit.change.' + fields[i].a] = i;
changeType['app.record.create.change.' + fields[i].b] = i;
changeType['app.record.edit.change.' + fields[i].b] = i;
}
var changeEvents = Object.keys(changeType);
kintone.events.on(changeEvents, function (event) {
var record = event.record;
var toCode = fields[changeType[event.type]].to;
record[toCode].value = event.changes.field.value;
return event;
});
})();
rex0220様
当方が無知な故に修正までしていただき有難うございます。
いただいたソースを参考に作成してみたところ構想していた形を無事実装する事ができました!
丁寧かつ的確な回答いただき有難うございました。
初歩的なご質問で申し訳ありません。記述に出てきます aFields bFields toFields の(a,b、to)は個別に変更可能な値なのでしょうか。
私が上記と同様の環境をkintoneで作成し、javascriptの記述をする場合も同じ(a,b、to)となるのでしょうか。
>初歩的なご質問で申し訳ありません。記述に出てきます aFields bFields toFields の(a,b、to)は個別に変更可能な値なのでしょうか。
{ to: ‘文字列A’, a: ‘文字列1_1’, b: ‘文字列2_1’ }, の’文字列A’、 ‘文字列1_1’、 '文字列2_1’は、フィールドコードなので
対象アプリに合わせて、フィールドコードを指定してください。
rex0220様
早々にご回答頂きありがとうございました。
アプリ内(画像のアプリ ルックアップ用のアプリ2個)のフィールドコードを 例題のコードに指定、
画像のアプリに本文掲載のjsファイルをアップロードいたしましたが、エラーが出てしまいます。
度々申し訳ございませんがお気付きの点がありましたらお教えいただけますと幸いです。
>アプリ内(画像のアプリ ルックアップ用のアプリ2個)のフィールドコードを 例題のコードに指定、
画像のアプリに本文掲載のjsファイルをアップロードいたしましたが、エラーが出てしまいます。
このスレッドの最初のコメントを見てください。
rex0220様
無事動作確認することができました。ご丁寧に対応頂きありがとうございました。
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。