Netweaver Gateway开发

如何在SAP ODATA服务中实现$ Filter Query选项?

            $ filter查询选项是访问OData服务的最常用的查询选项。该框架不提供默认过滤。我们需要实施它。$ Filter查询选项允许我们过滤结果集get_entityset实现.
         在本教程中,我们将从上面提到的早期教程中使用get_entityset方法。


脚步


  1. 打开我们 project and expand service implementation node and right click on GetEntitySet(Query) and click on Goto ABAP Workbench.
  2. 打开我们 fletsetset_get_entityset方法。在代码下面的粘贴下粘贴到下面的方法。从服务调用传递的筛选Query是内部导入参数 IT_FILTER_SELECT_OPTIONS. 。我们将在此表上循环并将筛选器参数归入结构表饱食(ABAP中的选择选项).
  3.     DATA:ls_filter_select_options TYPE /iwbep/s_mgw_select_option,
             ls_select_option         TYPE /iwbep/s_cod_select_option.
        DATA:ls_selectparams TYPE selopt,
             lt_selectparams TYPE STANDARD TABLE OF selopt.
        LOOP AT IT_FILTER_SELECT_OPTIONS. INTO ls_filter_select_options.
          IF ls_filter_select_options-property EQ 'Carrid'.
            LOOP AT ls_filter_select_options-select_options INTO ls_select_option.
              ls_selectparams-sign = ls_select_option-sign.
              ls_selectparams-option = ls_select_option-option.
              ls_selectparams-low = ls_select_option-low.
              ls_selectparams-high = ls_select_option-high.
              APPEND ls_selectparams TO lt_selectparams.
            ENDLOOP.
    
          ENDIF.
    
        ENDLOOP.
    


  4. 基于过滤器查询获取数据。
  5.       从scarr中选择*进入表eT_entityset的相应字段
          WHERE Carrid in lt_selectparams.
    
  6. 现在我们可以在网关客户端中测试我们的过滤器查询( / iwfnd / gw_client)。我们的服务URL看起来像这样。http://:/ SAP / OPU / ODATA / SAP / ZTEST_ODATA_SRV_01 / FLIGESET?$ Filter = Carrid EQ'AC'。按Execute按钮。
笔记:有些次过滤器查询可以变得复杂。eBAP选择选项结构我们无法覆盖所有场景  a filter such asFIELDA EQ.‘A’ or FieldB eq ‘B’能够’由于筛选器或筛选器,​​请将t放入我们的表中。在supcase中我们可以使用导入参数IV_FILTER_STRING. 。然后我们的Select语句应该这样改变。
          从scarr中选择*进入表eT_entityset的相应字段
          其中(IV_Filter_String)。
    
如果您喜欢这篇文章,请分享!!

15 comments :

  1. 非常好的教程..
    您可以在应用多个列的应用过滤器上详细说明更多吗?我没有得到这个查询的原因..
    从scarr中选择*进入表eT_entityset的相应字段
    其中(IV_Filter_String)。

    你能选择一个例子并解释类似于这个博客..

    回复删除
    答案
    1. 你好,
      IV_Filter_String将具有搜索字符串,就像运行时一样。您可以通过放置外部断点并找到差异来检查此项。
      对于多个列,您可以尝试同样的.just检查它_filter_select_options持有什么吗?.for以下使用此URL
      http://:/ sap / opu / odata / sap / ztest_odata_srv_01 / flightset?$ filter = carrid eq'AC' and Carrname eq 'yourValue'

      删除
    2. 嗨,您能为这个iv_filter_string取样吗?似乎与单次滤波器操作不同。
      如何将iv_filter_string转换为IT_FILTER_SELECT_OPTIONS?

      删除
    3. 嗨泰国,
      您可以在SEGW中放置一个外部断点并自己检查变量。

      删除
  2. 如何通过sapui5传递此URL过滤器值?

    回复删除
  3. 嗨,我的ODATA服务URL如下所述,如何从SAPUI5应用程序传递这些参数值?

    / sap / opu / odata / sap / zrepository_srv_07 / rep_searchset?$ filter = iStartIndex eq'1' and IEndindex eq '2' and ( Column eq 'CLASS' or Column eq 'REFERENCE_NO')(运营商eq'CONTAINING' or Operator eq 'CONTAINING' ) and ( Value eq 'BEARING' or Value eq '6202' )

    回复删除
    答案
    1. 你可以通过'filters' parameter..

      omodel.read("/ rep_searchset.",{
      过滤器:[/ *您的过滤器* /],
      成功:功能(ODATA){
      //成功
      }
      });

      删除
  4. 我刚刚发现类/ iwbep / cl_mgw_data_util的静态方法将为我们进行排序,过滤和分页。

    回复删除
  5. 很高兴我在我的程序中使用了这一点

    回复删除
  6. 如何使用过滤器执行删除操作

    回复删除
    答案
    1. 最佳实践是使用删除操作进行删除。过滤器用于改进结果。如果需要,可以通过过滤器查询获取值,并使用这些值写入删除查询。不建议。

      删除
  7. 如何将iv_filter_string转换为IT_FILTER_SELECT_OPTIONS?

    回复删除
    答案
    1. IV_FILTER_STRING.是字符串类型,另一个是结构。它's不是互换的。您可以使用自定义逻辑转换它。(使用字符串操作并填充IT_FILTER_SELECT_OPTIONS表,使用循环)。

      删除

Powered by 博主.