使用 JCo 从 SAP 系统读取表

2024-04-07

我试图从 SAP 系统读取表,但总是收到此错误:

Exception in thread "main" com.sap.conn.jco.JCoRuntimeException: (127) 
JCO_ERROR_FIELD_NOT_FOUND: Field EMPLOYEE is not a member of INPUT
at com.sap.conn.jco.rt.AbstractMetaData.indexOf(AbstractMetaData.java:404)
at com.sap.conn.jco.rt.AbstractRecord.setValue(AbstractRecord.java:4074)
at testConf.StepServer.main(StepServer.java:50)

这是我的代码:

public static void main(String[] args) {

  // This will create a file called mySAPSystem.jcoDestination
  System.out.println("executing");
  String DESTINATION_NAME1 = "mySAPSystem";

  Properties connectProperties = new Properties();
  connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "xxx.xxx.x.xxx");
  connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,  "xx");
  connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "xxx");
  connectProperties.setProperty(DestinationDataProvider.JCO_USER,   "username");
  connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "test");
  connectProperties.setProperty(DestinationDataProvider.JCO_LANG,   "en");
  createDestinationDataFile(DESTINATION_NAME1, connectProperties);

  // This will use that destination file to connect to SAP
  try {
      JCoDestination destination = JCoDestinationManager.getDestination("mySAPSystem");
      System.out.println("Attributes:");
      System.out.println(destination.getAttributes());
      System.out.println();
      destination.ping();
  } catch (JCoException e) {
      e.printStackTrace();
  }
  try{

  //here starts the problem

  JCoDestination destination = JCoDestinationManager.getDestination(DESTINATION_NAME1);
  JCoFunction function = destination.getRepository().getFunction("RFC_READ_TABLE");
  JCoParameterList listParam = function.getImportParameterList();

  listParam.setValue("EMPLOYEE", "EMPLOYEE"); // I have found this in an example and I don't understand exactly what should I put there
                                              // I was thinking maybe is the column name but I am not sure
  function.execute(destination);

  JCoTable table = function.getTableParameterList().getTable("ZEMPLOYEES");//name of my table from SAP

  System.out.println(table);

  }
  catch (JCoException e)
  {
      System.out.println(e.toString());
      return;
  }
 }

当它说时,错误很清楚JCO_ERROR_FIELD_NOT_FOUND:字段 EMPLOYEE 不是 INPUT 的成员但员工是我表中的一个字段。

该文档没有太大帮助,它只说:

Sets the object as the value for the named field.
Parameters:
    value - the value to set for the field
    name - the name of the field to set 

女巫,在我看来,我已经做到了。

为了从java读取这个新表,我应该在sap中进行任何额外的修改吗?我所做的就是按照本教程创建一个新表(在SAP中创建一个简单的表 https://www.youtube.com/watch?v=2vwjP7QX_NU).

也许有更多经验的人可以告诉我应该如何配置此示例代码才能工作。


RFC_READ_TABLE 的一般用途

我从未使用过 JCo,但据我所知,它的接口与 .Net 连接器 NCo 非常相似。这基本上是 NCo 代码,添加了一些猜测,但它应该可以工作。

// get the table parameter FIELDS that should be in the parameter list
// the parameter table has several fields, only the field FIELDNAME has to be set before calling the function module
JCOTable inputTableParam = function.getTableParameterList().getTable("FIELDS");

// add a row to the FIELDS table parameter
inputTableParam.appendRow();

// set values for the new row
inputTableParam.setValue("FIELDNAME", "EMPLOYEE");
// just for fun, add another field to retrieve
inputTableParam.appendRow();
inputTableParam.setValue("FIELDNAME", "SURNAME");

// now we have to set the non-table parameters
JCoParameterList inputParamList = function.getImportParameterList();
// parameter QUERY_TABLE, defines which table to query
inputParamList.setValue("QUERY_TABLE", "ZEMPLOYEES");
// parameter DELIMITER - we get a single string as the return value, the field values within that string are delimited by this character
inputParamList.setValue("DELIMITER", ";");

// execute the function
function.execute(destination);

// the parameter table DATA contains the rows
JCoTable table = function.getTableParameterList().getTable("DATA");

最后,你的变量table将保存一个表对象,该对象具有一个名为WA。该字段包含您在输入参数表中选择的字段的内容FIELDS。你可以迭代一遍table并逐行获取值。

使用 RFC_READ_TABLE 进行查询

RFC_READ_TABLE并不真正允许查询,它只允许您定义WHERE条款。这TABLE范围OPTIONS有一个字段TEXT,72个字符宽,只能取ABAP合规的WHERE条款。

为了扩展上面的示例,我们将添加一个 where 子句以仅从表中选择条目ZEMPLOYEES with SURNAME=“史密斯”和FORNAME=“约翰”。

JCOTable optionsTableParam = function.getTableParameterList().getTable("OPTIONS");

// add a row to the FIELDS table parameter
optionsTableParam.appendRow();
optionsTableParam.setValue("TEXT", "SURNAME EQ 'SMITH' AND FORNAME EQ 'JOHN');

TEXT仅 72 个字符长,因此如果您想添加更长的子句,则必须手动将条件分成几行。RFC_READ_TABLE有点粗糙和有限。

表之间的复杂连接可以通过在 SAP 系统中创建视图来实现(事务SE11),然后使用 RFC_READ_TABLE 查询该视图。

如果您想从JCo调用功能模块,那么熟悉基本的功能模块属性将会非常有帮助。可以查看transaction中的一个功能模块定义SE37。在那里你可以看到IMPORT, EXPORT, CHANGING and TABLE参数。您必须填写的参数以及包含结果的参数取决于您调用的功能模块 -RFC_READ_TABLE有不同的,比如说,BAPI_DELIVERY_GETLIST.

这是 JCoFunction 的文档以及 JCo 和 NCo 之间的区别之一,JCo 有单独的函数来获取和设置不同的参数类型:https://help.hana.ondemand.com/javadoc/com/sap/conn/jco/JCoFunction.html https://help.hana.ondemand.com/javadoc/com/sap/conn/jco/JCoFunction.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JCo 从 SAP 系统读取表 的相关文章

  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • 如何在 v-select 或 v-combobox 上有“全选”选项?

    我们如何有一个全选选项来选择一个中的所有内容v select or a v combobox Vuetify 没有Select all选项v select 但是 您可以使用按钮和方法自己完成 像这样 JS methods selectAll
  • 将 STDIN 拆分为多个文件(如果可能的话压缩它们)

    我有一个程序 gawk 将数据流输出到它的STDOUT 处理的数据实际上有 10 GB 我不想将其保留在单个文件中 而是将其分成多个块 并可能在保存之前对每个文件应用一些额外的处理 如压缩 我的数据是一系列记录 我不想拆分将记录减半 每条记
  • 查找最小值之前的每列值的最大值

    考虑数组a a np array 5 4 4 5 2 2 6 1 3 7 我可以找到最小值在哪里 a argmin 0 array 2 3 如何找到索引 2 之前第 0 列值的最大值 第 1 列和索引 3 也是如此 更重要的是 它们在哪里
  • 为什么RecyclerView.OnScrollListener不是接口而是抽象类?

    实现无尽滚动模式RecyclerView我想创建一个像 public class EndlessScrollAdapter
  • Xamarin 和托管可扩展性框架 (MEF)

    我正在考虑一个新的移动 平板电脑应用程序 我想让用户开发自己的插件 想象一下在 Android 平板电脑上运行的收银台应用程序 连接到信用卡读卡器时 用户可以使用许多替代方案 Square https squareup com Sum Up
  • CSS 选择器获取 HTML 树中特定类的最深元素

    我的 HTML 中有一堆 DIV 元素 其中几个元素的 class 属性设置为 rowsLayout 其中一些 rowsLayout DIV 可以相互嵌套 我想定义一个 CSS 选择器 仅针对这些嵌套中最深的 DIV 也就是说 我don t
  • Android APK的静默安装

    我正在寻找一种方法来对我的应用程序进行编程以静默安装 APK 文件 我知道可以使用如下代码启动 Intent intent new Intent Intent ACTION VIEW intent setDataAndType Uri fr
  • Vuetify - 如何设置背景颜色

    我正在使用带有 Light 主题的 Vuetify 默认情况下 这会将主要内容的背景设置为浅灰色 我需要它是白色的 我想通过修改手写笔变量来覆盖它 但我似乎无法弄清楚哪个变量设置背景颜色 我按照中的所有步骤进行了操作docs https v
  • 如何使用 C# 语言将用户与机器人的对话数据存储到 azure SQL 数据库中?

    我目前正在研究 Bot 框架技术 在我当前的项目中 我想将 bot 对话数据存储到 azure SQL 数据库中 我开发了一个 ReviewBot 在其中我必须编写代码来按用户对任何酒店进行评论 评级 机器人与用户的通信工作正常 但我想使用
  • 使用 setInterval 时,如果我在 Chrome 中切换选项卡并返回,滑块会疯狂追赶

    我的网站上有一个 jQuery 滑块 转到下一张幻灯片的代码位于名为 nextImage 的函数中 我使用 setInterval 在计时器上运行我的函数 它完全符合我的要求 它在计时器上运行我的幻灯片 但是 如果我在 Chrome 中访问
  • 如何将 JavaScript 代码嵌入到 Google 协作平台页面中?

    我有一个 Google 协作平台页面 如何在其中嵌入 JavaScript 代码 而不实现小工具并在其中添加 JavaScript 代码 您可以运行一些 JavaScript 代码 但是在页面编辑期间 它将自动包装到一个简单的小工具中 并且
  • 阻止 Rails 表单标签修改文本

    我的一个视图中有下面的代码 但它始终呈现为主页 url 我怎样才能阻止它改变情况 br br 愚蠢 我知道 但这样就可以了 f label 之后的第一个参数实际上应该是正在编辑的对象的方法 所以您可能弄错了 我假设方法 字段名称 实际上是我
  • 通过拼凑对齐多个图例

    In 这个小插曲 https patchwork data imaginist com articles guides layout html controlling guides of 拼凑而成 https cran r project
  • 将 Json 响应解释为纯文本 [重复]

    这个问题在这里已经有答案了 我有以下代码 我需要解析响应 根据我的理解 该响应实际上保存在变量 transferFlag 中 但是 transferFlag 会提醒整个ajax代码 我需要 ajax 调用的响应 它实际上返回方法的值 get
  • 警告:找不到指定操作的配置:

    我遇到以下异常 请帮助解决这个问题 Jul 16 2013 11 18 40 AM org apache struts2 components Form evaluateExtraParamsServletRequest WARNING N
  • 如何将更新部署到在客户站点上运行的服务工作人员?

    假设我提供不同网站使用的推送通知服务 此服务需要在我的客户站点上安装 Service Worker 我希望该架构具有一些属性 完全静态资源 安装 Service Worker 文件 配置 JS 片段等过程只需完成一次 随时更新 Servic
  • 在通知区域切换中收听“深色主题”并收到更改通知

    我可以得到UI MODE NIGHT MASK通过致电resources configuration uiMode and Configuration UI MODE NIGHT MASK 我需要监听这个变量并在接收新值时更改我的主题 我想
  • uwsgi 选项 --wsgi-file 和 --module 无法识别

    我正在尝试使用 uwsgi 运行 Django 应用程序 我发现的大多数指令都引用 wsgi file 和 module 来指定应用程序 但 uwsgi 没有提及这些选项 当我尝试使用它们时 uwsgi s tmp uwsgi sock m
  • 在 Eclipse 的 Crashlytics 安装中找不到存储库

    我尝试将 Crashlytics SDK 安装到 Eclipse 中 但收到以下错误 安装软件 遇到问题 收集要安装的项目时发生错误 An error occurred while collecting items to be instal
  • 使用 JCo 从 SAP 系统读取表

    我试图从 SAP 系统读取表 但总是收到此错误 Exception in thread main com sap conn jco JCoRuntimeException 127 JCO ERROR FIELD NOT FOUND Fiel