ABAP语法中是否有三元或条件运算符?我没有找到一个,所以假设答案是否定的,那么我是否有一个替代方案可以用来清理IF我经常使用的常见"哑" 语句?
例如,考虑一种使用可选消息参数记录消息的方法.要决定使用导入的参数还是默认值,我必须像这样检查值:
IF iv_class IS INITIAL.
lv_message_class = 'DEFAULT'.
ELSE.
lv_message_class = iv_class.
ENDIF.
IF iv_number IS INITIAL.
lv_message_number = '000'.
ELSE.
lv_message_number = iv_number.
ENDIF.
IF iv_type IS INITIAL.
lv_message_type = 'E'.
ELSE.
lv_message_type = iv_type.
ENDIF.
Run Code Online (Sandbox Code Playgroud)
三元运算符会将这五行语句中的每一个都减少为单行,如下面的代码块所示.当操作员在线使用时,它甚至可以不需要使用临时变量.
lv_message_class = iv_class IS INITIAL ? 'DEFAULT' : iv_class.
lv_message_number = iv_number IS INITIAL ? '000' : iv_number .
lv_message_type = iv_type IS INITIAL ? 'E' : iv_type .
Run Code Online (Sandbox Code Playgroud)
有没有办法在ABAP中近似这种编程风格,还是我陷入了混乱?
我正在尝试使用RJDBC的dbWritetable以下列方式从R到SAP HANA编写一个大型数据集(10个字符串,100M记录)
library("RJDBC")
drv <- JDBC("com.sap.db.jdbc.Driver", "/data/hdbclient/ngdbc.jar", "'")
database <- dbConnect( drv,"jdbc:sap://servername", "USER", "PASS")
dbWriteTable(database, "largeSet", largeSet)
Run Code Online (Sandbox Code Playgroud)
这有效,但速度极慢(每小时75k记录).我也测试了RODBC(sqlsave),这显示了同样的问题.
看看dbWriteTable它背后的代码似乎是逐个记录(即与插入相同),并且确实使用逐行插入到使用中dbSendUpdate显示相同的性能.我已经验证问题不在于连接速度本身.
ROracle有一个bulk_write选项似乎可以解决这个问题,但由于我正在尝试写HANA,我需要RJDBC或RODBC.
谁能告诉我如何通过运行批量写入或其他方法来加快对HANA的写入?
我正在开发一个IDOC服务器,它可以连接到同一SAP系统上的多个目的地(网关主机将是相同的)并接收IDoc.我不确定我需要运行多个JCoServer实例还是需要多个目的地的单个JCoServer.
如果是后一种情况,为什么jco.server.repository_destination在提供服务器数据时会有一个参数来使用属性指定目标名称?
我们目前在连接到 SAP HANA 的 Python 连接器中使用基本身份验证。在我们当前的连接字符串中,我们使用 SQLAlchemy,它看起来像这样:
def get_engine(host_name):
return create_engine('hana://{user}:{password}@{host_name}:{port}/HUP'.format(
user=request.json['username'],
password=base64.b64decode(bytes(request.json['password'], encoding='utf-8')).decode('utf-8'),
host_name=host_name,
port=current_app.config['HANA_PORT']
)
)
Run Code Online (Sandbox Code Playgroud)
我们现在需要过渡到使用 HANA Oauth,因此不再需要在连接字符串中输入用户名和密码。理想情况下,应该有一种方法可以将 JWT 输入到连接详细信息中。我在网上找不到太多资源来真正说明如何使用 Oauth 的 HANA 创建基于 Python 的连接器。这里的任何帮助将不胜感激。
我需要在SAP中获取服务器端目录的列表.我如何在ABAP中实现这一目标?我可以调用任何内置的SAP函数吗?
理想情况下,我想要一个函数,我可以将路径作为输入传递,并返回内部表中的文件名列表.
我的java/groovy程序中的要求是这样的:允许用户输入表名和表字段作为查询输入参数,并期望从SAP获得一些查询结果.从用户输入,我得到表名[CDPOS]和[CDHDR].在阅读了SAP文档和谷歌搜索后,我发现这些是存储更改文档日志的表.但是我没有找到任何可以在java中用来执行这种查询的远程调用函数.然后我使用了已弃用的RFC"RFC_READ_TABLE",并尝试仅根据此RFC构建自定义查询.但是,我发现如果我传递给这个RFC的所需字段的数量超过2,即使我限制了最大行,我总是得到DATA_BUFFER_EXCEED错误.
我无权成为sap系统中的ABAP开发人员,无法将FM添加到现有系统,因此我只能编写代码来完成JAVA中的此要求.
难道我做错了什么?你能否就这个问题给我一些提示?
提前谢谢了!
能否请您详细解释使用"标准表","哈希表"或简称"表"之间的区别."初始大小0"的含义是什么?
如需参考,请查看以下代码..
it_c01_d006_raw TYPE STANDARD TABLE OF /bic/ac01_d00600
INITIAL SIZE 0,
it_c01_d006 TYPE HASHED TABLE OF /bic/ac01_d00600
WITH UNIQUE KEY /bic/cemployee /bic/cdatetype,
it_c01_d002 TYPE TABLE OF /bic/ac01_d00200.
Run Code Online (Sandbox Code Playgroud) 有人可以解释一下使用ABAP堆栈的SAP NetWeaver系统中的客户端是什么,以及它如何在同一个安装中创建逻辑分隔?
我必须调试的一些ABAP程序使用系统内存使用以下语法将数据传递到其他程序:
EXPORT: VARIABLE_NAME TO MEMORY ID 'NAME_OF_MEMORY_OBJECT'.
Run Code Online (Sandbox Code Playgroud)
如何在调试器中检查这些内存ID的值?
相关地,如何查看参数集的值:
SET PARAMETER 'ZPR' FIELD lv_project.
Run Code Online (Sandbox Code Playgroud) 有没有办法用SAP-RFC将大结果"分块"成几个较小的部分?
根据这些链接,你似乎需要自己实现分块:-(
我想避免这种情况,我希望有一种方法可以让SAP-RFC库进行分块.
使用案例:
结果是100k行.我想获取1k行,直到收到所有行.
我想它并不重要,但我会使用PyRFC代码.