Maximo Anywhere - динамически изменяющийся класс CSS элемента - PullRequest
0 голосов
/ 10 сентября 2018

Как видно из названия, мне интересно, возможно ли использование javascript в приложениях Maximo Anywhere для динамического изменения класса CSS элемента, определенного в файле app.xml, как показано ниже:

<text cssClass="relatedRecords"/>

После запуска моего метода я бы хотел, чтобы текстовый элемент принадлежал другому классу CSS:

<text cssClass="boldRelatedRecords"/>

Конечно, app.xml на самом деле не обновляется, как указано выше, но я подумал, что он лучше иллюстрирует то, чего я хочу достичь. Такое чувство, что это должно быть легко, но я не смог понять, как это сделать. Кому-нибудь удалось это сделать?

Благодарен за любые предложения.

1 Ответ

0 голосов
/ 11 сентября 2018

Несколько недель назад я работал над этим точным требованием.

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

...