新規投稿
フォローする

別アプリから値を取得出来ない

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();
});

0

23件のコメント

Avatar
Ryokke

 

nagayamaさん。こんばんわ!

.then(function (resp)ではPromise処理をされていますが、こちらは理由がありますでしょうか?

特になければ、以下のような感じで動くと思います。

ユーザー選択は配列になっているので、イコールではなくpushするのがコツです(^^)/

// 1エリア1担当者だと仮定して書いています。

(function() {
'use strict';
kintone.events.on(kintoneイベント, function(e) {
var record = e.record;
var area = record['エリア']['value'];

var param = {
'app': 295,
'query': 'エリア in ("' + area + '")'
};

kintone.api(kintone.api.url('/k/v1/record', true), 'GET', param , function(resp) {
var apprecs = resp.records[0];
   var user = apprecs['担当者'].value[0];
setUser(user);
});

function setUser(user) {
record['担当者'].value.push({user});
});

return e;
});
});
Ryokkeにより編集されました
0
Avatar
nagayama

Ryokke様

ありがとうございます。よくわからずにPromiseにしておりました。

教えていただいたコードで動かすと、400 Bad Request となってしまいました。

エラーになったURLのクエリ部分をデコードすると、間違っていないようにも見えるのですが、どこが悪いのか見当つきますでしょうか。

0
Avatar
Ryokke

400 Bad Requestでしたら、クエリの部分のような気もしますが、

マスターアプリのエリアのフィールドコードとフィールド型式はどのようになっていますでしょうか?

0
Avatar
nagayama

迅速なレスありがとうございます。

マスターアプリの[エリア]フィールドですが、

フィールドコード:エリア

フィールド形式:ドロップダウン

となっていますので、間違っていない気がしています。。

1
Avatar
Ryokke

以下の部分かもしれません!

kintone.api(kintone.api.url('/k/v1/record', true), 'GET', param , function(resp)

kintone.api(kintone.api.url('/k/v1/records', true), 'GET', param , function(resp)
0
Avatar
nagayama

たびたびありがとうございます。

ご指摘の箇所を修正しましたが、まだユーザー情報が入りません。

var user = apprecs['担当者'].value[0];

の後に、console.log(user); を見ると、値は正常に取得できているので、

function setUser の箇所でユーザー情報をpushしようとしているところが、うまくいっていないのかもしれません。

アクセス権の設定も問題無さそうです。

引き続き色々試してみますが、何かお気付きの点がありましたら、アドバイスいただけると助かります。

0
Avatar
Ryokke

以下の部分を変えてみてはどうでしょうか?

function setUser(user) {
var record = kintone.app.record.get().record;
record['担当者'].value.push({user});
kintone.app.record.set({record: record});
});
0
Avatar
Ryoji

横から失礼します。
getUserMasterをreturnするだけで値が設定されるかと思います。

0
Avatar
nagayama

ありがとうございます。お返事が遅くなり、申し訳ありません。

その後試していますが、まだうまくいっていません。

 

Ryokke様

そちらのとおり変更してみましたが、値がセットされませんでした。

他に試すべきことがありましたら、ご教示いただけると助かります。

 

Ryoji様

アドバイスありがとうございます。

申し訳ありませんが初心者のため、具体的にどこでどうreturnを記述するか分かっていません。

ご教示いただけると助かります。

 

0
Avatar
Ryoji

return kintone.Promise.resolve();の1行を消して、
以下のように書き換えて実行結果を確認していただけますか。

getUserMaster().then(function (resp) {

return getUserMaster().then(function (resp) {

0
Avatar
nagayama

Ryoji様

ありがとうございます。

しかし、下記のように書き換えてみましたが、うまくいきません。

度々申し訳ありませんが、どこが間違っていますでしょうか。

 

0
Avatar
nagayama

ryo

お忙しい中すみません、こちら少し急いでいおり、動かず困っています。

アドバイスいただけると助かります。

0
Avatar
Ryoji

record['担当者'].value = [{code: apprecs[0][担当者].value[0].code}]

record['担当者'].value = [{code: apprecs[0]['担当者'].value[0].code}]


2つ目の担当者をシングルクォーテーションでくくっていないからだと思いますが、
エラーになっていないかコンソールでご確認お願いします。
私の環境で以下のとおりに記述していますが、正常にユーザーが設定されています

0
Avatar
nagayama

ryo様

お返事ありがとうございます。

担当者のシングルクォーテーション抜けについて、失礼いたしました。

ただ、下記の通りシングルクォーテーションを付けましたが、やはりユーザーが設定されませんでした。

return以下の記述が先のryoさんの記述と全く違うので、全体的に記述を見直したほうがよいでしょうか?

度々申し訳ありませんが、どこをどう修正すればよいか、アドバイスいただけると助かります。

0
Avatar
Ryoji

一点漏れていました。
ユーザーマスタアプリのからレコードを取得する際に、複数のレコードを取得できてしまうことがあると思いますので、
以下のようにして実行していただけますか。

var apprecs = resp.record;

var apprecs = resp.records;

あわせてデベロッパーツール等で、以下2点のご確認をお願いします
・エラーが発生していないこと
・ユーザーマスタアプリから正しくレコードを取得できていること

0
Avatar
nagayama

ryo様

ありがとうございます。

まず、recordsについては修正いたしました。

ディベロッパーツールで確認したところ、エラーは発生していませんが、apprecsの値が空になっていましたので、ユーザーマスタアプリからレコードを取得できていないようです。

ユーザーマスタアプリには、paramで指定したクエリに該当するレコードが、間違いなく1件存在していますので、何らかの理由でレコードが取得できなていないようですが、どこが間違っているのかわからない状態です。

0
Avatar
Ryoji

アプリ内のデータを確認できないため、こちらでも明確な答えをお伝え出来ませんが、
以下のようにareaの指定をハードコーディングして実行した結果はどのようになりますか

 
'エリア in ("' + area + '")'
'エリア in ("関東")'
 
0
Avatar
nagayama

ryo様

ご提示いただいたとおり記述したところ、マスタアプリからユーザー情報が入りました!

この度は、何度も親切にご教示いただき、本当にありがとうございました。助かりました。

0
Avatar
Ryoji

それではareaに格納した値に誤りがあったと思いますので、その辺を考慮して修正すればよいかと思います。

0
Avatar
nagayama

ryo様

言葉足らずですみません、areaの部分をハードコーディングではなく「area」のままで想定通り値が入りましたので、これで完璧です。

ありがとうございました。

1
Avatar
nagayama

Ryoji様

お世話になります。

以前教えていただいたこちらの件ですが、ユーザー選択フィールドに複数ユーザーを入れるケースがありまして、

色々と試しているのですが、うまく複数ユーザーが入りません。

度々申し訳ございませんが、複数ユーザーにも対応する記述をアドバイスいただけないでしょうか。

複雑であれば、ひとまず3ユーザーまで入る形でも問題ありません。

0
Avatar
Ryoji

ユーザー選択のvalueには配列を代入する必要がありますので、
0番目の要素を設定してた部分を、APIで取得したユーザーに変更するだけです

event.record.ユーザー選択.value = [resp.records[0].ユーザー選択.value[0]];

event.record.ユーザー選択.value = resp.records[0].ユーザー選択.value

0
Avatar
nagayama

Ryoji様

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

おかげさまで、複数ユーザーが入るように実装できました。非常に助かりました。

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