.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で動作を確認しています。