什么是SAP和ABAP?我搜索并获得了一些不太有意义的不同首字母缩略词.
它们主要用于什么?
我不知道关于ABAP的事情,除了它有一个OO方面,我想在我开始仔细研究之前对它有一些直升机视图.我知道我可以在研究它时找到所有这些,但就像我说的初学者一样,我想知道我在处理什么.
任何关于特征的一般信息基本上都是受欢迎的
如何获取内部表的行数?我想我可以循环播放它.但必须有一个更健全的方式.
我不知道它是否有所作为,但代码应该在4.6c版本上运行.
SAP没有布尔值的核心数据类型.此外,SAP中更高级别的布尔类型通常具有三种状态:true('X'),false('')和unknown(' - ').
现在很明显,布尔值是我开发工作的基石,但我意识到我的类型(数据元素)用法并不是非常一致.到目前为止,我认为这些是最常见的:
abap_bool:在abap类型池中定义,不受约束但常量定义为true,false,unknown,yes和noos_boolean:数据元素,是('X')或否('')xfeld:data element,True('X')或False('')缺少字段标签,描述为复选框在我的代码中我主要使用,abap_bool因为我可以使用常量而不是字符值,而不是我无法分配abap_true给xfeld.但是,我被警告过,这种类型的池可能并不总是可用.
我现在想知道布尔值的最佳实践,特别是:
在循环内部表时,我可以安全地删除活动行吗?
例如,请考虑以下代码:
LOOP AT lt_itab INTO ls_wa.
IF [...] . " A check that can't be done inside a 'DELETE lt_itab WHERE'
DELETE lt_itab INDEX sy-tabix
" OR
DELETE lt_itab FROM ls_wa.
ENDIF.
ENDLOOP.
Run Code Online (Sandbox Code Playgroud)
删除这样的记录是否安全,或者这种逻辑不按预期行事?
我应该在临时itab中存储行的唯一标识符并DELETE lt_itab WHERE在循环后运行吗?
我假设对当前迭代中加载的记录以外的记录执行删除操作肯定会引起问题,但我不确定这是否是有效的,更不用说是好的做法.
是否有另一种在ABAP中连接而不是使用CONCATENATE关键字的方法?
使用示例CONCATENATE:
DATA:
foo TYPE string,
bar TYPE string,
foobar TYPE string.
foo = 'foo'.
bar = 'bar'.
CONCATENATE foo 'and' bar INTO foobar SEPARATED BY space.
Run Code Online (Sandbox Code Playgroud) 是否有任何标准方法在ABAP中使用XSD执行XML文档验证?据我所知,有一种方法利用XI/PI功能,但这些功能在我们的系统中不可用.
我想我们也可以使用一种解决方法:使用任何其他语言制作独立的Java RFC或Web服务,从SAP获取XML和XSD,执行验证并将结果返回给SAP; 但这可能是更复杂,更不可靠的解决方案.
你有没有遇到类似的任务,你是如何解决的?任何建议,意见甚至澄清问题都非常感谢!
当我将一行添加到已排序的表时,为什么我的ABAP程序会短暂转储?
ST22显示 ITAB_ILLEGAL_SORT_ORDER
data: sorted_tab type sorted table of ty_tab with non-unique key key,
line type ty_tab.
line-key = 1.
append line to sorted_tab. "works fine"
line-key = 2.
append line to sorted_tab. "works fine"
line-key = 1.
append line to sorted_tab. "<==== Short dump here"
Run Code Online (Sandbox Code Playgroud) 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中近似这种编程风格,还是我陷入了混乱?