Покраска кнопки другим цветом в зависимости от условия

Добрый день!
У меня есть таблица, где в качестве значений одного из столбцов размещена кнопка. Выглядит это следующим образом:
image
При нажатии этой кнопки у меня вызывается экран, где я ввожу номера. При нажатии “Ок” в вызванном экране, если номера введены, то мне нужно данную кнопку красить в другой цвет. Если номера не введены, то оставлять таким же цветом.
Подскажите, как мне реализовать такую логику?

Добрый день,

  1. Сначала создать расширение темы, если у вас его еще нет, чтобы было куда дописывать стили.
  2. Потом реализовать Style Provider для таблицы, в которой находится эта кнопка. Если сущность в строке соответствует особому условию, то вернуть какое-нибудь название стиля всей строке таблицы или ячейке, где находится кнопка.
  3. Потом открыть экран и посмотреть с помощью Chrome Developer Tools - DOM-дерево. Найти элемент, который нуждается в закрашивании и определить, по каким стилям его нужно лоцировать, какое полное имя стиля присваивается строке или ячейке, помеченной style provider.
  4. Написать каскадный CSS в файле темы. Цепочка стилей должна быть такая, чтобы она переопределяла другой существующий стиль, устанавливающий обычный цвет.
  5. Если стиль после перезапуска не подхватывается, Ctrl+F5 / почистить кэш Chrome.

Примеры, я менял цвет или стиль текста. В themes/helium/styles.scss,

.helium {
  // include auto-generated app components SCSS
  @include app_components;

  @include com_haulmont_xxxxx-helium-ext;

  .v-table .v-table-row.xxx,
  .v-table .v-table-row-odd.xxx {
      font-style: italic;
  }

  .v-table .v-table-cell-content.foo {
      color: green;
  }

  .v-table .v-table-cell-content.fooz {
      color: #AEAE00;
  }
}

Александр, добрый день! Спасибо за обратную связь. По пунктам:

  1. Стиль есть
      .v-table-cell-content.commitAndClose {
          background-color: rgba(0, 255, 0, 0.15);
      }
  1. Style Provider реализовал следующим образом:
    @Install(to = "resultTable", subject = "styleProvider")
    private String resultTableStyleProvider(ContractPosition entity, String property) {
        return setStyle(entity, property);
    }

    private String setStyle(ContractPosition entity, String property) {
        // установка стиля кнопки "Ввести"
        if (!entity.getSerialNumbers().isEmpty() && property.equals("serialNumbers")) {
            return "commitAndClose";
        }
        return null;
    }

Подскажите, а можно использовать действие onAfterClose для экрана, в котором ввожу номера? При закрытии экрана это действие будет срабатывать и на другом экране перекрашивать нужную мне кнопку. Так будет работать?

Можно, вам нужно в AfterClose обработчике - поменять какую-то переменную. Это может быть переменная в контроллере экрана или транзиентное поле в сущности, которая лежит в таблице. После этого в том же обработчике вызывать перерисовку таблицы repaint().
В Style Provider ориентироваться на эту переменную.