一括登録
目的・用途
本機能は、著者DBの情報を一括登録する機能である。
利用方法
管理者は本画面でインポート用のtsvファイルを取り込むことで、tsvファイル内の著者情報を一括で著者DBに登録することができる。
利用可能なロール
| ロール | システム 管理者 |
リポジトリ 管理者 |
コミュニティ 管理者 |
登録ユーザー | 一般ユーザー | ゲスト (未ログイン) |
|---|---|---|---|---|---|---|
| 利用可否 | ○ | ○ | ○※ |
※コミュニティ管理者の場合は管理するコミュニティに紐づく著者のみ登録可能
機能内容
(1) 一括登録画面の画面構成
【Admin > 著者DB管理(Author Management) > 一括登録(Import)】 を選択すると表示される
画面構成は以下の通り。3つのタブに分かれており、動作を進めることでタブが切り替わる。
| # | タブ名 | 機能概要 |
|---|---|---|
| 1 | 選択(Select) | 著者DBのインポート用ファイル(tsv)を選択する |
| 2 | インポート(Import) | インポートファイル内の著者情報の確認・登録をする |
| 3 | 結果(Result) | インポート結果を表示する |
【補足】
・タブの遷移の順番は「選択(Select)」→「インポート(Import)」→「結果(Result)」となる
「選択(Select)」タブ
本タブは、ユーザが著者DBのインポート用ファイルを選択することができる。画面構成は以下の通り
# ボタン 概要 1 インポート対象(Import taret) プルダウンである。押下すると以下の三つの選択肢が出る。
著者DB・著者識別子・機関識別子2 ファイル選択(Select File) ボタンを押下すると、ファイルのアップロードウィンドウを表示する。
ユーザは任意のインポート用ファイルを選択する。
なお、選択できる形式は「tsv」ファイルのみとする。3 次へ(Next) ボタンを押下すると、選択したファイルの形式(フォーマット)をチェックし、問題無ければ「インポート(Import)」タブへ自動遷移する。
エラーがある場合は、「選択(Select)」タブ上部に赤枠でエラーメッセージを表示し、「インポート(Import)」タブへ遷移はしない。
本ボタンの初期状態は非活性とする。
ユーザがファイルを選択後、インポート対象と選択されたファイルの形式が一致すれば活性化する。4 強制変更モード 強制変更モードをONにするチェックボックス
強制変更モード時にインポートで著者DBのデータを更新するとその著者DBのデータを使っているメタデータが全て著者DBに沿って更新される。
チェックボックスをONにした際にモーダルが表示され、同意チェックボックスにチェックを入れた上でOKボタンを押さなければONにならない。
具体的には以下
ON時に更新される内容:氏名、著者識別子、E-Mail、所属機関識別子、所属機関名
OFF時に更新される内容:著者識別子
selectタブにてプルダウン:登録対象テーブル(Export target)を表示する。
- プルダウンの選択肢としては以下のもの
- 著者情報(Author)
- 著者識別子(ID_Prefix)
- 機関識別子(Affiliation_ID)
- デフォルトでは「著者情報(Author)」が選択されている。
- このプルダウンで選択されている情報がインポートの対象となる。
- プルダウンの選択肢としては以下のもの
ファイル未選択の場合は[ファイル選択(Select File)]ボタン下に「選択したファイル名(Selected file name)」というラベルをグレーで表示する。
ファイル選択後、選択されたファイルのファイル名を表示するインポートするtsv/csvファイルがブラウザに埋め込まれた際にtsvファイルの形式を読み取り、
プルダウンと一致しないなら「次へ」ボタンは活性化させない。判断したインポートの対象がExport targetと違う場合、 アラートが表示され、以下のメッセージを表示する。また、「次へ」ボタンが活性化しない。
- 日本語:選択された登録対象テーブルとインポートファイルの形式が違います。
- 英語:The selected target table and the import file format are different.
判断したインポートの対象がExport targetと一致する場合、 「次へ」ボタンが活性化する。
「次へ」ボタンを押下すると、「インポート(Import)」タブへ移動する。
「インポート(Import)」タブ
本タブは、読み込んだインポート用ファイルの内容をチェックし、登録して良いかの確認を促すものである。画面構成は以下の通り
# ボタン 概要 1 インポート(Import) ボタンを押下すると、読み込んだ著者DBのインポート用ファイルの内容を登録する。ボタン押下後は、「インポート(Import)」タブへ自動遷移する。
読み込んだ著者DBのインポート用ファイルの内容にエラーがある場合は、本ボタンは非活性となる。2 ダウンロード(Download) ボタンを押下すると、画面に表示されている著者のリストをTSV形式でダウンロードできる。
・文字コードはBOM無しUTF-8、改行コードはCR+LFとする。
BOM付きのファイルのダウンロードを行うと、先頭についているBOMを文字列として取り込むため、正しく情報のダウンロードが行われない場合がある。
・ファイル名は「{target}_Check_yyyymmdd.tsv」とする。
・画面上トリミングされている情報があっても、ファイルにはすべて出力される画面に読み込んだインポート用ファイルの「サマリー(Summary)」を以下のように表示する
| # | 項目名 | 概要 | | -- | -------------- | ----------------------- | | 1 | 総計(Total) | 読み込んだファイルの著者の数 | | 2 | New Creator | 読み込んだファイルの内、新規登録となる著者の数 | | 3 | Update Creator | 読み込んだファイルの内、更新の著者の数 | | 4 | Delete Creator | 読み込んだファイルの内、削除となる著者の数 | | 5 | Result Error | 内容のチェックでエラーとなった著者の数 |
画面に表示される著者DBの詳細情報は以下の通り
# 項目名 概要 1 No. 読み込んだファイルの著者の通し番号を表示する。 2 WEKOID 読み込んだ著者のWEKO著者IDを表示する。 3 Full_Name 読み込んだ著者の姓と名を表示する。
姓と名の間はカンマ+スペース「姓, 名」で表示する。4 Mail Address 読み込んだ著者のメールアドレスを表示する。 5 チェック結果(Check Result) 読み込んだファイルの各著者について、インポートが可能かバリデーションチェックを実施する。
・エラーが無く、新規の著者の場合:「登録(Register)」と表示する
・エラーが無く、更新の著者の場合:「更新(Update)」と表示する
・削除する著者の場合:「削除(Delete)」と表示する
・バリデーションエラーがある場合:「エラー: XXXXX (ERROR: XXXXX)」とエラー内容を表示する・登録は可能であるが、何らかの問題があるときは「警告(Warning)」と表示する。
画面に表示される識別子の詳細情報は以下の通り
# 項目名 概要 1 No. 読み込んだファイルのデータの通し番号を表示する。 2 Scheme 読み込んだデータのスキーマを表示する。 3 Scheme_Name 読み込んだデータのスキーマ名を表示する。 4 url 読み込んだデータのスキーマurlを表示する。 5 チェック結果(Check Result) 読み込んだファイルの各データについて、インポートが可能かバリデーションチェックを実施する。
・エラーが無く、新規の識別子スキーマの場合:「登録(Register)」と表示する
・エラーが無く、既存の識別子スキーマの場合:「更新(Update)」と表示する
・削除する識別子の場合:「削除(Delete)」と表示する
・バリデーションエラーがある場合:「エラー: XXXXX (ERROR: XXXXX)」とエラー内容を表示する・登録は可能であるが、何らかの問題があるときは「警告(Warning)」と表示する。
結果タブへ遷移する際は、[インポート(Import)]ボタンを押下することで自動的に遷移し、それ以外の方法で遷移することはできない。
[インポート(Import)]ボタンは一度押下すると、ファイルを変更するまでは非活性となる。
「結果(Result)」タブ
- 本タブは、インポートファイルで登録・更新・削除した著者の登録結果を表示する。画面構成は以下の通り
| # | ボタン | 概要 |
|---|---|---|
| 1 | サマリー(Summary) |
・ 著者DBの場合のみ表示される。 ・ 表示されるのは以下の4つ ・「総計」 ・「成功」 ・「失敗」 ・「処理待ち」 |
| 2 | ダウンロード(Download) | ボタンを押下すると、画面に表示されている著者のリストをTSV形式でダウンロードできる。 ・文字コードはBOM無しUTF-8、改行コードはCR+LFとする ・ファイル名は「{target}_List_Download_yyyymmdd.tsv」とする |
画面に表示される著者のインポート結果は以下の通り
# 項目名 概要 1 No. 読み込んだファイルの著者の通し番号を表示する。 2 開始日(Start Date) 1著者に対して登録処理を開始した日時を表示する。
フォーマット:YYYY-MM-DD hh:mm:ss3 終了日(End Date) 1著者に対して登録処理が完了した日時を表示する。
フォーマット:YYYY-MM-DD hh:mm:ss4 WEKOID 読み込んだ著者のWEKO著者IDを表示する。 5 Full_name 読み込んだ著者の姓と名を表示する。
姓と名の間はカンマ+スペース「姓, 名」で表示する。6 ステータス(Status) 登録した結果を表示する。
・「Register Success」:新規登録が完了した場合に表示
・「Update Success」:変更・更新登録が完了した場合に表示
・「Delete Success」:削除が完了した場合に表示
・「ERROR: XXXXX」:エラーが発生した場合に表示画面に表示される識別子インポート結果は以下の通り
# 項目名 概要 1 No. 読み込んだファイルのデータの通し番号を表示する。 2 開始日(Start Date) 1データに対して登録処理を開始した日時を表示する。
フォーマット:YYYY-MM-DD hh:mm:ss3 終了日(End Date) 1データに対して登録処理が完了した日時を表示する。
フォーマット:YYYY-MM-DD hh:mm:ss4 Scheme 読み込んだデータのスキーマを表示する。 5 Scheme_Name 読み込んだデータのスキーマ名を表示する。 6 ステータス(Status) 登録した結果を表示する。
「Register Success」:新規登録が完了した場合に表示
「Update Success」:変更・更新登録が完了した場合に表示
「Delete Success」:削除が完了した場合に表示
「ERROR: XXXXX」:エラーが発生した場合に表示登録処理は、バックグラウンドで実行し、1データ毎にコミットしながら処理を進める
著者の登録情報は、著者のテーブルとElasticSearchに登録する
識別子の登録情報は、以下の場合で登録先を分ける。
- インポート時にtarget importプルダウンが「ID prefix」の場合は、
authors_prefix_settingsテーブルに登録する。 - インポート時にtarget importプルダウンが「Affiliation ID」の場合は、
authors_affiliation_settingsテーブルに登録する。
- インポート時にtarget importプルダウンが「ID prefix」の場合は、
本タブを開いた状態で画面をリロードすることで、登録状況が更新されるものとする
「選択(Select)」タブ,「インポート(Import)」タブへの遷移は可能とする。ただし、登録処理実行中は、各ボタンは非活性とする
(2-1) 著者情報の入力ファイル
入力ファイルはtsv形式で出力される
著者情報のtsvファイルの構成は以下の通り
ヘッダ行
ラベル(英語)
ラベル(日本語)
データ行(著者1)
データ行(著者2)
…
文字コードはUTF-8(BOM無し),改行コードはCR+LFとする
1行目はヘッダ行とし、システム管理するものである。先頭に"#"が付いている
2行目と3行目はラベルを表示し、TSV入力の補助をする。先頭に"#"が付いている
4行目以降に著者の情報を入力する。1行1著者となる
著者情報の各ヘッダの情報は以下の通り
# ヘッダ項目 ラベル(日本語) ラベル(英語) 概要 1 pk_id WEKO ID WEKO ID WEKO3の著者ID(author_link)を入力する 2 authorNameInfo[0...n].familyName 姓 Family Name 著者の姓を入力する 3 authorNameInfo[0...n].firstName 名 Given name 著者の名を入力する 4 authorNameInfo[0...n].language 言語 Language 著者の言語を入力する 5 authorNameInfo[0...n].nameFormat フォーマット name Format 著者の姓名のフォーマットを入力する
※現状(SP67時点)は「familyNmAndNm」固定6 authorNameInfo[0...n].nameShowFlg 姓名・言語 表示/非表示 Name Display 著者の姓名と言語の表示/非表示を入力する
表示する: "Y"
表示しない: "N"7 authorIdInfo[0...n].idType 外部著者ID 識別子 Identifier Scheme 外部著者IDの識別子を入力する 8 authorIdInfo[0...n].authorId 外部著者ID URI Identifier URI 外部著者IDの値を入力する 9 authorIdInfo[0...n].authorIdShowFlg 外部著者ID 表示/非表示 Identifier Display 外部著者IDの表示/非表示を入力する
表示する: "Y"
表示しない: "N"10 emailInfo[0...n].email メールアドレス Mail Address 著者のメールアドレスを入力する 11 is_deleted 削除フラグ Delete Flag 著者を削除する場合に "D" と入力する 12 authorAffiliationInfo[0...n].affiliationId[0...n].idtype 外部所属機関ID 識別子 Affiliation Identifier Scheme 外部所属機関IDの識別子を入力する 13 authorAffiliationInfo[0...n].affiliationId[0...n].uri 外部所属機関ID URI Affiliation Identifier URI 外部所属機関IDの値を入力する 14 authorAffiliationInfo[0...n].authorIdShowFlg 外部所属機関ID 表示/非表示 Affiliation Identifier Display 外部所属機関IDの表示/非表示を入力する
表示する: "Y"
表示しない: "N"15 authorAffiliationInfo[0...n].affiliationNameInfo[0...n].affiliationName 外部所属機関名 Affiliation Name 外部所属機関名を入力する 16 authorAffiliationInfo[0...n].affiliationNameInfo[0...n].language 言語 Language 外部所属機関名の言語を入力する 17 authorAffiliationInfo[0...n].affiliationNameInfo[0...n].nameShowFlg 外部所属機関名・言語 表示/非表示 Affiliation Name Display 外部所属機関名と言語の表示/非表示を入力する
表示する: "Y"
表示しない: "N"18 authorAffiliationInfo[0...n].affiliationPeriodInfo[0...n].periodStart 外部所属機関 所属期間 Affiliation Period 外部所属機関所属期間開始時期を入力する。
形式:yyyy-MM-dd19 authorAffiliationInfo[0...n].affiliationPeriodInfo[0...n].periodStart 外部所属機関 所属期間 Affiliation Period 外部所属機関所属期間終了時期を入力する。
形式:yyyy-MM-dd20 communityIds[0...n] コミュニティID Community ID 著者に紐づけるコミュニティのIDを入力する。
【補足】
- 繰り返し項目とする場合はヘッダ行の各項目名の後ろに [1], [2], ..., [N] と入力する。
※1つ目の項目名には [0] が記載されている。 - WEKO ID, Delete Flagは繰り返し記載することはできない。
- 姓名のフォーマットの値が空欄の場合は「familyNmAndNm」の値を固定でシステムが登録する。
- WEKO IDが空欄の場合、著者DBに新規登録する。
また、存在するIDの場合、該当のIDの著者データを更新する。
(2-2) 識別子情報の入力ファイル
入力ファイルはtsv形式で出力される
著者識別子、機関識別子のtsvファイルの構成は以下の通り
テーブル情報
ヘッダ行
ラベル(英語)
ラベル(日本語)
データ行(識別子1)
データ行(識別子2)
…
- 文字コードはUTF-8(BOM付き),改行コードはCR+LFとする。
- 1行目はテーブルを表す文字列とする。先頭に"#"が付いている。 authors_prefix_settings、または、authors_affiliation_settingsが入る。
- 2行目はヘッダ行とし、システム管理するものである。先頭に"#"が付いている。
- 3行目と4行目はラベルを表示し、TSV入力の補助をする。先頭に"#"が付いている。
- 5行目以降に情報を出力する。
著者識別子、機関識別子の各ヘッダの情報は以下の通り
# ヘッダ項目 ラベル(日本語) ラベル(英語) 概要 1 scheme スキーマ Scheme スキーマを入力する 2 name 名前 Name スキーマに対応する識別子名を入力する 3 url URL URL スキーマに応じるURLを入力する 4 is_deleted 削除フラグ Delete Flag 識別子を削除する場合に "D" と出力する
エクスポートの場合は全て空欄である。5 community_ids[0...n] コミュニティID Community Id 識別子に関連づけるコミュニティのIDを入力する
(3) エラーチェック
本画面で著者情報のチェックをしているエラー内容は以下の通り
# チェックするタブ チェック内容 処理 エラーメッセージ(日) エラーメッセージ(英) 備考 1 選択(Select) tsvファイルの形式のチェック
#1: 選択したファイルがtsvファイルでは無い、またはtsvファイルの文字コードがUTF-8では無い
#3: tsvファイルの形式のエラー(タブ無し, ヘッダ行無し)ERROR TSVファイルを読み込めませんでした。ファイル形式がTSVであること、またそのファイルがUTF-8でエンコードされているかを確認してください。 The TSV file could not be read. Make sure the file format is TSV and that the file is UTF-8 encoded. 2 選択(Select) ヘッダ行だけの空レコードになっている ERROR インポートのデータがありません。 There is no data to import. 3 選択(Select) ヘッダの間違いからメタデータキーが重複している ERROR 以下のメタデータキーが重複しています。
{1}The following metadata keys are duplicated.
{1}{1}: メタデータキー名 4 選択(Select) tsvに指定された項目とDBの項目が一致していない ERROR 指定された項目とDBの項目が一致しません。
{1}Specified item does not consistency with DB item.
{1}{1}: 項目名 5 選択/インポート
(Select/Import)Celeryが動いていない状態 ERROR Celeryは動いていません。 Celery is not running. 6 選択/インポート
(Select/Import)自分の端末にインポートを実行しているうちに、インポートを実行する ERROR インポートを実行中です。 Import is in progress. 7 選択/インポート
(Select/Import)他の端末でインポートを実行している ERROR 他の端末でインポートを実行中です。 Import is in progress on another device. 8 インポート(Import) 著者情報、機関情報で他の情報を入力されたが、idTypeとauthorIdのいずれかを入力されていない状態 ERROR {}は必須項目です。 {} is required item. 9 インポート(Import) #4 著者が一意に定まらない(存在しないAuthor ID (author_link))
#5 削除対象の著者がDBに存在しないERROR 指定されたAuthor IDが存在していません。 Specified Author ID does not exist. 10 インポート(Import) #6 言語の指定でDBに存在しない言語を入力する
#8 ヘッダ項目#7の姓名・言語 表示/非表示で"Y","N"以外を入力する
#9 ヘッダ項目#10の外部著者識別子 表示/非表示で"Y","N"以外を入力する
ヘッダ項目#13の外部所属機関識別子 表示/非表示で"Y","N"以外を入力する
ヘッダ項目#16の外部所属機関名・言語 表示/非表示で"Y","N"以外を入力するERROR {1}は{2}のいずれかを設定してください。 {1} should be set by one of {2}. {1}: language, nameShowFlg, authorIdShowFlg
{2}: 言語の一覧、"Y","N"11 インポート(Import) #10 ヘッダ項目#20の削除フラグで"D"以外を入力する
#13 姓名のフォーマットの値が「familyNmAndNm」以外の値ERROR {1}は{2}を設定してください。 {1} should be set by one of {2}. {1}: is_deleted, nameFormat
{2}: "D"、"familyNmAndNm"12 インポート(Import) ID PrefixでDBに存在しない識別子を入力する ERROR 指定された外部著者ID 識別子'{1}'が存在していません。 Specified Identifier Scheme '{1}' does not exist. {1}:外部著者ID 識別子 13 インポート(Import) Affiliation IDでDBに存在しない識別子を入力する ERROR 指定された外部所属機関ID 識別子'{1}'が存在していません。 Specified Affiliation Identifier Scheme '{1}' does not exist. {1}:外部所属機関ID 識別子 14 インポート(Import) TSVファイルの中に重複するデータがある ERROR TSVファイルの中に重複するデータがあります。 There is duplicated data in the TSV file. 各レコードがマルチタスクで実行されているので、後勝ちで2番目のデータを上書きするのが難しい(重複する場合にどのレコードで更新されるか定まらない)。WARNING→ERRORに変更し、2つ目以降は更新されないようにする 15 インポート(Import) 外部著者識別子がDBに存在している WARNING 外部著者識別子がDBに存在しています。
{1}External author identifier exists in DB.
{1}{1}:外部著者識別子 16 インポート(Import) 外部所属機関所属期間が日付の形式になっていない ERROR 外部所属機関所属期間が形式にあっていません。
yyyy-MM-dd、または空白であるようにしてください。
{1}Affiliation Period must be in the format:
yyyy-MM-dd, blank
{1}{1}:外部所属期間 17 インポート(Import) 所属期間終了日が開始日より早い ERROR 所属期間終了日は開始日より後の日付にしてください Period end must be after Period start. 18 選択/インポート/結果
(Select/Import/Result)サーバ内部エラー(ネットワークの問題、予期しない例外など)が発生した ERROR サーバ内部エラー Internal server error 19 結果(Result) 登録成功 INFO 登録成功 Register Success 20 結果(Result) 更新成功 INFO 更新成功 Update Success 21 結果(Result) 削除成功 INFO 削除成功 Delete Success 22 結果(Result) エラーが発生したため、インポートに失敗した ERROR インポートに失敗しました。 Failed to import. 23 インポート(Import) 削除済みの著者について、tsvに該当の著者情報を指定して更新した WARNING 指定された著者は削除済です。tsvの内容で著者情報を更新しますが、著者は削除されたままです。 The specified author has been deleted. Update author information with tsv content, but author remains deleted as it is. 24 インポート/結果
(Import/Result)アイテムに紐づいている著者を削除した ERROR アイテムがリンクしているため、指定された著者は削除できません。 The author is linked to items and cannot be deleted. 英語のメッセージが既存
日本語のメッセージを新規追加25 インポート(Import) コミュニティIDに許可されていない記号や制御文字等を入力した ERROR 無効なコミュニティID形式です。 Invalid community ID format. 26 インポート(Import) communityIdsでDBに存在しないコミュニティのIDを入力した ERROR 指定されたコミュニティID「{1}」は存在しません。 Community ID(s) {1} does not exist. {1}: コミュニティID 27 インポート(Import) コミュニティ管理者で管理対象外のコミュニティのIDを入力した
または、コミュニティ管理者で管理対象外のコミュニティの紐づけを解除したERROR 著者IDに紐づく、コミュニティ「{1}」の管理権限がありません。 You do not have permission for this Author’s communities: {1}. {1}: コミュニティID 28 インポート(Import) コミュニティ管理者で管理対象外のコミュニティのみに紐づく著者のpk_idを入力した ERROR このレコードを操作することはできません。 You cannot manage this record. 29 インポート(Import) コミュニティ管理者でcommunityIdsが空欄 ERROR 少なくとも1つの管理対象コミュニティを含める必要があります。 You must include at least one managed community. 本画面で識別子のチェックをしているエラー内容は以下の通り
# チェックするタブ チェック内容 処理 エラーメッセージ(日) エラーメッセージ(英) 備考 1 選択(Select) tsvファイルの形式のチェック
#1: 選択したファイルがtsvファイルでは無い、またはtsvファイルの文字コードがUTF-8では無い
#3: tsvファイルの形式のエラー(タブ無し, ヘッダ行無し, テーブル名の指定がない)ERROR TSVファイルを読み込めませんでした。ファイル形式がTSVであること、またそのファイルがUTF-8でエンコードされているかを確認してください。 The TSV file could not be read. Make sure the file format is TSV and that the file is UTF-8 encoded. 2 選択(Select) ヘッダ行だけの空レコードになっている ERROR インポートのデータがありません。 There is no data to import. 3 選択(Select) ヘッダの間違いからキーが重複している ERROR キーが重複しています。 The keys are duplicated. 4 選択(Select) tsvに指定された項目とDBの項目が一致していない ERROR 指定された項目とDBの項目が一致しません。
{1}Specified item does not consistency with DB item.
{1}{1}: 項目名 5 選択/インポート
(Select/Import)Celeryが動いていない状態 ERROR Celeryは動いていません。 Celery is not running. 6 選択/インポート
(Select/Import)自分の端末にインポートを実行しているうちに、インポートを実行する ERROR インポートを実行中です。 Import is in progress. 7 選択/インポート
(Select/Import)他の端末でインポートを実行している ERROR 他の端末でインポートを実行中です。 Import is in progress on another device. 8 選択/インポート
(Select/Import)自分の端末でインポートを実行しているうちに、インポートを実行する ERROR インポートを実行中です。 Import is in progress. 9 インポート(Import) Schemeが記述されていない ERROR schemeを設定してください。 Scheme is required item. 10 インポート(Import) Nameが記述されていない ERROR nameを設定してください。 Name is required item. 11 インポート(Import) urlがURLの形式でない ERROR urlをURLの形式にしてください。 URL is not URL format. 12 インポート(Import) 削除対象の識別子が存在しない ERROR 指定された識別子が存在していません。 The specified identifier does not exist. 13 インポート(Import) TSVファイルの中に重複するデータがある ERROR TSVファイルの中に重複するデータがあります。 The specified scheme is duplicated. 各レコードがマルチタスクで実行されているので、後勝ちで2番目のデータを上書きするのが難しい(重複する場合にどのレコードで更新されるか定まらない)。WARNING→ERRORに変更し、2つ目以降は更新されないようにする 14 インポート(Import) schemaに「WEKO」が入力されている。 ERROR 著者識別子WEKOは編集できません。 The scheme WEKO cannot be used. 15 選択/インポート/結果
(Select/Import/Result)サーバ内部エラー(ネットワークの問題、予期しない例外など)が発生した ERROR サーバ内部エラー Internal server error 16 結果(Result) 登録成功 INFO 登録成功 Register Success 17 結果(Result) 更新成功 INFO 更新成功 Update Success 18 結果(Result) 削除成功 INFO 削除成功 Delete Success 19 結果(Result) エラーが発生したため、インポートに失敗した ERROR インポートに失敗しました。 Failed to import. 20 インポート/結果
(Import/Result)著者DBに紐づいている識別子を削除した ERROR 著者DBで使用されているため、指定された識別子は削除できません。 The specified scheme is used in the author ID. 21 インポート(Import) コミュニティIDに許可されていない記号や制御文字等を入力した ERROR 無効なコミュニティID形式です。 Invalid community ID format. 22 インポート(Import) community_idsでDBに存在しないコミュニティのIDを入力した ERROR 指定されたコミュニティID「{1}」は存在しません。 Community ID(s) {1} does not exist. {1}: コミュニティID 23 インポート(Import) コミュニティ管理者で管理対象外のコミュニティのIDを入力した
または、コミュニティ管理者で管理対象外のコミュニティの紐づけを解除したERROR 著者IDに紐づく、コミュニティ「{1}」の管理権限がありません。 You do not have permission for this Author’s communities: {1}. {1}: コミュニティID 24 インポート(Import) コミュニティ管理者で管理対象外のコミュニティのみに紐づく識別子のschemeを入力した ERROR このレコードを操作することはできません。 You cannot manage this record. 25 インポート(Import) コミュニティ管理者でcommunity_idsが空欄 ERROR 少なくとも1つの管理対象コミュニティを含める必要があります。 You must include at least one managed community. 処理の「エラー」は登録不可、「ワーニング」は登録可能とする。
(4) その他
バックグラウンドでインポート処理を実行する。
著者情報は論理削除とする。
著者DBのインポート機能により、著者DBを更新/削除した際は、紐づくアイテムの著者情報までは更新を行わない。
関連モジュール
weko-authors
処理概要
インポート対象の判定
TSV ファイルの 1行目 に記載された情報をもとに、インポート対象を判定する。
| 1行目の内容 | インポート対象 | |----------------------|----------------------| | 記載なし | 著者 (
authorsテーブル) | |authors_prefix_settings| 著者識別子 (authors_prefix_settingsテーブル) | |authors_affiliation_settings| 機関識別子 (authors_affiliation_settingsテーブル) |フロントエンドで 「次へ」ボタン を押せるのは、TSV の形式が Export target の値と一致した場合のみ。
インポート前のチェック
「次へ」を押した際、check_import_fileメソッドを実行し、以下のチェックを行う。(1) Import target の検証
- TSV の 1行目 が
Import target(Author, ID_Prefix, Affiliation_ID) に対応するものかを確認。 一致しない場合、エラーメッセージを表示し、選択タブに戻す。
(2) Redis キーの確認
WEKO_AUTHORS_IMPORT_CACHE_KEYが既に存在する場合、前回のインポート処理が完了していないと判断し、インポートを許可しない。(3) Celery ワーカーの確認
- Celery ワーカー (
celery worker) が稼働していない場合、インポートを許可しない。
- TSV の 1行目 が
**(4) ファイルフォーマットの検証**
各 TSV ファイルの **各行のデータチェック** を行う。
以下では識別子の場合のチェック項目のみとする。
| **チェック項目** | **エラー条件** |
|----------------|----------------|
| **TSV フォーマット** | 列の数が不足または過剰 |
| **name 列** | 空欄の場合 |
| **scheme 列** | 空欄の場合 |
| **scheme の重複** | 同一ファイル内に重複がある場合 |
| **URL の形式** | `http://` または `https://` で始まっていない場合 |
| **削除対象の識別子** | DB内に対象が存在しない場合 |
| **コミュニティID列** | DB内に対象が存在しない、またはコミュニティ管理者の管理対象外のコミュニティの場合|
- schemeの値が対象となるDBに既存で存在する場合、更新とする。
- schemeの値が対象となるDBに存在しない場合、新規登録となる。
インポート処理
チェックを通過し、インポートボタンを押下するとインポートタスクが非同期で実行される。check_import_dataメソッドを実行し、Redisに定数WEKO_AUTHORS_IMPORT_CACHE_KEYの値にimport_typeを保存する。- 「インポート」ボタン を押すと、非同期タスク (
Celery) が開始する。 import_typeに応じて、適切なインポートメソッドを呼び出す。| import_type の値 | 実行する処理 | |----------------|----------------| |
Author| 著者DB用のインポート (authorsテーブル) | |ID_Prefix| 著者識別子用のインポート (authors_prefix_settingsテーブル) | |Affiliation_ID| 機関識別子用のインポート (authors_affiliation_settingsテーブル) |
インポートステータスの管理
- 各インポートタスクの ID を Redis (
WEKO_AUTHORS_IMPORT_CACHE_KEY) に保存。 check_import_statusメソッドが定期的に実行され、処理が完了したタスクに関して 結果タブの画面が自動更新 される。- すべてのタスクが完了した時点で、Redis の
WEKO_AUTHORS_IMPORT_CACHE_KEYを削除。
- 各インポートタスクの ID を Redis (
エラーハンドリング | エラー発生箇所 | 対応 | |----------------|----------------| | TSV のフォーマット不一致 | エラーメッセージを表示し、次のステップへ進めない | | Celery ワーカーが停止 | エラーメッセージを表示し、インポートを禁止 | | Redis キーが既に存在 | 前回の処理が完了していないため、インポートを禁止 | | DB エラー (SQLAlchemyError) | リトライ(最大
5回)、失敗した場合はスキップ | | Redis エラー (RedisError) | リトライ(最大5回)、失敗した場合はエラーを表示 |著者DBのインポートについて
- 著者DBのインポートについては著者の量によっては処理が重くなるためバッチ処理を行う。
関係メソッド:
- ImportView.check_import_file
- ImportView.check_pagination
- ImportView.check_file_download
- ImportView.import_authors
- ImportView.result_file_download
定数は以下 =右はデフォルト値
WEKO_AUTHORS_IMPORT_CACHE_USER_TSV_FILE_KEY= 'authors_import_user_file_key'- インポート時にユーザーからのファイルを一時ファイルとして取り込んだ際のパスをredisに保存する目的
WEKO_AUTHORS_IMPORT_CACHE_BAND_CHECK_USER_FILE_PATH_KEY= "authors_import_band_check_user_file_path"- インポートタブにてチェック結果tsvのパスをredisに保存する目的
WEKO_AUTHORS_IMPORT_CACHE_RESULT_OVER_MAX_FILE_PATH_KEY= "authors_import_result_file_of_over_path"- 最大表示数を超えた分のインポート結果tsvのパスをredisに保存する目的
WEKO_AUTHORS_IMPORT_CACHE_RESULT_FILE_PATH_KEY= "authors_import_result_file_path"- 全てのインポート結果をまとめたtsvのパスをredisに保存する目的
WEKO_AUTHORS_IMPORT_CACHE_OVER_MAX_TASK_KEY= "authors_import_over_max_task"- 最大表示数を超えた分のインポートタスクのtaskIDをredisに保存する目的
WEKO_AUTHORS_IMPORT_CACHE_RESULT_SUMMARY_KEY= "authors_import_summary"- 最大表示数を超えた分のタスクの成功数、失敗数をredisに保存する目的
WEKO_AUTHORS_IMPORT_BATCH_SIZE= 100- インポートタスクのバッチサイズ
WEKO_AUTHORS_IMPORT_MAX_NUM_OF_DISPLAYS= 1000- 結果タブにおける最大表示数
WEKO_AUTHORS_BULK_IMPORT_MAX_RETRY= 5- インポート処理時の最大リトライ数
WEKO_AUTHORS_BULK_IMPORT_RETRY_INTERVAL= 5- インポート処理時のリトライ間隔
インポートチェック結果・インポート結果について
- ページネーションの仕様
- フロント側で表示レコード数の制限を行う
- ページネーションの流れ
- ユーザーがページを選択すると、フロント側で
pageパラメータを API に渡す - サーバサイドは以下の処理を実行
- 指定された TSV ファイルを開く
pageパラメータに基づいてデータを抽出- フロントへ返却
- フロントは取得したデータを表に表示する
- ユーザーがページを選択すると、フロント側で
- なお、結果タブの方ではcelorytaskの進捗管理の兼ね合いで表示数をWEKO_AUTHORS_IMPORT_MAX_NUM_OF_DISPLAYSまで制限する。
表示されていないものの進捗確認はサマリーをページ上部に追加することで対応、結果はダウンロードボタンからtsvで確認するものとする。
- ページネーションの仕様
- **一時ファイルの管理**
- **保存ディレクトリ**
- `/var/tmp/authors_import`
- **生成される一時ファイル**
- インポートでユーザーから埋め込まれたtsvファイルは一時ファイルとして以下のようなファイル名で保存するものとする。
import_author_{yyyymmddhhmm}.tsv
- インポートチェック結果を一時ファイルとして保存する。
- データ数が定数`WEKO_AUTHORS_IMPORT_BATCH_SIZE`を超える場合、分割してチェック結果を一時ファイルとして保存する。
ファイル名は**定数WEKO_AUTHORS_IMPORT_TMP_PREFIX+_{yyyymmddhhmm}_part{}** として保存する。
- ダウンロードする際には分割したファイルを合体させ、ファイル名としては**import_author_check_result_{yyyymmddhhmm}.tsv**とする。
インポートチェック結果のtsvで保存する情報としては以下
- No.
- WEKOID
- full_name
- Mail Address
- チェック結果
- インポート結果を一時ファイルとしてtsvファイルで保存する。
- ファイル名としては**import_author_result_{yyyymmddhhmm}.tsv**とする。
インポート結果のtsvで保存する情報としては以下
- NO.
- Start Date
- End Date
- WEKOID
- full_name
- status
- **ファイル削除のタイミング**
| ファイル | 削除条件 |
|-----------------|------------------------------------------------|
| `import_author_{yyyymmddhhmm}.tsv` | インポートチェック完了時 / 保存期間24 時間経過時|
| `import_author_check_result_{yyyymmddhhmm}.tsv` | 別インポートチェック時 / 保存期間24 時間経過時 |
| `import_author_result_{yyyymmddhhmm}.tsv` | 別インポート開始時 / インポート完了後 24 時間経過時(Celery タスクで削除) |
- 保存期間は (デフォルト: 24時間)で管理
- 削除処理は Celery タスクが定期的に実行
- **インポートタブでの表示処理の流れ**
1. **フロント側**
- ユーザーがページを選択
- `GET /api/import/results?page={page}` のような API リクエストを送信
2. **サーバ側**
- `page` に基づき、該当 TSV ファイルの該当データを取得
- 以下のtsvからデータを返却
- **インポートタブ**: `import_author_check_result_{yyyymmddhhmm}_part{}.tsv`
3. **フロント側**
- 取得したデータを表に表示
- **インポート処理**
- 定数`WEKO_AUTHORS_IMPORT_MAX_NUM_OF_DISPLAYS`までのデータは既存の処理通り、フロントにtaskidを渡し、都度更新する。
- 定数`WEKO_AUTHORS_IMPORT_MAX_NUM_OF_DISPLAYS`以降のデータは先に処理しているタスクが終了後バックエンド側で
定数`WEKO_AUTHORS_IMPORT_BATCH_SIZE`分ずつインポートタスクを実行する。
- インポートタスクが終了するごとに以下の処理を行う。
- 一時ファイルに結果を書き込んでいく。
なお、パスは定数`WEKO_AUTHORS_IMPORT_CACHE_RESULT_OVER_MAX_FILE_PATH_KEY`を用いてRedisに保存する。
- 成功数、失敗数をカウントし、定数`WEKO_AUTHORS_IMPORT_CACHE_RESULT_SUMMARY_KEY`を用いてRedisに保存する。
- 結果タブでのサマリーはこれを用いて表示する。
- **ダウンロード機能**
- **インポートタブの「ダウンロード」ボタン**
- `import_author_check_result_{yyyymmddhhmm}.tsv` が既にあればダウンロード
- ない場合、partごとに分けられているインポートチェック結果の一時ファイルからそれらを合体させ、
`import_author_check_result_{yyyymmddhhmm}.tsv`を生成し保存する。
- **結果タブの「ダウンロード」ボタン**
- `import_author_result_{yyyymmddhhmm}.tsv` が既にあればダウンロード
- ない場合、`WEKO_AUTHORS_IMPORT_CACHE_RESULT_OVER_MAX_FILE_PATH_KEY`でredisから取得したファイルパスのファイルと
フロントで表示されている分のインポート結果を合体させ、`import_author_result_{yyyymmddhhmm}.tsv`を生成し、保存する。
2. **エラー時のリトライ機能**
- **リトライ対象のエラー**
- 以下の例外が発生した場合にリトライ対象とする:
- `SQLAlchemyError`(DB 接続エラー、タイムアウトエラー)
- `ElasticsearchException`(ElasticSearch 接続エラー、タイムアウトエラー)
- `RedisError`(Redis 接続エラー、タイムアウトエラー)
- `TimeoutError`(システムタイムアウトエラー)
- **リトライのルール**
- DB のセッションについて、エラー発生時に必ずロールバックする
- 最大リトライ回数: `WEKO_AUTHORS_BULK_IMPORT_MAX_RETRY`(デフォルト 5 回)
- リトライ間隔: `WEKO_AUTHORS_BULK_IMPORT_RETRY_INTERVAL`(デフォルト 5 秒)
- **エラー発生時の処理フロー**
- リトライ可能なエラーの場合
1. 指定回数 (`WEKO_AUTHORS_BULK_IMPORT_MAX_RETRY`) までリトライを実行する。
2. リトライで成功した場合 → 通常通り処理を継続
3. 指定回数リトライしても解決しなかった場合:
- そのデータを処理対象から除外
- エラーとなったデータは `FAILURE` ステータスを設定
- 次のデータの処理へ進む
- リトライ不可のエラー(例外)発生時
- 予期しないエラー(例: プログラムエラー、致命的なシステム障害)が発生した場合:
- そのデータを処理対象から除外
- 該当タスクのステータスを `FAILURE` とする
- エラーログに詳細を記録し、復旧対応が可能なようにする
- ログ・エラーハンドリング
- リトライ回数をログに記録
- リトライ失敗時にはエラーログにエラー内容を出力
更新履歴
| 日付 | GitHubコミットID | 更新内容 |
|---|---|---|
| > 2023/08/31 | 353ba1deb094af5056a58bb40f07596b8e95a562 | 初版作成 |
| > 2023/11/11 | V0.9.27 | |
| > 2025/03/27 | - | v1.1.0対応 |
| > 2025/11/27 | - | WEKO ID対応 |