Pleasanterとn8n n8nでPleasanterのレコードを取得する。そして作成する。

Pleasanterとn8nの連携でいろんなことができますよ。

例えば、Pleasanterだと印刷フォームを使う印刷(PDF化)とかできないですが、n8nを使えば、無償で使えますしね。

うちみたいな弱小企業なんて、無償の恩恵に預からないと、DX化とか無理ですからね。

当初はキントーンを使おうか?と検討していたのですが、色々調べると、Pleasanterがオンプレなら無償と知ってしまったので、無償の誘惑には勝てず、多少の属人化なんて気にしないって感じで導入となりました。

しかし、印刷フォームからPDF化とかできないのは、Webデータベースのお決まりなんでしょうかね。

たしかに、そこまで面倒みたくないって感じでしょうか。

と、前置きはこのくらいにして、n8nとPleasanterの組み合わせでどんなことできるかを広めていきたいと思っています。

無償同士で最強ですね。www

今回はn8nからPleasanterのレコードを取得する。作成する。です。

n8nのセットアップは、今回、書きませんので、ご自身でお調べください。

まぁ、自分の場合、Copilot君と一緒にセットアップしたという感じです。

便利な時代になりましたねぇ。

こんな、ブログも要らなくなりそうな感じですね。

では説明です。

初めに準備としてPleasanterで十分な権限がある人によってAPIキーを作成しておきます。

左袖のユーザーからAPI設定を開きます。

作成(再作成)を押します。

非常に長いコード(キー)が作成されます。

安全のため長いほうが良いということでしょうね。

では、n8nを利用して、Pleasanterのレコードを参照してみましょう。

n8nを開きます。

Workflowを開きます。名称はデフォルトで良いです。変えるのも自由です。

右上のところに四角に+マークがあると思いますので、それを押してからが上記の操作となります。

①上のマスにHTTPを入力

② HTTP Requestを選択

③すると左の表の真ん中にHTTP Requestができるので、それをダブルクリックする。

するとHTTP Requestの設定画面になります。

cURLが分かる方は上にある、Import cURLを押して、そこにcURLの文を打つと勝手に変換され、Execute stepを押せば実行されますので、非常におススメです。

cURLが分からない方は上図の通りですが、ちょっとだけ説明しながら書いていきたいと思います。

まず以下の公式マニュアルからAPIを使っての参照方法を読んでください。

要するにこれをここの設定に反映すればよいということですね。
抜粋すると以下が重要です。

設定項目
HTTPメソッドPOST
Content-Typeapplication/json
文字コードUTF-8
URLhttp://{サーバー名}/{パス}/api/{コントローラー名}/{レコードID}/get
Body以下のjsonデータを参考のこと

じゃ、HTTP Requestの内容を順番に書いていきましょう。

Method:POST(上にあるHTTPメソッド)

URL:http://{サーバー名}/api/items/{レコードID}/get
 今回はオンプレ環境なので、上記にある途中の{パス}は不要です。
 サーバー名はご自身のIPアドレスやDDNSなどですね。
 レコードIDはまさしく参照したいID(レコードID)です。
 で、最後に参照するのでget文を使用する。

Send Bodyをオンにして

Body Content Type:JSON

Specify Body:Using Fields Below

{
     "ApiVersion": 1.1,
     "ApiKey": "63Kfk0ds3d4S2DBsa32..."
}

Body Parametersから下が、上記のApiVersion、ApiKeyのことを書くところです。
(コードは公式マニュアルの引用)

Name:ApiVersion、ApiKeyを記入

Value:それぞれの値、1.1、APIキーの値(最初にPleasanterで設定した)を記入します。

最後にResponseをオンで上記設定にして終了。

Execute stepを押して実行します。

うまくいくと右側になんらかの文字が出ます。

StatusCode:200だと成功です。

以下が、参照して貰えた情報です。(.AspNetCore.Sessionの内容だけだけ書き換えました。)

[
  {
    "body": {
      "StatusCode": 200,
      "Response": {
        "Offset": 0,
        "PageSize": 200,
        "TotalCount": 1,
        "Data": [
          {
            "SiteId": 872,
            "UpdatedTime": "2025-07-25T15:02:57",
            "IssueId": 873,
            "Ver": 1,
            "Title": "TEST",
            "Body": "",
            "StartTime": "2025-07-25T00:00:00",
            "CompletionTime": "2025-08-01T00:00:00",
            "WorkValue": 0,
            "ProgressRate": 0,
            "RemainingWorkValue": 0,
            "Status": 100,
            "Manager": 7,
            "Owner": 7,
            "Locked": false,
            "Comments": "[]",
            "Creator": 7,
            "Updator": 7,
            "CreatedTime": "2025-07-25T15:02:57",
            "ItemTitle": "TEST",
            "ApiVersion": 1.1,
            "ClassHash": {
              "ClassA": ""
            },
            "NumHash": {
              "NumA": 0
            },
            "DateHash": {
              "DateA": "1899-12-30T00:00:00"
            },
            "DescriptionHash": {
              "DescriptionA": ""
            },
            "CheckHash": {},
            "AttachmentsHash": {
              "AttachmentsA": []
            }
          }
        ]
      }
    },
    "headers": {
      "server": "nginx/1.24.0 (Ubuntu)",
      "date": "Wed, 06 Aug 2025 04:33:20 GMT",
      "content-type": "application/json;charset=utf-8",
      "content-length": "666",
      "connection": "close",
      "cache-control": "no-cache,no-store",
      "expires": "-1",
      "pragma": "no-cache",
      "set-cookie": [
        ".AspNetCore.Session=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; path=/; samesite=lax; httponly"
      ],
      "x-frame-options": "SAMEORIGIN",
      "x-xss-protection": "1; mode=block",
      "x-content-type-options": "nosniff"
    },
    "statusCode": 200,
    "statusMessage": "OK"
  }
]

認証がうまくいかないと401が返ってきます。

では続いて、n8nを利用して、Pleasanterのレコードを作成してみましょう。

基本は同じで、コマンドがとBodyがちょっと違うだけです。

公式マニュアルを参考にしながら行きましょう。

設定項目
HTTPメソッドPOST
Content-Typeapplication/json
文字コードUTF-8
URLhttp://{サーバー名}/api/items/{サイトID}/create (※1)
Body以下のjsonデータを参考のこと
(※1){サーバー名}、{サイトID}の部分は、適宜、環境に合わせて編集してください。
  pleasanter.netの場合は以下の形式になります。
  https://pleasanter.net/fs/api/items/{サイトID}/create

URLがちょっと違いますよね。http://{サーバー名}/api/items/{サイトID}/create とあります。

サイトIDはデータベースの番号ですね。(と言えば通じるでしょうか?)

以下の図のURLの番号ですね。

レコードIDは上記だとIDと表記されています。

(ちょっと横道ですが、サイトIDとレコードIDは連番なんですよね。面白い作りしてますね。)

上図だと、認証がうまくいかなかった時のものなので、データの取得の時と違い、認証を追加してますね。

X-Authorization

Bearer [APIキー]

無くてもイケると思いますが、こういった書き方もあるだなぁ。と思ってください。

Bodyのところに今回はTitleに「テスト」を書きました。

これを実行して上記のレコードID936ができたわけですね。

タイトルがテストとなっているのでわかると思います。

これで実行してみましょう。

うまくいきました。

今回はお手本なので、Body Parametersのところを分かりやすく書きましたが、JSON形式で書かないとならない場面が出てくると思いますが、それはまた、後日、改めてUpしますね。

あと、他のコマンドは以下の公式マニュアルを参照して貰えば、なんとなく作成できるかな?

ということでn8nとPleasanterをAPI連携で繋げるの巻でした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください