ワークフロー一覧表示
目的・用途
ワークフロー一覧はアイテムを登録するためにワークフローを選択する(アクティビティを新規作成する)機能である。
利用方法
ワークフロー一覧で、登録したいアイテムのワークフローの行にある[新規(New)]ボタンを押下することで、アイテム登録のワークフローが起動される。
利用可能なロール
ロール | システム 管理者 |
リポジトリ 管理者 |
コミュニティ 管理者 |
登録ユーザー | 一般ユーザー | ゲスト (未ログイン) |
---|---|---|---|---|---|---|
利用可否 | ○ | ○ | ○ | ○ |
機能内容
【アクティビティ一覧画面】から[New Activity]ボタンを押すと、【ワークフロー一覧画面】に移動する
- 以下のようなワークフロー情報を表示する
# | 表示項目 | 説明 |
---|---|---|
1 | No. | |
2 | ワークフロー(WorkFlow) | ワークフロー名 |
3 | アイテムタイプ(Item Type) | アイテムタイプ名 |
4 | フロー(Flow) | フロー名 |
5 | [新規](New)ボタン |
ワークフロー一覧から、[新規](New)ボタンを押すと、該当アクティビティを新規作成する
ワークフロー一覧画面及びアクティビティへのアクセス制限がかけられる
アクセス権限のないユーザーは[WorkFlow]タブが表示されず、画面上の操作によってはワークフロー一覧画面に到達できないが、URLを用いて直接画面に移動しようとした場合には以下のようにしてアクセスを拒否する。
同一ブラウザを使っての複数アクティビティの実行を制限する。
同一アクティビティを複数ユーザが開けないようロックする(/workflow/activity/lock/
)。
ゲストユーザーに対してログイン画面に移動する
権限がないユーザーに対して「権限が必要です」とのメッセージを表示する
関連モジュール
weko_workflow
処理概要
ワークフロー一覧
[New Activity]ボタンを押すと、ワークフロー一覧の情報をデータベースから「new_activity」メソッドで取得する。各ワークフローの情報は、WorkFlowクラスで扱われる。
テーブル名:workflow_workflow、workflow_flow_define、item_type、files_location
取得情報:
・flows_id
・flows_name
・itemtype_id
・itemtype
・index_tree_id
・flow_id
・flow_define
・is_deleted
・open_restricted
・location_id
・location
・is_gakuninrdm
これらのうち、表示に使用するのは以下である。
・flows_name
・itemtype
・flow_define
取得されたワークフロー一覧の情報を以下のテンプレートで表示する
ワークフローのactivity_idの採番ロジックは以下の通り。
「A-YYYYMMDD-nnnnn」の形式で生成される。(nnnnn=00001 を初期値としてアクティビティを生成する度にカウントアップする)def get_new_activity_id(self):
"""Get new an activity ID.
:return: activity ID.
"""
number = 1
try:
# Table lock for calculate new activity id
if db.get_engine().driver!='pysqlite':
db.session.execute(
'LOCK TABLE ' + ActivityCount.__tablename__ + ' IN EXCLUSIVE MODE')
# Calculate activity_id based on id
utc_now = datetime.utcnow()
current_date = utc_now.strftime("%Y-%m-%d")
today_count = ActivityCount.query.filter_by(date=current_date).one_or_none()
# Cannot use '.with_for_update()'. FOR UPDATE is not allowed
# with aggregate functions
if today_count:
# Calculate aid
number = today_count.activity_count + 1
if number > current_app.config['WEKO_WORKFLOW_MAX_ACTIVITY_ID']:
raise IndexError('The number is out of range \
(maximum is {}, current is {}'.format(current_app.config['WEKO_WORKFLOW_MAX_ACTIVITY_ID'],number))
today_count.activity_count = number
else:
# The default activity Id of the current day
_activty_count = ActivityCount(date=current_date, activity_count=number)
db.session.add(_activty_count)
prev_counts = ActivityCount.query.filter(ActivityCount.date\<current_date).all()
if prev_counts:
for prev_count in prev_counts:
db.session.delete(prev_count)
except SQLAlchemyError as ex:
raise ex
except IndexError as ex:
raise ex
# Activity Id's format
activity_id_format = current_app.\
config['WEKO_WORKFLOW_ACTIVITY_ID_FORMAT']
# A-YYYYMMDD-NNNNN (NNNNN starts from 00001)
date_str = utc_now.strftime("%Y%m%d")
# Define activity Id of day
return activity_id_format.format(
date_str,
'{inc:05d}'.format(inc=number))
更新履歴
日付 | GitHubコミットID | 更新内容 |
---|---|---|
|
353ba1deb094af5056a58bb40f07596b8e95a562 | 初版作成 |
|
7733de131da9ad59ab591b2df1c70ddefcfcad98 | v1.0.7対応 |