小编Bog*_*ann的帖子

try-with-resources 调用 close() 失败

我正在使用方便的 try-with-resources 语句来关闭连接。这在大多数情况下都很有效,但只有在一种非常简单的方法中它才能正常工作。即,这里:

public boolean testConnection(SapConnection connection) {
  SapConnect connect = createConnection(connection);
  try ( SapApi sapApi = connect.connect() ) {
    return ( sapApi != null );
  } catch (JCoException e) {
    throw new UncheckedConnectionException("...", e);
  }
}
Run Code Online (Sandbox Code Playgroud)

sapApi 对象为非空,该方法返回 true,但从未调用 sapApi 的 close() 方法。我现在求助于使用一个工作正常的 finally 块。但这很令人费解。Java 字节码还包含对 close 的调用。有没有人见过这种行为?

编辑以澄清情况:

这是 SapApi,当然,它实现了 AutoCloseable。

class SapApi implements AutoCloseable {

  @Override
  public void close() throws JCoException {
    connection.close(); // this line is not hit when leaving testConnection(..)
  }
..
}
Run Code Online (Sandbox Code Playgroud)

下面是与 …

java try-with-resources sapjco3

5
推荐指数
1
解决办法
1万
查看次数

如何处理 bootstrap 的 data-sap-ui-libs 与清单的 sap.ui5/dependencies/libs?

我通常在 下的清单中声明应用程序依赖的所有标准库sap.ui5/dependencies/libs

现在我应该在 bootstrap 参数中放入什么data-sap-ui-libs,相同的库?如果我少放/多放会有什么影响data-sap-ui-libs?它们有何不同?

附言。我在 SAP 的文档中找不到这一点,但请证明我错了。:-)

sapui5

5
推荐指数
1
解决办法
1915
查看次数

SAP UI5:获取压制表行的绑定数据对象

在SAP UI5中,当用户按下它时,我尝试获取绑定到表行的数据对象(在我的控制器中).我的视图在xml中定义,我的控制器当然在JS中.

我已经检查了如何在sap.m.table中获取行的内容,但它对我不起作用,或者缺少某些东西.

我的观点(相关部分):

<Panel>
  <Table id="lineItemList" items="{
    path: 'statusJobs>/jobs',
    sorter: {
      path: 'start',
      descending: true
    }
  }">
  <headerToolbar>
    <!-- ... -->
  </headerToolbar>
  <columns>
    <Column hAlign="Left" vAlign="Middle">
      <Label text="Job" />
    </Column>
    <Column hAlign="Center" vAlign="Middle">
      <Label text="Start" />
    </Column>
    <Column hAlign="Center" vAlign="Middle">
      <Label text="End" />
    </Column>
    <Column hAlign="Right" vAlign="Middle">
      <Label text="Success" />
    </Column>
  </columns>
  <ColumnListItem
    type="Navigation"
    press=".handleLineItemPress"
  >
    <Text text="{statusJobs>job}" />
    <Text text="{
      path: 'statusJobs>start',
      formatter:'util.Formatter.Date'}"
    />
    <Text text="{
      path: 'statusJobs>end',
      formatter: 'util.Formatter.Date'}"
    />
    <Text text="{statusJobs>status}"/>
  </ColumnListItem>
</Table>     
Run Code Online (Sandbox Code Playgroud)

这里的相关部分显然是: …

sapui5

4
推荐指数
1
解决办法
2万
查看次数

如何垂直对齐控件?

我在 XML 文件中的屏幕上有几个元素

<layout:VerticalLayout xmlns:layout="sap.ui.layout" xmlns="sap.m">
  <Input />
  <Button />
  <!-- ... -->
</layout:VerticalLayout>
Run Code Online (Sandbox Code Playgroud)

如何添加布局重力或垂直对齐控件之类的内容?例如,我想要元素位于屏幕中央。

sapui5

4
推荐指数
1
解决办法
2万
查看次数

绑定完成后执行操作

我写这部分是为了用选择控制器绑定OData信息:

var countrItems = new sap.ui.core.ListItem();
countrItems.bindProperty("key", "Land1");
countrItems.bindProperty("text", "Landx");
var CountrSelect = this.byId("CountrySelect");
CountrSelect.setModel(oModelTriptab);
CountrSelect.bindItems("/Countries", countrItems);
Run Code Online (Sandbox Code Playgroud)

我想在绑定完成后执行一个动作(我想选择一些可以动态改变的默认值).

sapui5

4
推荐指数
2
解决办法
2万
查看次数

ODataModel 在读取中传递“扩展”参数

我想将 expand 参数传递给,read因为如果我像这样调用服务它不起作用:

oModel1.read("/LinesSet?$expand=ToCells", {
Run Code Online (Sandbox Code Playgroud)

odata sapui5

4
推荐指数
1
解决办法
2万
查看次数

如何将 XML 片段添加到 XML 视图?

我创建了一个包含以下内容的片段:

<core:FragmentDefinition
  xmlns="sap.m"
  xmlns:core="sap.ui.core"
>
  <f:SimpleForm
    title="Address"
    editable="true"
    layout="ResponsiveGridLayout"
    columnsM="2"
  >
    <Label text="Customer"></Label>
    <Input>
      <layoutData>
        <l:GridData span="XL4 L4 M12 S12"/>
      </layoutData>
    </Input>
    <Label text="PO reference">
      <layoutData>
        <l:GridData span="XL1 L1 M12 S12"/>
      </layoutData>
    </Label>
    <Input>
      <layoutData>
        <l:GridData span="XL4 L4 M12 S12"/>
      </layoutData>
    </Input>
    <Label text="PO date"></Label>
    <Input>
      <layoutData>
        <l:GridData span="XL4 L4 M12 S12"/>
      </layoutData>
    </Input>
    <Label text="Recipient">
      <layoutData>
        <l:GridData span="XL1 L1 M12 S12"/>
      </layoutData>
    </Label>
    <Input>
      <layoutData>
        <l:GridData span="XL4 L4 M12 S12"/>
      </layoutData>
    </Input>
    <Label text="Incoterms"></Label>
    <Input>
      <layoutData>
        <l:GridData span="XL4 L4 …
Run Code Online (Sandbox Code Playgroud)

sapui5

4
推荐指数
1
解决办法
4816
查看次数

错误:“如果没有为控件 XYZ 定义默认聚合,则无法添加直接子项”

我试图通过检查具有类似错误的其他问题来找到解决方案,但没有一个可以帮助我。我试图在沙箱中从我的应用程序运行Component.js。运行index.html工作正常。我的起始观点是这样的:

<mvc:View
  xmlns="sap.m"
  xmlns:mvc="sap.ui.core.mvc"
  controllerName="com.sap.build.standard.qrCodeScanner.controller.Home"
>
  <Page id="home"
    class="customHomeBackground"
    showHeader="true"
    title="Home"
    showFooter="true"
  >
    <content>
      <FlexBox
        class="customFlexBoxHome"
        justifyContent="Center"
        alignItems="Center"
        wrap="Wrap"
      >
        <GenericTile class="customTile"
          header="Scan invitations"
          subheader="from your customers"
          frameType="OneByOne"
          press="_onGenericTilePress1"
        >
          <TileContent>
            <ImageContent src="sap-icon://bar-code"/>
          </TileContent>
        </GenericTile>
      </FlexBox>
    </content>
    <footer/>
    <headerContent/>
    <subHeader/>
    <customHeader/>
  </Page>
</mvc:View>
Run Code Online (Sandbox Code Playgroud)

它只是一个单一的GenericTile. 我无法访问此视图,因为

错误:如果没有为控件 sap.m.GenericTile 定义默认聚合,则无法添加直接子项

控制台错误

访问其他视图没有问题。因此,当我添加例如按钮而不是GernericTile+ 子项时,它工作正常。

我还尝试添加这些示例图块之一,但是同样的错误。有什么问题GenericTile

sapui5

4
推荐指数
1
解决办法
7330
查看次数

如何正确使用 JSONModel 和 setModel?

我正在尝试使用 SAP Web IDE 创建一个示例屏幕,其中单击不同的按钮会更改屏幕周围的不同文本。我在 App.controller.js 中有几个函数,代码是这样的(所有函数现在都一样,但影响不同的文本区域):

onPressButton2: function () {
  var oData = {
    text: {
      line1: "line1",
      line2: "line2",
      line3: "line3",
      line4: "line4"
    }
  };
  var oModel = new JSONModel(oData);
  this.getView().setModel(oModel);
},
Run Code Online (Sandbox Code Playgroud)

这是 XML 中的相应部分:

<items>
  <Text xmlns="sap.m" text="{/text/line1}" id="text1"/>
  <Text xmlns="sap.m" text="{/text/line2}" id="text2"/>
  <Text xmlns="sap.m" text="{/text/line3}" id="text3"/>
  <Text xmlns="sap.m" text="{/text/line4}" id="text4"/>
</items>
Run Code Online (Sandbox Code Playgroud)

这有效,但是当我尝试更改屏幕的不同区域时,我之前通过单击按钮所做的更改消失了。我认为这是因为我使用setModel每次都重新它覆盖它但我找不到正确的用法。

我应该为屏幕中的每个部分创建一个不同的 js 文件吗?
有没有办法更新模型而不是全部覆盖?

sapui5 sap-web-ide

4
推荐指数
1
解决办法
1507
查看次数

UI5 控制器和生命周期方法的扩展

我正在尝试创建一个具有通用方法和通用onInit逻辑的基本控制器。

使用该extend方法将方法从基本控制器添加到子控制器,但生命周期方法被完全覆盖

  • 我尝试使用此文档页面override.onInit上显示的方法,但它不起作用。
  • 我也尝试过sap.ui.component 这样的操作,但我根本无法让它工作。
    我不确定它是否适用于 AMD 语法。

据我了解,扩展功能应该替换已被重写的常见方法,但它应该按各自的顺序从基本控制器和扩展控制器执行生命周期方法。

所以我的问题如下:

  1. 这种行为可能实现吗?如果是这样,我做错了什么?
  2. 有没有更好的方法来实现呢?

示例代码:

家长控制器

sap.ui.define([
  "sap/ui/core/mvc/Controller"
], function (Controller) {
  "use strict";

  return Controller.extend("my.namespace.controller.App", {
    onInit: function () {
      console.log("reusable init");
    },

    // ...
  });
});
Run Code Online (Sandbox Code Playgroud)

子控制器

sap.ui.define([
  "my/namespace/controller/App.controller"
], function (Controller) {
  "use strict";

  return Controller.extend("my.namespace.child.controller.App", {
    onInit: function () {
      console.log("extend init");
    },

    // ...
  });
});
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,此示例仅记录“extend init”。我希望它按此顺序记录“可重用 init”和“扩展 init”。

我省略了一些代码,但主要思想体现在这两个控制器上。唯一相关的元数据是基本控制器是抽象的。

inheritance sapui5

4
推荐指数
1
解决办法
4496
查看次数