ワークフロー一覧表示

  • 目的・用途

ワークフロー一覧はアイテムを登録するためにワークフローを選択する(アクティビティを新規作成する)機能である。

  • 利用方法

ワークフロー一覧で、登録したいアイテムのワークフローの行にある[新規(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 更新内容

2023/08/31

353ba1deb094af5056a58bb40f07596b8e95a562 初版作成

2024/07/1

7733de131da9ad59ab591b2df1c70ddefcfcad98 v1.0.7対応

results matching ""

    No results matching ""