レコード詳細画面を表示した際に、文字列のフィールド「ユーザー名」に
ログインユーザーの名前が自動入力されるようにしたいと考えています。
現状では以下のコードでレコード作成時にログインユーザーの名前が
自動入力されるようにはできました。
そこで"app.record.create.show"を"app.record.detail.show"に変更すれば、
レコード詳細画面を表示した際にログインユーザーの名前が自動入力されると
思ったのですが、何も入力されません。
どのように修正が必要かご教示いただけないでしょうか。
kintone.events.on(["app.record.create.show"], function(event){
var record = event.record;
var loginUser = kintone.getLoginUser()['name'];
record['ユーザー名']['value'] = loginUser;
return event;
});
app.record.create.showのeventオブジェクトでフィールドの値を書き換えることが出来るのに対し、
app.record.detail.showはeventオブジェクトで実行できる操作はありません。
app.record.detail.showでフィールドの値を書き換えるにはREST APIを使わないと無理だと思います。
サンプル書いてみました
(function () {
“use strict”;
kintone.events.on(‘app.record.detail.show’, function (event) {
varlogin_code=kintone.getLoginUser().code;
//アプリID取得
varappid=kintone.app.getId();
//レコード番号取得
varrecid=kintone.app.record.getId();
varbody= {
“app”:appid,
“id”:recid,
“record”: {
“ユーザー名”: {
“type”:“USER_SELECT”,
“value”: [
{
“code”:login_code
}
]
}
}
};
kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘PUT’, body, function (resp) {
// success
console.log(resp);
}, function (error) {
// error
console.log(error);
});
});
})();
Javascriptをインデントつけた形でUPしたかったのですが、方法がわからず。
見づらい形になってしまって申し訳ありません。ちなみにどうやってJavascript部分を張り付けされたのですか?
Aiko Yamamoto様
ご回答いただきありがとうございます。
サンプルをご提示いただき大変助かりました。
1点追加で確認をしたいのですが、フィールド「ユーザー名」に別のユーザ名が入力されていた場合、
レコード詳細画面を更新するか、2度開かないとログインユーザ名が入力されないようでした。
これを開いた直後に更新するか、または別のユーザがレコード詳細画面を閉じたら「ユーザー名」が
空になるようにすることはできるのでしょうか。
インデントの付け方ですが、コメント欄の数の部分から設定できます。
インデントの付け方、ありがとうございます。
>レコード詳細画面を更新するか、2度開かないとログインユーザ名が入力されない
レコードは更新はされているけど、リロードしないと更新したことを確認できないのだと思います。
>ユーザがレコード詳細画面を閉じたら「ユーザー名」が空になるようにすることはできるのでしょうか。
レコード詳細画面を閉じたらというイベントは無いと思うので、私には実現方法を思いつきません。
ユーザー名とログインユーザー名を比較して、異なる場合はユーザー名更新+画面リロードでは、
kuさんのやりたい事とは異なりますでしょうか。
こんな感じ
(function () {
"use strict";
kintone.events.on('app.record.detail.show', function (event) {
var record = event.record;
var login_code = kintone.getLoginUser().code;
var Selected_User = record.ユーザー名.value[0].code;
if (Selected_User != login_code) {
//アプリID取得
var appid = kintone.app.getId();
//レコード番号取得
var recid = kintone.app.record.getId();
var body = {
"app": appid,
"id": recid,
"record": {
"ユーザー名": {
"type": "USER_SELECT",
"value": [
{
"code": login_code
}
]
}
}
};
kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body, function (resp) {
// success
console.log(resp);
}, function (error) {
// error
console.log(error);
});
location.reload();
}
});
})();
Aiko Yamamoto様
ご回答いただきありがとうございます。
画面を自動でリロードする方法は考えつきませんでした。
確かにご提案いただいた機能で意図した動作とすることができました。
手厚い対応に感謝いたします。大変助かりました。
今後とも何卒よろしくお願い申し上げます。