标签: sapui5

SAPUI5 - 批量操作 - 怎么做才对?

我有多个 EntitySets 我想在我的 SAP 后端更新,因此我将我的数据(有效负载)作为 JSON 获取并将其放入请求中(它成功地在节点“数据”中):

代码:

var oTreeJSON = oTreeTable.getModel().getProperty("/root");
var oModel = sap.ui.getCore().getModel();
var batchChanges = [];  

for (var i = 0; i < oTreeAll.length; i++) {
    batchChanges.push(oModel.createBatchOperation("/sap/opu/odata/sap/MY_SERVICE/?$batch", "POST", oTreeAll[i]));
}

oModel.submitBatch();
Run Code Online (Sandbox Code Playgroud)

我的请求如下所示:

在此处输入图片说明

它应该到达 SAP 的哪个位置(哪种方法)?我做错了什么,任何地方都没有错误,但是我的后端没有调用......很高兴每一个提示!谢谢。

降低复杂性的工作示例:

var oEntry = {};
oEntry.MyId = "00000001";
oEntry.Value = "300";

batchChanges.push(oModel.createBatchOperation("MyEntitySet", "POST", oEntry, null));
oModel.addBatchChangeOperations(batchChanges); 
oModel.setUseBatch(true);
oModel.submitBatch();
Run Code Online (Sandbox Code Playgroud)

为了记录,方法调用:

  • 1) /IWBEP/IF_MGW_CORE_SRV_RUNTIME~CHANGESET_BEGIN:SAP 提案退出。
  • 2) /iwbep/if_mgw_appl_srv_runtime~create_entity。(n-times) // 用实体做你的事
  • 3) /iwbep/if_mgw_core_srv_runtime~changeset_end:SAP 提案提交工作。

entity crud batch-processing sapui5

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

Visual Studio 代码 1.3 中 openui 项目的智能感知

我在 Visual Studio 代码 1.2/1.3 中有一个 openui 项目设置,所有必需的库(openui 运行时文件)都在 /resources 目录中,并且采用 .js 格式。我没有从这些库中获得任何智能感知。我已经按如下方式设置了我的 jsconfig.json。任何人都可以帮助我如何获得相同的智能感知。

jsconfig.json:

{
"compilerOptions": {
    "target": "ES6"
},
"files": [
    "/resources/sap/m/*",
    "resources/sap/ui/*"
 ]
}
Run Code Online (Sandbox Code Playgroud)

sapui5 visual-studio-code

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

SAPUI5 - 标题、侧边栏和导航

我是 SAPUI5 的新手,我在导航、侧边栏和标题方面遇到了一些问题。我想开发一个带有标题和侧边栏的应用程序。为此,我使用了“ToolPage”。每个页面都包含工具页面,如下所示:

<mvc:View >
    <tnt:ToolPage id="toolPageId">
        <tnt:header>
            <core:Fragment ...> </core:Fragment>    
        </tnt:header>
        <tnt:sideContent id="SideContentId">
            <core:Fragment ...> </core:Fragment>
        </tnt:sideContent>
        <tnt:mainContents>
            <NavContainer id="pageContainerId" width="100%">
                <Page ...>
                    <content>
                         ...
                         ...
                    </content>
                </Page>
             </NavContainer>
        </tnt:mainContents>
    </tnt:ToolPage>
</mvc:View>
Run Code Online (Sandbox Code Playgroud)

它们都与此类似,只是在内容标签中有不同的代码。

有了这个,我实现了我想要的布局,并使用 manifest.json 中的路由进行导航。我为每个页面都有一个控制器,并使用以下命令导航:

onNavToBeTask: function(oEvent) {
        this.getRouter().navTo("pageTasklist");
}
Run Code Online (Sandbox Code Playgroud)

我现在遇到的问题是,每次导航时,标题和侧边栏都会再次加载,并且侧边栏中的错误字段将突出显示。

我找到了一个示例,但这里包含 .xml 和 .js 文件中的所有代码,这些代码非常不清楚 https://sapui5.netweaver.ondemand.com/sdk/explored.html#/sample/sap .tnt.sample.ToolPage/代码

我的问题是:

  • 一般来说,使用侧边栏和标题导航的最佳方式是什么?
  • 有一个带有标题和侧边栏的“母版”并将内容添加到内容标签会更好吗?
  • 或者我应该在侧栏中选择正确的字段,并在导航到页面时调用一个函数?

编辑:

示例屏幕截图,我想实现的目标

sapui5

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

如何防止用户导航离开?

在我的 SAPUI5 应用程序中,我使用 sap.tnt.Toolpage 作为主布局容器。SideNavigation 显示应用程序链接列表,并且 mainContents 使用 sap.ui.core.routing.Router 动态加载。

导航到我正在使用的详细信息页面

var router = sap.ui.core.UIComponent.getRouterFor(this);
router.navTo("MyDetailRoute", {
    detailItemId: oItem.getBindingContext("oDataSourceName").getProperty("DETAILID")
});
Run Code Online (Sandbox Code Playgroud)

这将加载一个详细信息视图,然后将其控件绑定到我的数据源中的数据。

当我试图记住用户将他的更改保存回服务器时,问题就出现了。我基本上想中断导航以询问用户是否愿意 a) 取消他的更改,b) 保存他的更改或 c) 留在详细信息页面上。虽然 a) 和 b) 很容易实现,但我不知道如何防止导航发生。

到目前为止,我已经通过订阅 onBeforeHide 来尝试我的观点:

var view = this.getView();
var that = this;
view.addEventDelegate({
    onBeforeHide: function (evt) {
        var oModel = that.getModel("oDataSourceName");
        if (oModel.hasPendingChanges()) {
            // How to prevent leaving the page?
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

我尝试过但不起作用的事情:

  1. evt.preventDefault();
  2. evt.stopPropagation();
  3. 扔“东西”;

选项 3) 实际上会阻止导航,但会导致以后出现问题,因为 URL 仍然会更改...

有没有人有想法?

编辑:多亏了 cschuff 的回答,我才能让它工作。对于将来遇到同样问题的任何人:

// In onInit: …
Run Code Online (Sandbox Code Playgroud)

url-routing sapui5

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

Why Is My Main Controller Being Called Twice?

All other routings are fine, but for some reason the main controller is being called twice. Why would this happen?

onInit: function() {
  var oRouter = this.getOwnerComponent().getRouter();
  oRouter.getRoute("main").attachMatched(this._onRouteMatched, this);
  this.getView().setModel(new JSONModel({
    Jobs: []
  }), "job");
},
Run Code Online (Sandbox Code Playgroud)

Is this down to the routing config?

"rootView": {
  "viewName": "CompleteSurvey.view.Main",
  "type": "XML"
},
"routing": {
  "routes": [{
    "name": "main",
    "pattern": "",
    "target": ["main"]
  }],
  "config": {
    "routerClass": "sap.m.routing.Router",
    "viewType": "XML",
    "viewPath": "CompleteSurvey.view",
    "controlId": "app",
    "controlAggregation": "pages"
  },
  "targets": {
    "main": {
      "viewName": "Main" …
Run Code Online (Sandbox Code Playgroud)

sapui5

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

是否可以在 SAP Cloud Platform 中刷新/刷新特定的离线 oData 实体?

标准刷新/刷新离线 oData 功能在离线存储中的所有实体上执行。

当然,这会对移动数据和性能产生影响。

有没有办法只刷新/刷新离线商店中的特定实体?

mobile sapui5 sap-cloud-platform

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

每次打开视图时都不会调用“onBeforeRendering”或“onAfterRendering”

在我的 UI5 应用程序中,我有一个带有表 ( sap.m.Table)的视图,由来自后端onInit挂钩的数据填充。问题是onInit每个视图实例只执行一次:

onBeforeRenderingonAfterRendering钩子不同,它每个 View 实例只调用一次。

并且如果用户决定离开该视图(例如,返回导航)并稍后重新打开它,则该视图onInit将不会被调用,因此不会再次检索数据,并且表格内容将不会反映可能的更改。

为确保每次打开视图时都检索数据,我尝试在 处获取数据onBeforeRendering,但此挂钩也仅调用一次。我发现,在onBeforeRendering每次打开视图时强制调用的唯一方法是将以下代码添加到onInit方法中:

onInit: function () {
  this.getView().addEventDelegate({
    onBeforeShow: this.onBeforeShow,
  }, this);
}
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 为什么在没有上面的代码片段的情况下onInitonBeforeRendering每次显示视图时都不会触发?

  2. 上面的代码片段究竟做了什么?

  3. 替代技术:使用patternMatchedrouteMatched。但是这三种方法中哪一种更常见呢?

sapui5

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

如何禁用信箱并为宽屏调整 UI5?

我有一个基于 UI5 的应用程序 (1.66+),它可以正常工作,但屏幕左右两侧有巨大的空白区域(又名信箱打开):

宽屏 SAPUI5 应用程序

我想禁用信箱以使用整个屏幕空间。

到目前为止,我尝试了以下方法:

  1. "fullWidth": truemanifest.json 的sap.ui部分中使用
  2. 要将桌面相关的类添加到index.html 中的 HTML 标签:
<html class="sap-desktop sapUiMedia-Std-Desktop sapUiMedia-StdExt-LargeDesktop">
Run Code Online (Sandbox Code Playgroud)
  1. 添加appWidthLimited: falseindex.html
<script>
    sap.ui.getCore().attachInit(function () {
        new sap.m.Shell({
            app: new sap.ui.core.ComponentContainer({
                height: "100%",
                name: "APPNAME"
            }),
            appWidthLimited: false
        }).placeAt("content");
    });
</script>
Run Code Online (Sandbox Code Playgroud)

就像《如何在 SAPUI5 中自定义 Shell 容器》中描述的那样

但它们都不适合我。

更新:
我成功地通过静态 XML 模板解决了这个问题——只需添加<Shell id="shell" appWidthLimited="false">到主 XML 模板中,但现在我想了解如何通过 JS 在new sap.m.Shell(…)定义中实现它。

代码实验的起点如下。

索引.html

<!DOCTYPE html>
<html>
    <head> …
Run Code Online (Sandbox Code Playgroud)

widescreen sapui5

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

如何处理 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
查看次数

UI5树表为什么重复节点?

我正在尝试按照sap.ui.table.TreeTable 中的 OData 示例将 OData 绑定到树表

我已经尝试了基本绑定与treeAnnotationPropertiesxml 中的设置和注释绑定(我已经检查了$metadata查询,它有sap:hierarchy-等)。

但是,两次我都得到重复的节点,例如:

Id    | Title     | Hierarchy Level | ParentID 
----------------------------------------------------
1     | izparent  | 0               | 0
|--1  | izparent  | 0               | 0
|  |-- ...
|--2  | izchild   | 1               | 1
2     | izchild   | 1               | 1
Run Code Online (Sandbox Code Playgroud)

我得到一个 ID 为 1 的节点,它是可扩展的,而节点 2 是不可扩展的。但是如果我展开节点 1,我再次得到可展开的节点 1 和节点 2,我可以重复展开节点 1 以获得相同的结果。

我有一种感觉,我有一个与此处类似的问题,但也没有为此提供答案:How to define tree table annotation (XML view)

我正在使用 …

treeview odata sapui5

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