4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

kintoneにログインボーナスみたいなものを実装する

Last updated at Posted at 2021-04-21

今回はkintoneにログインしたらポイントが貯まる、ログインボーナスのようなカスタマイズです。

仕様

kintoneにログイン(ポータルを表示)すると「ログインボーナス」のダイアログが表示されます。
ログボ(ログインボーナスの略)アプリにポイントが溜まっていきます。1日1ポイント!のように。

管理者は全員分のポイントが見られる
image.png

一般ユーザーは自分の分だけ見られる
image.png

ポイント比較?はグラフなどで
image.png

ログボアプリの作成

では早速作っていきましょう。
まずはログインボーナスをためていくアプリを作成します。

フォームの設定

フィールド種類 フィールドコード 初期値 その他
日付 日付 レコード登録時の日付を初期値にする 必須
ユーザー選択 ユーザー選択 ログインユーザー 必須
数値 ポイント 1 必須、キャンペーン期間は2ポイントとかでも良さそう
文字列(1行) キー なし 重複禁止&必須

image.png

アプリのアクセス権

Everyoneはレコード閲覧と追加だけ許可しておきましょう。
image.png

レコードのアクセス権

すべてのレコードについて、レコードの内容を見るべきグループ(例ではAdmin)の人は全部許可。
フォームのフィールドを追加して「ユーザー選択」のユーザーは閲覧だけできるようにしておきます。
Everyoneはチェックを全部外しておきます。

image.png

フィールドのアクセス権

キー以外のフィールドは閲覧だけOKとしておきます。キーはJavaScriptで編集するのでここでは設定しません。
image.png

JavaScript

JavaScriptはログボアプリのJavaScriptとポータルに設定するJavaScript2種類あります。

ログボアプリのJavaScript

一般ユーザーにはそもそも「編集権限」がないのですが、新規追加の権限はあります。
というわけで、JavaScriptで、「アプリで直接新規追加する際の制限」をかけます。
たくさんレコードを追加したらズルイですからね。
キーは「日付_ユーザーコード」とし、重複禁止かつ必須とします。
このキーを設定することにより、1日1回しかログボは付与されないようにできます。

(() => {
  "use strict";

  // 新規追加時、キーはアプリから値の変更ができないようにする。
  kintone.events.on(["app.record.create.show"], (event) => {
    event.record.キー.disabled = true;
    return event;
  });

  // 新規追加時、キー(日付_ユーザーコード)を設定する
  kintone.events.on(["app.record.create.submit"], (event) => {
    event.record.キー.value =
      event.record.日付.value + "_" + event.record.ユーザー選択.value[0].code;
    return event;
  });
})();

ポータルのJavaScript

kintoneシステム管理のJavaScript / CSSでカスタマイズに
Cybozu CDNにある下記2つを追加しておきます。

Luxon(日付用)
https://js.cybozu.com/luxon/1.26.0/luxon.min.js

SweetAlert v2.x(ダイアログが可愛くなる)
https://js.cybozu.com/sweetalert/v2.1.2/sweetalert.min.js

(() => {
  "use strict";
  kintone.events.on(["portal.show"], async (event) => {

    //今日のログボゲット済みか調べるパラメータ
    const getbody = {
      app: ログボアプリのID,
      query: `ユーザー選択 in (LOGINUSER()) and 日付 = TODAY()`,
      totalCount: true,
    };

    // ログボゲット済みか確かめる用
    const resp = await kintone.api(
      kintone.api.url("/k/v1/records", true),
      "GET",
      getbody
    );

    // 0件だったらログボゲット
    if (resp.totalCount === "0") {
      // ログイン中のユーザ情報取得
      const loginUser = kintone.getLoginUser();
      // 今日の日付ゲットする
      const date = luxon.DateTime.local();
      // レコード追加パラメータ。
      const postbody = {
        app: ログボアプリのID,
        // ※recordにはキー(日付_ユーザーコード)を設定。(他フィールドは初期値仕様なので設定不要)
        record: {
          キー: { value: date.toFormat("yyyy-MM-dd") + "_" + loginUser.code },
        },
      };
      const getLogb = await kintone.api(
        kintone.api.url("/k/v1/record", true),
        "POST",
        postbody
      );

      // SweetAlert
      swal({
        title: "ログインボーナス",
        text: "1ポイントゲットしたよ",
        icon: "success",
        button: "受け取る",
      });

    }
    return event;
  });
})();

まとめ

ログインボーナスをためてどうするか?という課題もあると思いますが、kintoneにログインするのがちょっと楽しくなるかも知れません。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?