kintone.proxyを使い外部APIより取得した情報がフィールドに反映されません。

前提・実現したいこと

OpenWeatherMapのAPIを使い天気を取得しようとしています。
具体的には、
・[郵便番号]フィールドに郵便番号(ハイフンあり)を記入
・「天気を取得する」というボタン(スペースに用意)をクリック
・[天気]フィールドに該当地点の現在の天気が表示される

 

発生している問題

天気情報の取得まではうまく行きます(コンソールで確認するとrecords.record.天気.valueには値が入っています)が、kintoneのフィールドに反映されません。

(function() {
"use strict";


kintone.events.on(['app.record.detail.show','app.record.create.show'], function(event) {
var getWeatherBtn = document.createElement('button');
getWeatherBtn.id = 'get_weather_btn';
getWeatherBtn.innerText = '天気を取得する';
getWeatherBtn.onclick = function () {

var records = kintone.app.record.get();
var zipCode = records.record.郵便番号.value;
var appId = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
var owmUrl = '[https://api.openweathermap.org/data/2.5/weather?q=](https://api.openweathermap.org/data/2.5/weather?q=)' + zipCode + '&APPID=' + appId ;

return new kintone.Promise(function(resolve, reject) {
kintone.proxy(owmUrl, 'GET', {}, {}, function(body, status, headers){
if (status >= 200 && status < 300) {
var json = body.replace(/^\s+|\s+$/g,'');
var result = JSON.parse(json);
var todayWeather = result.weather[0].main;
records.record.天気.value = todayWeather;
resolve(event);
}

},function(error) {
//error
console.log(error);
resolve(event);
});
});
};

kintone.app.record.getSpaceElement('get_weather_btn_field').appendChild(getWeatherBtn);

});
})();

どなたか解決策をご教示いただけますと幸いです。よろしくお願いいたします。

Taiki Tsujimoto さん

ボタンクリックで、event.record を書き換えても画面には反映されません。

kintone.app.record.get で、最新のレコードを取得し
kintone.app.record.set で画面に反映します。

 

records.record.天気.value = todayWeather;
の直後のresolve()はこの場合意味がないように思います。

kintone.app.record.set()
を使ってレコード反映すれば良いかと。

onclickの関数内でeventをreturnしても、
kintone.events.on()の戻り値にはならないので、
画面には反映されないのです。

って書いてたら先越されちゃった(笑)

rex0220 様

赤座 久樹 様

 

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

kintone.app.record.set を使用したところ、無事画面に反映されるようになりました。

Promiseの記述に問題があるとばかり思ってハマっていました、、精進します。

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