如何导入ANY类型的参数?

时间:2018-10-17 17:14:50

标签: sap abap

当参数的类型为get_properties时,如何将本示例中的方法ANY赋予我局部变量?

"ES_ATTRIBUTES  Exporting   Type    ANY
some_object->get_properties( IMPORTING es_attributes = ????? ).

我试图将其放入此变量中,但这没用:

FIELD-SYMBOLS:
      <ls_attributes> TYPE any.

3 个答案:

答案 0 :(得分:1)

在ABAP中,这意味着您可以使用任何类型的数据对象(最简单的方法是使用DATA进行声明)。

但是根据开发人员编码其方法的方式,它可能更具限制性。

在这里,我认识到WebUI组件(CRM,SOLMAN等)的一种方法,因此数据对象必须与您正在访问的“ some_object”相对应。如果不确定,请调试GET_PROPERTIES。

答案 1 :(得分:0)

实际上,作为调用者,您应该知道要为此ANY参数导入的类型。

您必须知道GET_PROPERTIES的协议并对其进行调试才能知道该参数的返回类型。在您的方法中,创建一个DATA REFERENCE并将其分配给ANY字段符号。

Data:
      lr_data type ref to data.
Field-symbols:
      <lt_properties> type any. 

create data lr_data type TYPE_NAME.  'You should know the type
assign lr_data->* to <lt_properties>.

从我个人的角度来看,用EXPORTING参数类型ANY定义方法不是一种很好的做法。

您可以使用IF _ ** _ PROPERTY定义一个接口,并且具有该接口的返回表。

或返回名称/值对表。 (从方法签名中,它应该返回一个TABLE,GET_ PROPERTIES )。

答案 2 :(得分:0)

  
    

我试图将其放入此变量中,但这没用:

  

您遇到什么错误?

这是带有标准结构转换类的示例,该类也具有ANY类型的参数ex_value,并且可以很好地与ANY字段符号一起使用。

DATA: gattrdata LIKE brelattr-gattrdata.

  FIELD-SYMBOLS: <fs_incl> TYPE ANY, <fs_wa> TYPE str_type.

      CALL METHOD cl_abap_container_utilities=>read_container_c
      EXPORTING
        im_container           = gattrdata
      IMPORTING
        ex_value               = <fs_incl>
      EXCEPTIONS
        illegal_parameter_type = 1
        OTHERS                 = 2.

    CHECK sy-subrc = 0.
    MOVE-CORRESPONDING <fs_incl> TO <fs_wa>.

在这种情况下,您可以使用RTTS猜测类型,然后将字段符号替换为键入的引用ref_wa

DATA: ref_wa      TYPE REF TO data,
      ref_rowtype TYPE REF TO cl_abap_structdescr.

ref_rowtype ?= cl_abap_typedescr=>describe_by_data( <fs_incl> ).
CREATE DATA ref_wa TYPE HANDLE ref_rowtype.

但是如桑德拉所说,事先知道类型绝对更好/安全。