na_0808
(Naka)
October 25, 2023, 1:30am
1
何を実現したいのかを書きましょう
同じアプリ内で【複数選択(フィールドコード→A)】で選択された項目を【文字列(複数行)(フィールドコード→B)】へコピーが可能な場合、アプリケーションに導入したく思います。
:用途等:
社員が取得する資格の管理の為に導入したいです。
最初は文字列(複数行)での導入を試みましたが、入力者によって変換ミスや表記ゆれが発生したため、統一の為に複数選択を導入を開始しようと試みました。
入力後、アクション機能で別アプリへ転記してからRICOHplusの帳票出力アプリを使用して提出書式に転写したいため、文字列(複数行)で保存しなければならない現状です。
発生した問題やエラーメッセージを具体的に書きましょう
既に投稿されているトピックを検索し、似通っていそうなものを試しましたが、うまくコピーが反映されずに困っています。
(初心者故に似通っていない・見当違い等のご指摘等がありましたら大変申し訳ございません)
ユーザー選択で複数選択された値を文字列へコピーしたい - kintone カスタマイズ - cybozu developer community
イベントオブジェクトで実行できる操作 - cybozu developer network
また、紹介されていたページが非公開になってしまっているなどしてどのようにすればいいかわかりかねて困ってしまっています。
初歩的な内容でしたら非常に恥ずかしいことではありますが、可能な場合どのようにコードを書けばいいか、また、厚かましいお願いかと思いますがこのようにコードを入力すればよいなどのご教授を願えないでしょうか
お手数をおかけいたしますが、何卒よろしくお願い申し上げます。
@na_0808 さん
こんにちは、恐らく問題なく言われている事はできるかと思います。
既に投稿されているトピックを検索し、似通っていそうなものを試しましたが、うまくコピーが反映されずに困っています。
このように書かれていますが、一度試されたコード等を貼っていただく事は可能でしょうか?
na_0808
(Naka)
October 25, 2023, 2:56am
3
@y_minamitani9534 様
こんにちは、ご回答をいただき誠にありがとうございます。
試させていただいたものを張り付けさせていただきます。
(function() {
'use strict';
var events = [
'app.record.create.show',
'app.record.edit.show',
'app.record.create.change.A(複数選択)',
'app.record.edit.change.A(複数選択)'
];
kintone.events.on(events, function(event) {
kintone.app.record.setFieldShown('B(文字列複数行)', false);
var record = event.record;
var texts = '';
for (var i in record['A(複数選択)'].value){
if (texts !== '') {
text += '\r' ; //複数行文字列で改行するなら '\r'
}
texts += record['A(複数選択)'].value[i].text;
}
record['B(文字列複数行)']['value'] = texts;
return event;
});
})();
こちらを試すとコピーが反映されず、文字列(複数行)も表示から消えてしまうようになってしまいました。
アプリケーションの詳細がコードに必要か否かわかりかねましたので、ご連絡をさせていただきますと文字列(複数行)はテーブルなどの設置ではございませんが、同じグループ内に入っています。
初歩的なことをお問い合わせしてしまい申し訳ございません。
どうかお力添えをいただけないでしょうか、何卒よろしくお願いいたします。
まず、こちらの
文字列(複数行)も表示から消えてしまうようになってしまいました
ですが、 貼っていただいたコードの中で
kintone.app.record.setFieldShown('B(文字列複数行)', false);
としているため B(文字列複数行)
の表示が消えてしまいます。
もし、こちら何も意図なければ行削除された方がいいのかなと思います。
詳細は、下記にリンク貼りますのでそちらで確認くださいね。
恐らくですが、貼っていただいたコードは、途中でエラーがでてるんじゃないかなと思います。
少し難しい言い方になりますが、record['A(複数選択)'].value[i].text;
の .text
は存在していないプロパティを指定していることになりますし、.value[i]
の i
も for ( in )
で書かれているのでindex番号が入ってるわけではないのでエラーになるかと思います。
あと、加えて恐らく改行は ‘\n’ だと思います。
それら踏まえて簡単に問題個所を修正しますと
var texts = '';
// for ( in ) から for( of ) に変更
for (var i of record['A(複数選択)'].value){
if (texts !== '') {
text += '\n' ; //複数行文字列で改行するなら '\n'
}
//↓ iにrecord['A(複数選択)'].valueの配列の中身を入るため
texts += i;
}
このような形になるんじゃないかなと思われます。
一度お試しいただいてまたフィードバックいただければ幸いです。
na_0808
(Naka)
October 25, 2023, 6:05am
5
@y_minamitani9534 様
大変お世話になっております。
拙い説明文と汚いコードを見せてしまうこととなり大変申し訳ございません。
ご返信にありましたフィールドの表示/非表示の切り替えの記事を拝見させていただきました。
読み終えた上で、今回のプログラムには不要なものと判断し行削除をさせていただきました。テスト確認をしたところ、文字列(複数行)が表示されることを確認いたしました。ありがとうございます。
教えていただきましたコードをフィールドコード部を修正したところ、未だ複写がされない状態です。
教えていただきましたコードはこのように入力させていただいております。
(function() {
'use strict';
var events = [
'app.record.create.show',
'app.record.edit.show',
'app.record.create.change.A(複数選択)',
'app.record.edit.change.A(複数選択)'
];
kintone.events.on(events, function(event) {
var texts = '';
// for ( in ) から for( of ) に変更
for (var i of record['A(複数選択)'].value){
if (texts !== '') {
text += '\n' ; //複数行文字列で改行するなら '\n'
}
//↓ iにrecord['A(複数選択)'].valueの配列の中身を入るため
texts += i;
}
record['B(文字列複数行)']['value'] = texts;
return event;
});
})();
Googleの検証ツールを確認したところ、エラーが発生しておりました。
⁑エラー内容⁑
edit.js:124 Uncaught ReferenceError: record is not defined
度々お手数をおかけしてしまい申し訳ございません。
何卒よろしくお願い申し上げます。
いえ、とんでもございません
無事、文字列複数行が表示されてよかったです!
Googleの検証ツールを確認したところ、エラーが発生しておりました。
⁑エラー内容⁑
edit.js:124 Uncaught ReferenceError: record is not defined
こちらですが、前回貼っていただいたコードには、
var record = event.record;
前回貼っていただいたコードにはrecord
が定義されていましたが、新しく貼っていただいた方には定義されていないのが原因ですね
要は、recordってわかりませんってエラーになるので定義してあげる必要があるので…
na_0808
(Naka)
October 26, 2023, 1:26am
7
@y_minamitani9534 様
大変お世話になっております。
レコードの定義のご説明をありがとうございます。前回のコードを削除するときに誤って消してしまったものと思われます。
追加をさせていただき、以下のようにコードを編集させていただきました。
(function() {
'use strict';
var events = [
'app.record.create.show',
'app.record.edit.show',
'app.record.create.change.A(複数選択)',
'app.record.edit.change.A(複数選択)'
];
kintone.events.on(events, function(event) {
var texts = '';
var record = event.record;
// for ( in ) から for( of ) に変更
for (var i of record['A(複数選択)'].value){
if (texts !== '') {
text += '\n' ; //複数行文字列で改行するなら '\n'
}
//↓ iにrecord['A(複数選択)'].valueの配列の中身を入るため
texts += i;
}
record['B(文字列複数行)']['value'] = texts;
return event;
});
})();
こちらに上書きし、テストで動作を確認したところ複数選択でクリックした項目が文字列(複数行)へコピーされることを確認させていただきました。
ただし、複数選択で2つ目以降の項目をクリックした際には文字列 (複数行)への涸コピーがされず、1つめに選択した項目のみが表示される状態です。
⁑試したこと⁑
・複数選択をクリックすると文字列(複数行)にコピーされる→最初に選択したもののみ
・複数選択で3項目をクリックし、最初に選択した項目の選択をはずす→2回目にクリックした項目が文字列(複数行)へコピーされる
複数の項目を文字列(複数行)へコピーすることは難しいでしょうか?
大変恐縮ではございますが、ご教授いただけますと幸いです。
@na_0808 さん
こちらの環境でコード利用させてもらってテストしてみると原因がわかりました。
私も気づいていませんでしたが、texts
としないといけないところを text
となっていて、2つ目選択いこうでエラーが発生しておりました。
以下のコード部分を変更してみてください。
if (texts !== '') {
//↓ここがtextになってました。
texts += '\n' ; //複数行文字列で改行するなら '\n'
}
na_0808
(Naka)
October 26, 2023, 2:00am
9
@y_minamitani9534 様
大変お世話になっております。
y_minamitani9534様から教えていただきました通り、コードのtextとなっていた箇所を修正いたしましたところ、こちらが希望していた通りにアプリケーションが動作したことを確認いたしました。
y_minamitani9534様のお力添えのおかげでアプリケーションの稼働まで行きつくことができそうです。
最初にお手を差し伸べていいただきました返信をベストアンサーとさせていただき御礼申し上げます。
この度は本当にありがとうございました。
1 Like
system
(system)
Closed
October 29, 2023, 2:01am
10
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。