新規投稿
フォローする

日付の取得

https://developer.cybozu.io/hc/ja/community/posts/360048302952

上記を参考にテーブルの日付の取得のスクリプトを作成したのですが、

エラーも出ず、動かないので、ご指摘頂きたいです。

テーブル:実施予定と日付

テーブル内日付:実施予定日

フィールド日付:最終実施日

これが上手くいったあとは、別のフィールドへ次の予定月を記載したいと思っておりますが、予定月に関しましては、人の手が入ることがあるため、

このスクリプトに「submit」は使わず、「change」を使用しようと考えています。

 

(function () {
"use strict";
kintone.events.on('app.record.edit.change.実施予定日', function (event) {
const tableDate = event.record.実施予定と日付.value;
const dates = tableDate.map(function (cur){
return new Date(cur.value.実施予定日.value);
});
const maxDate = new Date(Math.max.apply(null,dates));
event.record['最終実施日'].value = maxDate;
return event;
});
})();

0

18件のコメント

Avatar
asaga

こもるーさん、こんにちは。

 

maxDateはkintoneが受け取れるフォーマットになっていますでしょうか?

詳しくは以下に記載がありますが、YYYY-MM-DD形式にする必要があります。

https://developer.cybozu.io/hc/ja/articles/201941754#step6

0
Avatar
こもるー

asagaさん

再びお世話になります、こもるーです。

 

すみません、意味合いの確認なのですが、format("YYYY-MM-DD")として指定する、ということで合ってますか?

理解が間違っていたら申し訳ありません。

合っていた場合、

>event.record['最終実施日'].value = maxDate;

event.record['最終実施日'].value = maxDate.format("YYYY-MM-DD");

と思ってトライしてみたのですが、違うっぽくエラーも出ず。。。

間違っていた場合、が思い浮かばず。

 

0
Avatar
asaga

こもるーさん

はい、記載頂いた通りの意図だったのですが、不思議ですね・・・。

 

ちなみにmoment.jsを読み込ませた状態で、

event.record['最終実施日'].value = moment(maxDate).format("YYYY-MM-DD");

としたらうまく動きました。

 

最初のソースだと、app.record.edit.change.実施予定日 しか指定してないので、レコード編集画面でしか動かないと思いますが、そちらは想定通りでしょうか?

0
Avatar
こもるー

asagaさん

moment.jsを読み込ませるがよくわからなかったので、deveったらv4アップデートで読み込み不要に。。

他のアプリのスクリプトにmomentは使っていて動いているので、moment.js存在がわからないです。

https://developer.cybozu.io/hc/ja/articles/202960194

↑をCSSファイルに記載して使用するのですよね?

 

とりあえず現状、同じスクリプトを打ってみたのですが、

反応せず。

現状のスクリプトは以下になります。

 

(function () {
"use strict";
kintone.events.on('app.record.edit.change.実施予定日', function (event) {
const tableDate = event.record.実施予定と日付.value;
const dates = tableDate.map(function (cur){
return new Date(cur.value.実施予定日.value);
});
const maxDate = new Date(Math.max.apply(null,dates));
event.record['最終実施日'].value = moment(maxDate).format("YYYY-MM-DD");
return event;
});
})();

asagaさんが記載してくださったことそのままです。

 

とりあえず今後は編集時しか使用しないので、大丈夫です!

新規でやらなきゃのときはcreate.change入れます。

前あんなにcreateこだわってましたから、覚えていてくださって嬉しいです。

ありがとうございます。

 

1
Avatar
asaga

こもるーさん

"v4アップデートで不要"になったのは、FullCalendarを使っている場合だと思いますー。

なので、moment.jsの箇所に書いてあるURL(https://js.cybozu.com/momentjs/2.24.0/moment-with-locales.min.js)をkintoneに読み込ませる必要があるのですが、

「アプリの設定 > JavaScript / CSSでカスタマイズ」でURL指定すればOKです。(CSSじゃなくてJavaScriptの方です)

注意する点としては、元々作っていたJavaScriptファイルよりも先に読み込ませておかないといけないので、
上記の画面のように、順番が上になるようにしておきます。

もしこれでも駄目でしたら、実際に格納されている値をチェックした方が良いと思います。

ご存知かもれしれませんが、ソース上にconsole.log(dates);とかconsole.log(maxDate);とか書けば、ブラウザのコンソールで入ってる値が確認できます。

引き続き頑張って下さい!

0
Avatar
こもるー

asagaさん

 

教えて頂いてできました!

画像も張り付けて頂いて申し訳ありません。

分かりやすかったのでとても助かりました。

そしてそれだけではなく、↑のスクリプトでちゃんと値が動きました!

 

>↑をCSSファイルに記載して使用するのですよね?

moment.jsって言ってるのにCSSを言うなんて私はなにを言っているんでしょうね。

重ね重ねすみませんでした。

 

>これが上手くいったあとは、別のフィールドへ次の予定月を記載したいと思っておりますが、予定月に関しましては、

このあとまた調べてみて頑張ってみるのですが、序盤に言っていた↑のスクリプトも動かないという現実に立ち向かっているので、

お手すきでしたらばまた救いの手を差し伸べて頂けませんでしょうか?

宜しくお願いします。

 

0
Avatar
asaga

こもるーさん

うまくいったようで良かったです!

「別のフィールドへ次の予定月を記載したい」については、どのような動きを想定されているのでしょうか?

0
Avatar
こもるー

asagaさん

いつも大変お世話になっております、こもるーです。

返信が遅くなってしまい、申し訳ありません。

ログインしていると頼ってしまうと思ったので、一生懸命考えていたのですが、うまくいかず。。

いっそ考えを変えてみたのですが、そちらがわからなく教えて頂きたいです。

 

テーブル上に有無を調べる項目を用意しました。

ただし、有、無が混ざっています。

1つでも有がある場合、外のフィールドに有、1つもなければ無と記載するには、どうスクリプトを組んだら良いのでしょうか?

初心故、someを使用し、

var items = テーブル内有無欄;
var result = items.some,function(event){
return value === '有';
});

からの表記なのだと想像しており、それから出てきた答えを見て有に置き換えるのか、それとも、はじめからIFで組むのか、と考えておりますが、

肝心のスクリプトがわからないです。この考えが合ってるかもわからず、お恥かしい限りですが、ご教授の程、宜しくお願い致します。

 

0
Avatar
asaga

こもるーさん、こんにちは。

記載頂いたのは「別のフィールドへ次の予定月を記載したい」の件でしょうか?

ちょっと実現したい事が分からなくなってきたので、記載頂けると助かりますm(_ _)m

0
Avatar
こもるー

asagaさん

お世話になっております、こもるーです。

すみません。全然内容変わってます。

「別のフィールドへ次の予定月を記載したい」の件が自分のスキルにおいての断念もそうなのですが、

仕様上無くすことになってしまいました。都合のいい話で申し訳ないのですが、「別のフィールドへ次の予定月を記載したい」を

なかったことにしてくださると助かります。

そのあと、では有無確認を入れる、ということになり、有が一つでもあれば有という入力をしたいと思いまして、

先に返信した内容の質問となってしまいました。

色々省いてしまっている且つ、ごちゃごちゃさせてしまい、申し訳ありませんでした。

0
Avatar
asaga

こもるーさん、こんにちは。

なるほど、そうなるとテーブル内に有無が無くても、できそうな気がしますね。

テーブルには日付を持っていて、テーブル外にチェック結果(有無)を入れる構造だった場合、こんな感じでいけるのでは無いでしょうか。

 

kintone.events.on('app.record.edit.change.実施予定日', function (event) {
  const tableDate = event.record.Table.value;
  const result = tableDate.some(function (cur){
  // 入力した日付を消すとundefinedが返る
  return (cur.value.実施予定日.value !== '' && typeof cur.value.実施予定日.value !== 'undefined');
});
if (result) {
event.record['テーブル外有無欄'].value = '有';
} else {
event.record['テーブル外有無欄'].value = '無';
}
return event;
});
0
Avatar
asaga

インデントがおかしかったのでもう一度。

kintone.events.on('app.record.edit.change.実施予定日', function (event) {
const tableDate = event.record.Table.value;
const result = tableDate.some(function (cur){
// 入力した日付を消すとundefinedが返る
return (cur.value.実施予定日.value !== '' && typeof cur.value.実施予定日.value !== 'undefined');
});
if (result) {
event.record['テーブル外有無欄'].value = '有';
} else {
event.record['テーブル外有無欄'].value = '無';
}
return event;
});
0
Avatar
こもるー

asagaさん

凄いっす。できました!!

ありがとうございます!

私のふわっとした話をこんなに実現して頂いてありがとうございました!

上記のアプリ上と関係のない話で、スクリプトに対しての質問なのですが、

本当に有無確認があるテーブルに対してはどのような動きになるのでしょうか?

>return (cur.value.実施予定日.value !== '' && typeof cur.value.実施予定日.value !== 'undefined');

このへんが

return (cur.value.実施予定日.value !== '有' && typeof cur.value.実施予定日.value !== '無');

にはなるかなと思うんですけど、「1つでも有ならば」という内容だと出てこなくて。。

〇〇が1つでも入っていれば有にする、みたいな内容が多いつくりになっているものが結構多く応用していければと思って質問させて頂きました。

0
Avatar
asaga

こもるーさん

動いたようで良かったです!

テーブル内のフィールドに有無が入ってる場合ですが、

return cur.value.テーブル内有無欄.value === '有';

のようにすればいけると思います。

(テーブル内にある「テーブル内有無」フィールドに"有"があったら、その時点でtableDate.some()が終わって、最後のif文が処理されます)

0
Avatar
こもるー

asagaさん

本当に助かりました!いい動きしてます(笑)

 

テーブル内フィールドのお話で、↑でつかったアプリにそのまま追加してみたのですが、

kintone.events.on('app.record.edit.change.テーブル内有無欄', function (event) {
const tableDate = event.record.てーぶる.value;
const result = tableDate.some(function (cur){
return cur.value.テーブル内有無欄.value === '有';
});
if (result) {
event.record['テーブル外有無欄'].value = '有';
} else {
event.record['テーブル外有無欄'].value = '無';
}
return event;
});

にしたのですが、有が入っていても、全部無になっていても値が入らないです。

コンソールもエラーが出ておらず。。

この場合どのような原因が考えられますでしょうか?

0
Avatar
asaga

こもるーさん

なんでしょうね・・・。

デバッグしながらどこまで動いているかを確認頂くのが確実かと思います。

イベントは動いているのか、テーブルの値は取れているか、resultには何が入ってるか・・・といった感じです。

0
Avatar
こもるー

asagaさん

お世話になっております、こもるーです。

上記件解決しました!何故昨日コンソールでエラーが出なかったのかわからないのですが、

ありがちな「フィールドコードが違う名称になっていた」というミスでした!

お騒がせしました。。

けれどもこれでたくさんのことに活かせます!

凄く長い間親身になっていただき、どうもありがとうございました!!

0
Avatar
asaga

こもるーさん

うまくいったようで、良かったです!

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