2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PleasanterのAPIの呼び出しコードを生成するツールを作った(Glue code生成プログラムを作ってみた)

Last updated at Posted at 2024-02-18

概要

  • PleasanterのAPIを呼び出すコードは型に守られたいと思いますよね?
  • PleasanterをAPIから呼び出すときに、画面上に表示される名称を指定して呼び出して呼び出したいと思いますよね?
  • サイトパッケージのエクスポートファイルから呼び出しコードを生成するプログラムを作成しました
  • TypeScript,C#,SQLからの呼び出しコードを生成してくれます

使い方

0.環境

コマンドはdocker環境として配布されています。
docker環境を用意してください。

1.サイトのエクスポートのエクトポート

コードを生成する対象となるサイトパッケージをエクスポートしてJSON形式のファイルを作成してください。

サイト機能:サイトパッケージのエクスポート

2.コードの生成

以下、コマンドはカレントディレクトリを作業用ディレクトリとして想定しています。
コマンドはbashを想定して書いています。dos環境の方は$(pwd)を%CD%に置換してください。
export.jsonというファイルがサイトパッケージをエクスポートしたファイルです。カレントディレクトリに配置されていると想定します。

docker run --rm -v $(pwd):/local yamada28go/hack-pleasanter-api-cli2:latest /local Generation export.json

コマンドを実行すると、コードが生成されます。
生成されたコードは以下となります。

├── HackPleasanterApi.Csharp.git
│   └── PleasanterApiLib
│       ├── Models
│       │   └── 記録テーブルModel.cs
│       ├── PleasanterApiLib.csproj
│       ├── Services
│       │   └── 記録テーブルService.cs
├── HackPleasanterApi.PostgreSQL
│   └── Generated
│       ├── CreateView
│       │   └── _記録テーブル_TempView.sql
│       └── DropView
│           └── _記録テーブル_DropTempView.sql
├── HackPleasanterApi.pleasanter-web-script.git
│   └── Generated
│       ├── Models
│       │   └── 記録テーブルModel.ts
│       └── Services
│           └── 記録テーブルService.ts

生成コマンドの動作は設定ファイルでカスタマイズする事が出来ます。
コードの生成に使用するテンプレートファイルのバージョンを固定する事も出来ますので、
長期的に使用するコードを生成する場合は、設定ファイルでバージョン指定する事をお勧めします。
設定方法はReadmeを参照してください。

3.ライブラリ

生成されたコードのを実行するためには、補助ライブラリが必用です。
各言語と補助ライブラリの関係を以下に示します。

3.1 ライブラリ C#

C#の場合、以下パッケージをnugetから入れてください。

HackPleasanterApi.Csharp

コードの実装イメージは以下です。
詳細な説明はpleasanter API接続用 Glue code生成プログラムを作ってみた C# ライブラリの説明を参照してください。

var s = new 記録テーブルService(cfg);

// テストデータはすべて消去する
var del = await s.DeleteALL(true);


var data = new CsharpSamples.Generated.Models.記録テーブルModel();

data.BasicItemData.Title = "タイトルてすと";
data.BasicItemData.Body = "本文";

// 個別の試験用データを設定する
data.ExtensionElements.CheckA = true;
data.ExtensionElements.TypeA = "TypeA";

// itemを生成する
var x = await s.CreateItem(data);
3.2 ライブラリ PostgreSQL

PostgreSQLの場合、CREATE VIEWが生成されます。
view経由でdbを操作する事で画面上に表示される名称と同一の名称でデータを操作する事が出来ます。

CREATE VIEW "V__記録テーブル" as
SELECT
  "SiteId",
  "ResultId" as "_記録テーブルId",

-- ・・・
  
  -- ユーザー定義項目
  "AttachmentsA" as "テストデータ_添付ファイルA" -- テストデータ_添付ファイルA,
  "CheckA" as "CheckA",
  "ClassB" as "テストデータ_分類B" -- テストデータ_分類B,
  -- ユーザー定義項目
FROM
  "public"."Results"
where
  "SiteId" = 2;
3.3 ライブラリ TypeScript

画面スクリプト用のコードが生成されます。
TypeScriptのコードであるため、TypeScriptのビルド環境が必用です。
ビルド環境を構築してください。

このコードを実行するためには、サポートライブラリが必用です。
以下パッケージを入れてください。

@yamada28go/pleasanter-web-script-type-helper

コードの実装例は以下となります。


  const s = new 記録テーブルService();
  const data = await s.apiGet(5223);
 
  const a = data.CheckA;
  const ta = data.TypeA;

また、このライブラリにはpleasanterの非同期処理をasyncに置き換えるラッパー関数がも実装されています。
こちらを使う事で以下のように、asyncを使う事が出来るようになります。

// オリジナルAPI
$p.apiGet({
  id: 1545,
  done: (data) => {
    console.log(data);
    debugger;
  },
});

// ラッパーAPI
const tt = await apiGetAsync(5223);

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?