PS常用的BAPI调用示例
SAP PS BAPI篇
- 1项目定义
-
- 1.1 查询
-
- 1.1.1 BAPI_PROJECTDEF_GETLIST生成选择标准的项目定义的清单
- 1.1.2 BAPI_PROJECTDEF_GETDETAIL读取项目定义的细节
- 1.1.3 BAPI_BUS2001_GETDATA 项目定义的详细数据
- 1.1.4 其他类查询
- 1.2 新增
-
- 1.2.1 BAPI_PROJECTDEF_CREATE旧的不可以增强的新增
- 1.2.2 BAPI_BUS2001_CREATE项目定义新增,可扩展字段
- 1.2.3 项目定义屏幕增强CMOD,添加历史项目编号和历史项目名称
- 1.2.4 BAPI增强添加历史项目编号和历史项目名称
- 1.3 修改
- 1.4 删除
- 2 WBS
-
- 2.1 查询
-
- 2.1.1BAPI_PROJECT_EXISTENCECHECK判断是否存在,并查询BAPI_PROJECT_GETINFO
- 2.1.2 BAPI_BUS2054_GETDATA根据输入的WBS号查询WBS详情
- 2.1.3 BAPI_BUS2054_GET_STATUS 获取WBS状态
- 2.2 新增
-
- 2.2.1 BAPI_BUS2054_CREATE_MULTI只创建WBS,可维护增强字段
- 2.1.5 BAPI_PROJECT_SAVEREPLICA |复制工作分解结构 (ALE),可增强
- 2.3 修改
-
- 2.3.1 BAPI_BUS2054_SET_STATUS |设置/重置 BUS2054 状态 (工作分解结构)|
- 2.3.2 BAPI_BUS2054_CHANGE_MULTI |使用 BAPI 更改 WBS 要素|
- 2.3.3 BAPI_BUS2054_DELETE_MULTI|使用 BAPI 删除 WBS 要素|
- 3 网络
-
- 3.1 网络查询
-
- 3.1.1 BAPI_NETWORK_GETLIST查询网络清单
- 3.1.2 BAPI_BUS2002_GETDATA |网络抬头的详细数据 |
- 3.1.3 BAPI_NETWORK_GETDETAIL |读取网络的明细信息(包括所有对象),只能查询一个网络
- 3.1.4 BAPI_NETWORK_GETINFO |读取网络的详细信息 (包括所有对象) |可以查询多个网络
- 3.2 网络新增
-
- 3.2.1 BAPI_BUS2002_CREATE |创建网络 |
- 3.3 网络删除
-
- 3.3.1 BAPI_BUS2002_DELETE|删除网络 |
- 4 活动(作业)
-
- 4.1 BAPI_BUS2002_ACT_GETDATA |活动的详细数据 |
- 4.2 BAPI_BUS2002_ACT_CREATE_MULTI |清单: 创建网络活动 |
- 4.3 BAPI_BUS2002_ACT_CHANGE_MULTI|清单: 更改网络活动
- 5 物料组件
-
- 5.1 BAPI_NETWORK_COMP_GETLIST |网络所有组件的清单 |
- 5.2 BAPI_NETWORK_COMP_GETDETAIL|网络作业物料组件的详述数据
- 5.3 BAPI_NETWORK_COMP_ADD|为网络填加物料组件 |
- 5.4 BAPI_NETWORK_COMP_CHANGE|为网络更改物料组件 |
- 5.5 BAPI_NETWORK_COMP_REMOVE|从网络中删除物料组件 |
- 6 项目预算BAPI
- 7 服务主数据类采购申请创建
-
- 7.1 外部活动创建
- 7.2 服务活动创建,必须输入服务主数据
- 8 里程碑创建使用的BAPI
- 9 作业要素创建使用的BAPI
从项目定义,到WBS,到网络,到活动,到物料组件



1项目定义
| 序号 | 业务分类 | 作用类别 | 名 | 主要作用 |
|---|---|---|---|---|
| 1 | 项目定义 | 查询类 | BAPI_PROJECTDEF_GETLIST | 生成选择标准的项目定义的清单 |
| 2 | 项目定义 | 查询类 | BAPI_PROJECTDEF_GETDETAIL | 读取项目定义的细节 |
| 3 | 项目定义 | 查询类 | BAPI_BUS2001_GETDATA | 项目定义的详细数据 |
| 4 | 项目定义 | 查询类 | BAPI_PROJECTDEF_EXISTENCECHECK | 检查对象是否存在 |
| 5 | 项目定义 | 查询类 | BAPI_BUS2001_GET_GUID_FROM_KEY | 从键值获取GUID |
| 6 | 项目定义 | 查询类 | BAPI_BUS2001_GET_KEY_FROM_GUID | 从 GUID 获取键值 |
| 7 | 项目定义 | 查询类 | BAPI_BUS2001_GET_STATUS | 读取BUS2001状态 (项目定义) |
| 8 | 项目定义 | 新建类 | BAPI_PROJECTDEF_CREATE | BAPI: 创建项目定义 |
| 9 | 项目定义 | 新建类 | BAPI_BUS2001_CREATE | 使用 BAPI来创建项目定义,得增强字段了 |
| 10 | 项目定义 | 修改类 | BAPI_PROJECTDEF_UPDATE | 使用 BAPI来修改项目定义信息 |
| 11 | 项目定义 | 修改类 | BAPI_BUS2001_CHANGE | 使用 BAPI来修改项目定义信息,可使用增强字段 |
| 12 | 项目定义 | 修改类 | BAPI_BUS2001_SET_STATUS | 设置项目状态 |
| 13 | 项目定义 | 修改类 | BAPI_BUS2001_DELETE | 删除项目 |
1.1 查询
1.1.1 BAPI_PROJECTDEF_GETLIST生成选择标准的项目定义的清单
*&---------------------------------------------------------------------*
*& Report ZLGZBAPI_PROJECTDEF_GETLIST
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZLGZBAPI_PROJECTDEF_GETLIST.
TABLEs:vbak,proj.
"第一步,定义变量
data: iv_max_rows type BAPIF4A-MAX_ROWS.
data: lt_PROJECT_DEFINITION_LIST TYPE TABLE of BAPIPREXP."定义的对外显示的信息
"第二步,定义range
"二种定义函数中range方法
*选项介绍:
*1.SIGN 值为I和E I包含 E是排除 一般使用I
*2.OPTION 如果HIGH 为空 为单值选择 有 EQ、NE、GT、LE、LT等逻辑操作 对于*的 CP包含 NP是排除
* 如果HIGH 不为空 为区间选择 有BT,NB可选
*3.LOW 低值
*4.HIGH 高值
"方法一,查找函数range的LOW和HIGH的类型,采用type RANGE OF 不过这种方式,已经跳到函数内部了,失去了函数封装的意义了,下面就是例如针对结构BAPI_2002_PD_RANGE的示例
*DATA lt_pspid TYPE RANGE OF PS_PSPID."项目定义ID
*DATA wa_pspid LIKE LINE OF lt_pspid.
" wa_pspid-sign = 'I'.
" wa_pspid-option = 'BT'.
" wa_pspid-low = 'PSCN02_2020001'.
" wa_pspid-high = 'PSCN02_2020003'.
" APPEND wa_pspid TO lt_pspid.
"方法二,直接用data引用封装好的range
data lt_pd_range type table of BAPI_2002_PD_RANGE."这个是封装的项目编号range
data wa_pd_range type BAPI_2002_PD_RANGE.
data lt_descr_range type table of BAPI_2002_DESCR_RANGE."这个是封装的项目描述range
data wa_descr_range type BAPI_2002_DESCR_RANGE.
"第三步,定义选择条件
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS p_p1 TYPE BAPIF4A-MAX_ROWS .
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-001.
SELECT-OPTIONS: range0 for proj-PSPID DEFAULT '0' TO 'PSCN02_2020003' OPTION BT.
SELECT-OPTIONS: range1 FOR proj-POST1 DEFAULT 'ZCN02基建项目' TO 'ZCN02基建项目' OPTION BT.
"也可以根据定义的range结构定义选择条件
* SELECT-OPTIONS: range0 for wa_pd_range DEFAULT '0' TO 'PSCN02_2020003' OPTION BT.
* SELECT-OPTIONS: range1 FOR wa_descr_range DEFAULT 'ZCN02基建项目' TO 'ZCN02基建项目' OPTION BT.
SELECTION-SCREEN END OF BLOCK b2.
"第四步,将选择条件的值赋值给range
"屏幕选择的操作
iv_max_rows = p_p1."将输入显示行数赋值给参数1iv_max_rows
*wa_descr_range = range0. "直接将range0复制到wa_pd_range貌似把高的值无法复制过来,那就强行赋值了,给第一个range赋值
clear wa_pd_range.
wa_pd_range-sign = range0-sign.
wa_pd_range-option = range0-option.
wa_pd_range-low = range0-low.
wa_pd_range-high = range0-high.
APPEND wa_pd_range to lt_pd_range.
*wa_pd_range = range1. "直接将range0复制到wa_pd_range貌似把高的值无法复制过来,那就强行赋值了
clear wa_descr_range.
wa_descr_range-sign = range1-sign.
wa_descr_range-option = range1-option.
wa_descr_range-low = range1-low.
wa_descr_range-high 