Maximo anywhere - динамически изменяющийся класс css элемента

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

<text cssClass="relatedRecords"/>

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

<text cssClass="boldRelatedRecords"/>

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

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

0
0
501
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Вот обработчик событий, который я использовал при рендеринге элемента, с некоторой бонусной логикой для установки класса, если истек срок действия даты в поле 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, чтобы уйти от экрана. Затем просто установите метаданные поля для обязательных, и если они не будут заполнены, класс будет динамически установлен. multiAssetLoc.getRuntimeFieldMetadata ('zxqfail'). set ('обязательный', true);

Третий способ был немного хитрым, но он включал переустановку CSS в элементе dom, а затем обновление представления. Мы отошли от этого, потому что для этого требовалось обновление пользовательского интерфейса.

Спасибо, Кейси, за подробный ответ, очень признателен! Чтобы убедиться, что я нахожусь на правильной странице, эта строка ниже - это то, что на самом деле устанавливает класс? eventContext.textWidget.domNode.className+= ' errorIndicator';

Marcus 12.09.2018 18:08

Это правильно! Каким бы сложным он ни был, нужно время, чтобы привыкнуть ко всем компонентам фреймворка. Мы работаем в производственной среде уже пару лет, и последние 3 года я тщательно настраивал и вносил вклад в IBM.

Kasey 12.09.2018 22:02

Другие вопросы по теме