点击此处---> 群内免费提供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。
字段符号:
*检索消息容器日志以< 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(
< br> IF lv_string不是INITIAL。
IF
CONCATENATE lv_string')AND('INTO lv_string由空格分隔。
ELSE。
将lv_string'OR'插入lv _string按空格分隔。
ENDIF。
ELSE。
lv_string ='('。
ENDIF。
链接lv_string
链接lv_string
链接lv_string''INTO lv_string。
ENDIF。
lv_last_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)
嗨,哈里斯,
根据您所写的逻辑,您的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
一周热门 更多>