ASSIGN 因调试器路径中的变量而失败

ASSIGN fails with variable from debugger path

我试图将此结构路径的值分配给字段符号,但此路径不起作用,因为它的路径中有一个 table。

但是在调试器中此路径的这个值显示正确。

有没有办法通过传递一条路径将 table 行的组件动态分配给字段符号? 如果没有,那么我将只阅读 table 行,然后使用路径获取所需的值。

ls_struct (Struct)
    - SUPPLYCHAINTRADETRANSACTION (Struct)
        - INCL_SUPP_CHAIN_ITEM (Table)
            - ASSOCIATEDDOCUMENTLINEDOCUMENT (Element)   


i_component_path = |IG_DDIC-SUPPLYCHAINTRADETRANSACTION-INCL_SUPP_CHAIN_ITEM[1]-ASSOCIATEDDOCUMENTLINEDOCUMENT|.
ASSIGN (i_component_path) TO FIELD-SYMBOL(<lg_value>).
IF <lg_value> IS NOT ASSIGNED.
    return.
ENDIF.

<lg_value> won't be assigned 

解决方法Sandra Rossi

调试器有自己的语法和逻辑,它根本不应用 ASSIGN 算法。使用ABAP源代码,你必须使用ASSIGN两次,第一次到达内部table,然后你select第一行,第二次到达组件行。

调试器的工作方式完全不同,调试器代码仅在调试模式下工作,您不能从调试器调用代码(即,如果调用它,调试器使用的内核代码将失败)。不,没有 "abappath"。有 XSL 转换对象 (xpath),但对于您所要求的来说速度很慢。

非常感谢

这似乎是 ASSIGN 语句的一个相当意外的限制。可能值得一张 SAP 的 ABAP 语言组的票,以澄清它是否是一个错误。

虽然这有效:

ASSIGN data-some_table[ 1 ]-some_field TO FIELD-SYMBOL(<lv_source>).

相同的表示为字符串不:

ASSIGN (`data-some_table[ 1 ]-some_field`) TO FIELD-SYMBOL(<lv_source>).

Alternative 1 for (name) of the ABAP keyword documentation for the ASSIGN statement 表示“name 中的名称结构与直接指定的方式相同”。

但是,此声明后紧跟着 "the content of name must be the name of a data object which may contain offsets and lengths, structure component selectors, and component selectors for assigning structured data objects and attributes in classes or objects",一个 包含我们在这里需要的 table expressions 的列表。