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?

プリザンターで項目のロックをAPI経由で解除する方法

Posted at

はじめに

プリザンターの機能の1つに、項目への編集を抑制するロック機能があります。この機能、API経由でも使用することは出来るのですが、API経由でロックすることは出来てもロックを解除する方法がありません。今回はこれを解消する方法を紹介します。

解決法

かなりの力業であまり好ましくない方法1ではあるのですが、拡張SQLAPI経由で叩くことでロックの解除をおこないます。早速コードを書いてみます。

UnlockItem.json
{
    "Name": UnlockItem,
    "Description": "項目のロックを解除する拡張SQL",
    "Api": true,
    "CommandText": "-- Write an arbitrary SQL statement."
}
UnlockItem.json.sql
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つのテーブルへの操作を連続しておこなっていることです。それぞれのテーブルのIdItemsテーブルに保持されている一意のReferenceIdをキーとして持っているため重複することがないためこのような書き方が出来ます。

これをサーバスクリプトで使用するとなると、次の様なコードになります。

extendedSql.ExecuteNonQuery(
  'UnlockItem',
  JSON.stringify({
    ReferenceId: ロックを解除したい項目ID
  })
);

まとめ

今回はAPI経由で項目のロックを解除する方法を紹介しました。拡張SQLをAPI経由で叩くという方法なので、イレギュラーではありますが、この方法を使うことでAPI経由で項目のロックを外すことが可能です。是非試して見てください。

  1. 履歴保持の観点&本来のロックしたアカウントまたは特権管理者のみが解除できるという条件から外れてしまうため。

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?