我尝试编译ABAP提供的声明变量、类型和类似内容的所有方法,包括过时的语法变体和acrane语法变体。因此,例如,我会在列表中包括字段组,但不包括类的声明。我目前的列表如下。我错过什么了吗?
语句声明变量
- DATA-like declarative statements数据(不包括公共部分的数据开头)、静态、参数、参数、常量
- FIELD-SYMBOLS -内联声明
-程序的实际参数
表单(子例程)、函数、方法
-其他变量声明语句
范围,SELECT-OPTIONS:还有更多?
语句声明类型
- TYPES
other statements
- DATA BEGIN OF COM
我的递归方法中有一个传入的深结构,它包含结构和表,所以我使用RTTI检查类型、循环并执行操作,以防我找到了特定的组件。
如果当前组件是一个结构或表,那么方法会调用它自己。
问题:我导入结构时输入了any类型。到目前一切尚好。我也想把它作为A型出口。
我在这里挣扎。
如何将已编辑的深结构分配给导出参数?
METHOD process_input.
DATA: lo_type_descr TYPE REF TO cl_abap_typedescr,
lo_struct_descr TYPE REF TO cl_abap_structdescr,
lv_comp_fo
我需要在字段符号<itab>中获取字段名,这样我就可以使用ALV的字段目录的名称。
所以我使用了cl_abap_structdescr,但是它总是给我带来一个错误。我尝试了一个内部表,并得到了预期的结果,但我必须使用字段符号,而不是内部表。
ASSIGN lo_itab->* TO <itab>
data: go_struct type ref to cl_abap_structdescr,
gt_comp type abap_component_tab,
gs_comp type abap_componentdescr.
我们正在编写一个sapjco客户端来自动化某些事情。但是,有一个函数在初始化函数时似乎有问题。其他功能块可以正确连接,但此功能块在尝试连接时崩溃。
该函数没有导入。但是我们也尝试了import,也得到了同样的结果。所以添加一个看起来并不是很有效
FUNCTION ZE237_GET_REZEPTID.
TYPES: BEGIN OF ZE237SOLLDATEN_TYP,
id TYPE ZE237SOLLDATEN-ID,
name TYPE ZE237SOLLDATEN-NAME,
END OF ZE237SOLLDATEN_TYP.
DATA lt_table TYPE
我目前正在进行一个项目,将数据提取到几个itabs中,并将它们全部保存到本地pc上的单个excel文件中。
为了将数据移动到excel文件中,我必须遍历表中的字段,这些字段似乎可以用cl_abap_structdescr=>describe_by_data和cl_abap_tabledescr=>create函数存档。在我阅读的中,作者将它们与ABAP字典表一起使用,我的目标是将它与任意内部表一起使用。
我在测试报告中尝试了它,并使用T005进行测试:
data:
lt_t005 type standard table of t005,
我正在开发一个与SAP RFC函数通信的接口。我有一些关于参数层次结构和参数唯一性以及表命名的问题,我似乎在网上找不到答案。
在通过RFC进行通信时,是否允许使用深层次结构?以下是一些输入参数的示例:
- Example A (Structure within Structure):字段F1字段F2结构S1字段S1.F1结构S1.S1字段S1.S1.F1字段S1.S1.F2字段S1.F2字段S1.F3
- Example B (Table within Structure):字段F1字段F2结构S1字段S1.F1表S1.T1表S1.T1.S1 (排1)字段S1.T1.F1字段S1
我看到了几个ABAP标准方法,它们作为结果返回对数据的引用。CL_ABAP_EXCEPTIONAL_VALUES=>GET_MAX_VALUE( )就是其中之一。我的自然倾向是在一行中使用这种方法,如下所示:
DATA lv_max_value TYPE i.
lv_max_value = CL_ABAP_EXCEPTIONAL_VALUES=>GET_MAX_VALUE( lv_max_value )->*.
遗憾的是,这是行不通的,因为:
函数方法"GET_MAX_VALUE“的结果类型不是对象引用或接口引用。
眼前的问题是:是否有可能直接取消这样的结果?
我想向动态内部表中添加一个动态表行。
DATA: lo_structdescr TYPE REF TO cl_abap_structdescr,
lo_tabledescr TYPE REF TO cl_abap_tabledescr,
lt_components TYPE abap_component_tab,
ls_component TYPE LINE OF abap_component_tab,
lt_keys TYPE abap_keydescr_tab,
lt_table
我正在尝试使用RTTS类构建一个动态类型。我构建了一个包含列名'COL_1'、'COL_2'等的组件表……在第73行的标准方法CL_ABAP_STRUCTDESCR=>CREATE( )中,类型创建失败:
if comp-name+off(1) cn 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_' or
comp-name+off(*) cn 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789'.
* illegal character i
我试图在ABAP中实现一些加密函数,并且我对二进制字符串的低性能操作感到困惑。
例如,我有一个X字符串(不是XString),我想在循环中逐字节读取它。我说:
DO n TIMES.
b = data+offset(1).
...
这是可行的,但读取速度约为1.5MB/s。另一个操作,包括按位加法、循环移位和模块添加也很慢。
因此,与C/C++中的~100 MB/s相比,ABAP中的散列速度约为600 KB/s。
我怀疑ABAP是否适合处理二进制数据。也许还有另一种惯用的方法来处理二进制数据;或者,除了将加密函数提取到C#或Java服务之外,没有其他方法?
出于好奇,我尝试创建一个名为object的ABAP界面。编译器给出错误消息"OBJECT" is a protected type name and therefore cannot be used for a user's own type definitions.
虽然这个检查确实是个好主意,但我在ABAP关键字文档中找不到对protected type name的引用。还有其他人吗?
我在从ABAP调用存储过程时遇到了问题。我使用标准的ABAP类cl_sql_statement和它的方法execute_procedure和set_param。例如,被调用的过程有一个布尔输入参数。
CREATE OR REPLACE PROCEDURE print_boolean (
p_in_flag BOOLEAN
) IS
ABAP片段
DATA: ld_e_bool type char5,
ld_o_stat type ref to cl_sql_statement,
ld_r_data type ref to data.
**************
任务是创建具有动态名称的变量。不是打字,而是名字!
所有向我提出的方法(例如通过cl_abap_typedescr和cl_abap_elemdescr类)都是无用的。
我想在语义上实现这样的东西,但是这个语法不正确:
CREATE DATA (name) TYPE var_type.
有什么解决办法吗?
在我正在从事的一个项目中,我经常使用复杂的Dictionary对象。通常,有很多这样的声明:
var d1 = new Dictionary<string, Dictionary<int, List<string>>>();
var d2 = new Dictionary<Tuple<string, string>, List<object>>();
在类型转换和传递参数等等之间,这变得令人讨厌。我想做的事情是这样的,使用一个虚构的关键字"typedel":
typedel ListDict = Dicti