同一レコード内の文字列一行フィールドのコピーについて

いつもお世話になります。

同一レコードのコピーがうまくいかないため、お教えいただけますと幸いです。

現在、送付先郵便番号、送付先住所、送付先電話番号

それぞれ文字列一行(自動計算)で入力されている値を

別の文字列一行フィールドへコピーしたく

送付先郵便番号copy、送付先住所copy、送付先電話番号copyというコピー先を作りました。

下記JSを組んだのですが

反応がないため、何が足りないのかお教えいただけますと幸いです。

CSVでデータを新規に上げるパターンの時に反映されるとベストですが

無理な場合は、必ずレコードを一度開いて保存をする作業があるため

その時に反応してくれてもよいと思っております。

すみませんが、よろしくお願いいたします!!!

 

先にエラーはこちらです。

 

 

(function () {

“use strict”;

kintone.events.on([“app.record.create.change.送付先郵便番号”, “app.record.edit.change.送付先郵便番号”,
“app.record.create.change.送付先住所”, “app.record.edit.change.送付先住所”,
“app.record.create.change.送付先電話番号”, “app.record.edit.change.送付先電話番号”], function (event) {

switch (event.type) {

case “app.record.create.change.送付先郵便番号”:

case “app.record.edit.change.送付先郵便番号”:

event.record.送付先電話番号copy.value = event.record.送付先郵便番号.value;

event.record.送付先電話番号copy.value = event.record.送付先郵便番号.value;

break;

case “app.record.create.change.送付先住所”:

case “app.record.edit.change.送付先住所”:

event.record.送付先住所copy.value = event.record.送付先住所.value;

event.record.送付先住所copy.value = event.record.送付先住所.value;

break;

case “app.record.create.change.送付先電話番号”:

case “app.record.edit.change.送付先電話番号”:

event.record.送付先電話番号copy.value = event.record.送付先電話番号.value;

event.record.送付先電話番号copy.value = event.record.送付先電話番号.value;

break;

}

return event;

});

})();

コードを拝見しましたが、特に問題がないように見えます。
こちらの環境でも動かしてみましたが、特にエラーは発生しませんでした。
他のコードがあればそれが影響を与えている可能性もありそうです。

エラー内容のat download.do?app~~~の部分をクリックしてエラーの該当箇所を確認してみてください。

ウレット様

お世話になります。ありがとうございます!

他の機能をカットしたら動くようになるのが確認できまして、

さらに、その機能を復帰させたら動くようになりました。

CSVアップがきっかけで動くことはできないかと思われますが

現状入ってるデータを一覧表示、またはほかのフィールドの保存きっかけで

コピーしてくれることはできないのでしょうか?

動作確認したところ、changeなのでフィールドデータを変更しないと変わらないのですが

CSVアップだとすでに例えば送付先電話番号フィールドにデータが入っているので、

一覧表示きっかけ、または違うフィールドを変更することはあるので

その保存きっかけで送付先電話番号フィールド→送付先電話番号copyに入ってくれると

理想通りなのですが、これはさすがに無理でしょうか?

index.showで試しましたが、反応はありませんでした。

恐れ入りますが、お分かりになれば宜しくお願い致します。

お世話になります。
動くようになったとのこと、よかったです。

ご質問の件ですが、CSV読み込みタイミングはイベントが存在しないためおっしゃる通り不可です。
保存時に実行させるのが一番簡単で、コードを下記のように書き換えると一覧画面・新規作成画面・編集画面でレコードを保存時にコピーするようになります。

(function () {
'use strict';

kintone.events.on(
['app.record.index.edit.submit','app.record.create.submit', 'app.record.edit.submit'],
function (event) {
event.record.送付先郵便番号copy.value = event.record.送付先郵便番号.value;
event.record.送付先住所copy.value = event.record.送付先住所.value;
event.record.送付先電話番号copy.value = event.record.送付先電話番号.value;
return event;
}
);
})();

一覧を表示時に全てを更新するにはコードを大幅に書き換える必要があるのと、
REST APIの知識が必要です。

ウレット様

お世話になります!

submitのご教授、誠にありがとうございます!

現在、いただいたjsで一覧での編集時に反応するかみたのですが

送付先電話番号のみ反応します。特にconsoleエラーはありません。

 

具体的に言いますと、CSVでデータアップ後

出荷サイトという数値フィールドに28と初期値が入っているのですが、これは

何月何日に出荷されるというフィールドにjsで反応させるためのものなのですが、

一覧で編集ボタンを押して保存を押さないと初期値が入っていても反応がないので、その作業を実施します。

特にフィールドを触ることなく、編集ボタン→保存ボタンで反応する。

 

このときに、いただいたjsでついでに反応してくれるとよいのですが

実施してみたところ、一覧で編集ボタン→保存ボタンでは反応がなく

例えば出荷サイトの28が初期値のフィールドを一回クリックして編集状態になって

そのまま保存すると送付先電話番号だけ入ります。プラグイン、jsは

いただいたもの以外切ってみたのですが、送付先電話番号だけ反応する現象は変わりませんでした。

どこか変更する必要があるのでしょうか?

一覧からの編集ではなく、個々の編集画面では保存時にすべて反応してくれたので理想通りの動きにはなっております。

お忙しいところ恐れ入りますが、よろしくお願いいたします。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

いつもありがとうございます。
こちらを参考にしたのですが、同一レコード内のフィールドの値のコピーがうまくいかないため、お教えいただけますと幸いです。

現在、kinmujido、shujidoというフィールド(それぞれ文字列一行(自動計算)で入力されている値)を、kinmu、shuという別の文字列一行フィールドへコピーしたいです。

下記JSを組んだのですが反応がないため、何が足りないのかお教えいただけますと幸いです。

(function () {
“use strict”;

kintone.events.on([“app.record.create.change.kinmujido”, “app.record.edit.change.kinmujido”,
“app.record.create.change.shujido”, “app.record.edit.change.shujido”],
function (event) {
switch (event.type) {
case “app.record.create.change.kinmujido”:
case “app.record.edit.change.kinmujido”:
event.record.kinmu.value = event.record.kinmujido.value;
event.record.kinmu.value = event.record.kinmujido.value;
break;
case “app.record.create.change.shujido”:
case “app.record.edit.change.shujido”:
event.record.shu.value = event.record.shujido.value;
event.record.shu.value = event.record.shujido.value;
break;
}
return event;
});
})();

ぱっと見た感じだと、次のコードはおかしいです。

問題:二重代入

event.record.kinmu.value = event.record.kinmujido.value;
event.record.kinmu.value = event.record.kinmujido.value;
....
event.record.shu.value = event.record.shujido.value;
event.record.shu.value = event.record.shujido.value;

後、コードはコードブロックを使って貼っていただけると、コードをそのままコピペできるので、検証しやすくなります。

大変失礼いたしました。二重代入とご指摘頂いた部分を解消したつもりです。

kinmujido、shujidoというフィールド(それぞれ文字列一行(自動計算)で入力されている値)を、kinmu、shuという別の文字列一行フィールドへコピーしたいのですがうまくいかないです。修正すべき点などを教えて頂けると助かります。

(function () {

“use strict”;

kintone.events.on([“app.record.create.change.kinmujido”, “app.record.edit.change.kinmujido”,

“app.record.create.change.shujido”, “app.record.edit.change.shujido”],

function (event) {

switch (event.type) {

case “app.record.create.change.kinmujido”:

case “app.record.edit.change.kinmujido”:

event.record.kinmu.value = event.record.kinmujido.value;

break;

case “app.record.create.change.shujido”:

case “app.record.edit.change.shujido”:

event.record.shu.value = event.record.shujido.value;

break;

}

return event;

});

})();

うまくコードを送信できず失礼しました・・

(function () {
“use strict”;

kintone.events.on([“app.record.create.change.kinmujido”, “app.record.edit.change.kinmujido”,
“app.record.create.change.shujido”, “app.record.edit.change.shujido”], 
function (event) {
switch (event.type) {
case “app.record.create.change.kinmujido”:
case “app.record.edit.change.kinmujido”:
event.record.kinmu.value = event.record.kinmujido.value;
break;
case “app.record.create.change.shujido”:
case “app.record.edit.change.shujido”:
event.record.shu.value = event.record.shujido.value;
break;
}
return event;
});
})();

フィールドコードに指定可能なフィールド

自動計算の文字列はチェンジイベントで検知しなかった気がします。
なので原因がそこでしたら通常の文字列にして、JSでそこに値を自動計算させてなどもよさそうですね。
※計算フィールドと勘違いしてたので原因違うような気がします。すみません

ご提示のコードをもとに、次のようなところを修正したら、動くことを確認しました。

  • 二重代入を直す
  • コードを整形する(ご提示のコードはコードブロックに入れていないため、そのまま使えず、ダブルクォテーションなどを半角にする必要があった)

アプリ設計のところは違うかもしれませんので、
念の為、検証用のフォームを掲示します。


検証コード:

(function () {
  'use strict';

  const events = [
    'app.record.create.change.text1',
    'app.record.edit.change.text1',
    'app.record.create.change.text2',
    'app.record.edit.change.text2'
  ];

  kintone.events.on(events, function (event) {
    switch (event.type) {
      case 'app.record.create.change.text1':
      case 'app.record.edit.change.text1':
        event.record.A_copy.value = event.record.text1.value;
        break;
      case 'app.record.create.change.text2':
      case 'app.record.edit.change.text2':
        event.record.B_copy.value = event.record.text2.value;
        break;
    }
    return event;
  });
})();

コード自体は、大きい問題がなさそうです。
おそらく記号や改行など細かいところにミスがあるかもしれません。
一番早い方法は、ChatGPTとかのAIにコードを投げてチェックしてもらうことです。
それでも解決できなかったら、自力でデバッグしてみてください(自分の成長にもつながりますよ)
動かない?そんな時はデバッグをしてみよう!入門編

「いいね!」 1

アドバイスありがとうございます。通常の文字列にして、今まで関数で自動計算させていた内容をJSで書いてみたのですが、結果が帰ってこないです。
どこに問題がありそうでしょうか??

(function() {
    'use strict';

    // レコード詳細画面の表示イベント
    kintone.events.on('app.record.detail.show', function(event) {
        var record = event.record;

        // 各フィールドの値を取得
        var employmentType = record['雇用形態'].value;
        var employmentStatusFlag = record['雇用状況フラグ'].value;
        var reemploymentChildcareFlag = record['再任用者_育短フラグ'].value;
        var jobType1 = record['職種1'].value;

        // 結果を格納する変数
        var result = '';

        // 条件に基づく値の設定
        if ((employmentType === '正規' && employmentStatusFlag === '在職中' && reemploymentChildcareFlag === 'なし') ||
            employmentStatusFlag === '育児部分休業' ||
            employmentStatusFlag === '子育て部分休暇' ||
            (employmentType === '正規' && employmentStatusFlag === '在職中' && reemploymentChildcareFlag === '再任用_週5日') ||
            employmentType === '研修医' ||
            employmentType === '専攻医' ||
            (employmentType === '会計年度' && jobType1 === '医師職') ||
            employmentType === '臨職・任期付') {
            result = '38.75';
        } else if (employmentType === '正規' && employmentStatusFlag === '在職中' && reemploymentChildcareFlag === '再任用_週4日') {
            result = '31';
        } else if ((employmentType === '正規' && employmentStatusFlag === '育短' && reemploymentChildcareFlag === '育短③') ||
                   (employmentType === '正規' && employmentStatusFlag === '在職中' && reemploymentChildcareFlag === '再任用_週3日')) {
            result = '23.25';
        } else {
            result = ' ';
        }

        // 結果をフィールドに設定
        record['kinmu'].value = result;

        return event;
    });
})();

詳細画面で書き換えようとしてるので追加や編集のイベントで試してみていただけるとです

「いいね!」 1

@akika さま
ありがとうございます!
自動計算を外した、文字列1行フィールドもしくは数値フィールドから、別のフィールドにコピーできることを確認しました。

「いいね!」 2

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