当参数的类型为get_properties
时,如何将本示例中的方法ANY
赋予我局部变量?
"ES_ATTRIBUTES Exporting Type ANY
some_object->get_properties( IMPORTING es_attributes = ????? ).
我试图将其放入此变量中,但这没用:
FIELD-SYMBOLS:
<ls_attributes> TYPE any.
答案 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.
但是如桑德拉所说,事先知道类型绝对更好/安全。