【Pleasanter】週報提出・承認ワークフローをサイトパッケージで構築する

週報をメール・Excelで管理していると、承認待ちの所在や差し戻し後の更新が分かりにくくなります。今回はプリザンターの記録テーブル、プロセス、状況による制御を使い、提出者とリーダーで操作を分ける週報ワークフローを構築しました。

検証状況:新規作成時のエラーを解消し、元のプロセス5件と状況制御を再有効化した状態で新規作成画面が正常に表示されることを確認済み。メール実送信、全承認遷移、一般ユーザー別の閲覧制御は環境ごとの検証が必要です。

ワークフロー

状況 値 実行できる操作
下書き 100 提出者が編集・提出
提出 200 リーダーが承認・差し戻し
リーダー承認 300 リーダーが完了処理
差し戻し 400 提出者が修正・再提出
完了 900 閲覧のみ
下書き ──[提出者:提出]──> 提出 ──[リーダー:承認]──> リーダー承認 ──[リーダー:完了]──> 完了
                              │
                              └──[リーダー:差し戻し]──> 差し戻し ──[提出者:再提出]──> 提出

状況の直接変更を自由に許可すると承認を飛ばせるため、実際の状態遷移はプロセスボタンで実施します。

テーブルの項目

プリザンターで「記録テーブル」を作成し、タイトル、提出者(Owner)、リーダー(Manager)、対象週開始日(DateA)、ステータス(Status)、実施業務(DescriptionA)、成果(DescriptionB)、課題(DescriptionC)、改善策(DescriptionD)、来週の予定(DescriptionE)、振り返り(DescriptionF)、相談(DescriptionG)、リーダーコメント(DescriptionH)を用意します。

状況の選択肢は次のように定義します。

100,下書き
200,提出
300,リーダー承認
400,差し戻し
900,完了

初期値は 100 です。ユーザー選択型分類を使用する場合の候補指定例は [[Users]] です。

コピー用JSON:項目・遷移の設計データ

次は記事で使用する設計用JSONです。サイトパッケージの生JSONではなく、項目・プロセスの対応を確認するための可搬な仕様書です。このままサイトパッケージとしてインポートすることはできません。

{
  "template": "pleasanter-weekly-report",
  "tableType": "Results",
  "columns": {
    "Title": "週報タイトル",
    "Owner": "提出者",
    "Manager": "リーダー",
    "DateA": "対象週開始日",
    "Status": "提出ステータス",
    "DescriptionA": "今週の実施業務",
    "DescriptionB": "成果・進捗",
    "DescriptionC": "課題・問題点",
    "DescriptionD": "対処・改善策",
    "DescriptionE": "来週の予定",
    "DescriptionF": "振り返り・学び",
    "DescriptionG": "相談・支援依頼",
    "DescriptionH": "リーダーコメント"
  },
  "statuses": {
    "100": "下書き",
    "200": "提出",
    "300": "リーダー承認",
    "400": "差し戻し",
    "900": "完了"
  },
  "processes": [
    {"name": "提出する", "from": 100, "to": 200, "role": "submitter"},
    {"name": "承認する", "from": 200, "to": 300, "role": "leader"},
    {"name": "差し戻す", "from": 200, "to": 400, "role": "leader"},
    {"name": "再提出する", "from": 400, "to": 200, "role": "submitter"},
    {"name": "完了する", "from": 300, "to": 900, "role": "leader"}
  ]
}

実際のサイトパッケージは、対象サイトの「サイトパッケージのエクスポート」で生成したJSONを利用します。テンプレートを別環境へインポートする際は、サイトID・継承先・ユーザーID・グループIDが環境に依存する点に注意してください。

週報提出パッケージJSON全文(コピー用)

以下は、週報提出・承認用テーブルの検証用サイトパッケージJSON例です。コードブロックのコピー機能で全文をコピーし、UTF-8形式で weekly-report-package.json として保存できます。

重要:インポートの動作は未検証です。参照用サイトIDやアクセス権の継承先が含まれ、プリザンターのバージョンによって設定形式が異なります。本番サイトではなく検証環境で動作を確認してください。権限およびメール通知は実環境で個別に設定する必要があります。

{
  "HeaderInfo": {
    "AssemblyVersion": "1.3.49.0",
    "BaseSiteId": 9824000,
    "Server": "https://demo.pleasanter.org",
    "CreatorName": "週報提出・承認 単一テーブル(検証用)",
    "Convertors": [
      {
        "SiteId": 9824000,
        "SiteTitle": "週報運用管理",
        "ReferenceType": "Sites",
        "IncludeData": false,
        "Order": "[9824001]"
      },
      {
        "SiteId": 9824001,
        "SiteTitle": "01_週報提出・承認",
        "ReferenceType": "Results",
        "IncludeData": false
      }
    ],
    "IncludeSitePermission": false,
    "IncludeRecordPermission": false,
    "IncludeColumnPermission": false,
    "IncludeNotifications": false,
    "IncludeReminders": false
  },
  "Sites": [
    {
      "TenantId": 1,
      "SiteId": 9824000,
      "Title": "週報提出ワークフロー",
      "ReferenceType": "Sites",
      "ParentId": 0,
      "InheritPermission": 9824000,
      "SiteSettings": {
        "Version": 1.017,
        "ReferenceType": "Sites"
      },
      "Publish": false,
      "DisableCrossSearch": true,
      "Comments": []
    },
    {
      "TenantId": 1,
      "SiteId": 9824001,
      "Title": "週報提出・承認",
      "Body": "下書き・提出・リーダー承認・差し戻し・完了",
      "ReferenceType": "Results",
      "ParentId": 9824000,
      "InheritPermission": 9824000,
      "SiteSettings": {
        "Version": 1.017,
        "ReferenceType": "Results",
        "GridColumns": [
          "ResultId",
          "Title",
          "Owner",
          "Manager",
          "Status",
          "DateA",
          "UpdatedTime"
        ],
        "EditorColumnHash": {
          "General": [
            "Title",
            "Owner",
            "Manager",
            "Status",
            "DateA",
            "DescriptionA",
            "DescriptionB",
            "DescriptionC",
            "DescriptionD",
            "DescriptionE",
            "DescriptionF",
            "DescriptionG",
            "DescriptionH"
          ]
        },
        "Columns": [
          {
            "ColumnName": "Title",
            "LabelText": "タイトル",
            "ValidateRequired": true
          },
          {
            "ColumnName": "Owner",
            "LabelText": "提出者"
          },
          {
            "ColumnName": "Manager",
            "LabelText": "リーダー"
          },
          {
            "ColumnName": "Status",
            "LabelText": "提出ステータス",
            "ChoicesText": "100,下書き,草,status-new\n200,提出,提,status-inprogress\n300,リーダー承認,承,status-review\n400,差し戻し,戻,status-rejected\n900,完了,完,status-closed",
            "ReadOnly": true,
            "DefaultInput": "100"
          },
          {
            "ColumnName": "DateA",
            "LabelText": "対象週開始日"
          },
          {
            "ColumnName": "DescriptionA",
            "LabelText": "今週の実施業務"
          },
          {
            "ColumnName": "DescriptionB",
            "LabelText": "成果・進捗"
          },
          {
            "ColumnName": "DescriptionC",
            "LabelText": "課題・問題点"
          },
          {
            "ColumnName": "DescriptionD",
            "LabelText": "対処・改善策"
          },
          {
            "ColumnName": "DescriptionE",
            "LabelText": "来週の予定"
          },
          {
            "ColumnName": "DescriptionF",
            "LabelText": "振り返り・学び"
          },
          {
            "ColumnName": "DescriptionG",
            "LabelText": "相談・支援依頼"
          },
          {
            "ColumnName": "DescriptionH",
            "LabelText": "リーダーコメント"
          }
        ],
        "NoDisplayIfReadOnly": false,
        "AllowCopy": false,
        "Processes": [
          {
            "Id": 1,
            "Name": "週報_1_提出する",
            "DisplayName": "提出する",
            "ScreenType": 20,
            "CurrentStatus": 100,
            "ChangedStatus": 200,
            "ExecutionType": 0,
            "ActionType": 0,
            "AllowBulkProcessing": false,
            "ConfirmationMessage": "提出するを実行します。よろしいですか?",
            "Description": "提出者のみ実行可能に設定する"
          },
          {
            "Id": 2,
            "Name": "週報_2_再提出する",
            "DisplayName": "再提出する",
            "ScreenType": 20,
            "CurrentStatus": 400,
            "ChangedStatus": 200,
            "ExecutionType": 0,
            "ActionType": 0,
            "AllowBulkProcessing": false,
            "ConfirmationMessage": "再提出するを実行します。よろしいですか?",
            "Description": "提出者のみ実行可能に設定する"
          },
          {
            "Id": 3,
            "Name": "週報_3_リーダー承認",
            "DisplayName": "リーダー承認",
            "ScreenType": 20,
            "CurrentStatus": 200,
            "ChangedStatus": 300,
            "ExecutionType": 0,
            "ActionType": 0,
            "AllowBulkProcessing": false,
            "ConfirmationMessage": "リーダー承認を実行します。よろしいですか?",
            "Description": "担当リーダーのみ実行可能に設定する"
          },
          {
            "Id": 4,
            "Name": "週報_4_差し戻し",
            "DisplayName": "差し戻し",
            "ScreenType": 20,
            "CurrentStatus": 200,
            "ChangedStatus": 400,
            "ExecutionType": 0,
            "ActionType": 0,
            "AllowBulkProcessing": false,
            "ConfirmationMessage": "差し戻しを実行します。よろしいですか?",
            "Description": "担当リーダーのみ実行可能に設定する"
          },
          {
            "Id": 5,
            "Name": "週報_5_完了にする",
            "DisplayName": "完了にする",
            "ScreenType": 20,
            "CurrentStatus": 300,
            "ChangedStatus": 900,
            "ExecutionType": 0,
            "ActionType": 0,
            "AllowBulkProcessing": false,
            "ConfirmationMessage": "完了にするを実行します。よろしいですか?",
            "Description": "担当リーダーのみ実行可能に設定する"
          }
        ],
        "StatusControls": [
          {
            "Id": 1,
            "Name": "提出後の本文編集制限",
            "Status": 200,
            "ColumnHash": {
              "DescriptionA": "ReadOnly",
              "DescriptionB": "ReadOnly",
              "DescriptionC": "ReadOnly",
              "DescriptionD": "ReadOnly",
              "DescriptionE": "ReadOnly",
              "DescriptionF": "ReadOnly",
              "DescriptionG": "ReadOnly"
            }
          },
          {
            "Id": 2,
            "Name": "承認後の本文編集制限",
            "Status": 300,
            "ColumnHash": {
              "DescriptionA": "ReadOnly",
              "DescriptionB": "ReadOnly",
              "DescriptionC": "ReadOnly",
              "DescriptionD": "ReadOnly",
              "DescriptionE": "ReadOnly",
              "DescriptionF": "ReadOnly",
              "DescriptionG": "ReadOnly"
            }
          },
          {
            "Id": 3,
            "Name": "完了後の編集禁止",
            "Status": 900,
            "ReadOnly": true
          },
          {
            "Id": 4,
            "Name": "下書き時のリーダーコメント禁止",
            "Status": 100,
            "ColumnHash": {
              "DescriptionH": "ReadOnly"
            }
          },
          {
            "Id": 5,
            "Name": "差し戻し時のコメント編集禁止",
            "Status": 400,
            "ColumnHash": {
              "DescriptionH": "ReadOnly"
            }
          }
        ]
      },
      "Publish": false,
      "DisableCrossSearch": true,
      "Comments": []
    }
  ],
  "Data": [],
  "Permissions": [],
  "PermissionIdList": {
    "DeptIdList": [],
    "GroupIdList": [],
    "UserIdList": []
  }
}

プロセス設定

「管理」→「テーブルの管理」→「プロセス」で、上記5つのプロセスを登録します。操作ごとに現在の状況、変更後の状況、実行者の制限を設定してください。

プロセス 元の状況 変更後 対象
提出する 100 200 提出者
承認する 200 300 リーダー
差し戻す 200 400 リーダー
再提出する 400 200 提出者
完了する 300 900 リーダー

表示上のボタン制限だけでなく、レコードの所有者・担当リーダーとの一致条件やアクセス制御を設定します。権限不足のユーザーが別経路から状態を直接更新できないか、運用前に確認してください。

状況による制御

「下書き」「差し戻し」では提出者が業務内容を編集できます。「提出」「リーダー承認」「完了」では、業務内容を原則読取専用にします。承認操作に必要なリーダーコメントやプロセス保存との競合がないか、状態ごとに確認します。

提出時メール

「提出する」プロセスにメール通知を設定します。まず固定テスト宛先で確認し、次にレコードの担当リーダーへ通知する設定に切り替えます。通知を利用するにはサーバ側のメール送信設定も必要です。

件名:【週報提出】承認依頼
週報が提出されました。
提出者:〇〇
対象週:YYYY/MM/DD~
週報URL:対象レコードのURL
内容を確認し、承認または差し戻しをお願いします。

上記は通知内容の例であり、差し込み記法はインストール済みバージョンのマニュアルに合わせて設定します。

「指定された情報は見つかりませんでした」の切り分け

インポート後、新規作成ボタンを押すと管理者でも「指定された情報は見つかりませんでした」と表示される事象がありました。

  1. プロセスと状況による制御を一時的に無効化 → 新規作成画面は正常。
  2. プロセスのみ再有効化 → 正常。
  3. 状況による制御のみ再有効化 → 正常。
  4. 元の5件のプロセスと状況制御をすべて再有効化 → 正常。

これにより画面は復旧しましたが、根本原因となる単一設定は特定できていません。両機能の併用自体が原因とは言えません。再発した場合は、定義を一つずつ確認し、参照先サイト・グループ・項目が実在するかも調べます。

動作確認チェック

  • 下書きから週報を新規作成できる
  • 提出・承認・差し戻し・再提出・完了の状態遷移が正しい
  • 提出者にはリーダー専用操作が表示・実行されない
  • ほかの提出者の週報を閲覧できない
  • 提出メールが対象リーダーに届く
  • 完了状態の週報を一般ユーザーが変更できない

まとめ

プリザンターの標準機能で週報の提出から承認・完了までのワークフローを構築できます。サイトパッケージでの環境間移行は便利ですが、権限と参照IDの調整、メールの動作確認が不可欠です。

Previous Post Next Post