我有多个 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();
我的请求如下所示:

它应该到达 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();
为了记录,方法调用:
我在 Visual Studio 代码 1.2/1.3 中有一个 openui 项目设置,所有必需的库(openui 运行时文件)都在 /resources 目录中,并且采用 .js 格式。我没有从这些库中获得任何智能感知。我已经按如下方式设置了我的 jsconfig.json。任何人都可以帮助我如何获得相同的智能感知。
jsconfig.json:
{
"compilerOptions": {
    "target": "ES6"
},
"files": [
    "/resources/sap/m/*",
    "resources/sap/ui/*"
 ]
}
我是 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>
它们都与此类似,只是在内容标签中有不同的代码。
有了这个,我实现了我想要的布局,并使用 manifest.json 中的路由进行导航。我为每个页面都有一个控制器,并使用以下命令导航:
onNavToBeTask: function(oEvent) {
        this.getRouter().navTo("pageTasklist");
}
我现在遇到的问题是,每次导航时,标题和侧边栏都会再次加载,并且侧边栏中的错误字段将突出显示。
我找到了一个示例,但这里包含 .xml 和 .js 文件中的所有代码,这些代码非常不清楚 https://sapui5.netweaver.ondemand.com/sdk/explored.html#/sample/sap .tnt.sample.ToolPage/代码
我的问题是:
编辑:
在我的 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")
});
这将加载一个详细信息视图,然后将其控件绑定到我的数据源中的数据。
当我试图记住用户将他的更改保存回服务器时,问题就出现了。我基本上想中断导航以询问用户是否愿意 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?
        }
    }
});
我尝试过但不起作用的事情:
选项 3) 实际上会阻止导航,但会导致以后出现问题,因为 URL 仍然会更改...
有没有人有想法?
编辑:多亏了 cschuff 的回答,我才能让它工作。对于将来遇到同样问题的任何人:
// In onInit: …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");
},
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" …标准刷新/刷新离线 oData 功能在离线存储中的所有实体上执行。
当然,这会对移动数据和性能产生影响。
有没有办法只刷新/刷新离线商店中的特定实体?
在我的 UI5 应用程序中,我有一个带有表 ( sap.m.Table)的视图,由来自后端onInit挂钩的数据填充。问题是onInit每个视图实例只执行一次:
与
onBeforeRendering和onAfterRendering钩子不同,它每个 View 实例只调用一次。
并且如果用户决定离开该视图(例如,返回导航)并稍后重新打开它,则该视图onInit将不会被调用,因此不会再次检索数据,并且表格内容将不会反映可能的更改。
为确保每次打开视图时都检索数据,我尝试在 处获取数据onBeforeRendering,但此挂钩也仅调用一次。我发现,在onBeforeRendering每次打开视图时强制调用的唯一方法是将以下代码添加到onInit方法中:
onInit: function () {
  this.getView().addEventDelegate({
    onBeforeShow: this.onBeforeShow,
  }, this);
}
我的问题:
为什么在没有上面的代码片段的情况下onInit,onBeforeRendering每次显示视图时都不会触发?
上面的代码片段究竟做了什么?
替代技术:使用patternMatched和routeMatched。但是这三种方法中哪一种更常见呢?
我有一个基于 UI5 的应用程序 (1.66+),它可以正常工作,但屏幕左右两侧有巨大的空白区域(又名信箱打开):
我想禁用信箱以使用整个屏幕空间。
到目前为止,我尝试了以下方法:
"fullWidth": true在manifest.json 的sap.ui部分中使用<html class="sap-desktop sapUiMedia-Std-Desktop sapUiMedia-StdExt-LargeDesktop">
appWidthLimited: false到index.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>
就像《如何在 SAPUI5 中自定义 Shell 容器》中描述的那样。
但它们都不适合我。
更新:
我成功地通过静态 XML 模板解决了这个问题——只需添加<Shell id="shell" appWidthLimited="false">到主 XML 模板中,但现在我想了解如何通过 JS 在new sap.m.Shell(…)定义中实现它。
代码实验的起点如下。
索引.html:
<!DOCTYPE html>
<html>
    <head> …我通常在 下的清单中声明应用程序依赖的所有标准库sap.ui5/dependencies/libs。
现在我应该在 bootstrap 参数中放入什么data-sap-ui-libs,相同的库?如果我少放/多放会有什么影响data-sap-ui-libs?它们有何不同?
附言。我在 SAP 的文档中找不到这一点,但请证明我错了。:-)
我正在尝试按照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
我得到一个 ID 为 1 的节点,它是可扩展的,而节点 2 是不可扩展的。但是如果我展开节点 1,我再次得到可展开的节点 1 和节点 2,我可以重复展开节点 1 以获得相同的结果。
我有一种感觉,我有一个与此处类似的问题,但也没有为此提供答案:How to define tree table annotation (XML view)
我正在使用 …