搜索错误?

2020-09-27 08:26发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我创建了自定义UI组件以显示员工详细信息,创建了一些记录以及何时要搜索记录。

通过提供任何名称并单击搜索,就抛出错误。

我的API代码搜索代码是

读取的代码是

和我的Custom Genil Class方法代码是

方法if_genil_appl_intlay〜get_dynamic_query_result。
数据:lr_msg_cont类型参考cl_crm_genil_global_mess_cont,
lv_num_hits类型i,
lt_results类型类型ybol_tab_max
lr_root_object类型对if_genil_cont_root_object的引用,
lt_request_obj类型crmt_request_obj_tab。

字段符号:类型ybol_empl_master_key。


*检索消息容器日志以< lr_msg_cont = iv_root_list-> get_global_message_container()。

** *当最大匹配数设置为0时。
IF is_query_parameters-max_hits是INITIAL。
lv_max_hits_tmp =100。"没有最大max_hits时为100。 设置
ELSE。
lv_max_hits_tmp = is_query_parameters-max_hits。
ENDIF。

*选择严格的查询
CASE iv_query_name。



当'SearchEmployees'时。 >

呼叫方法search_employee
导出
it_search_creteria = it_selection_parameters
iv_max_hits = lv_max_ hits_tmp
导入
et_results = lt_results。

如果lt_results不是INITIAL。
*如果搜索结果超出最大命中限制,请记录一条消息
DESCRIBE TABLE lt_results LINES lv_num_hits。
。 > IF lv_num_hits> lv_max_hits_tmp。
lv_max_hits = lv_max_hits_tmp。
lr_msg_cont-> add_message(iv_msg_type ='I'
iv_msg_id ='ZMESSAGES'
lv_ms_iv = > iv_show_only_once = abap_true)。

ENDIF。

*遍历结果以构建搜索结果对象
遍历lt_results分配
TRY。
< br>
*尝试创建一个新的结果对象
lr_root_object = iv_root_list-> add_object(
iv_object_name ='Employee'
is_object_key = )。


*将其标记为直接查询结果
lr_root_object-> set_query_root(abap_true)。
CATCH cx_crm_genil_duplicate_rel cx_crm_genil_model_error。

*由于给定的对象名称正确,因此不会发生!
ENDTRY。 br> ENDLOO P.

*注意:请求对象限制属性的读取。
*如果没有请求对象条目或属性
*表为空,则请求所有属性。
* 使用GET_OBJECTS
me-> if_genil_appl_intlay〜get_objects(it_request_objects = lt_request_obj
iv_root_list = iv_root_list)读取属性和关系。
ELSE。
lr_msg_cont-> add_message( iv_msg_id ='ZMESSAGES'
iv_msg_number ='002'
iv_show_only_once = abap_true)。
ENDIF。
当其他人时。
返回。
ENDCASE。

ENDMETHOD。

还有另一种方法。

方法IF_GENIL_APPL_INTLAY〜GET_OBJECTS。

数据:lv_root类型引用到if_genil_cont_root_object,
lv_key类型ybol_empl_master_key,
lv_empl_att类型ybol_employee_detail。** *获取数据容器的第一个对象。

lv_root = iv_root_list-> get_first()。

lv_root-> get_key(IMPORTING es_key = lv_key)。

*** *******检查是否在Create

IF lv_root-> check_attr_requested()= abap_true之后读取属性。

*********要获取的自定义API类 客户属性。

zhcl_empl_details_api => read_employee(EXPORTING is_empl_key = lv_key
IMPORTING es_empl_attr = lv_empl_att)。



*********仅返回对象 如果存在,则
如果lv_empl_att不初始化。

********在容器中设置属性
lv_root-> set_attributes(lv_empl_att)。

** *****获取数据容器的下一个对象。

lv_root = iv_root_list-> get_next()。

ENDIF。
ENDIF。
终止方法。

Genil类中用于搜索员工的另一种方法是。

SEARCH_EMPLOYEE方法。

数据:lv_max_hits TYPE i,
lv_string TYPE字符串,
lt_search_criteria TYPE genilt_selection_parameter_tab,
lv_last_attr_name TYPE名称_komp。

search_criteria> TYPE genilt_selection_parameter。

*注意:
*这是实施权限检查的好地方!!!!
*
lv_max_hits = iv_max_hits。
如果lv_max_hits EQ 0。 br> lv_max_hits =100。
ENDIF。

lt_search_criteria = it_search_creteria。

SORT lt_search_criteria按attr_name。

循环AT lt_search_criteria分配
< br> *注意:*当前实现仅处理CP和EQ搜索条件选项。
IF( -option EQ'EQ'或 -option EQ'CP')。
< br> IF lv_string不是INITIAL。

IF -attr_name NE lv_last_attr_name。

CONCATENATE lv_string')AND('INTO lv_string由空格分隔。
ELSE。
将lv_string'OR'插入lv _string按空格分隔。
ENDIF。

ELSE。
lv_string ='('。
ENDIF。



链接lv_string -attr_name -选项''INTO lv_string由空格分隔。
链接lv_string -低INTO lv_string。
链接lv_string''INTO lv_string。
ENDIF。


lv_last_attr_name = -attr_name。
ENDLOOP。

刷新et_results。

如果lv_string不初始。

CONCATENATE lv_string')'到lv_string中,用空格分隔。
ENDIF

*从后端检索数据
呼叫方法zhcl_empl_details_api => search_employee(导出iv_string = lv_string
iv_max_hits = lv_max_hits
导入et_results = et_results)。

>终止方法。

上面提到的是Search附带的所有方法,您可以参考一下并为我提出解决方案。

当我进行调试时遇到错误 cx_sy_no_handler。

ujp8o.jpeg (75.8 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我创建了自定义UI组件以显示员工详细信息,创建了一些记录以及何时要搜索记录。

通过提供任何名称并单击搜索,就抛出错误。

我的API代码搜索代码是

读取的代码是

和我的Custom Genil Class方法代码是

方法if_genil_appl_intlay〜get_dynamic_query_result。
数据:lr_msg_cont类型参考cl_crm_genil_global_mess_cont,
lv_num_hits类型i,
lt_results类型类型ybol_tab_max
lr_root_object类型对if_genil_cont_root_object的引用,
lt_request_obj类型crmt_request_obj_tab。

字段符号:类型ybol_empl_master_key。


*检索消息容器日志以< lr_msg_cont = iv_root_list-> get_global_message_container()。

** *当最大匹配数设置为0时。
IF is_query_parameters-max_hits是INITIAL。
lv_max_hits_tmp =100。"没有最大max_hits时为100。 设置
ELSE。
lv_max_hits_tmp = is_query_parameters-max_hits。
ENDIF。

*选择严格的查询
CASE iv_query_name。



当'SearchEmployees'时。 >

呼叫方法search_employee
导出
it_search_creteria = it_selection_parameters
iv_max_hits = lv_max_ hits_tmp
导入
et_results = lt_results。

如果lt_results不是INITIAL。
*如果搜索结果超出最大命中限制,请记录一条消息
DESCRIBE TABLE lt_results LINES lv_num_hits。
。 > IF lv_num_hits> lv_max_hits_tmp。
lv_max_hits = lv_max_hits_tmp。
lr_msg_cont-> add_message(iv_msg_type ='I'
iv_msg_id ='ZMESSAGES'
lv_ms_iv = > iv_show_only_once = abap_true)。

ENDIF。

*遍历结果以构建搜索结果对象
遍历lt_results分配
TRY。
< br>
*尝试创建一个新的结果对象
lr_root_object = iv_root_list-> add_object(
iv_object_name ='Employee'
is_object_key = )。


*将其标记为直接查询结果
lr_root_object-> set_query_root(abap_true)。
CATCH cx_crm_genil_duplicate_rel cx_crm_genil_model_error。

*由于给定的对象名称正确,因此不会发生!
ENDTRY。 br> ENDLOO P.

*注意:请求对象限制属性的读取。
*如果没有请求对象条目或属性
*表为空,则请求所有属性。
* 使用GET_OBJECTS
me-> if_genil_appl_intlay〜get_objects(it_request_objects = lt_request_obj
iv_root_list = iv_root_list)读取属性和关系。
ELSE。
lr_msg_cont-> add_message( iv_msg_id ='ZMESSAGES'
iv_msg_number ='002'
iv_show_only_once = abap_true)。
ENDIF。
当其他人时。
返回。
ENDCASE。

ENDMETHOD。

还有另一种方法。

方法IF_GENIL_APPL_INTLAY〜GET_OBJECTS。

数据:lv_root类型引用到if_genil_cont_root_object,
lv_key类型ybol_empl_master_key,
lv_empl_att类型ybol_employee_detail。** *获取数据容器的第一个对象。

lv_root = iv_root_list-> get_first()。

lv_root-> get_key(IMPORTING es_key = lv_key)。

*** *******检查是否在Create

IF lv_root-> check_attr_requested()= abap_true之后读取属性。

*********要获取的自定义API类 客户属性。

zhcl_empl_details_api => read_employee(EXPORTING is_empl_key = lv_key
IMPORTING es_empl_attr = lv_empl_att)。



*********仅返回对象 如果存在,则
如果lv_empl_att不初始化。

********在容器中设置属性
lv_root-> set_attributes(lv_empl_att)。

** *****获取数据容器的下一个对象。

lv_root = iv_root_list-> get_next()。

ENDIF。
ENDIF。
终止方法。

Genil类中用于搜索员工的另一种方法是。

SEARCH_EMPLOYEE方法。

数据:lv_max_hits TYPE i,
lv_string TYPE字符串,
lt_search_criteria TYPE genilt_selection_parameter_tab,
lv_last_attr_name TYPE名称_komp。

search_criteria> TYPE genilt_selection_parameter。

*注意:
*这是实施权限检查的好地方!!!!
*
lv_max_hits = iv_max_hits。
如果lv_max_hits EQ 0。 br> lv_max_hits =100。
ENDIF。

lt_search_criteria = it_search_creteria。

SORT lt_search_criteria按attr_name。

循环AT lt_search_criteria分配
< br> *注意:*当前实现仅处理CP和EQ搜索条件选项。
IF( -option EQ'EQ'或 -option EQ'CP')。
< br> IF lv_string不是INITIAL。

IF -attr_name NE lv_last_attr_name。

CONCATENATE lv_string')AND('INTO lv_string由空格分隔。
ELSE。
将lv_string'OR'插入lv _string按空格分隔。
ENDIF。

ELSE。
lv_string ='('。
ENDIF。



链接lv_string -attr_name -选项''INTO lv_string由空格分隔。
链接lv_string -低INTO lv_string。
链接lv_string''INTO lv_string。
ENDIF。


lv_last_attr_name = -attr_name。
ENDLOOP。

刷新et_results。

如果lv_string不初始。

CONCATENATE lv_string')'到lv_string中,用空格分隔。
ENDIF

*从后端检索数据
呼叫方法zhcl_empl_details_api => search_employee(导出iv_string = lv_string
iv_max_hits = lv_max_hits
导入et_results = et_results)。

>终止方法。

上面提到的是Search附带的所有方法,您可以参考一下并为我提出解决方案。

当我进行调试时遇到错误 cx_sy_no_handler。

ujp8o.jpeg (75.8 kB)
付费偷看设置
发送
1条回答
大圣 - sap领域执行人,9年sap运营经验
1楼 · 2020-09-27 08:45.采纳回答

嗨,哈里斯,

根据您所写的逻辑,您的SELECT查询是SELECT employee_id guid从yempl_details上升到iv_max_hits行进入表et_results的对应字段(iv_string)

iv_string将包含HARISH,因此子句SELECT employee_id ...... WHERE HARISH没有任何意义,这就是为什么它引发错误。

每当使用WHERE子句时,都应满足运算符或条件。

您可以参考标准SAP CRM中类CL_BUPA_IL_SEARCH_SERVICE的方法DETERMINE_EXIT_CRITERIA和类CL_BUPA_IL_CP_SEARCH中的方法FILTER_BY_SEARCH_CRITERIA的编码,以了解编码的确切程度。

最好的问候,
Varun Agarwal

一周热门 更多>