SAPUI5 Smart Table - Smart Field делает поле обязательным с аннотацией

Можно ли сделать свойство в смарт-таблице SAPUI5 обязательным, чтобы пользователь не мог оставить поле пустым при его редактировании?

Я нашел этот документ говоря, что должна быть возможность установить обязательный элемент управления полем для свойства в файле 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


person sachad    schedule 14.04.2017    source источник
comment
Не могли бы вы также опубликовать полный файл metadata.xml?   -  person    schedule 25.04.2017
comment
metadata.xml здесь - jsfiddle.net/sL2zrt8j   -  person sachad    schedule 25.04.2017


Ответы (4)


Для 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

person Jasper_07    schedule 14.04.2017
comment
К сожалению, ваше решение приводит к той же ошибке: ресурс не найден для сегмента «обязательный» - возникла следующая проблема: HTTP-запрос не выполнен 404, не найден, {ошибка: {код: 404, сообщение: {lang: en, значение: ресурс не найдено для сегмента "обязательный"}}} - person sachad; 14.04.2017

Обязательное свойство объекта должно быть 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" />

Кстати. Спасибо, что поделились своим примером умного стола!

person Lukas    schedule 19.03.2018

Насколько я понимаю, есть 2 варианта:

1) Определите конкретное свойство как "Обязательное" -> Nullable = "false".

2) Свяжите свойство с другим свойством в сущности, «field-control». Это поле может содержать числа, а «7» означает обязательное.

Связывание из варианта 2 может быть выполнено в классе MPC_EXT (переопределите метод определения). Фактическое значение в свойстве "field-control" устанавливается в get_entity / get_en

Однако у меня также возникла проблема с smarttable. Обязательные поля не светятся красным, когда они пусты.

person user1953314    schedule 07.05.2018

Сделайте это методом грубой силы в контроллере расширения страницы объекта.

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

Чтобы преобразовать логическое значение в строку, используйте <boolean>.toString();

person Manuel    schedule 14.02.2020