作者: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, requestfrom 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