Sapui5 如何在新实例化期间为实体创建odata模型

Sapui5 如何在新实例化期间为实体创建odata模型,sapui5,Sapui5,在CRUD中,单击new按钮时,如何基于实体类型创建JSON模型 这个基于空实体的JSON模型可以从元数据实体类型派生并分配给视图 我尝试使用Model.ononNMataLoaded获取实体类型,并使用带有初始值的默认JSON模型。但是我无法从元数据中获取实体类型,尽管我可以在对象中看到实体类型 var oModel = new sap.ui.model.odata.v2.ODataModel(<ServiceURL>); oModel.attachMetadataLoaded(

在CRUD中,单击new按钮时,如何基于实体类型创建JSON模型

这个基于空实体的JSON模型可以从元数据实体类型派生并分配给视图

我尝试使用
Model.ononNMataLoaded
获取实体类型,并使用带有初始值的默认JSON模型。但是我无法从元数据中获取实体类型,尽管我可以在对象中看到实体类型

var oModel = new sap.ui.model.odata.v2.ODataModel(<ServiceURL>);

oModel.attachMetadataLoaded(null, function(){
   var oMetadata = oModel.getServiceMetadata();
   console.log(oMetadata);
   var metaModel = new sap.ui.model.odata.ODataMetaModel(oMetadata);
   metaModel.getEntityType('XXX') // DOES NOT GIVE VALUE 
},null);

var-oModel=new sap.ui.model.odata.v2.ODataModel();
oModel.attachMetadataLoaded(null,函数(){
var oMetadata=oModel.getServiceMetadata();
控制台日志(oMetadata);
var元模型=新的sap.ui.model.odata.odatamodel(oMetadata);
metaModel.getEntityType('XXX')//不提供值
},空);
metaModel.getEntityType('XXX')//不提供值


在创建新模型时,我们是否需要基于实体类型建立JSON模型。我假设这将有助于验证数据类型,而不是手动执行

既然你问了,不,我不会这样做的。。。我使用oData模型的功能来跟踪更改。任何支持绑定上下文的元素都可以这样工作,例如对话框、视图或简单表单

最简单的方式是:

myView.setBindingContext(this.getModel().createEntry("/MyEntitySet"));
如果您想要更多的控制,比如指定成功和错误处理程序(您可能会这样做),它类似于:

myView.setBindingContext(this.getModel().createEntry("/MyEntitySet", {
  changeSetId: 'myChanges', 
  properties: {
    myField: 'DefaultValue',
    myDate: new Date()
  },
  success: _ =>  myView.setBusy(false),
  error: _ => myView.setBusy(false)
}));
关于您的问题,如果您需要自己指定字段:不,您不需要,您只需将实体中的任何值直接绑定到字段。如果用户填写它们,它们将出现在创建中使用的对象中。您可以在任何时候使用

const filledOutEntityFields = myView.getBindingContext().getObject();
在视图中,您可以像往常一样使用相对绑定:

<Input value="{myField}" />
优点之一是,除了不必使用JSON模型外,如果检索此数据并将元素与现有结果绑定,代码是相同的。你也可以使用
submitChanges
。除此之外,它发送的是更新,而不是创建


更多信息:

attachMetadataLoaded
在您设置元模型时可能尚未触发,因为它是一个回调。它是一个输入错误(请参阅更新的代码)…我能够调试/查看ometadata,如何从那里开始实例化实体类型以外的模型..我们甚至可以这样做吗?谢谢。这很有帮助。但是您是否需要分别对entityType的字符数/日期数/数字进行验证..因为用户可以输入任何内容,如果映射在到达服务之前失败,odata将失败…我看到您已经定义了属性MyField和其他属性…无需指定任何字段,它们都在那里。这只是一种默认某些值(如日期)的方法。您可以在字段上设置约束,例如仅在XML上设置日期选择器、最小长度等。数据也可以像json模型一样从绑定上下文中检索
<Input value="{
  path: 'myField', 
  type: 'sap.ui.model.type.String',
  constraints: {
    minLength: 1,
    maxLength: 20
  }
}" />
this.getModel().submitChanges('myChanges');