はじめに
プリザンターの機能の1つに、項目への編集を抑制するロック機能があります。この機能、API経由でも使用することは出来るのですが、API経由でロックすることは出来てもロックを解除する方法がありません。今回はこれを解消する方法を紹介します。
解決法
かなりの力業であまり好ましくない方法1ではあるのですが、拡張SQLをAPI経由で叩くことでロックの解除をおこないます。早速コードを書いてみます。
{
"Name": UnlockItem,
"Description": "項目のロックを解除する拡張SQL",
"Api": true,
"CommandText": "-- Write an arbitrary SQL statement."
}
UPDATE
[Results]
SET
[Locked] = 0,
[Updator] = @_U, --更新者情報
[UpdatedTime] = GETDATE() --更新日時のタイムスタンプ
WHERE
[ResultId] = @ReferenceId
;
UPDATE
[Issues]
SET
[Locked] = 0,
[Updator] = @_U, --更新者情報
[UpdatedTime] = GETDATE() --更新日時のタイムスタンプ
WHERE
[IssueId] = @ReferenceId
;
SQL Serverを対象にしたクエリになるのでMySQLやPostgreSQLを使用している場合は適時書き換えてください。
ポイントとなるのは、期限付きテーブルと項目テーブルの両方に対応させるために2つのテーブルへの操作を連続しておこなっていることです。それぞれのテーブルのId
はItems
テーブルに保持されている一意のReferenceId
をキーとして持っているため重複することがないためこのような書き方が出来ます。
これをサーバスクリプトで使用するとなると、次の様なコードになります。
extendedSql.ExecuteNonQuery(
'UnlockItem',
JSON.stringify({
ReferenceId: ロックを解除したい項目ID
})
);
まとめ
今回はAPI経由で項目のロックを解除する方法を紹介しました。拡張SQLをAPI経由で叩くという方法なので、イレギュラーではありますが、この方法を使うことでAPI経由で項目のロックを外すことが可能です。是非試して見てください。
-
履歴保持の観点&本来のロックしたアカウントまたは特権管理者のみが解除できるという条件から外れてしまうため。 ↩