adaloのUser DBのnumberを決まった日にリセットする方法を知りたい

現在サブスクリプション形態でアプリを作成中です、
サブスクを契約したらポイントを付与するようにしております。
契約日から1ヶ月おきに付与ポイントを特定の数字にリセットしたいのですがadaloで不可能な気がしてなりません。
他のサービス連携もしくはadaloでできるのであればご教授頂ければと思い書き込みさせてもらいました。
adalo単体では不可能という情報も教えていただけると幸いです :sob:

一旦投稿したのですが、間違いがあったので投稿を削除しました。改めて投稿させて頂きます。

他のNoCodeの質問コーナーで同じような質問が出ており、そこで私が回答した内容を紹介します。
本件は1ヶ月後にポイントをリセットするということなので、時間をトリガーとしたアクションを設定することになります。

AdaloのMarketPlaceにある「CountDown Timer」を使った方法をご紹介します。
このCountDown コンポーネントは文字通り時間がだんだん減っていくカウントダウンタイマーそのものです。時間が減ってタイマーが0になった瞬間に設定したアクションを起こすことが出来ます。

(考え方)
「1か月後にポイントの数字をリセットする」の部分
1.条件設定
・・・1か月はここでは30日と考えて以下説明します。ポイントの数字は初期値を1とし、1か月経過するたびに+1ずつしていくと考えました。(この設定は質問者さんが自由に変えて下さい。)

1か月経過するごとにポイントの数字が1ずつ増加させるにはデータベースに例えばcountというプロパティを作っておいて、初期値を1と入力しておき、1か月後に起きるアクションでcountの内容を
count+1 としておくことで1ずつ増加させることが出来ます。

(サンプル)
言葉だけの説明だと分からないと思うので簡単なサンプルを作りました。
1.データベースの内容

2.CountDown Timerの設定とポイントの数字を変化させるAction

1ヶ月後は秒で換算すると(60×60×24)×30日=2,592,000秒/月。カウントダウンタイマーには
登録からの経過時間を 2,592,000-(current time- created date) ×86400で入力しています。
Current timeとCreated dateは計算式中では日単位になっているので秒単位に換算するために1日の秒数86400を掛けています。

ActionはデータベースのUpdateを設定して下さい。ここでcount+1 が実行され、counterの数字が
1ずつ上がっていきます。

3.アプリサンプル(コピーできます)

上記の説明で分かりますか?私はなかなかCountDownTimerが理解できませんでした。不明点あれば説明しますので遠慮せず聞いて下さい。

詳細な説明とサンプルまで本当に本当にありがとうございます:sob:

カウントダウンで挑戦したいと思います!
、しかしアプリを開いてる時しか動かないってなると厳しいですよね:cry:

akiukki様へ
CountDown Timerはアプリがオープンしている状態の時しか動作しないので、これじゃまずいなと
最初は私も思ったのですが、結局同じではないかという気もします。

(説明)
登録してから1か月経った会員の例:

アプリをオープンしたタイミングが1か月(30日)と2時間後だったとします。開いた瞬間は
CountDown Timerが怠け者なのでポイント更新されていません。しかし、開いた瞬間に
Current timeの値が設定され、カウントダウンタイマーの下記計算式でカウントダウンの値は0になります。
2,592,000-(current time- created date) ×86400

一瞬のタイムラグ(2秒前後)は確かにありますが、ポイントの数字はすぐ更新されます。厳密にいえば違うのですが、アプリが閉じている間もバックグラウンドでせっせとカウントダウンしてくれなくても、開いた瞬間に処理してくれるならば結果的にほぼ一緒じゃないかと思うのですが、いかがでしょうか?

(余談)
私はGoogleのスプレッドシートを仕事でずっと使っているのでこの質問を最初見た時にスプレッドシートで対応することを考えました。
スプレッドシートでデータベースを作って、GAS(Google Apps Script)でスクリプトを書いて、トリガーを1か月に設定し、Zapier等で連携すればいいかなと。

ただ、こういう質問コーナーの場合、せっかくAdaloを使っているのだからAdaloだけで完結するやり方の方がいいだろうと考え、こういう回答をしました。

(他のNoCodeアプリの質問コーナーで同じような質問が出ており、コミュニティーの常連さんからの回答はAirtableか何かでデータベースを作り、時間のトリガーを設定し、ZapierでAdaloと連携して下さいという内容でした。)

1 Like

詳細な説明と丁寧な解説ありがとうございます :blush:

現在の考えてる構想は、1アカウントあたり30ポイントを毎月付与する仕様で予約する毎に1ポイントずつ減少していく形で毎月30ポイントにリセットする仕様にしたいな思いました。
ただご契約者様によって契約日はバラバラになりますので、アカウントを作ったタイミング(契約日)から一ヶ月の時間を計算してカウントダウンする方法は最高でした!

検証を実際にしてみました!
検証ではカウントダウンの一ヶ月の部分を3分に設定し、3分後にどういう動きをするのか確認した所、created date(アカウントを作った日時)から3分後にカウントダウンタイマーをclickした場合にactionする仕様みたいでまたまた壁にぶつかってしまいまして。

1、ユーザーにどうやって上手くタイマーを触らせるかというところ

2、カウントダウンタイマーが稼働を停止してしまう(3分でループをしないという所)

3、3分後はカウントダウンタイマーを何回触ってもアップデートされてしまうという所です

例えばユーザーDBの中にnumberを入れて管理するのではなく別にNUMBER用のDBを作ってUPDATE dateに変えてみようかと思ったのですが、予約するたびにNUMBERのDBは更新されていくのでこの方法は断念しました :sob:

先程、0941様が違う投稿の所でカウントダウンタイマーを使って個数を0にするのはタイマーが0になった瞬間になっていました。タイマーが0になればアップデートするということは1と3はクリアしますね!私のやり方がおかしかったのでしょうね、すいません。

ノーコードと言っても実際難しいですね‥

すいません!!
countdowntimer のactionに「finished action」 「click action」が別にありました!

問題点2.で「CountDown Timerが終了してしまうとループしない」と書かれていますが、ループ
(繰り返し)させるにはCountDownの計算式を以下のように書き換えて下さい。

(例)
~1分(60秒)ごとにループさせるやり方~

60-(Current time- Updated date)×86400

ポイントは計算式中に以前はCreated dateを使っていましたが、ここをUpdated dateにすることで
カウントダウンが繰り返されます。

Updated dateとは、1回カウントダウンが0になってポイント数に特定の数が加算された瞬間の時間を
言っています。今度はここが起点となって、60秒ごとのループを繰り返します。

一度、ご自分で式を作ってやってみて下さい。(3分だとカップラーメンができてしまうので試すなら
60秒くらいの上記のような設定にして本当に繰り返し動作が出来るかどうか確かめて下さい。)

例えば1分おきくらいにデータベースに1人ずつデータを入れていって、初期ポイントを1にして
増加分も仮に1にしておいて、カウントダウンが変化に伴ってポイントがどのように変化するのか
見て頂きたいです。

問題1,3は何とかクリアー出来そうですか?あきさんならきっと出来ますよ。
私のようなAdalo3カ月の素人から教わっている場合じゃないです。

1 Like

adalo3ヶ月ですか??めっちゃすごいです!!
おかげ様で1と3はクリアできました :grinning:
あとは2ですね・・・ポイントのDBを作ってリレーションさせて・・・個人特定させて・・・そしてアップデート・・。
でもアップデートだとポイントを使うたんびにアップデートしちゃうはずなのでずっと永遠にカウントダウンが終わらないきがしてるんです。
ポイントを初期化だけするようなDBを作ってアップデートをしないように作ればいいかもしれないですね(作れるかわかりませんが試行錯誤してみます :blush:
0941様には本当助けて頂きありがとうございます、私もadalo触り始めて1ヶ月半ぐらいです、プログラミングすらした事もありません :sob:
本当に0941様が女神に見えております、ありがとうございます!

やはり上記2.に関しては問題があるのですね。
ポイント付与の条件が今一つ理解できていません。以下の部分をかみ砕いて教えてもらえませんか?

(理解できない部分)

(私の疑問)
・毎月30ポイントずつもらえるという理解でいいのか?
・「予約するごとに1ポイントずつ減少する」→予約って何?1回予約すると29ポイントになるの?
・「毎月30ポイントにリセットする仕様にする」
→???上では毎月30ポイントもらうって言っているのに、最終的にまた30ポイントに減って
しまうの?

この部分のロジックはかなり難しいです。(現在は前提条件がよく分からないのでどれ位難しいかもわからない)あきさんのやりたいことが私でも理解できれば、時間あるときに考えてみます。

どうしても分からなかったら私が入っている別のNoCodeのコミュニティの質問コーナーで聞いてみますよ。

すいません、会議が長引いてレスが遅くなりました。
まさに0941さんが思ってる通りに、ポイントを毎月付与します。
そのポイント分しか毎月予約ができません、30ポイント=30回予約ができる形になっております。
30回予約してしまったらその月はもう予約はできないように作っております。
あとは毎月そのポイントを規定の30ポイントにリセットしてあげるとまた次の月から予約ができるという仕組みです。

ちなみにループ設定上手くいきました!ありがとうございます!

簡単に作ってみました!ループタイマーを!
USERのアップデートタイムをカウントダウンタイマー用DBにクリエイトしてあげて
そのDBをユーザーとリレーションで結び、ユーザー毎にアップデートタイム(契約日)を管理
することにしました。
USERのアップデートタイムでしてしまうと他にもいろんな情報に紐付けていてアップデートばかり入ってしまい参考値にはならないので別で管理すればいいじゃんと思い分けたら上手くいきました!

カウントダウンタイマーが0になった時だけカウントダウンタイマーDBにアップデートが入りまたカウントが始まるという形になりました。
一応サンプルを作ってみました!テキトーにアカウント入力してログインして頂けると動作します!
本当に0941さんに助けられました、ありがとうございます :grinning: :grinning: :grinning:

なるほどこういう動きになるわけですね。面白いですね。(普通に考えると難易度高いですよ。)
ポイントは使わなかったら翌月に持ち越しできるのかと思ったら、1か月単位ですべてリセットされ、毎月30ポイントから始まるのですね。

実際の用途はイマイチ分かりませんが、ログインから会員の判別、ポイントの付与など会員情報をうまく管理できており素晴らしいです。

また、ご協力できることがあれば何でも言ってください。私は一昨年からGlideを手始めにNoCodeを始めましたが、その頃はネットにも参考情報があまりなくて大変苦労しました。NoCodeはきちんと学ぶシステムが確立されてないので皆さんしなくてもいい苦労をされていると思います。知識の共有をうまく図って効率的に学んでいきたいですよね。私ももう定年なので老後の楽しみにNoCodeをやって行こうと思っています。

1 Like

ノーコードを始めて、思った事が0941さんを初め、皆さん非常に優しいんだなとつくづく感じました^_^
解決しなくても一緒に考えて頂けるとそれだけで嬉しいですね!

私もわかる範囲は答えたいと思ってますが中々わかる質問がないので答えれないのですが、0941さんみたいに答えれるように頑張って覚えたいと思います。
ポイント制についてはこれが正解かどうかわかりません。
そもそもがこのアプリケーションを利用する方は全て有料会員になる予定でして、会員じゃない方へのアプリアカウントを展開する予防策でポイント制度を付与しております。
こちらからは、把握しているユーザー様にしかポイント付与せず、もし会員ユーザー様がアカウントを共有して他の方が使用しても会員ユーザー様のポイントが減っていくだけになりますのでデメリットでしかありません。
そういった意味でポイント制にしてるのですがもしかすると撤廃するかもしれません。

お仕事長い間お疲れ様でした!
一緒に勉強させてください、今後ともよろしくお願い致します:palms_up_together:

アカウントは違いますが、akidukiです!
ポイントのループ方法で訂正があります。
以前教えて頂きました、 2,592,000-( current time - created date) ×86400
こちらをcreated dateを Updated dateに変えればデータベースのアップデートをする度にループして
30日後にポイントをリセットするという形で完了していたのですが、本日朝風呂をしてる際にふと思いまして、
「そういえばUpdated dateとはデータベースの情報がアップデートされたタイミングではないのかと…」
そのままそうなんですが、これがどういう意味かと言いますと。
30日後に1回目のリセット、60日目に2回目のリセット、90日目に3回目のリセットが私の理想だったんですが。
例えばユーザーがアプリを開く事がなく35日目に開いたとします、そうするとデーターベースのアップデートは35日目になっちゃうという事に気づき、5日のズレが生じてしまいます。
こうなると計算式では次のリセットはUpdated dateの30日後なので2回目は65日目になる事になります。
永遠とこのズレは解消せずに進んでいく形になってしまいます。

これではあかんと思い、式を戻し変更しました。
(2,592,000×count)-( current time - created date) ×86400
countは契約月数ですね、「1ヶ月目は1」「2ヶ月目は2」とカウントダウンタイマーのアクション回数で増えていきます。
これによってクリエイトデータは契約日(固定)なので正常に30、60、90という形でズレなくループする事になると思います!!
現場からは以上になります。

akiさん、おひさしぶりです。CountDownTimerはいろいろ複雑ですね。akiさんの書かれている通りだと思いますが、countはどのようにして出しているのですか、少し気になりました。

(私が気になっている部分)
私は、countのやり方は会員データベースにcountというプロパティを設けて1か月おきにUpdateして、count+1にすることで1,2,3,4・・・と増えていくのだろうと最初は思っていましたが、これではやはりダメだと分かりました。

例えば会員登録して数ケ月ほったらかしにした場合、countは2になり、おかしくなってしまうからです。以下の式を正しく動作させるためにはcountの部分を次のようにしなかればならないと思ったのですが、akiさんはどのようなやり方でcountを求めていますか?

2,592,000×count-( current time - created date) ×86400

→count部分=INT(1+(Current time-Created date)/30) 注:INTは整数部分だけ取り出す切り捨て機能

1か月に必ず1回は会員さんがアプリを開いてくれるような条件ならこんな面倒なことは考えなくてもいいとは思います。

0941さんお久しぶりです!
カウントダウンタイマーのアクションにcount+1を入れる事で大丈夫でした。
写真の設定は60秒で1カウントという風にしてますが、アプリを開けばその回数分カウントの計算が始まるみたいです。
私は数字のプロパティ名をcountにしてるだけになります。
ただの数字ですね、ここにアクションを起こせば1ずつ足していくだけになります。
どんなに月日がたって開いても、ちゃんと計算してくれるみたいです。
カウントの数字が増えていくスクショをのっけたかったんですが、枚数制限にひっかかってしまいました。すいません。

akiさんよかったですね!!私もアプリ作って動かしているわけじゃないので想像で回答していましたが、うまく動くんですね。勉強になりました。
また皆さんがうなるような難しい課題出して下さい。

1 Like

お昼食べながら自分でも設定作ってやってみました。(60秒インターバル)
CountDownTimerって面白い動きしますね。データベースに1個目のデータだけ入れて(Created Date作る)、しばらくしてからアプリの画面をのぞくとcounterの数がみるみる上がっていって、あるところで止まって、そこからは60秒インターバルのカウントダウンになりました。

akiさんこの動きにはびっくりしましたよ。参考になりました。

1 Like