# フィールド間のコピー

**URL:** <https://community.cybozu.dev/t/topic/3033>\
**Category:** kintone 開発相談\
**Created:** [2018 年 4 月 29 日午後 4:30 UTC](https://community.cybozu.dev/t/topic/3033 "2018-04-29T16:30:24Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account710](https://avatars.discourse-cdn.com/v4/letter/l/91b2a8/32.png) [@Legacy\_Account710](https://community.cybozu.dev/u/Legacy_Account710)\
**Post date:** [2018 年 4 月 29 日午後 4:30 UTC](https://community.cybozu.dev/t/topic/3033/1 "2018-04-29T16:30:24Z")

</div>

ボタンをクリックして、TEST1のフィールドの値をTEST2のフィールドへコピーしたいです。

[こちら](https://community.cybozu.dev/hc/ja/articles/202086734)と[こちら](https://community.cybozu.dev/hc/ja/community/posts/206086536--%E6%96%87%E5%AD%97%E5%88%97%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E5%80%A4%E3%82%92%E8%87%AA%E4%BD%9C%E3%81%97%E3%81%9F%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%81%AB%E3%82%B3%E3%83%94%E3%83%BC%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-)を見ながらどうにかTEST1のフィールドの値を取得するところまでは出来たのですが、取得した値をTEST2のフィールドへ入れる書き方が分かりません。本来は複数の値をコピーするつもりですが、一つもできないので先に進めない状況です。

超初心者です。ご教授頂けますと幸いです。

何卒よろしくお願いします。

ーーーーーーーーーーーーーーーーーーーー

(function() {  
“use strict”;  
kintone.events.on(‘app.record.detail.show’, function(event) {  
var mySpaceFieldButton = document.createElement(‘button’);  
mySpaceFieldButton.id = ‘copy\_button’;  
mySpaceFieldButton.innerHTML = ‘copy’;  
mySpaceFieldButton.onclick = function () {

var fieldValue = ‘’;  
var rec = kintone.app.record.get();  
if (rec) {  
fieldValue = rec.record.test1.value;  
}  
record.test2.value = fieldValue; ←ココがうまくいきません  
}  
kintone.app.record.getSpaceElement(‘my\_space\_field’).appendChild(mySpaceFieldButton);  
});  
})();

ーーーーーーーーーーーーーーーーーーーー

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1986](https://avatars.discourse-cdn.com/v4/letter/l/f4b2a3/32.png) [@Legacy\_Account1986](https://community.cybozu.dev/u/Legacy_Account1986)\
**Post date:** [2018 年 5 月 2 日午前 5:58 UTC](https://community.cybozu.dev/t/topic/3033/2 "2018-05-02T05:58:51Z")

</div>

山崎さん、こんにちは。

考え方を含めてお答えします。

レコードの値の取得が「kintone.app.record.get」で実現できていますね。  
同じように値のセットができるAPIがないか、&nbsp;[JavaScript APIの一覧](https://community.cybozu.dev/hc/ja/articles/360000361686)&nbsp;から探してみてください。

「値の取得」の下に「値のセット」（kintone.app.record.set）が見つかるかと思います。

[kintone.app.record.set](https://community.cybozu.dev/hc/ja/articles/201942014#step4) の詳細を確認してみると、利用できる画面は下記となっています。

- レコード追加
- レコード編集

山崎さんのコードでは、レコード詳細画面（‘app.record.detail.show’）で動くように書かれているので、  
「kintone.app.record.set」を使うことはできません。

※copyボタンをレコード詳細画面ではなくレコード追加・編集画面で使いたい、ということでしたらこのAPIが使えます。  
具体的なサンプルコードはこのコメントの最後に記載してあります。

&nbsp;

他の方法を探してみましょう。  
[JavaScript APIの一覧](https://community.cybozu.dev/hc/ja/articles/360000361686)には、他にフィールド値を更新できそうなものがないので、[REST APIの一覧](https://community.cybozu.dev/hc/ja/articles/360000313406) を確認してみます。  
[レコード（１件） 更新](https://community.cybozu.dev/hc/ja/articles/201941784#step1) が使えそうです。（REST API 一覧（レコード）の３行目）

[レコードの更新（１件）](https://community.cybozu.dev/hc/ja/articles/201941784#step1)のページを開き、「JavaScriptサンプル」という項目を確認してください。サンプルコードが載っています。

```
var body = {
"app": 1,
"id": 1001,
"record": {
"文字列__1行": {
"value": "ABC"
}
}
};

kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body, function(resp) {
// success
console.log(resp);
}, function(error) {
// error
console.log(error);
});

```

bodyという変数の中に、対象レコードの情報を入れて渡していますね。（詳細はドキュメントを読んでください）  
アプリID、レコードID、更新するフィールド名とその値が指定されているので、自分の環境に合わせて書き換えてください。  
※アプリIDとレコードIDは、それぞれ取得するAPIがあるので[JavaScript APIの一覧](https://community.cybozu.dev/hc/ja/articles/360000361686)&nbsp;から探してみてください。

これでレコードの値を更新できます。が、今開いている画面は自分でリロードしないと表示が変わらない、という状態になりますので、  
更新できたら画面のリロード処理も入れてあげてください。

```
(function() {
"use strict";
kintone.events.on(['app.record.detail.show'], function(event) {
var mySpaceFieldButton = document.createElement('button');
mySpaceFieldButton.id = 'copy_button';
mySpaceFieldButton.innerHTML = 'copy2';
mySpaceFieldButton.onclick = function() {

var fieldValue = '';
var rec = kintone.app.record.get();
if (rec) {
fieldValue = rec.record.test1.value;
}

var body = {
"app": kintone.app.getId(),
"id": kintone.app.record.getId(),
"record": {
"test2": {
"value": fieldValue
}
}
};

kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body, function(resp) {
// success
console.log(resp);
location.reload(true); // 画面をリロード
}, function(error) {
// error
console.log(error);
});

}
kintone.app.record.getSpaceElement('my_space_field').appendChild(mySpaceFieldButton);
});
})();

```

&nbsp;

なお、レコード編集中にボタン操作で値を反映したいという場合のサンプルは下記のとおりです。  
[レコード追加画面の表示イベント](https://community.cybozu.dev/hc/ja/articles/201941984#step1)、[編集画面の表示イベント](https://community.cybozu.dev/hc/ja/articles/202166270#step1)を利用して&nbsp;[kintone.app.record.set](https://community.cybozu.dev/hc/ja/articles/201942014#step4)&nbsp;で値の書き換えができます。

```
(function() {
"use strict";
kintone.events.on(['app.record.edit.show', 'app.record.create.show'], function(event) {
var mySpaceFieldButton = document.createElement('button');
mySpaceFieldButton.id = 'copy_button';
mySpaceFieldButton.innerHTML = 'copy';
mySpaceFieldButton.onclick = function() {

var fieldValue = '';
var rec = kintone.app.record.get();
if (rec) {
fieldValue = rec.record.test1.value;
}
rec.record.test2.value = fieldValue;
kintone.app.record.set(rec);
}
kintone.app.record.getSpaceElement('my_space_field').appendChild(mySpaceFieldButton);
});
})();

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account710](https://avatars.discourse-cdn.com/v4/letter/l/91b2a8/32.png) [@Legacy\_Account710](https://community.cybozu.dev/u/Legacy_Account710)\
**Post date:** [2018 年 5 月 3 日午後 11:40 UTC](https://community.cybozu.dev/t/topic/3033/3 "2018-05-03T23:40:12Z")

</div>

たまごさん、分かりやすくご丁寧なご説明ありがとうございます！

kintone.app.record.set、気になっており、コードの中に入れて  
こねくり回してみたりしていました。

またapp.record.detail.show←が違うのかなと思いedit.showやcreate.showなども試していたおですが、根本的な認識が甘かったです。

レコードとフィールドの認識が曖昧で、record＝フィールド？ん？いや違うのか？、とはっきりしないままやっており、  
アプリID、レコードID、フィールド、をちゃんと指定してあげないといけないことに気付けませんでした。

まだ他の方のコードのコピペして弄る程度のレベルですが、  
たまごさんに頂いたサンプルコードをしっかり物にしたいと思います。

リロード処理のオマケもありがとうございます！  
今後ともよろしくお願い致します。

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1946](https://avatars.discourse-cdn.com/v4/letter/l/e47774/32.png) [@Legacy\_Account1946](https://community.cybozu.dev/u/Legacy_Account1946)\
**Post date:** [2018 年 9 月 11 日午前 8:13 UTC](https://community.cybozu.dev/t/topic/3033/4 "2018-09-11T08:13:13Z")

</div>

横から失礼致します。

このケースですと、TEST2のフィールドにコピーされた文字列を編集することも可能でしょうか？

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1986](https://avatars.discourse-cdn.com/v4/letter/l/f4b2a3/32.png) [@Legacy\_Account1986](https://community.cybozu.dev/u/Legacy_Account1986)\
**Post date:** [2018 年 9 月 11 日午前 10:06 UTC](https://community.cybozu.dev/t/topic/3033/5 "2018-09-11T10:06:30Z")

</div>

flowersさん

はい、上のコメントのコードだと編集可能になっています。

TEST2フィールドを編集不可にしたいのなら、編集するときのイベントでフィールドを編集不可の制御をすることができます。  
イベントのドキュメントで「フィールドの値に応じた制御」という項目に  
「フィールドの編集可／不可を設定する」が書かれていたら、そのイベントでフィールド編集の可否を変更できます。

レコードを編集するときに特定のフィールドだけ編集不可にしたいのであれば、下記イベントが対象となります。

- [レコード追加画面が表示された時のイベント（app.record.create.show）](https://community.cybozu.dev/hc/ja/articles/201941984#step1)
- [レコード編集画面が表示された時のイベント（app.record.edit.show）](https://community.cybozu.dev/hc/ja/articles/202166270#step1)
- [レコード一覧画面のインライン編集開始時イベント（app.record.index.edit.show）](https://community.cybozu.dev/hc/ja/articles/201941964#step3)

各イベントの説明を読んでいくと、「フィールドの値に応じた制御」に  
「フィールドの編集可／不可を設定する をご参照ください。」と書かれていると思うので、リンク先（[例](https://community.cybozu.dev/hc/ja/articles/201941984#step5)）を見てみてください。

サンプルに書かれている通り、フィールドの disabled に&nbsp;true を設定して return することでフィールドを編集不可にできます。

&nbsp;

test2フィールドを編集不可にするなら、こんな感じですね。

```
(function () {
"use strict";
var editEvents = [
'app.record.create.show',
'app.record.edit.show',
'app.record.index.edit.show'
];
kintone.events.on(editEvents, function (event) {
var record = event.record;
record['test2'].disabled = true;
});
return event;
})();

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1946](https://avatars.discourse-cdn.com/v4/letter/l/e47774/32.png) [@Legacy\_Account1946](https://community.cybozu.dev/u/Legacy_Account1946)\
**Post date:** [2018 年 9 月 14 日午前 9:37 UTC](https://community.cybozu.dev/t/topic/3033/6 "2018-09-14T09:37:37Z")

</div>

たまごさん

ありがとうございます！編集可能としたいので、上の例を参考にしてみます。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2024 年 9 月 6 日午前 6:48 UTC](https://community.cybozu.dev/t/topic/3033/7 "2024-09-06T06:48:44Z")

</div>

クローズされました: 2024 年 9 月 6 日午前 6:48 UTC

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