.NET 用 SDK を使って、レコードの定期更新プログラムを作成してみよう!

著者名:Mamoru Fujinoki( Fuji Business International (External link)

目次

はじめに

年齢や勤続年数など一定期間が経過したら更新する必要のあるデータを kintone に保存した場合、自動的には更新されないため、あとあと困ってしまうことがあります。
今回は、To Do アプリに残り日数フィールドを追加して、締め切りまでの日数を定期更新するデモプログラムを作成します。
プログラムには、マイクロソフトの .NET 開発環境で、 C# と kintoneDotNET(v.1.0.5) (External link) (.NET 用 kintone API SDK)を利用して作成します。

事前に必要なもの

  • .NET Framework 4.7.2 以上
  • Microsoft Visual Studio for Windows
    今回は、 Visual Studio 2022 (External link) の Community を使用します。
  • kintone アカウント

開発の流れ

  1. kintone To Do アプリの設定
  2. C# によるコンソールプログラムの作成

以上の手順で開発します。

kintone To Do アプリの設定

STEP1:アプリの追加

kintone アプリストアより、To Do アプリを追加します。

STEP2:フィールドの設定

To Do アプリを開き、ギアアイコンをクリックし、アプリの設定を変更する画面に移動します。

後述のコーディングで使用するフィールドを設定します。
以下を参考に、フィールドを追加・変更し、フィールドコードを修正します。
変更したら「フォームを保存」をクリックします。

フィールドの種類 フィールド名 フィールドコード その他
数値 残り日数 days_remaining 単位記号:日、後ろに付ける
日付 締切日 Duedate -
日付 開始日 From -

STEP3:一覧の設定

次に「一覧」タブをクリックして、一覧に「残り日数」フィールドを追加します。

「残り日数」フィールドをドラッグアンドドロップで追加し、保存します。

STEP4:アプリの更新

最後に「アプリを更新」ボタンをクリックして、変更をアプリに反映させます。
これで、To Do アプリの設定は完了です。

STEP5:動作確認用のレコードの追加

アプリ設定後、To Do のレコードを適当に追加します。

C# によるコンソールプログラムの作成

今回はマイクロソフトの Visual Studio のフリーバージョン Visual Studio Community 2022 を利用して、C# でコンソールプログラムを作成します。

STEP1:コンソールプロジェクトの新規作成

Visual Studio Community 2022 を開き、プロジェクトの新規作成で、「Console APP(.NET Framework)」をテンプレートとして選択します。
他の Framework を選択すると kintoneDotNET がうまく作動しません。

STEP2:kintoneDotNet SDK のインストール

「Tools」メニューから、「NuGet Package Manager」>「Manage NuGet Packages for Solution」を選択します。

「Browse」タブを選択し、検索ボックスに「kintone」と入力し検索すると「kintoneDotNET」が表示されたら選択します。
「Project」をチェックし、「Install」ボタンをクリックして、kintoneDotNET SDK をインストールします。

STEP3:データモデルのコーディング

To Do アプリの kintone 上のレコードを表現するモデルを作成します。
詳細については、次のドキュメントを参照してください。
How to use kintoneDotNET (External link)

「Solution Explorer」より、Project 名のアイコンを右クリックし(画面では「ConsoleApp2」)、サブメニューから、「Add」>「Class」を選択します。

ファイル名に「ToDoModel」と入力し、「Add」をクリックして、モデルクラスのファイルをプロジェクトに追加します。

下記を参考に ToDoModel クラスを定義するコードを作成します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*
 * .NET x kintone
 * Copyright (c) 2017 Cybozu
 *
 * Licensed under the MIT License
 * https://opensource.org/license/mit/
*/

using kintoneDotNET.API;
using kintoneDotNET.API.Types;
using System;
using System.Configuration;
namespace kintoneDotNetSDKDemo
{
    public class ToDoModel : AbskintoneModel
    {
        [kintoneItem(isUpload = false, isKey = true)]
        public override string record_id { get; set; } // kintone で自動生成されるレコードID
        [kintoneItem()]
        public DateTime Duedate { get; set; } // 締切日フィールド
        [kintoneItem()]
        public DateTime From { get; set; } // 開始日フィールド
        [kintoneItem()]
        public int days_remaining { get; set; } // 残り日数フィールド

        // kintone の App ID を App.Config ファイルから取得
        private string _app = ConfigurationManager.AppSettings["toDoAppId"];
        public override string app
        {
              get { return _app; }
        }
    }
}
解説

モデルクラス作成の際は、AbskintoneModel を継承し、更新するプロパティには kintoneItem 属性を設定します。
プロパティ名は、kintone のフィールドコードと一致するようにしてください。

上記の record_id フィールドのように更新対象外にしたいものは isUpload 属性を False にします。
また、重複しないキーに isKey=True を設定することで既存レコードを更新する Update 処理を利用できます。

モデル作成の詳細については、以下のドキュメントを参照してください。
How to use kintoneDotNET | モデルを作成する (External link)

STEP4:残り日数更新プログラムの作成

以下を参考に残り日数の自動更新プログラムを Program.cs にコーディングします。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*
 * .NET x kintone
 * Copyright (c) 2017 Cybozu
 *
 * Licensed under the MIT License
 * https://opensource.org/license/mit/
*/

using System;
using System.Collections.Generic;

namespace kintoneDotNetSDKDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            updateDaysRemaining();

            Console.ReadLine(); // テスト用、実用時には削除
        }
        static void updateDaysRemaining()
        {
            // 締切日と開始日が入力されているデータのみ抽出
            List<ToDoModel> toDos = ToDoModel.Find<ToDoModel>(x => x.From > DateTime.MinValue && x.Duedate > DateTime.MinValue);

            foreach (ToDoModel toDo in toDos)
            {

                Console.WriteLine(toDo.Duedate.ToShortDateString()); // 締切日を表示
                Console.WriteLine(toDo.From.ToShortDateString()); // 開始日を表示
                Console.WriteLine(toDo.days_remaining.ToString()); // 残り日数を表示

                if (toDo.From < DateTime.Today) // 既に開始日が経過している場合、締切日と本日の日付より残り日数を計算
                {
                    toDo.days_remaining = (toDo.Duedate - DateTime.Today).Days;
                }
                else // まだ開始日が経過していない場合は、締切日と開始日から残り日数を計算
                {
                    toDo.days_remaining = (toDo.Duedate - toDo.From).Days;
                }

                Console.WriteLine(toDo.days_remaining.ToString()); // 更新された残り日数を表示
                toDo.Update(); // 変更を更新

            }
        }
    }
}
解説

ToDoModel より、kintoneDotNET ライブラリの find メソッドを直接実行できるため kintone の To Do アプリのレコードを取得します。
締切日と開始日がすでに入力されているレコードのみ抽出します。

1
2
3
4
foreach (ToDoModel toDo in toDos)
{
    // 処理
}

以下のループで、各レコードにアクセスします。

1
2
3
4
5
6
7
8
if (toDo.From < DateTime.Today)
{
     toDo.days_remaining = (toDo.Duedate - DateTime.Today).Days;
}
else
{
     toDo.days_remaining = (toDo.Duedate - toDo.From).Days;
}

すでに開始日が経過している場合は、締切日と当日の日付から残り日数を計算し、まだ開始していない場合は締切日と開始日から残り日数を計算します。

1
toDo.Update();

最後に Update メソッドで、変更を更新します。

STEP5:App.config の設定

App.config にて、kintone への接続のための設定をします。

App.config の設定をプログラムから参照するため、まず、System.Configuration の .NET ライブラリーを追加します。
「Solution Explorer」より、「References」を右クリックして、サブメニューから、「Add Reference」を選択します。

「Assemblies」カテゴリーより、「Framework」を選択します。
「System.Configuration」のライブラリーにチェックを入れ、「OK」ボタンをクリックします。

これにより、ToDoModel.cs 内で System.Configuration が参照できます。

STEP6:kintone のアクセス設定

App.config ファイルを開き、次のドキュメントを参考に kintone へアクセスするためのパラメーターを設定します。
How to use kintoneDotNET | kintone へのアクセス設定を行う(app.Config/web.Config) (External link)

動作確認

Visual Studio で「F5」または「Start」ボタンをクリックして、プログラムを実行しエラーがないかを確認します。

プログラム実行後、kintone の To Do アプリで「残り日数」が更新されていることを確認します。

まとめ

.NET 用 kintone API SDK の kintoneDotNET を使うことで、kintone のアプリだけでは難しいデータの更新プログラムを簡単に作成できます。
このプログラムを Windows のタスクスケジューラ等で実行するように設定することで、データを定期更新できます。
「一定時間毎に FTP 経由で送られてくる在庫や売り上げの最新データを更新する」といったシナリオも、.NET のプログラムで実現可能です。

参照サイト

How to use kintoneDotNET (External link)

information

この Tips は、2023 年 12 月版 kintone で動作を確認しています。