ユーザーを一括登録するためのCSVファイルを作成する方法はありますか?

2024年3月23日テクニカルメモ

WebFOCUSのエクスポート/インポート機能だとユーザーを移行できないって聞いたよ・・・。
セキュリティセンターでCSVファイルから一括でユーザー登録する機能があるみたいだけど、インポート用のCSVファイルをユーザー情報が含まれるリポジトリデータベースから出力することってできるのかな?

WebFOCUSバージョン
9.0.0

インポート用CSVファイルの作成

WebFOCUSのClient Restアダプタとサンプルで用意されているシノニムを使用することでインポート用CSVファイルの作成が可能です。

  • 利用するもの
    • データアダプタ WebFOCUS Client REST
    • シノニム GET_USERS、GET_GROUPS_WITHIN_USER

取得結果例

サンプルソース

本サンプルについて

本サンプルでは、以下を前提に作成しています。

  • 各シノニムは /ibi/apps/clrest に配置
  • ユーザーのパスワードはユーザーIDと同一値を仮パスワードとして設定
  • 各ユーザーのステータスは MUSTCHANGE とし、次回ログイン時にパスワード変更が必要

処理概要

  1. [GET_USERS]から"ユーザーID"、ユーザーの"説明"、Emailアドレスを取得し結果をHOLDファイル[ALLUSER]に出力
    ※デフォルトユーザーの admin / public / wfdesktop は除いて取得
  2. 1の結果から、取得したユーザー数分以下処理を実施し、HOLDファイル[USERGROUPLIST]に出力(APPEND)
    • 1のHOLDファイルの結果を -READFILE で変数に格納
    • 変数に格納したユーザーIDを条件として、[GET_GROUPS_WITHIN_USER]からグループ名とグループの物理パスを取得
    • 取得した結果をHOLDファイル[USERGROUPLIST]に出力
  3. 2の結果から、ユーザーごとの所属グループの物理パスを1カラムとして扱うようにデータを加工し、HOLDファイル[USERGROUPLIST2]に出力
  4. [ALLUSER]の USERID と[USERGROUPLIST2] の UNAME(いずれもユーザーID)をキーとして結合
  5. 4の結果から、以下を含む最終アウトプットをヘッダーなしのCSVで出力
    • ユーザー名
    • パスワード
    • ユーザーの説明
    • Emailアドレス
    • ステータス
    • 所属グループ
SET HOLDLIST = PRINTONLY
SET ASNAMES = ON

TABLE FILE clrest/GET_USERS
BY TOTAL COMPUTE USERID/A30 = GET_USERS.ITEM.NAME3;
BY GET_USERS.ITEM.DESCRIPTION1 AS 'USERDES'
BY GET_USERS.ITEM.EMAIL
WHERE USERID NE 'admin' OR 'public' OR 'wfdesktop';
ON TABLE HOLD AS ALLUSER FORMAT ALPHA 
END

-RUN

-DEFAULTH &USERID = '';

FILEDEF USERGROUPLIST DISK USERGROUPLIST.FTM (APPEND

-REPEAT LAB1 &LINES TIMES

-READFILE ALLUSER

-SET &UNAME = TRUNCATE(&USERID);

-SET &IBIRS_PATH = '/SSYS/USERS/' || '&UNAME.EVAL';

TABLE FILE clrest/GET_GROUPS_WITHIN_USER
PRINT 
COMPUTE GNAME/A100 = SUBSTRING(GET_GROUPS_WITHIN_USER.ITEM.FULLPATH1,19,100);
BY TOTAL COMPUTE UNAME/A30 = '&UNAME.EVAL';
WHERE GET_GROUPS_WITHIN_USER.M6ILO.IBIRS_PATH EQ '&IBIRS_PATH'
WHERE GET_GROUPS_WITHIN_USER.ITEM.MEMBERSHIPTYPE EQ 'DirectAssignment'
ON TABLE HOLD AS USERGROUPLIST FORMAT ALPHA
END
-RUN

-LAB1

TABLE FILE USERGROUPLIST
PRINT
COMPUTE GNAMEALL/A1000V =  IF UNAME EQ LAST UNAME THEN GNAMEALL || ';' || GNAME ELSE GNAME;
COMPUTE FLG/I10 = IF UNAME EQ LAST UNAME THEN FLG + 1 ELSE 1; 
BY UNAME
BY TOTAL HIGHEST 1 FLG NOPRINT
ON TABLE HOLD AS USERGROUPLIST2 FORMAT ALPHA
END

JOIN
ALLUSER.ALLUSER.USERID IN ALLUSER TO MULTIPLE USERGROUPLIST2.USERGROUPLIST2.UNAME IN USERGROUPLIST2
END

TABLE FILE ALLUSER
PRINT
COMPUTE PASSWORD/A30 = USERID; AS 'パスワード'
USERDES AS 'ユーザーの説明'
EMAIL AS 'Emailアドレス'
COMPUTE STATUS/A10 = 'MUSTCHANGE';
GNAME AS '所属グループ'
BY USERID AS 'ユーザー名'
ON TABLE PCHOLD AS ALL_USER_LIST FORMAT COM

END

WebFOCUS Client RESTアダプタと各シノニムを使用することでユーザーとユーザーが所属しているグループ一覧が取得できるんだね。ほかにも様々なシノニムが用意されているみたいだし、気になったら確認してみてね!