【问题标题】:SAPUI5 Smart Table - Smart Field make field mandatory with annotationSAPUI5 智能表 - 智能字段通过注释使字段成为必填字段
【发布时间】:2017-04-14 09:40:08
【问题描述】:

是否可以强制 SAPUI5 智能表中的属性,以便用户在编辑时不能将字段留空?

我发现this document 说应该可以在 metadata.xml 文件中的属性上设置强制字段控制,注释如下:

<Property Name="NameLast" Type="Edm.String" Nullable="false" MaxLength="40" sap:label="Last name" sap:field-control="7" />

但使用此设置,我在控制台中收到以下错误:

2017-04-14 11:37:36.691429 MockServer: Resource not found for the segment '7' 
2017-04-14 11:37:36.707985 The following problem occurred: HTTP request failed404,Not Found,{"error":{"code":404,"message":{"lang":"en","value":"Resource not found for the segment '7'"}}} -  

编辑:

后来我发现 sap:field-control 不应该包含数字,而是指向另一个包含数字的属性的路径表达式。然而这也不起作用:

<Property Name="NameLast" Type="Edm.String" Nullable="false" MaxLength="40" sap:label="Last name" sap:field-control="Name_fc" />
<Property Name="Name_fc" Type="Edm.Byte" />

Name_fc 属性的值为“7”。我现在没有看到任何控制台错误,但是我仍然可以将输入 (NameLast) 字段留空而无需任何验证并将其发送到 OData 服务,这不是我所期望的。

这是一个来自 sap 的示例的链接,他们使用必填字段。我不知道他们是怎么做到的。 https://sapui5.netweaver.ondemand.com/sdk/explored.html#/sample/sap.ui.comp.sample.smartfield/code/SmartField.view.xml

【问题讨论】:

标签: annotations odata sapui5 sap-fiori


【解决方案1】:

对于 OData v2,属性上的 sap:field-control 注释可以是 用于指定该字段是否为必填项。

 <Property Name="Customer" ... sap:field-control="mandatory"/>   
 <Property Name="CompanyCode" ... sap:field-control="mandatory"/>

https://sapui5.hana.ondemand.com/#docs/api/symbols/sap.ui.comp.smartfield.SmartField.html

【讨论】:

  • 不幸的是,您的解决方案导致了同样的错误:找不到段“强制”的资源 - 发生以下问题:HTTP 请求失败404,未找到,{“错误”:{“代码”:404 ,"message":{"lang":"en","value":"未找到段'强制'的资源"}}}
【解决方案2】:

实体的强制属性必须是nullable="false"。就是这样。

查看链接中的智能字段示例:

            <Property Name="Name" Type="Edm.String" Nullable="false"
                MaxLength="30" sap:label="Name" sap:creatable="false"
                sap:quickinfo="Property annotation DataFieldWithUrl"
                sap:updatable="true" sap:sortable="false" />

顺便说一句。感谢您分享您的智能表示例!

【讨论】:

    【解决方案3】:

    据我了解,有两种选择:

    1) 将特定属性定义为 Mandatory --> Nullable="false"

    2) 将一个属性链接到实体中的另一个属性,即“字段控件”。 该字段控件可以包含数字,“7”表示必填。

    选项 2 的链接可以在 MPC_EXT 类中完成(重新定义 define 方法)。 “field-control”属性中的实际值在get_entity/get_en中设置

    但是我也遇到了智能表的问题。必填字段在为空时不会亮起红色。

    【讨论】:

      【解决方案4】:

      在对象页面扩展控制器中以蛮力方式进行。

      var oField = this.getView().byId(<FieldId>)
      oField.getDataProperty().property.nullable = "false" or "true". 
      "false" and "true" must be a string.
      

      要将布尔值转换为字符串,请使用&lt;boolean&gt;.toString();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-15
        • 1970-01-01
        相关资源
        最近更新 更多