新規投稿
フォローする

同一アプリにて複製元レコードのレコード番号、作成日時を複製先に残す。

同一アプリにて複製元レコードのレコード番号、作成日時を

複製先に数値フィールド、日時フィールドに残すということは可能でしょうか?

複製せずに、新規でレコードを作成した場合については、

先の数値フィールド、日時フィールドに値は入力しなくて大丈夫です。

 

大変お手数をおかけしますが、

ご教示いただけると幸いです。

 

よろしくお願いいたします。

 

0

9件のコメント

Avatar
HANSA

kyoden さん

アプリアクションを利用すればカスタマイズ不要で実現可能です。

0
Avatar
kyoden

ちなみに、同一アプリにてアプリアクションを使えば容易だとは思うのですが、

この二つ以外のフィールドでテーブルを配置しており、

テーブルはアクションボタンが反応しないので、

それ以外の方法でお願いいたします。

0
Avatar
kyoden

HANSAさん

ご回答ありがとうございます。

↑の通り他の方法で対応したいです。

js等ご存知であればご教示いただけると幸いです。

0
Avatar
HANSA

kyoden さん

テーブルでしたか、失礼しました。

自作アクションボタンの作成が現実的かなと思います。

実装の流れは以下の通りです。

・レコード詳細画面の表示イベント( record.detail.show )を使用してボタンを設置
・sessionStorage にレコードの値保存 参考:https://developer.mozilla.org/ja/docs/Web/API/Window/sessionStorage ※
・ボタンクリックでレコード新規作成画面に遷移
・レコード作成画面の表示イベントで sessionStorage の値を取得
・値が存在すれば、その値をテーブル内のフィールドにコピー

※保存する情報に重要なものがある場合、使用しないことをおススメします。

0
Avatar
kyoden

HANSAさん

ご回答ありがとうございます。

作成日時とレコード番号はテーブルではない項目で、

普通のフィールドが他にもありますが、サブテーブルもあるアプリになります。

 

>※保存する情報に重要なものがある場合、使用しないことをおススメします。

この基準ですと、非常に重要な情報が入っているので、

他のプラグインと競合する可能性も考えると、使わないほうがよいということですね。。。

 

少し自分でも考えてみたのですが、

レコード番号:レコード番号、中間保存先:中間保存先、複製元レコード番号:複製元レコード番号

と3つフィールドを用意して、

①元々中間保存先にあった数値を複製元レコード番号にコピー

②レコード番号を中間保存先にコピー

みたいにすれば、可能かと思ったのですが、うまく動作しません。

すでにあるレコードを編集する場合はこちらは動いたのですが、

新規作成時と複製時は保存ができなかったです。

下記コードのどこを修正すればよいかわかればご教示いただきたいです。

大変お手数をおかけしますが、

よろしくお願いいたします。

(function () {
"use strict";
kintone.events.on([
'app.record.create.submit',
'app.record.edit.submit',
'app.record.index.edit.submit'], function (event) {

var record = event.record;
record['複製元レコード番号']['value'] = record['中間保存先']['value'];
record['中間保存先']['value'] = record['レコード番号']['value'];

return event;

});
})();

0
Avatar
HANSA

kyoden さん

WebStorage に関しては google 検索で「WebStorage 機密情報」等で検索すると情報が出てくるので、
一度ご確認してみると良いと思います。

> 他のプラグインと競合する可能性も考えると、使わないほうがよいということですね。。。

プラグインの競合に関しては、きちんと回避すれば問題ないと思います。

> ①元々中間保存先にあった数値を複製元レコード番号にコピー
> ②レコード番号を中間保存先にコピー
> みたいにすれば、可能かと思ったのですが、うまく動作しません。
> すでにあるレコードを編集する場合はこちらは動いたのですが、

以下の記事を参考に一度デバッグしてみてください。

https://developer.cybozu.io/hc/ja/articles/207613916 

恐らく値が入っていないフィールドを参照しようとしてエラーになっているのではないかと思います。

0
Avatar
kyoden

HANSAさん

ご回答ありがとうございます。

 

確かに値が入っていないとエラーになっていたようなので、

複製元レコード番号の初期値に0を入れてみて、if文を追加して下記のコードを組んでみました。

エラーメッセージも表示されず保存されるのですが、中間にも複製元にも全くコピーができません。

F12を押すとUncaught SyntaxError: Unexpected token '{'

という風になっていたのですが、原因がもし分かればご教示いただきたいです。

よろしくお願いいたします。

(function () {
"use strict";
kintone.events.on([
'app.record.create.submit',
'app.record.edit.submit',
'app.record.index.edit.submit'], function (event) {

var record = event.record;
if (record['複製元レコード番号']['value'] = 0 && record['中間']['value'] > record['複製元レコード番号']['value']){
record['複製元レコード番号']['value'] = record['中間']['value'];
record['中間']['value'] = record['レコード番号']['value'];
}
else if (record['複製元レコード番号']['value'] != 0 && record['中間']['value'] > record['複製元レコード番号']['value']){
record['中間']['value'] = record['レコード番号']['value'];
}
else (record['中間']['value'] = 0){
record['中間']['value'] = record['レコード番号']['value'];
}
return event;

});
})();
0
Avatar
HANSA

kyoden さん

↓の部分、if が抜けているみたいです。 else if (record['中間']['value'] = 0){ かと思います。

else (record['中間']['value'] = 0){
0
Avatar
kyoden

HANSAさん

恐らく原因が分かりました。

レコードの保存する直前にはレコード番号がまだないので、

ここが空欄になってエラーとなっていました。

この場合の対処がどう記述すれば分からなかったので、

プラグインを用いてレコード番号を中間にコピーするのは成功しました。

そこで、下記のようなコードに書き換えました。

実現したいこととしては、複製元レコードの初期値を「0」にしておいて、

複製元レコードの初期値が「0」かつ、中間の数値が複製元レコードの数値の値より大きい場合、

中間の数値を複製元レコードの数値にコピーしたいです。

ところが、下記コードではレコード自体は保存できますが、コピーができませんでした。

どこか間違っているかお分かりになれば御教示いただきたいです。

よろしくお願いいたします。

 

(function () {
"use strict";
kintone.events.on([
'app.record.create.submit',
'app.record.edit.submit',
'app.record.index.edit.submit'], function (event) {

var record = event.record;
if (record['複製元レコード番号']['value'] === 0 && record['中間']['value'] > record['複製元レコード番号']['value']){
record['複製元レコード番号']['value'] = record['中間']['value'];
}

return event;

});
})();
0
サインインしてコメントを残してください。