Kintone APIで取得したデータをAPI範囲外で使用したい

お世話になっております。先日よりKintoneを使用させていただいており、KintoneとJavascriptは初心者です。

 

Kintone APIで取得したデータをもとにAPI外で条件分岐をしたく、非同期処理回避のPromise処理を試しましたが、他記事

「このように kintone.api() はコールバック関数を省略するとPromiseオブジェクトが返り値になります。」

の説明の意味が分からず困っています。

 

具体的には以下の画像の通りです。

 

 

コード:

(function(){
“use strict”;
kintone.events.on([‘app.record.create.show’, ‘app.record.edit.show’],function(event) {
var record = event.record;

//練習生記入部分
record[‘練習生’].disabled = true;
record[‘総飛行時間’].disabled = true;
record[‘総飛行回数’].disabled = true;
record[‘単独飛行時間’].disabled = true;
record[‘単独飛行回数’].disabled = true;
record[‘同型機による飛行時間’].disabled = true;
record[‘同型機による飛行回数’].disabled = true;
record[‘前回フライトからの経過日数’].disabled = true;
record[‘失速’].disabled = true;
record[‘サブG’].disabled = true;
record[‘索切れ’].disabled = true;
record[‘同課目実施回数’].disabled = true;

var user_group,
group_ary_count,
user_group_ary = new Array(0);
var user = kintone.getLoginUser();
/*–ユーザーの所属組織のコードを表示する–*/
return kintone.api(‘/v1/user/groups’,‘GET’,{
code:user.code
},function(resp){
//所属グループの数を数える
group_ary_count = resp.groups.length;
//「学生」グループに所属していた場合、「評価(操縦教員記入)」欄を編集不可にする
for( var i = 0; i < group_ary_count; i++ ){
user_group = resp.groups[i].code;
user_group_ary.push(user_group);
}
alert(‘あなたが所属するグループは(apiの中)’ + user_group_ary[0]);
return user_group_ary;
return event;
});
//alert(‘あなたが所属するグループは(apiの外)’ + arr.join(‘’));
alert(‘あなたが所属するグループは(apiの外)’ + user_group_ary[0]);
alert(‘あなたが所属するグループは(apiの外)’ + user_group_ary[1]);
alert(‘あなたが所属するグループは(apiの外)’ + user_group_ary[2]);
alert(‘あなたが所属するグループは(apiの外)’ + user_group_ary[3]);
//ログインユーザーが教官でない場合、「評価(操縦教員記入)」欄を編集不可にする
if(arr.indexOf(“Instructors”) == -1){
record[‘評価_上昇’].disabled = true;
record[‘コメント_上昇’].disabled = true;
}
//ボタン
var mySpaceFieldButton = document.createElement(‘button’);
mySpaceFieldButton .id=‘my_space_field’;
mySpaceFieldButton .innerText=‘情報取得’;

// ボタンクリック時の処理
mySpaceFieldButton .onclick=function(){
window.confirm(‘いま押しましたね?’)
}

//メニューの右側の空白部分にボタンを設置
kintone.app.record.getSpaceElement(‘my_space_field’).appendChild(mySpaceFieldButton);
return event;
});

})();

 

「Promiseオブジェクトが戻り値になる」とはどういうことでしょうか。また、今回のコードの場合、具体的にどのように記述しなおせば良いでしょうか。

 

なお表題の件、以下記事を参考にさせていただき実践しておりましたが、経験が浅く理解にはいたりませんでした。

kintone APIを使用して抽出したデータを変数に待避させたい。

 

知識不足のため、根本的に理解が必要な個所があれば合わせてご教授ください。別途勉強させていただきます。

>「Promiseオブジェクトが戻り値になる」とはどういうことでしょうか。

実際にコンソール画面で、コールバック関数を省略して、REST API を実行してみましょう。

Chorme で、kintone アプリの詳細画面を開き、デバッグツールのコンソール画面で REST API を実行できます。

※参考 kintone 開発で Chrome デベロッパーツールを使おう

下記を入力して、Enter キーをたたくと、API が実行されて Promise オブジェクトが返ってきます。

「Promiseオブジェクトが戻り値になる」は、そのままの意味ですね。

API の結果が返ってくると、Promise オブジェクトをクリックして、API の返り値を見ることができます。

kintone.api('/v1/user/groups','GET',{code:kintone.getLoginUser().code});

>また、今回のコードの場合、具体的にどのように記述しなおせば良いでしょうか。

現在のコードでは、「return kintone.api」の後「//ボタン var mySpaceFieldButton = 」以降は、実行されません。

これは「return kintone.api」で、イベント処理の関数から抜けちゃうためです。

対策としては、単純に関数から抜ける前に処理を書くだけです。

下記は、切り貼りしただけなので検証をお願いします。

あと Alert よりも console.log のほうが便利なので、デバッグツールの使い方を覚えると開発効率が上がります。

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

//練習生記入部分
record['練習生'].disabled = true;
record['総飛行時間'].disabled = true;
record['総飛行回数'].disabled = true;
record['単独飛行時間'].disabled = true;
record['単独飛行回数'].disabled = true;
record['同型機による飛行時間'].disabled = true;
record['同型機による飛行回数'].disabled = true;
record['前回フライトからの経過日数'].disabled = true;
record['失速'].disabled = true;
record['サブG'].disabled = true;
record['索切れ'].disabled = true;
record['同課目実施回数'].disabled = true;

var user_group,
group_ary_count,
user_group_ary = new Array(0);
var user = kintone.getLoginUser();
/*--ユーザーの所属組織のコードを表示する--*/
return kintone.api('/v1/user/groups', 'GET', {
code: user.code
}, function (resp) {
//所属グループの数を数える
group_ary_count = resp.groups.length;
//「学生」グループに所属していた場合、「評価(操縦教員記入)」欄を編集不可にする
for (var i = 0; i < group_ary_count; i++) {
user_group = resp.groups[i].code;
user_group_ary.push(user_group);
}
// alert('あなたが所属するグループは(apiの中)' + user_group_ary[0]);
console.log('user_group_ary', user_group_ary);

//ログインユーザーが教官でない場合、「評価(操縦教員記入)」欄を編集不可にする
if (user_group_ary.indexOf("Instructors") == -1) {
record['評価_上昇'].disabled = true;
record['コメント_上昇'].disabled = true;
}
//ボタン
var mySpaceFieldButton = document.createElement('button');
mySpaceFieldButton.id = 'my_space_field';
mySpaceFieldButton.innerText = '情報取得';

// ボタンクリック時の処理
mySpaceFieldButton.onclick = function () {
window.confirm('いま押しましたね?')
}

//メニューの右側の空白部分にボタンを設置
kintone.app.record.getSpaceElement('my_space_field').appendChild(mySpaceFieldButton);
return event;
});
});

})();

rex0220様

ご指摘の通り修正したところ、正常に動作しました。

デバッグ方法ももう一度見直してみます。お忙しいところありがとうございました。