Несколько недель назад я работал над этим точным требованием.
Вот обработчик событий, который я использовал при рендеринге элемента, с некоторой бонусной логикой, чтобы установить класс, если дата в поле в Prereq LOCATE истекла:
hideForNonLocatePrereq: function(eventContext) {
var prereqType='LOCATE';
var wo = eventContext.application.getResource('workOrder').getCurrentRecord();
var prereq = wo.getLoadedModelDataSetOrNull('tasklist');
prereq.filter("plusdprereqtype == $1", prereqType);
if(prereq.count()>0){
var expDate = prereq.data[0].getAsDateOrNull("zxqexpirationdate");
if(expDate==null){
eventContext.setDisplay(false);
}else{
wo.setDateValue('localzxqexpirationdate', expDate);
if (expDate < this.application.getCurrentDateTime()) {
eventContext.textWidget.domNode.className+= ' errorIndicator';
}
}}
else{
eventContext.setDisplay(false)
}
},
В app.xml я привязал эту функцию к визуализации поля следующим образом:
<container id="WorkExecution.WorkDetialView_container_102_added_exp" resource="workOrder">
<group id="WorkExecution.WorkDetailView_group_12_prereq">
<groupitem id="WorkExecution.WorkDetailView_group_12_prereq_2" layout="WorkOrderDetails3x3x3x3">
<text editable="false" id="WorkExecution.WorkDetailView_workOrder_groupitem_expdate" label="Locates Expiration Date" layoutInsertAt="item1" resourceAttribute="localzxqexpirationdate">
<eventHandlers id="WorkExecution.WorkDetailView_workOrder_groupitem_expdate_eventHandlers">
<eventHandler class="application.handlers.WODetailHandler" event="render" id="WorkExecution.WorkDetailView_workOrder_groupitem_expdate_eventHandlers_render" method="hideForNonLocatePrereq"/>
</eventHandlers>
</text>
</groupitem>
</group>
</container>
В другой стратегии мы использовали класс .errorIndicator и переопределили проверку в View.JS, чтобы этот вид был в представлении. Мы просто возвращаем true, чтобы отойти от экрана. Затем просто установите поле metatdata для обязательных, и если оно не будет заполнено, класс будет установлен динамически.
multiAssetLoc.getRuntimeFieldMetadata ('zxqfail'). set ('required', true);
Третий способ был немного хакерским, но он включал переустановку CSS для элемента dom, а затем обновление представления. Мы отошли от этого, потому что для этого потребовалось обновление пользовательского интерфейса.