PythonでSAPユーザ登録スクリプトを作ってみた

今回はタイトルの通り、PythonでSAPユーザ登録用のBAPI汎用モジュールを実行するスクリプトを作ってみました。
前にPowershellで作ってみた時の記事がこれです。
【PowerShell】SAPユーザ登録用のPowerShellコマンドレットを作ってみました - YOMON8.NET
即席とはいえかなり中途半端だったので、今度はPythonでやってみてます。


前提条件

前提条件ですが、Python2.7がインストールされていて実行できることと、SAP接続用のPythonモジュールが必要です。詳細は以下の記事をどうぞ。
PythonからSAP処理を呼び出してみる - YOMON8.NET

SAP接続情報ファイル

「sapnwrfc.cfg」という名前のファイルを準備して、以下のようにSAP接続情報を書き込みます。

[connection]
ashost=saphost    #SAPホスト名
client=100        #クライアント番号
sysnr=00          #システム番号
user=sidadm       #ログオンユーザ名(要ユーザ登録権限)
passwd=password   #ログオンユーザパスワード

ユーザ設定CSVファイル

「userinfo.csv」という名前のファイルを準備してカンマ区切りでユーザの情報を記載します。
書式は左から(ユーザID、初期パスワード、ユーザタイプ(Aはダイアログ)、姓、名)です。
今回は以下のような設定でpytest01~pytest09までのユーザを登録してみます。

pytest01,init0000,A,py,01
pytest02,init0000,A,py,02
pytest03,init0000,A,py,03
pytest04,init0000,A,py,04
pytest05,init0000,A,py,05
pytest06,init0000,A,py,06
pytest07,init0000,A,py,07
pytest08,init0000,A,py,08
pytest09,init0000,A,py,09

Pythonスクリプト

Pythonスクリプトを準備します。テキストファイルに貼り付けて保存すればOKです。

import csv
from ConfigParser import ConfigParser
from sapnwrfc2 import *

def userAdd(sapconn,userName,initPass,userType,firstName,lastName):
    try:
        passwordStruct = {u'BAPIPWD':initPass}        
        impStruct = {u'FIRSTNAME':firstName,u'LASTNAME':lastName}
        logonStruct = {u'USTYP':userType}
        result = sapconn.call('BAPI_USER_CREATE1',
                           USERNAME=userName,
                           PASSWORD=passwordStruct,
                           LOGONDATA=logonStruct,
                           ADDRESS=impStruct)
        print(result['RETURN'][0]['MESSAGE']) 
    except:
        print('Error Occurred in ' + userAdd.__name__ )
        raise
    
def getConnectionInfo():
    try:
        config = ConfigParser()
        config.read("sapnwrfc.cfg")
        return config._sections["connection"]
    except:
        print('Error Occurred in ' + getConnectionInfo.__name__)
        raise

if __name__ == '__main__':
    try:
        sapconn = None
        connecitonInfo = getConnectionInfo() 
        csvReader = csv.reader(open('userinfo.csv'),delimiter=',')
        sapconn = Connection(**connecitonInfo)
        for username,initpass,usertype,firstname,lastname in csvReader:
            userAdd(sapconn,username,initpass,usertype,firstname,lastname)
    except Exception as e:
        print(e)
    finally:
        if sapconn:
            print('close')
            sapconn.close()

実行・結果確認

SAP接続情報ファイル、ユーザ設定CSVファイル、Pythonスクリプトファイルの3ファイルを全て同じフォルダに配置してからPythonスクリプトを実行します。

python <Pythonスクリプトファイル名>

こんな感じで実行されるはずです。
f:id:yomon8:20130610011858p:plain
SAPからのリターンメッセージを拾っているので、既にユーザが存在している場合など、SAP側で発生したメッセージも日本語で表示できます。


もちろんSAPGUIからもちゃんと登録できていることが確認できます。
f:id:yomon8:20130610011906p:plain

Pythonはスクリプトのような手軽さがあるのに、しっかりプログラミングできるので使いやすいです。