正如标题所示,我想知道是否可以在Maximo Anywhere应用程序中使用javascript动态更改app.xml文件中定义的元素的CSS类,如下所示:
<text cssClass="relatedRecords"/>
我的方法运行后,我希望text元素属于不同的CSS类:
<text cssClass="boldRelatedRecords"/>
当然app.xml实际上并没有像上面那样更新,但我认为它更好地说明了我想要实现的目标。感觉这应该是一件容易的事情,但我无法弄清楚如何去做。有没有人设法完成这个?
感谢任何建议。
几个星期前我就这个确切的要求工作了。
这是我在元素渲染时使用的事件处理程序,如果LOCATE Prereq字段中的日期已过期,则可以使用一些额外的逻辑来设置类:
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设置为required,如果没有填写,它将动态设置类。 multiAssetLoc.getRuntimeFieldMetadata('zxqfail')。set('required',true);
第三种方式有点hacky,但它涉及在dom元素上重新设置CSS,然后刷新视图。我们之所以离开,是因为它需要在UI上进行更新才能实现。