所以基本上我的问题是我有一个页面:
var page1 = new sap.m.Page({
title: "Something",
enableScrolling : true,
content : [
oTable = new sap.m.Table("items", {
columns : [
new sap.m.Column({
styleClass : "name",
hAlign : "Left",
header : new sap.m.Label({
text : "firstColumn"
})
})
]
})]
});
var template = new sap.m.ColumnListItem({
type : "Navigation",
cells : [
new sap.m.Label({
text : "{name}"
})
]
});
template.attachPress(function(oEvent){
var selectedRowContext = oEvent.getParameter("item");
alert(selectedRowContext);
});
Run Code Online (Sandbox Code Playgroud)
在这里,我想获得selectedRowContext,我不知道如何?
谢谢
看一下HANA上提供的一些SAPUI5代码,我注意到一些SAP开发人员使用了WebStorm甚至RubyMine.我还听说客户站点上的其他各种开发人员使用WebStorm将代码检入ABAP存储库.
HANA和ABAP存储库在技术上看起来都是专有的.将SAPUI5代码与HANA和ABAP repos同步的默认方法似乎是使用Eclipse或基于Eclipsed的HANA Studio,通过安装的SAP交付插件.
我搜索并找不到任何插件或帮助您如何轻松地登录和退出HANA或ABAP仓库,而不是使用Eclipse或Orion.
对于HANA,您可以使用类似SAP HANA部署Shell的内容将Github置于中间位置,并且在ABAP堆栈上您可以/ UI5/UI5_REPOSITORY_LOAD手动上载,我已经听说过开发人员通过监听反向设计eclipse使用的服务的替代方案HTTP流量或解压缩插件.
我的问题是,其他人如何使用Webstorm在团队中开发SAPUI5应用程序,以及如何将代码与SAP存储库同步?
我有一个按钮(创建应用程序),如果我点击一个按钮,将出现一个碎片对话框.这里能够显示碎片化的对话框.但内部化(i18n)没有出现在字段中.(对于xml能够显示i18n但fragment.xml文件无法显示的文件i18n/)
component.js:
createContent : function() {
// create root view
var oView = sap.ui.view({
id : "app",
viewName : "sap.gss.program.view.App",
type : "JS",
viewData : { component : this }
});
var i18nModel = new sap.ui.model.resource.ResourceModel({
bundleUrl : "i18n/appTexts_fr.properties"
});
oView.setModel(i18nModel, "i18n");
return oView;
}
Run Code Online (Sandbox Code Playgroud)
Controller.js:
createApplication: function (oEvent) {
if (!this.oDialogFragment) {
this.oDialogFragment = sap.ui.xmlfragment("sap.gss.program.view.myFragment",
this);
}
this.oDialogFragment.open();
}
Run Code Online (Sandbox Code Playgroud)
fragment.xml:
<core:FragmentDefinition
xmlns="sap.m"
xmlns:core="sap.ui.core"
xmlns:app="http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1">
<Dialog
title="{i18n>Title}"
class="sapUiPopupWithPadding" > …Run Code Online (Sandbox Code Playgroud) 在SAPUI5/OpenUI5 xmlfragment文档中,第三个参数是用于处理片段中的操作的控制器.
这对于按下按钮等的对话框片段至关重要.
大部分时间我都看到过这个实例化为this或sap.ui.getCore().byId('<element>').getController())
请参阅Fragment中的示例未获得正确的Controller
由于特定对话框的复杂性,我希望有一个单独的控制器.
我已经环顾四周并进行了一些尝试,但到目前为止还没有成功.
我已经在github上使用了一个工作示例this.
但我想实例Dialog.js化为Dialog.fragment.xmlfrom 的控制器initial.view.controller
任何接受者?
很高兴收到拉请求.
示例的Crux如下(这是initial.controller.js):
sap.ui.controller("sc.test.view.initial", {
oDialog: null,
openTestDialog: function(){
console.log("in open dialog");
// instantiate the other controller
var oDialogController = new sc.test.view.Dialog();
// this next commented line is the 'normal' way to do it
// oDialog = new sap.ui.xmlfragment( "sc.test.view.Dialog", this); //oDialogController);
// this is what I would like to achieve
oDialog = new …Run Code Online (Sandbox Code Playgroud) 我有一个OpenUI5表单,包含许多Inputcontrols.这些Inputcontrols使用OpenUI5 DataBinding绑定到模型,如文档中所述.例如:
new sap.m.Input({
value: {
path: "/Position/Bezeichnung",
type: new sap.ui.model.type.String(null, {
minLength: 1,
maxLength: 128
})
}
})
Run Code Online (Sandbox Code Playgroud)
如上例所示,我在stringlength上使用约束.当用户更改输入的值时,将触发验证,并根据Validationresult 调用此处描述的功能之一.在这些函数中,我正在设置控件的ValueState,如下所示:
setupValidation: function() {
var oCore = sap.ui.getCore();
oCore.attachValidationError(function (oEvent) {
oEvent.getParameter("element").setValueState(sap.ui.core.ValueState.Error);
});
oCore.attachValidationSuccess(function (oEvent) {
oEvent.getParameter("element").setValueState(sap.ui.core.ValueState.None);
});
oCore.attachFormatError(function (oEvent) {
oEvent.getParameter("element").setValueState(sap.ui.core.ValueState.Error);
});
oCore.attachParseError(function (oEvent) {
oEvent.getParameter("element").setValueState(sap.ui.core.ValueState.Error);
});
},
Run Code Online (Sandbox Code Playgroud)
我们假设绑定的模型变量是初始的.我正在加载视图,属性值被解析并显示为空.尽管未满足约束,但未调用Validationerror/Parseerror方法.这似乎是OpenUI5的标准行为.只有控件中的更改才会被验证.
现在让我们假设我有一个提交按钮,并且Inputcontrol的值仍为空.当用户点击提交按钮时,我想为我的视图的所有子控件触发DataBinding Validation.这将验证上述输入并导致错误.
我的问题是:如何触发视图中所有子控件的数据绑定验证?
关于SO的另一个问题是海报要求定义必要字段的方法.建议的解决方案是在控件上调用getValue()并手动验证值.我认为这有点麻烦,因为形成和约束信息和逻辑已经存在.
我们如何用mSetting设置类?
例如:
new sap.m.Button({}).addStyleClass("my-class"); //work
Run Code Online (Sandbox Code Playgroud)
其他方式?
new sap.m.Button({
styleClass: "my-class" // did'n work
});
Run Code Online (Sandbox Code Playgroud)
有可能以这种方式设置课程吗?
是否有定义应在OData Edm中发送哪些值:SAP Netweaver Gateway服务的DateTime?特别是它应该总是被解释为UTC?
我假设SAPUI5库足够智能,如果接口定义正确,自动处理所有这些时区问题 - 问题是,什么是正确的?
我更喜欢在客户端使用这样的代码:
new sap.m.DatePicker({
value : {
path : "BirthDate",
type : new sap.ui.model.type.Date
}
}),
Run Code Online (Sandbox Code Playgroud)
你是如何解决这些问题的?
时区处理对我来说似乎仍然很奇怪.SAP Gateway Server在Edm:DateTime中发送以下内容:2015-04-16T00:00:00缺少任何时区信息.
如果我绑定这样的日期选择器:
var oContent = new sap.m.DatePicker({
value : {
path : "Date",
type : new sap.ui.model.type.Date({
style: "short",
})
}
})
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:16.04.15(似乎是正确的).绑定没有类型信息的日期选择器显示:Thu Apr 16 2015 02:00:00 GMT + 0200(MitteleuropäischeSommerzeit)
如果我将日期选择器的日期更改为17.04.15,则第二行是:2015年4月17日星期五00:00:00 GMT + 0200(MitteleuropäischeSommerzeit)请注意时间差异(缺少2小时).
如果我把它发送到服务器我得到了Edm.DateTime == 2015-04-16T00:00:00控制显示:Thu Apr 16 2015 02:00:00 GMT + 0200(MitteleuropäischeSommerzeit)
如果我使用
new sap.m.DatePicker({
value : {
path : "Date",
type …Run Code Online (Sandbox Code Playgroud) 我观看了一些关于导航+在视图之间传递数据的教程,但它在我的情况下不起作用.我的目标是实现以下目标:
导航工作完美,详细信息页面显示,但数据绑定似乎不起作用(没有数据显示)我的想法是将JSON字符串传递给详细信息页面.我怎样才能做到这一点?还是有更优雅的方式?
这是迄今为止的代码:
MainView控制器
sap.ui.controller("my.zodb_demo.MainView", {
onInit: function() {
var oModel = new sap.ui.model.json.JSONModel("zodb_demo/model/products.json");
var mainTable = this.getView().byId("productsTable");
this.getView().setModel(oModel);
mainTable.setModel(oModel);
mainTable.bindItems("/ProductCollection", new sap.m.ColumnListItem({
cells: [new sap.m.Text({
text: "{Name}"
}), new sap.m.Text({
text: "{SupplierName}"
}), new sap.m.Text({
text: "{Price}"
})]
}));
},
onDetailsPressed: function(oEvent) {
var oTable = this.getView().byId("productsTable");
var contexts = oTable.getSelectedContexts();
var items = contexts.map(function(c) {
return c.getObject();
});
var app = sap.ui.getCore().byId("mainApp");
var page = app.getPage("DetailsForm");
//Just to check if the selected JSON String is correct …Run Code Online (Sandbox Code Playgroud) 有什么方法/最佳实践来隐藏SAPUI5中用户的不可用页面?
让我们来看一个例子。我有一个带有用户登录页面的复杂应用程序。客户可以在此处登录该应用程序,并从后端系统检索其角色数据。基于这些角色,不允许某些用户创建新对象。只有登录的用户才能看到应用程序页面。我正在使用路由,因此编辑等功能也可以通过直接链接访问。
当前,我正在Component.js中使用onRouteMatched事件处理程序,该事件处理程序将检查当前的用户会话存储。如果未找到用户会话,它将请求重定向到登录页面。
问题在于,在导航到登录页面之前,它会显示请求的页面一到两秒钟。真的很丑。
我应该在哪里实现这种功能?此用例是否有任何钩子方法?
我认为我需要在显示与给定路由匹配的视图并将调用重定向到登录页面之前调用的hook方法。不幸的是,我在本主题中找不到任何有用的文档。
谢谢!
有什么方法可以知道什么时候加载模型?
例:
sap.ui.controller("myapp.MyViewController", {
onInit: function() {
this.router = sap.ui.core.UIComponent.getRouterFor(this);
this.router.attachRoutePatternMatched(this._handleRouteMatched, this);
this.model = sap.ui.getCore().byId("app").getModel("mymodel");
},
onAfterRendering: function() {
console.log(this.model);
}
...
Run Code Online (Sandbox Code Playgroud)
在这种情况下,定义了模型实例,但它包含空对象,因为没有加载数据.
如果我用:包装console.log方法:
setTimeout(function() {
console.log(sap.ui.getCore().byId("app").getModel("mymodel"));
}, 0);
Run Code Online (Sandbox Code Playgroud)
然后模型数据被正确加载,但我想比使用setTimeout更可靠.
sapui5 ×10
javascript ×2
controller ×1
datetime ×1
fragment ×1
hana ×1
localization ×1
routing ×1
validation ×1
webstorm ×1