【问题标题】:sapui5 - unable to perform expand query in OData v2 modelsapui5 - 无法在 OData v2 模型中执行扩展查询
【发布时间】:2018-08-17 06:42:41
【问题描述】:

我使用 SAP Netweaver Gateway OData 作为后端,SAPUI5 1.44 作为 UI 开发了一个小演示应用程序。我在使用 OData v2 模型扩展数据时遇到问题。

我的 OData 服务有 3 个实体集:INDSetINFSetINDINFSetINDSet 具有到 INDINFSet 的 1:N 导航,因此我可以通过以下 URL 获取特定 IND 的所有 INDINF:

/sap/opu/odata/SAP/ZGW_ODATA_TEST_SRV/INDSet('IND0000001')/INDINFSet

我的 UI 包含 2 个视图:

  • 主视图:只有一张表。
  • 详细视图:我显示为对话框屏幕的表单。该表单具有IND 实体的字段和一个包含INDINFSet 记录的表。

问题在于明细视图中没有数据 - 主实体字段和明细表中都没有。当我打开对话框表单时,我在 Chrome 开发工具的“网络”选项卡中看不到任何请求 - 无论是在模拟服务器上,还是在 NW 网关后端。

这是主控制器中打开表单对话框的代码:

var tbl = this.getView().byId('IndsTable');
var ctx = tbl.getContextByIndex(tbl.getSelectedIndex());
var oData = ctx.getProperty(ctx.sPath);
var sContentDensityClass = this.getOwnerComponent().getContentDensityClass();
var oView = this.getView();
var controller = sap.ui.controller("demo.modules.indform.controller.IndFormDialog");
controller._indFormDialog = oView.byId('IndFormDialog');
if (!controller._indFormDialog) {
    controller._indFormDialog = sap.ui.xmlfragment(oView.getId(),
        'demo.modules.indform.view.IndFormDialog', controller);
    jQuery.sap.syncStyleClass(sContentDensityClass, oView,
         controller._indFormDialog);
    oView.addDependent(controller._indFormDialog);
}
oView.bindElement({
    path: sPath,
    model: 'mInd'
});
controller.openDialog(oView);

这是对话框本身:

<core:FragmentDefinition
  xmlns="sap.m"
  xmlns:mvc="sap.ui.core.mvc"
  xmlns:l="sap.ui.layout"
  xmlns:f="sap.ui.layout.form"
  xmlns:t="sap.ui.table"
  xmlns:fb="sap.ui.comp.filterbar"
  xmlns:core="sap.ui.core">
  <Dialog
    id="IndFormDialog"
    contentWidth="44rem"
    contentHeight="49rem"
    class="sapUiNoContentPManageing"
    showHeader="false"
    verticalScrolling="false"
    >
      <content>
        <f:SimpleForm
          class='IndForm'
          id="IndForm"
          maxContainerCols="2"
          editable="false"
          layout="ResponsiveGridLayout"
          labelSpanL="12"
          labelSpanM="12"
          labelSpanS="12"
          emptySpanL="0"
          emptySpanM="0"
          emptySpanS="0"
          columnsL="2"
          columnsM="2"
          columnsS="2">
          <f:content>
            <core:Title/>
            <Label text="Index code" />
            <Input
              type="Text"
              value="{mInd>/Id}"
            />
            <Label text="Index name" />
            <Input
              type="Text"
              value="{mInd>/Sname}"
            />
            <Label text="Actual till" />
            <DatePicker

              value="{mInd>/Eusdt}"
              />
          </f:content>
        </f:SimpleForm>

        <t:Table
          id="Infosystems"
          rows="{mInd>INDINFSet}"
          visibleRowCount="10"
          visibleRowCountMode="Auto"
          selectionMode="None"
          enableSelectAll="false"
          ariaLabelledBy="title"
          >
          <t:toolbar>
            <Toolbar>
              <Title
                id="infosystableTitle"
                text="Infosystems"
                level="H3"/>
            </Toolbar>
            <Button
              icon="sap-icon://add"
              tooltip="Add record"
              press="addInfosystem" >
              <layoutData>
                <OverflowToolbarLayoutData priority="NeverOverflow" />
              </layoutData>
            </Button>
          </t:toolbar>
          <t:columns>

             <t:Column>
              <Label text="Infosystem"/>
              <t:template>
              <ComboBox
                items="{
                    path: 'mInfs>/INFSet',
                    sorter: { path: 'Name' },
                    templateShareable: true
                  }"
                >
                <items>
                  <core:Item key="{mInfs>Id}" text="{mInfs>Name}" selectedKey="{mInd>Infosys}"/>
                </items>
              </ComboBox>
              </t:template>
            </t:Column>

            <t:Column
              width="5em">
              <Label text="Is source"/>
              <t:template>
                <CheckBox selected="{mInd>IsSrc}" />
              </t:template>
            </t:Column>
          </t:columns>
        </t:Table>

      </content>
    <buttons>
      <Button
        id="IndFormDialogButtonSave"
        text="Save"
        type="Accept"
        press="onPressSave" />
      <Button
        id="IndFormDialogButtonCancel"
        text="Close"
        type='Reject'
        press="onPressCancel" />
    </buttons>
  </Dialog>
</core:FragmentDefinition>

【问题讨论】:

    标签: odata sapui5 expand


    【解决方案1】:

    你能试试这个吗?之后告诉我...

    oView.bindElement({ 
      path: sPath, 
      model: 'mInd', 
      parameters: {expand:'INDINFSet'}
    });
    

    【讨论】:

    • 不幸的是,没有效果。同样,没有填写任何字段,即使是主实体(我的意思是 IdSnameEusdt),也没有请求任何 URL。
    • 好吧,我确定这是在您的 odata 中扩展导航属性的方法,所以让我们逐个检查。您能否检查网络跟踪、对 OData 服务的 $batch 请求并检查情况如何?如果您检查标题部分中的“请求有效负载”,您应该会看到如下内容:GET entitySetName(KeyProperty=value)?$expand=navigatinProperty
    • 也检查响应,看看是否所有数据都在发送...一旦检查,我们可以仔细检查您的绑定
    • 并尝试将模型绑定到您的对话框controller._indFormDialog.bindElement({ path: sPath, model: 'mInd', parameters: {expand:'INDINFSet'} });
    • controller._indFormDialog.bindElement({ path: sPath, model: 'mInd', parameters: {expand:'INDINFSet'} }); 也不工作。网络跟踪中既没有 $batch 也没有 $expand 请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 2019-11-07
    • 1970-01-01
    • 2017-03-19
    相关资源
    最近更新 更多