SAPUI5智能表 - 智能字段使用注释强制字段

时间:2017-04-14 09:40:09

标签: annotations odata sapui5 sap-fiori

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

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

<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

4 个答案:

答案 0 :(得分:0)

  

对于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

答案 1 :(得分:0)

实体的强制性属性必须为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" />

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

答案 2 :(得分:0)

根据我的理解,有两个选项:

1)将特定属性定义为强制性 - &gt;的可为空=&#34;假&#34;

2)将一个属性链接到实体中的另一个属性,&#34; field-control&#34;。 该字段控件可以包含数字和&#34; 7&#34;意味着强制性。

选项2的链接可以在MPC_EXT类中完成(重新定义define方法)。 &#34;字段控制&#34;中的实际值属性在get_entity / get_en

中设置

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

答案 3 :(得分:0)

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

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

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