abap 相关问题

ABAP是SAP软件R / 3,S / 4HANA,CRM和许多其他软件的编程语言。

运行简单转换时出现引用节点错误

我在使用我无法弄清楚的简单转换时遇到问题。 运行代码在转换行给出以下错误消息(异常类 CX_ST_REF_ACCESS) 我在使用简单的转换时遇到问题,我无法弄清楚。 运行代码在转换行CX_ST_REF_ACCESS处给出以下错误消息(异常类<tt:loop name="PurchaseOrder" ref="PurchaseOrder">): 访问引用节点“PURCHASEORDER”时出错。引用节点未定义或没有必要的类型 使用CALL Transformation时出现错误。 我尝试使用简单转换从 XML 中读取数据。 这是我的简单转换: <?sap.transform simple?> <tt:transform xmlns:tt="http://www.sap.com/transformation-templates"> <tt:root name="PurchaseOrder"/> <!-- Root element: PurchaseOrder --> <tt:template> <tt:loop name="PurchaseOrder" ref="PurchaseOrder"> <PurchaseOrder> <!-- Address Elements --> <Address> <tt:loop name="Adress" ref="PurchaseOrder.Address"> <Name> <tt:value ref="Name"/> </Name> <Street> <tt:value ref="Street"/> </Street> <City> <tt:value ref="City"/> </City> <State> <tt:value ref="State"/> </State> <Zip> <tt:value ref="Zip"/> </Zip> <Country> <tt:value ref="Country"/> </Country> </tt:loop> </Address> <!-- DeliveryNotes Element --> <DeliveryNotes> <tt:value ref="PurchaseOrder"/> </DeliveryNotes> <!-- Items Section --> <Items> <tt:loop ref="PurchaseOrder"> <Item> <ProductName> <tt:value ref="ProductName"/> </ProductName> <Quantity> <tt:value ref="Quantity"/> </Quantity> <USPrice> <tt:value ref="USPrice"/> </USPrice> <tt:cond> <Comment> <tt:value ref="Comment"/> </Comment> </tt:cond> <tt:cond> <ShipDate> <tt:value ref="ShipDate"/> </ShipDate> </tt:cond> </Item> </tt:loop> </Items> </PurchaseOrder> </tt:loop> </tt:template> </tt:transform> 我的ABAP代码(精简到相关部分): TYPES: BEGIN OF ty_address, name TYPE string, street TYPE string, city TYPE string, state TYPE string, zip TYPE string, country TYPE string, END OF ty_address. TYPES: BEGIN OF ty_item, productname TYPE string, quantity TYPE i, usprice TYPE p DECIMALS 2, comment TYPE string, " Optionales Feld für Kommentar shipdate TYPE d, " Optionales Feld für ShipDate END OF ty_item. DATA: BEGIN OF ty_purchase_order, addresses TYPE TABLE OF ty_address, " Mehrere Address-Einträge deliverynotes TYPE string, items TYPE TABLE OF ty_item, " Tabelle mit Items END OF ty_purchase_order. DATA: gv_file TYPE string, " Datei für den Upload lt_xml_table TYPE TABLE OF string, " Tabelle für XML-Zeilen gv_xml_string TYPE string. " Für das gesamte XML als String gv_file = p_file. CALL METHOD cl_gui_frontend_services=>gui_upload EXPORTING filename = gv_file * codepage = '1252' CHANGING data_tab = lt_xml_table EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 not_supported_by_gui = 17 error_no_gui = 18 OTHERS = 19. LOOP AT lt_xml_table INTO DATA(lv_line). CONCATENATE gv_xml_string lv_line INTO gv_xml_string. ENDLOOP. CALL TRANSFORMATION ZJB_TRAN0 SOURCE XML gv_xml_string RESULT PurchaseOrder = ty_purchase_order. 最后是我想要处理的 XML 文件: <PurchaseOrder> <Address> <Name>Ellen Adams</Name> <Street>123 Maple Street</Street> <City>Mill Valley</City> <State>CA</State> <Zip>10999</Zip> <Country>USA</Country> </Address> <Address> <Name>Tai Yee</Name> <Street>8 Oak Avenue</Street> <City>Old Town</City> <State>PA</State> <Zip>95819</Zip> <Country>USA</Country> </Address> <DeliveryNotes>Please leave packages in shed by driveway.</DeliveryNotes> <Items> <Item> <ProductName>Lawnmower</ProductName> <Quantity>1</Quantity> <USPrice>148.95</USPrice> <Comment>Confirm this is electric</Comment> </Item> <Item> <ProductName>Baby Monitor</ProductName> <Quantity>2</Quantity> <USPrice>39.98</USPrice> <ShipDate>1999-05-21</ShipDate> </Item> </Items> </PurchaseOrder> 在转换中,您不应该在顶部 XML 节点 (<PurchaseOrder>) 之前循环,因为顶部 XML 节点是唯一的。 发生错误CX_ST_REF_ACCESS: ABAP 名称不存在 或者实际类型不是预期的类型 当涉及到循环时,它隐含地意味着ABAP节点是一个内表,但事实并非如此。 在你的例子中,语句<tt:loop name="PurchaseOrder" ref="PurchaseOrder">引用(ref)根名称“PurchaseOrder”,它引用ABAP变量TY_PURCHASE_ORDER,它是一个结构,所以循环是没有意义的。 ABAP 名称的混乱/ref 为了避免混淆,我建议在转换 (ref) 中以全部大写形式指示 ABAP 名称,以避免与 XML 名称混淆。您将看到您指示的 ABAP 名称在您的 ABAP 代码中不存在(ADDRESS 而不是 ADDRESSES)。 例如,最好输入以下内容,而不是 <tt:root name="PurchaseOrder"/> 和 <tt:loop name="Adress" ref="PurchaseOrder.Address">: <tt:root name="PURCHASEORDER"/> <tt:template> <PurchaseOrder tt:ref="PURCHASEORDER"> ... <tt:loop name="Adress" ref="ADDRESSES"> 注意,ref可以有多种表达方式,如<PurchaseOrder tt:ref="PURCHASEORDER">和<tt:loop name="Adress" ref="ADDRESSES">所示,它们都有相同的含义(设置当前ABAP节点指针),不同之处在于前缀tt:当 XML 元素不是 ST 命令时需要。 关于loop的困惑 您应该在 <Address> 之前循环,而不是之后,因为 <Address> 在 XML 文件中多次出现。 <tt:loop ref="ADDRESSES"> <address> ... </address> </tt:loop> 关于loop name="..."的困惑 如果您不提及名称,则无需注明名称。如果您有两个或多个嵌套循环,则名称很有用,例如引用内循环(例如第二级)中的 ABAP 内容 引用外循环(例如第一级)。 <tt:loop ref="ADDRESSES"> ... <address> ... </address> </tt:loop> NB:关于ABAP代码,我猜您将ty_purchase_order设置为变量,因为在尝试将其设置为类型时出现语法错误,这是由于addresses TYPE TABLE OF ty_address(也是items),因为复杂的内部表类型必须是“完整”,即指定表类别和键,例如完整的可能是addresses TYPE STANDARD TABLE OF ty_address WITH EMPTY KEY。

回答 1 投票 0

旧版本 ABAP 上扩展嵌套表的替代方案?

正如人们可能知道的那样,我们有一个方便的 MOVE-CORRESPONDING 子句作为 EXPANDING NESTED TABLES: 移动对应: 到 扩展嵌套表。 基本上是什么...

回答 1 投票 0

ABAP 调用堆栈中的奇怪前缀(/A\)

一般来说,我会尝试让我的问题可重现。 在这种情况下我找不到办法。请随时指导我如何获取更多详细信息,我将附上。 在某些情况下,我们使用 ABAP ...

回答 1 投票 0

如何设置@Conclusion.filter.defaultValue的日期范围?

我正在使用 ABAP Restful 应用程序编程模型 - oData v2。 我希望能够默认指定一个日期范围,例如过去 3 个月内的 CreationDate。 在非常基础的层面上,我可以定义...

回答 1 投票 0

我可以在 RAP 应用程序中模拟数据传输对象吗?

我正在尝试使用 Restful ABAP 编程模型 (RAP) 来涵盖以下用例: 接收数据时包含字段 a、字段 b、字段 c 和字段 d 执行逻辑来转换入站

回答 1 投票 0

ABAP SELECT 案例和公用表表达式

我需要构造一个语句,根据另一个表中的存在情况来填充列值。我猜测 CTE (7.51 abapwith ) 和 select case 的组合可以完成这项工作,但我无法写...

回答 2 投票 0

如何在ABAP中将一个大数据库表复制到另一个数据库表?

我想将一个大数据库表复制到另一个。这是我目前的方法: 使用 HOLD lv_db_cursor FOR 打开光标 从 zcustomers 中选择 *。 做。 刷新 gt_custom。 获取下一个光标

回答 3 投票 0

旧版本上扩展嵌套表的替代方案?

正如人们可能知道的那样,我们有一个方便的 MOVE-CORRESPONDING 子句作为 EXPANDING NESTED TABLES: 移动对应: 到 扩展嵌套表。 基本上是什么...

回答 1 投票 0

安装 SAP NetWeaver 7.52 期间出错

我想在openSUSE 15.6上安装“SAP NetWeaver AS ABAP Developer Edition 7.52 SP04”,出现此错误: 由于 Step 返回 modlib.jslib.caughtException 而中止执行 日月光

回答 1 投票 0

替换屏幕上显示的参数名称?

当我定义参数时,例如: 参数 pa_date 类型 d 默认 sy 数据。 应用程序启动时,如何将“pa_date”更改为其他内容?我想将其更改为“选择...

回答 5 投票 0

计算满足某些条件的itab行?

我从函数模块调用中获取了一个内部表,该表返回约 100 行。大约 40% 的行与我无关,因为我只需要 PAR1 =“XYZ”的条目。 在 SQL 表上 (

回答 5 投票 0

如何仅修改全局表中的特定列?

我正在将内部联接选择中的四个字段选择到我创建的内部结构中。然后,我想更新其中一个表中不同主键下的这些特定字段。这里是

回答 1 投票 0

在用户输入后读取ALV更改?

我有一个报告,它通过 ALV 网格输出我的内部表的数据。输出本身包含一些信息和每行两个复选框。如果需要,用户可以选中这些框...

回答 2 投票 0

ABAP 在 HANA 中使用主键进行选择,将条件应用于整个主键

有没有办法实现完整的主键选择?我将在下面几行中更详细地解释它。 我必须使用游标按顺序处理表的所有记录,如果处理...

回答 1 投票 0

如何动态获取结构体的组成部分?

假设我有一个网格ty_meshes。如何动态获取网格的组件以及其中的字段和值? 类型: t_scarr 类型具有唯一密钥 CARRID 的 scraper 哈希表,

回答 1 投票 0

我可以检查 line_exists 的初始值或不相等吗?

ABAP 7.40 添加了 line_exists( ... ) 谓词函数来分析内表。但是有什么方法可以检查是否存在特定列初始或不同的行...

回答 5 投票 0

如何共享控制框架演示,使其可以通过简单的复制/粘贴来运行?

我有一个非常简单的ABAP程序,演示如何显示文本编辑器字段(cl_gui_textedit),我想通过互联网、电子邮件、论坛、博客文章或其他方式分享。 我想要人们...

回答 1 投票 0

如何在绑定到 cl_gui_container=>default_screen 的拆分容器中显示 SALV

抱歉这个极其简单的问题,我似乎无法在绑定到 cl_gui_container=>default_screen 的拆分容器中显示 SALV 表。 最小代码: 数据:lo_salv_table 类型参考

回答 1 投票 0

如何分享一个通过简单复制、粘贴和运行即可运行的控制框架演示?

我有一个非常简单的ABAP程序,演示如何显示文本编辑器字段(cl_gui_textedit),我想通过互联网、电子邮件、论坛、博客文章或其他方式分享。 我想要人们...

回答 1 投票 0

如何在绑定到cl_gui_container=>default_screen的分割容器中显示SALV

抱歉这个极其简单的问题,我似乎无法在绑定到 cl_gui_container=>default_screen 的拆分容器中显示 SALV 表。 最小代码: 数据:lo_salv_table 类型参考

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.