本篇演示通过 PyRFC 调用 BAPI_FIXEDASSET_CREATE1
在 SAP 系统中创建固定资产,再一次体验一下 Python 与其它语言相比的简洁性。
首先简单说明 BAPI_FIXEDASSET_CREATE1 的用法。这个函数的参数比较多,但可能实际用不到那么多字段,我们只使用一些基本和必须的字段。下面的 ABAP 代码演示了该函数的用法。
- 参数存在后缀加 x 的参数,比如 general_data,存在 general_data_x 的参数。这些参数用于告诉函数哪些字段的值是需要被修改的。
- 根据 SAP 的配置,有些字段不需要显式指定,比如 depreciation areas 部分的折旧码、折旧年限等字段,SAP 根据配置来设置这些字段的值。如果需要改变配置的值,比如某资产的折旧年限不使用折旧码的默认值 5 年,而是 3 年,也可以在函数的参数中来设定。
- 调用 BAPI_FIXEDASSET_CREATE1 函数后,固定资产主数据的号码会被占用,后面应该根据情况,分别使用函数 BAPI_TRANSACTION_COMMIT 提交修改,或者 BAPI_TRANSACTION_ROLLBACK 进行回滚操作。
下面是使用 PyRFC 调用 BAPI 的代码示例:
class FixedAsset(object):
def __init__(self) -> None:
self.sap_connection = current_sap_connection()
def create_asset(self, asset_info):
conn = self.sap_connection
result = conn.call('BAPI_FIXEDASSET_CREATE1',
KEY=asset_info['key'],
GENERALDATA=asset_info['general_data'],
GENERALDATAX=asset_info['general_data_x'],
TIMEDEPENDENTDATA=asset_info['time_dependent_data'],
TIMEDEPENDENTDATAX=asset_info['time_dependent_data_x']
)
if result['ASSET'] == None:
conn.call('BAPI_TRANSACTION_ROLLBACK')
else:
conn.call('BAPI_TRANSACTION_COMMIT')
return result['RETURN']
结合 Flask,编写一个视图函数:
from flask import Flask, make_response, jsonify, request
from SAP.fixed_asset import FixedAsset
app = Flask(__name__)
app.config['JSON_SORT_KEYS'] =False
@app.route("/")
def index():
return "index page"
@app.route('/aa/create', methods=['POST'])
def create_asset():
# payload
payload = request.get_json()
fixed_asset_obj = FixedAsset()
rv = fixed_asset_obj.create_asset(payload);
return jsonify(rv)
使用 Postman 进行测试: