作者:moon2502863581 | 来源:互联网 | 2023-10-15 16:46
本篇演示通过PyRFC调用BAPI_FIXEDASSET_CREATE1在SAP系统中创建固定资产,再一次体验一下Python与其它语言相比的简洁性。首先简单说明B
本篇演示通过 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_connectionresult = 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 FixedAssetapp = 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 = request.get_json()fixed_asset_obj = FixedAsset()rv = fixed_asset_obj.create_asset(payload);return jsonify(rv)
使用 Postman 进行测试:
源代码:github - pyrfc_flask_restful_service