from bottle import get, post, request, run, redirect from sapnwrfc2 import Connection, ABAPApplicationError, LogonError from ConfigParser import ConfigParser conn = "" @get('/login') def login_form(): return '''<DIV ALIGN='CENTER'><BR><BR><BR><BR> <H1>Python (Bottle) & SAP - using PyRFC</H1> <BR><TABLE BORDER='1' BORDERCOLOR='BLUE' BGCOLOR='WHITE'> <FORM METHOD='POST'> <TR><TD>User</TD><TD> <INPUT TYPE='TEXT' NAME='User'></TD></TR> <TR><TD>Password</TD> <TD><INPUT TYPE='PASSWORD' NAME='Passwd'></TD></TR> <TR><TD COLSPAN='2' ALIGN='CENTER'> <INPUT TYPE='SUBMIT' value='Log In' NAME='LOG_IN'> <INPUT TYPE='RESET' value='Clear'></TD></TR> </FORM> <TABLE> </DIV>''' @post('/login') def login_submit(): global conn try: user = request.forms.get('User') passwd = request.forms.get('Passwd') config = ConfigParser() config.read('sapnwrfc.cfg') params_connection = config._sections['connection'] params_connection["user"] = user params_connection["passwd"] = passwd conn = Connection(**params_connection) redirect("/choose") except LogonError: redirect("/error") @get('/choose') def choose_table(): return '''<CENTER> <FORM METHOD='POST'> <INPUT TYPE='TEXT' NAME='Table'><BR> <INPUT TYPE='SUBMIT' value='Show Table' NAME='Show_Table'> </FORM> </CENTER>''' @get('/error') def error(): output = "<div align='center'><h1>Invalid username or password</h1></div>" return output @post('/choose') def show_table(): global conn fields = [] fields_name = [] counter = 0 table = request.forms.get('Table') try: tables = conn.call("RFC_READ_TABLE", QUERY_TABLE=table, DELIMITER='|') data_fields = tables["DATA"] data_names = tables["FIELDS"] long_fields = len(data_fields) long_names = len(data_names) for line in range(0, long_fields): fields.append(data_fields[line]["WA"].strip()) for line in range(0, long_names): fields_name.append(data_names[line]["FIELDNAME"].strip()) output = "<div align='center'><h1>%s</h1></center>" % table output += "<table border='1'><tr>" for line in range(0, long_names): field_name = fields_name[line] output += "<th bgcolor='#B8D5F5'> %s </th>" % field_name output += "</tr>" for line in range(0, long_fields): counter += 1 if(counter % 2 == 0): output += "<tr bgcolor='#DCE1E5'>" else: output += "<tr>" data_split = fields[line].split("|") for line in range(0, long_names): output += "<td> %s </td>" % data_split[line] output += "</tr>" output += "</table>" except ABAPApplicationError: output = "<div align='center'><h1>Table %s was not found</h1></div>" % table return output return output conn.close() run(host='localhost', port=8080) |