1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プリザンターで選択肢一覧を取得する方法

Last updated at Posted at 2025-01-14

はじめに

プリザンターでよく使われる分類項目の選択肢一覧。リンク項目を使用せずにベタ打ちで運用しているサイトも多いかと思います。このときにちょっと困ったことになるのが、選択肢自体をパッと取得する方法がないことです。
実はいろいろと対応方があるので、紹介します。

Wiki化してリンク項目とする

実はプリザンターのリンク項目は、Wikiにも使えます。使い方はとても簡単で、

  1. 新しくWikiを作り内容に選択肢一覧をコピー
  2. そのWikiを項目に対するリンクにする

これだけです。WikiのサイトIDの取得方法にちょっと癖があるので、詳細はマニュアルの「Wiki機能:選択肢一覧のマスタデータとして使用する」を参照してください。
この方法のメリットはなんといっても選択肢一覧が他のサイトでも共通化して使い回せることです。
外部システムなどからデータを取得する際もAPIのgetitems/get、更新もitems/updateが使えるため、利便性が高いです。

SiteSettingsから取得する

どうしても新しくリンク項目を作りたくない場合などは、SiteSettingsからデータを取得する方法があります。
プリザンターのサイトの構成データは[Sites]テーブルに格納されています。この中の[SiteSettings]カラムに各種設定がJSON化して格納されています。
サンプルとして、分類項目Aに次のような設定を入れているサイトのSiteSettingsを抜き出してみました。
image.png

{
	"Version": 1.017,
	"ReferenceType": "Results",
	"GridColumns": [
		"ResultId",
		"TitleBody",
		"Comments",
		"Status",
		"Manager",
		"Owner",
		"AttachmentsA",
		"ClassA",
		"NumA",
		"Updator",
		"UpdatedTime"
	],
	"EditorColumnHash": {
		"General": [
			"ResultId",
			"Ver",
			"Title",
			"Body",
			"Status",
			"Manager",
			"Owner",
			"Comments",
			"AttachmentsA",
			"NumA",
			"ClassA",
			"CheckA"
		]
	},
	"HistoryColumns": [
		"Ver",
		"Title",
		"Comments",
		"Status",
		"Owner",
		"Updator",
		"UpdatedTime",
		"AttachmentsA"
	],
	"Columns": [
		{
			"ColumnName": "NumA",
			"Format": "#,##.0;\"\";\"\"#,##.0"
		},
		{
			"ColumnName": "ClassA",
			"LabelText": "選択肢項目",
			"ChoicesText": "a\nb\nc\nd\ne",
			"SearchType": "PartialMatch"
		}
	],
	"Formulas": [
		{
			"CalculationMethod": "Extended",
			"Target": "NumA",
			"FormulaScript": "$IF(チェックA,1,0)",
			"FormulaMapping": "{\"CheckA\":\"チェックA\"}",
			"Id": 1
		}
	],
	"NoDisplayIfReadOnly": false
}

ここで注目するところはColumnsプロパティの中身です。

ColumnName:ClassAとなっているクラスのChoicesTextプロパティを見ると設定された選択肢一覧が格納されています。
これを適当なクエリを書いて抜き出してくればOKです。MSSQLで書くとこんな感じになります。

SELECT
    JSON_VALUE([SiteSettings], '$.Columns[1].ChoicesText')
FROM
    [Sites]
WHERE
    [SiteId] = 3482327

インデックスの部分はサイトの項目変更で変わる可能性があるので、随時追従させていくか、OPENJSONを使ってダイナミックに動くようにする必要があります。C#などのプログラムでクラスにバインディングして扱うことも勿論可能です。その場合は、SiteSettings.csを参考にクラスを作成してください。

まとめ

選択肢一覧に設定したデータを取得する方法を紹介しました。
オススメはWiki化する方法ですが、SiteSettingsからデータを取得する方法もあります。使われている環境にあわせて使い分けてみてください。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?