本日の日付を保持したい

初めて質問させていただきます。よろしくお願いいたします。

 

レコード内に、本日の日付を保持するフィールドを設けたいと思っています。

様々調べ、javascriptを組んでみたのですが、うまくいきません。

 

javascriptに関してかなりの初心者なので、まったく見当違いな組み方かもしれませんが、

ご覧いただき、不具合箇所をご教示いただけますと幸いです。

 

(function () {
“use strict”;
// ロケールを初期化
moment.locale(‘ja’);

kintone.events.on(‘app.record.index.show’, function(e) {
// レコード一覧画面表示イベント
// 日付データを取得
var date = kintone.app.record.get().record[‘本日日付’].value;
// 日付をフォーマット
moment(date).format(‘YYYY/MM/DD’);
});

})();

 

・フィールドコート「本日日付」としていますが、

フィールド種類は、『日付』フィールドで良いのでしょうか?

 

▼参考にした内容など

https://developer.cybozu.io/hc/ja/articles/204982474-Moment-js-%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6-%E6%97%A5%E6%99%82%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%82%92%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%99%E3%82%8B

↓「基準日」の考えが「本日日付」に近いのかな?と思いましたが、複雑で私では理解まで及びませんでした…。

https://developer.cybozu.io/hc/ja/community/posts/115000303206-%E6%97%A5%E4%BB%98%E3%81%AE%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

 

みなさま、ご教示のほどよろしくお願いいたします。

Neco_C さん

参考にされたページでは、「レコード詳細画面」の1レコード内の「基準日」フィールドを本日日付で更新しているので、

一覧画面の複数レコードを一括更新となると、別のやり方になってきます。

下記を参考にされてはいかがでしょうか?

 

レコード一覧画面での年齢フィールド一括更新

https://developer.cybozu.io/hc/ja/community/posts/115000327006-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7%E7%94%BB%E9%9D%A2%E3%81%A7%E3%81%AE%E5%B9%B4%E9%BD%A2%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E4%B8%80%E6%8B%AC%E6%9B%B4%E6%96%B0

 

Kazuhiro Yoshida さま

ご返信いただきありがとうございます!

リンク先拝見いたしました。

 

私がもともと組んでみていたjavascriptは下記です。

(function () {
“use strict”;
// ロケールを初期化
moment.locale(‘ja’);

kintone.events.on(‘app.record.index.show’, function(e) {
// レコード一覧画面表示イベント
// 日付データを取得
var date = kintone.app.record.get().record[‘本日日付’].value;
// 日付をフォーマット
moment(date).format(‘YYYY/MM/DD’);
});

})();

↑これだと、一覧画面を表示した時に一括更新とはならないということですよね?

 

教えていただいたリンク先から、

下記を抜粋して利用するのかな?と考えてみたのですが、

具体的な書き方が理解できていません(本当に初心者で申し訳ありません…)

 

 

// 全件取得関数
function fetchRecords(appId, query, opt_offset, opt_limit, opt_records) {
var offset = opt_offset || 0;
var limit = opt_limit || 100;
var allRecords = opt_records || [];
var params = {app: appId, query: query + ’ limit ’ + limit + ’ offset ’ + offset};
return kintone.api(‘/k/v1/records’, ‘GET’, params).then(function (resp) {
allRecords = allRecords.concat(resp.records);
if (resp.records.length === limit) {
return fetchRecords(appId, query, offset + limit, limit, allRecords);
}
return allRecords;
});
}

大変恐縮ですが、具体的な記述が分かればご教示願えますと幸いでございます。

 

また、私の記述では、本日の日付を取得し「本日日付」フィールドに日付を記載するため、

下記記述【A】としていたのですが、

【A】

// 日付データを取得
var date = kintone.app.record.get().record[‘本日日付’].value;

 

リンク先にある、下記記述【B】に置き換えるとよろしいですか?

下記【B】だと、どこかのフィールドに本日日付を保持する形ではないのでしょうか?

【B】

//本日の日付を取得
var today=new Date();

 

初歩の初歩な質問で恐縮ですが、何卒よろしくお願いいたします!

Neco_C さん、お世話になります。

JavaScript API と REST API の使い分けはなかなか理解が難しいですね。私もよく分からないことが多いです。

少しサンプルを作成してテストしてみましたので、参考になると幸いです。

 

Neco_C さんの書いた下記のコードは、レコード詳細画面用のレコード取得用 JavaScript APIになります。

【A】

// 日付データを取得
var date = kintone.app.record.get().record[‘本日日付’].value;

 

一覧用のフィールド情報の取得には kintone.app.getFieldElements(fieldCode) JavaScript API を使いますが、

https://developer.cybozu.io/hc/ja/articles/201942004#step3

 

一般的に、レコードの更新等は、REST API を利用します。

下記に良い例がありましたので、リンクを紹介します。

https://www.yamamanx.com/kintone_record_field_update/ 

私も開発環境で試してみましたので、そのソースを貼付けておきます。

※事前に文字列フィールド"更新日付"を配置したアプリを作っておきます。

※特に使っていませんが、jQueryをリンクしておいて下さい。

jQuery.noConflict();
(function($) {
“use strict”;

kintone.events.on(‘app.record.index.show’, function(event) {
var nowDate = new Date();
var params = {
app: event.appId,
query: kintone.app.getQuery()
};

// レコード更新用の配列
var record_array = [];
kintone.api(‘/k/v1/records’,‘GET’,params,function(resp){
var records = resp.records;

try {
// レコード更新用の配列作成
records.forEach(function(record){
var record_obj = {
“id”:record[‘レコード番号’].value,
“record”:{
“更新日付”:{
“value”: nowDate.toString()
}
}
};
record_array.push(record_obj);
});
} catch (err) {
alert(err.message);
return resp;
}
// debug
console.log(record_array);

// レコード更新
var put_params = {
app: event.appId,
records: record_array
};
kintone.api(‘/k/v1/records’,‘PUT’,put_params,function(resp){
alert(‘更新完了’);
}, function(resp) {
var errmsg = ‘レコード更新時にエラーが発生しました。’;
if (resp.message !== undefined) {
errmsg += ‘’ + resp.message;
}
alert(errmsg);
});

}, function(resp) {
var errmsg = ‘レコード取得時にエラーが発生しました。’;
if (resp.message !== undefined) {
errmsg += ‘’ + resp.message;
}
alert(errmsg);
});

});

})(jQuery);

 

更新結果をすぐに確認したい場合は、更新後に画面を再読み込みして下さい。

 

 

Kazuhiro Yoshida さま

ご返信いただきまして、ありがとうございます。

また、コードまで書いていただき、更には開発環境でも試していただいて、

お時間いただき本当にありがとうございます!

 

記載いただいていたコードで無事に取得できました!

数日間頭を悩ませ色々と調べたのですが答えに辿りつけなかったので、

実現してとてもうれしいです!

 

JavaScript API と REST APIの違いもよく分かっていないような初心者が質問してしまいすいませんでした…。

 

追加で一点質問なのですが、

いただいたコードで行うと、本日日付(更新日付)が

Thu Apr 05 2018 15:11:07 GMT+0900 (東京 (標準時))

と記載されるのですが、

YYYY/MM/DD

の年月日表示をすることは可能でしょうか?

 

お忙しいところ恐縮ですが、お時間あります時にご教示願えますと幸いです。

よろしくお願いいたします。

Neco_C さん、お世話になります。

JavaScript API と REST APIの違いは、私もよく分からなくなってきて何日も悩むことがあります。

 

>本日日付(更新日付)が

>Thu Apr 05 2018 15:11:07 GMT+0900 (東京 (標準時))

>と記載されるのですが、

>YYYY/MM/DD

>の年月日表示をすることは可能でしょうか?

上記ですが、Neco_C さんの投稿されていた Moment.js を使えば可能です。

 

“use strict”; の行の後に

// ロケールを初期化
moment.locale(‘ja’);
var nowDate = moment().format(‘YYYY/MM/DD’);

として、kintone.events.on(‘app.record.index.show’, function(event) { の行の下の

var nowDate = new Date(); の行は削除してください。

 

念のため修正したコードを張り付けておきます。

  1. jQuery.noConflict();
  2. (function($) {
  3. “use strict”;
  4. // ロケールを初期化
  5. moment.locale(‘ja’);
  6. var nowDate = moment().format(‘YYYY/MM/DD’);
  7. console.log(nowDate);
  8. kintone.events.on(‘app.record.index.show’, function(event) {
  9. var params = {
  10. app: event.appId,
  11. query: kintone.app.getQuery()
  12. };
  13. // レコード更新用の配列
  14. var record_array = [];
  15. kintone.api(‘/k/v1/records’,‘GET’,params,function(resp){
  16. var records = resp.records;
  17. try {
  18. // レコード更新用の配列作成
  19. records.forEach(function(record){
  20. var record_obj = {
  21. “id”:record[‘レコード番号’].value,
  22. “record”:{
  23. “更新日付”:{
  24. “value”: nowDate.toString()
  25. }
  26. }
  27. };
  28. record_array.push(record_obj);
  29. });
  30. } catch (err) {
  31. alert(err.message);
  32. return resp;
  33. }
  34. // debug
  35. console.log(record_array);
  36. // レコード更新
  37. var put_params = {
  38. app: event.appId,
  39. records: record_array
  40. };
  41. kintone.api(‘/k/v1/records’,‘PUT’,put_params,function(resp){
  42. alert(‘更新完了’);
  43. }, function(resp) {
  44. var errmsg = ‘レコード更新時にエラーが発生しました。’;
  45. if (resp.message !== undefined) {
  46. errmsg += ‘’ + resp.message;
  47. }
  48. alert(errmsg);
  49. });
  50. }, function(resp) {
  51. var errmsg = ‘レコード取得時にエラーが発生しました。’;
  52. if (resp.message !== undefined) {
  53. errmsg += ‘’ + resp.message;
  54. }
  55. alert(errmsg);
  56. });
  57. });
  58. })(jQuery);

Kazuhiro Yoshida さま

お世話になります、ありがとうございます!

 

記載いただいたコードを入れてみたのですが、表記方法が変わらず…

自分なりに考えて、記載位置を変更してみたりしたのですが(下記コードの『◆ →』部分)

うまくいきませんでした(私の変更は、見当違いかもしれませんが…)

 

jQuery.noConflict();
(function($) {
“use strict”;
// ロケールを初期化
◆ → moment.locale(‘ja’);

kintone.events.on(‘app.record.index.show’, function(event) {

◆ → var nowDate = moment().format(‘YYYY/MM/DD’);

◆ → console.log(nowDate);

var params = {
app: event.appId,
query: kintone.app.getQuery()
};
// レコード更新用の配列
var record_array = [];
kintone.api(‘/k/v1/records’,‘GET’,params,function(resp){
var records = resp.records;
try {
// レコード更新用の配列作成
records.forEach(function(record){
var record_obj = {
“id”:record[‘レコード番号’].value,
“record”:{
“更新日付”:{
“value”: nowDate.toString()
}
}
};
record_array.push(record_obj);
});
} catch (err) {
alert(err.message);
return resp;
}
// debug
console.log(record_array);
// レコード更新
var put_params = {
app: event.appId,
records: record_array
};
kintone.api(‘/k/v1/records’,‘PUT’,put_params,function(resp){
alert(‘更新完了’);
}, function(resp) {
var errmsg = ‘レコード更新時にエラーが発生しました。’;
if (resp.message !== undefined) {
errmsg += ‘’ + resp.message;
}
alert(errmsg);
});
}, function(resp) {
var errmsg = ‘レコード取得時にエラーが発生しました。’;
if (resp.message !== undefined) {
errmsg += ‘’ + resp.message;
}
alert(errmsg);
});
});
})(jQuery);

 

ちなみに、momentを利用するにあたっては、下記のようにURLを入れておくことでOKでしょうか?

何度も恐縮ですが、本当に時間がある時でけっこうですので、

ご返答いただけますと幸いでございます。

よろしくお願いします!

Neco_C さん

遅くなりました、Yoshidaです。

  1. // ロケールを初期化
  2. moment.locale(‘ja’);
  3. var nowDate = moment().format(‘YYYY/MM/DD’);
  4. kintone.events.on(‘app.record.index.show’, function(event) {
  5. 以下続く。。。

で良いです。

console.log は確認ようにデバッグした行なので、削除してください。

 

>ちなみに、momentを利用するにあたっては、下記のようにURLを入れておくことでOKでしょうか?

OKです。

 

Yoshidaさま

 

ご返信いただき恐縮です、ありがとうございます!

反映されましたっ!

私のうっかりミスでできていないようでした、お手数をおかけし申し訳ありません、、、

 

追加で失礼いたします。

これで表示される更新日付は、文字列フィールドにしか保持できないですよね?

(日付、日時フィールドなどで保持できないか試してみたのですが、私では実現できなかったので…)

 

今回保持した「更新日付」をもとに、

もともとフィールド設定がある、例えば「作成日時」や「問合せ日付」などと、

日数の差を計算するなどは、kintone標準機能で可能でしょうか?(フィールドの計算式などの指定で)

レコード内に複数の日付(または日時フィールド)があり、

それぞれと日数の差を計算できるといいなと思っているのですが。

 

お時間ございましたら、よろしくお願いいたします。

Neco_C さん、Yoshidaです。

日付や日時フィールドへの登録はできます。

下記リンクの日付、日時フィールドの Type、Value を確認してみてください。 

ちなみに、日付は 2018-04-08 のような形式で渡せば良いです。

日数の差の計算は、標準機能では計算フィールドを使うことである程度はできます。

https://jp.cybozu.help/ja/k/user/autocalc

他には、JavaScriptを使うことで実現できるかと思います。

 

Yoshida様

諸事情により、返信が大変お遅くなり申し訳ございません。

本日日付の保持・日付計算について、無事に実装することができました。

初心者の質問にお付き合いいただきまして、誠にありがとうございました!

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。