宏与子程序

  • 本文关键字:子程序 macros abap
  • 更新时间 :
  • 英文 :


我试图了解在哪些情况下使用宏或子例程更好。

例如,我正在创建一个程序来解析一个包含数百个字段和属性的巨大xml,我正在定义子例程和宏来获取这些节点、属性等。因此,这些子例程(或宏)被称为数千次

下面是我可以使用的子程序和宏的示例;

MACRO

DEFINE xml_get_code_att_2.
  node = xml_node_iterator->get_next( ).
  while node is not initial.
    if lv_lastchild is not initial and node->get_name( ) eq lv_lastchild.
      xml_node_iterator = xml_node->create_iterator( ).
      exit.
    endif.
    if node->get_name( ) = &1.
      clear: list, nodee.
      list = node->get_attributes( ).
      nodee = list->get_named_item( 'listID' ).
      if nodee is not initial.
        &2 = nodee->get_value( ).
      endif.
    node = xml_node_iterator->get_next( ).
  endwhile.
  if node is initial.
    xml_node_iterator = xml_node->create_iterator( ).
  endif.
END-OF-DEFINITION

子程序

FORM xml_get_code_att_2 USING p_name CHANGING p_listid
  node = xml_node_iterator->get_next( ).
  temp = node->get_name( ).
  while node is not initial.
    if lv_lastchild is not initial and node->get_name( ) eq lv_lastchild.
      xml_node_iterator = xml_node->create_iterator( ).
      exit.
    endif.
    if node->get_name( ) = p_name.
      clear: list, nodee.
      list = node->get_attributes( ).
      nodee = list->get_named_item('listID' ).
      if nodee is not initial.
        p_listid = nodee->get_value( ).
      endif.
    endif.
    node = xml_node_iterator->get_next( ).
  endwhile.
  if node is initial.
    xml_node_iterator = xml_node->create_iterator( ).
  endif.
endform.

那么,使用哪一个更好呢?

了解差异很重要:宏在编译时处理,而表单(你可能更擅长使用方法)在运行时处理。

至于您提出的建议:不要使用宏来构建代码。宏是调试的难点。宏最好用于缩短单个指令或短代码段,而不需要分支或循环。对于其他一切,请使用方法(或者表单,如果必须的话)。

此外,要解析和处理XML,您可能需要检查现有的框架和技术。。。

MACROS无法调试-我再也不会使用MACROS了。MACROS是SAP以前的R2主机世界遗留下来的一些东西。

有了宏,你可以把丑陋的东西变成现实。有一个trmac表,你可以把宏放在那里。你可以在任何abap代码中使用这些宏,如果其他人不知道TRMAC表,你可以驱动他们gracy。这就是SAP 80的编程风格。不要那样做。

相关内容

  • 没有找到相关文章

最新更新