kintoneアプリのユーザー選択フィールドに、ユーザーマスターアプリ(別アプリ)から、
[エリア]の値が一致したレコードの[担当者]の値を取得しようとしていますが、うまくいきませんので、
アドバイスいただけると助かります。
下記のコードを試していますが、ブラウザのF12ボタンでjavascriptのエラーは表示されませんが、
実際に[担当者]に値が入りません。
console.log(apprecs); の箇所をF12で見ると、値が入ってきていないようです。
Javascript初心者のため、初歩的なミスをしていると思います。
特に、getUserMaster().then(function (resp) { という書き方が正しくない気がしていますが、
教えていただけると助かります。
//ユーザーマスターアプリから情報を取得する
function getUserMaster() {
var area = record['エリア']['value'];
//エリアの担当者を取得、paramにセット
var param = {
'app': 295, //ユーザーマスターアプリのアプリID
'query': 'エリア in ("' + area + '")'
};
//ユーザーマスターマスタアプリから対象レコードを取得する
return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', param);
}
//ユーザーマスタアプリから該当のレコードを取得
getUserMaster().then(function (resp) {
var apprecs = resp.records;
console.log(apprecs);
record['担当者'].value = [{
code: apprecs[0]['担当者'].value[0].code
}];
return kintone.Promise.resolve();
});
23件のコメント
nagayamaさん。こんばんわ!
.then(function (resp)ではPromise処理をされていますが、こちらは理由がありますでしょうか?
特になければ、以下のような感じで動くと思います。
ユーザー選択は配列になっているので、イコールではなくpushするのがコツです(^^)/
Ryokke様
ありがとうございます。よくわからずにPromiseにしておりました。
教えていただいたコードで動かすと、400 Bad Request となってしまいました。
エラーになったURLのクエリ部分をデコードすると、間違っていないようにも見えるのですが、どこが悪いのか見当つきますでしょうか。
400 Bad Requestでしたら、クエリの部分のような気もしますが、
マスターアプリのエリアのフィールドコードとフィールド型式はどのようになっていますでしょうか?
迅速なレスありがとうございます。
マスターアプリの[エリア]フィールドですが、
フィールドコード:エリア
フィールド形式:ドロップダウン
となっていますので、間違っていない気がしています。。
以下の部分かもしれません!
たびたびありがとうございます。
ご指摘の箇所を修正しましたが、まだユーザー情報が入りません。
var user = apprecs['担当者'].value[0];
の後に、console.log(user); を見ると、値は正常に取得できているので、
function setUser の箇所でユーザー情報をpushしようとしているところが、うまくいっていないのかもしれません。
アクセス権の設定も問題無さそうです。
引き続き色々試してみますが、何かお気付きの点がありましたら、アドバイスいただけると助かります。
以下の部分を変えてみてはどうでしょうか?
横から失礼します。
getUserMasterをreturnするだけで値が設定されるかと思います。
ありがとうございます。お返事が遅くなり、申し訳ありません。
その後試していますが、まだうまくいっていません。
Ryokke様
そちらのとおり変更してみましたが、値がセットされませんでした。
他に試すべきことがありましたら、ご教示いただけると助かります。
Ryoji様
アドバイスありがとうございます。
申し訳ありませんが初心者のため、具体的にどこでどうreturnを記述するか分かっていません。
ご教示いただけると助かります。
return kintone.Promise.resolve();の1行を消して、
以下のように書き換えて実行結果を確認していただけますか。
getUserMaster().then(function (resp) {
↓
return getUserMaster().then(function (resp) {
Ryoji様
ありがとうございます。
しかし、下記のように書き換えてみましたが、うまくいきません。
度々申し訳ありませんが、どこが間違っていますでしょうか。
ryo様
お忙しい中すみません、こちら少し急いでいおり、動かず困っています。
アドバイスいただけると助かります。
record['担当者'].value = [{code: apprecs[0][担当者].value[0].code}]
↓
record['担当者'].value = [{code: apprecs[0]['担当者'].value[0].code}]
2つ目の担当者をシングルクォーテーションでくくっていないからだと思いますが、
エラーになっていないかコンソールでご確認お願いします。
私の環境で以下のとおりに記述していますが、正常にユーザーが設定されています
ryo様
お返事ありがとうございます。
担当者のシングルクォーテーション抜けについて、失礼いたしました。
ただ、下記の通りシングルクォーテーションを付けましたが、やはりユーザーが設定されませんでした。
return以下の記述が先のryoさんの記述と全く違うので、全体的に記述を見直したほうがよいでしょうか?
度々申し訳ありませんが、どこをどう修正すればよいか、アドバイスいただけると助かります。
一点漏れていました。
ユーザーマスタアプリのからレコードを取得する際に、複数のレコードを取得できてしまうことがあると思いますので、
以下のようにして実行していただけますか。
var apprecs = resp.record;
↓
var apprecs = resp.records;
あわせてデベロッパーツール等で、以下2点のご確認をお願いします
・エラーが発生していないこと
・ユーザーマスタアプリから正しくレコードを取得できていること
ryo様
ありがとうございます。
まず、recordsについては修正いたしました。
ディベロッパーツールで確認したところ、エラーは発生していませんが、apprecsの値が空になっていましたので、ユーザーマスタアプリからレコードを取得できていないようです。
ユーザーマスタアプリには、paramで指定したクエリに該当するレコードが、間違いなく1件存在していますので、何らかの理由でレコードが取得できなていないようですが、どこが間違っているのかわからない状態です。
アプリ内のデータを確認できないため、こちらでも明確な答えをお伝え出来ませんが、
以下のようにareaの指定をハードコーディングして実行した結果はどのようになりますか
↓
ryo様
ご提示いただいたとおり記述したところ、マスタアプリからユーザー情報が入りました!
この度は、何度も親切にご教示いただき、本当にありがとうございました。助かりました。
それではareaに格納した値に誤りがあったと思いますので、その辺を考慮して修正すればよいかと思います。
ryo様
言葉足らずですみません、areaの部分をハードコーディングではなく「area」のままで想定通り値が入りましたので、これで完璧です。
ありがとうございました。
Ryoji様
お世話になります。
以前教えていただいたこちらの件ですが、ユーザー選択フィールドに複数ユーザーを入れるケースがありまして、
色々と試しているのですが、うまく複数ユーザーが入りません。
度々申し訳ございませんが、複数ユーザーにも対応する記述をアドバイスいただけないでしょうか。
複雑であれば、ひとまず3ユーザーまで入る形でも問題ありません。
ユーザー選択のvalueには配列を代入する必要がありますので、
0番目の要素を設定してた部分を、APIで取得したユーザーに変更するだけです
event.record.ユーザー選択.value = [resp.records[0].ユーザー選択.value[0]];
↓
event.record.ユーザー選択.value = resp.records[0].ユーザー選択.value
Ryoji様
早速のご回答ありがとうございます。
おかげさまで、複数ユーザーが入るように実装できました。非常に助かりました。