从 Android 应用程序调用 SAP BAPI

从 Android 应用程序调用 SAP BAPI

我是Android编程新手。任务如下:

从 Android 应用程序 (apk) 远程连接到 SAP 并调用 BAPI。通过 Web 服务调用的选项不合适 - 安全系统不允许。

我需要使用以下方式连接 SAPSAP路由器

系统

1) Windows 8.1 - 64 位

2)Java 1.8.0_201-64 位

3)Android Studio-64位

4)SAP JCO 库Windows 32 位https://support.sap.com/en/product/connectors/jco.html

在 Android Studio 中: - 创建一个活动并创建一个按钮。 - 单击按钮时,该方法尝试连接到 SAP。

代码如下

Properties connectProperties = new Properties ();

connectProperties.setProperty (DestinationDataProvider.JCO_ASHOST, "xx.xx.xx.xx");

connectProperties.setProperty (DestinationDataProvider.JCO_SYSNR, "00");

connectProperties.setProperty (DestinationDataProvider.JCO_CLIENT, "200");

connectProperties.setProperty (DestinationDataProvider.JCO_USER, "USER_NAME");

connectProperties.setProperty (DestinationDataProvider.JCO_PASSWD, "USER_PASS");

connectProperties.setProperty (DestinationDataProvider.JCO_LANG, "EN");

connectProperties.setProperty (DestinationDataProvider.JCO_SAPROUTER, "/H/xxx.xxx.xxx.xxx...");

String f_name = createDestinationDataFile (context, DESTINATION_NAME1, connectProperties);

try {

    JCoDestination jcoDestination = JCoDestinationManager.getDestination (DESTINATION_NAME1);

    JCoFunction function = jcoDestination.getRepository().GetFunction ("ZGET_ANLA");

    if (function == null) throw new RuntimeException ("ZGET_ANLA not found in SAP.");

    System.out.println ("ok");

    } catch (JCoException e) {

      e.printStackTrace ();

    }

 static String createDestinationDataFile (Context context, String destinationName, Properties connectProperties)

   {

       PackageManager m = context.getPackageManager ();

       String str = context.getPackageName ();

       try {

           PackageInfo p = m.getPackageInfo (str, 0);

           str = p.applicationInfo.dataDir;

       } catch (PackageManager.NameNotFoundException e) {

           Log.w ("your tag", "Error Package name not found", e);

       }

       System.setProperty ("jco.destinations.dir", str);

       String f_name = String.valueOf (str + "/" + destinationName);

       File destCfg = new File (str + "/" + destinationName + ". JcoDestination");

       try

       {

           FileOutputStream fos = new FileOutputStream (destCfg, false);

           connectProperties.store (fos, "for tests only!");

           fos.close ();

       }

       catch (Exception e)

       {

           throw new RuntimeException ("Unable to create the destination files", e);

       }

       return f_name;

   }

在程序执行时,在字符串:

JCoDestination jcoDestination = JCoDestinationManager.getDestination (DESTINATION_NAME1);

我收到错误 ->”库“libdl.so.2”未找到

E / AndroidRuntime: FATAL EXCEPTION: main
    Process: com.z_fi.zinv_fa, PID: 8455
    java.lang.ExceptionInInitializerError: JCo initialization failed with java.lang.UnsatisfiedLinkError: dlopen failed: library "libdl.so.2" not found

但是该库libdl.so.2未包含在 SAP JCO 档案中。(我尝试libdl.so.2在 Linux 档案中找到了该文件。但程序请求下一个文件 libdl.so。3等无限期)

问题

  1. 我究竟做错了什么?

  2. 我应该下载哪个版本的 SAP JCO - Linux 版还是 Windows 版?32 位还是 64 位?

  3. 我需要在哪里导入 SAP JCO 档案的文件?在项目结构中还是在设备文件资源管理器中 (c:\Users***\Documents\AndroidStudio**DeviceExplorer**)?

  4. 使用 SAP JCO 时需要在 SAP 服务器上进行设置吗?我无法在操作系统级别访问 SAP 服务器...

或许,也许有另一种选择可以从 Android 应用程序连接到 SAP?

答案1

从您提供的链接 4)您必须安装 32 位版本的 Java

相关内容