UIPATH 调用SAP BAPI

624 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 先吐槽一下,官网上面虽然有一部分关于uipath使用控件调用bapi的文档说明,但介绍的真的真的太少了,连一个示例都舍不得给一下,我尽量在这篇博客里面写详细一点

这个视频是我从YouTube扒过来的,关于uipath 调用SAP BAPI的教学视频,感觉讲的挺详细的,如果下面的博客看了还不怎么清楚可以看看这个视频www.bilibili.com/video/BV1g6…

[video(video-9CtvLfBI-1630999442949)(type-bilibili)(url-player.bilibili.com/player.html… 中使用SAP BAPI教程)]

当然,还是礼貌性的给每一步一个官网文档的链接,有兴趣的可以看看

前提环境

关于“SAP BAPI 活动包” 按官方文档所说,首先需要一些必要的前提环境

安装该活动包之前,必须先安装 SAP Connector for Microsoft .NET 3.0 (NCo 3.0) 的 32 位 (x86) .NET 4.0 版本。该连接器还需使用 Microsoft C++ 运行时 DLL 10.0 版(已包含在 Microsoft Visual C++ 2010 可再发行组件包中)

资源我上传到百度网盘上面了: SAP Connector for Microsoft .NET 3.0 (x86) 提取码:SELE Microsoft C++ Runtime DLL 10.0 版 提取码:SELE


又上传到了gitee上,百度网盘好像一定要下载客户端才能下,流氓软件!!! 下面是gitee的下载传送门 SAP Connector for Microsoft .NET 3.0 (x86) Microsoft C++ Runtime DLL 10.0 版


其中第一个资源安装的时候有一点需要注意的地方,其他的都正常下一步就OK

请注意,SAP Connector for Microsoft 必须安装在 Windows 全局程序集缓存 (GAC) 中才能正常运行。为此,请在安装 SAP 连接器期间选择相应选项。 在这里插入图片描述

生成 SAP BAPI 工作流

首先需要添加依赖:UiPath.SAP.BAPI.Activities 在这里插入图片描述 如果你碰见了如下问题:

无法安装以下包: UiPath.SAP.BAPI.Activities 2.2.0 未能加载文件或程序集“sapnco, Version=3.0.0.42, Culture=neutral, PublicKeyTo

检查你的第一步环境有没有问题,我当时出错的原因是SAP Connector for Microsoft .NET 3.0装的版本是x64,重新安装x86的就好了

安装依赖的时候注意查看版本,如果你用的是2.0以下的版本,那么文档如下 v2.0.0 以下版本 如果是2.0以上的版本,文档如下 SAP 应用程序作用域 调用 SAP BAPI

下面的介绍基于2.0,会介绍到一些bapi调用时变量的处理

SAP应用程序范围

按部就班的来,先拖入一个【SAP应用程序范围】控件 在这里插入图片描述 配置一下属性,配置完成要测试连接,连接成功说明参数正确无误,再点击右方的【Copy To Robot Configuration】按钮,复制参数到机器人程序中 在这里插入图片描述 密码是不会从刚刚的位置复制过来的,需要自己写一个SecureString类型的参数赋值过去,我是从Windows凭证中拿的账密 在这里插入图片描述

调用BAPI

调用bapi需拖动【调用SAP BAPI】的控件到上述的【SAP应用程序范围】工作流中,下面以创建物料主数据的BAPI:BAPI_MATERIAL_SAVEDATA作为本次的示例 在这里插入图片描述 在搜索框输入需要调用的bapi名称,点击搜索后就能出来结果 带*号的是必输内容,控件会自动把必输内容带出来,非必输默认不出现 在这里插入图片描述 非必输参数需要点击上一步右上角的【添加参数】添加,不需要点搜索按钮就能筛选出来,需要添加的参数要记得在右边打上勾勾 在这里插入图片描述 可以看到这些参数,SAP当中的内表被映射成了DataRow类型,而Structure类型被映射成了DataRow类型,官方文档的说法如下:

BAPI 中所有具有“Table”类型的参数均会映射到“DataTable”参数,而 BAPI 中所有具有“Structure”类型的参数均会映射到“DataRow”参数。所有其他参数均会映射到基本数据类型。 在这里插入图片描述

如果我们需要传递一个Structure类型的参数过去,那么我们就需要构建一个DataRow类型的参数 以bapi中的headdata作为例子提供一个方法 首先构建一个数据表【DataTable】,数据表表头的命名和BAPI中结构的变量名一致,只填入我们希望传递的参数,再将数据表第一行分配给一个【DataRow】类型的变量,这样就完成了结构类型的转换,剩下的就是在调用bapi的时候把这个【DataRow】类型的变量作为参数传递过去 在这里插入图片描述 对于内表类型的参数,直接建立一个【DataTable】类型的数据表在里面填数据就好了,只要保证表头的名称跟sap中的表头变量名保持一致就能够匹配上 在这里插入图片描述 其他基本类型正常传递就好了,大部分能以string类型传输,比如unit类型就可以用string类型传 如果最后调用了bapi没有效果,看一看是不是没有commit,没有的话commit一下就好了 在这里插入图片描述 附上一个完整录入物料主数据的流程截图 在这里插入图片描述 在这里插入图片描述