К какому типу принадлежит моя модель гибриса?

В моем прослушивателе событий hybris у меня есть PK элемента, а не предмет модели. Как узнать тип предмета, которому принадлежит этот ПК?

В hybris wiki приводят такой пример, чтобы вы знали, что элемент имеет тип Product:

//The product deployment code is "1"
if (1 == pk.getTypeCode())
{
    final ProductModel product = modelService.get(pk);
    //Put your business code here
}

Но мне не нравится идея жесткого кодирования TypeCode того типа, с которым я хочу иметь дело.


person Henrique Ordine    schedule 11.09.2013    source источник


Ответы (3)


Чтобы не записывать TypeCode в свой исходный код, вы должны сначала найти свой элемент в БД, а затем вы можете узнать его тип двумя разными способами:

final ItemModel item = modelService.get(pk);

if (ProductModel._TYPECODE.equals(item.getItemtype()))
{
    LOG.debug("ProductModel being edited");
}

//or

if (item instanceof ProductModel) {
    LOG.debug("ProductModel being edited");
}

Хотя это может замедлить работу прослушивателя AfterSaveEvent, поскольку этот прослушиватель будет вызываться для каждого объекта, который редактируется, создается или удаляется на вашем сервере hybris.

person Henrique Ordine    schedule 18.09.2013

Ниже приведен пример groovy-скрипта для этого в hybris 4.x.

import de.hybris.platform.core.PK;
import de.hybris.platform.jalo.type.TypeManager; // this class is deprecated though

def pkString = 8796093054980; // PK of admin
def typeService = ctx.getBean("typeService");
def modelService= ctx.getBean("modelService");

def composedType = TypeManager.getInstance().getRootComposedType(PK.fromLong(pkString).getTypeCode());
def composedTypeModel = modelService.toModelLayer(composedType);
out.println typeService.getModelClass(composedTypeModel);

Результат: класс de.hybris.platform.core.model.user.UserModel

person user2093800    schedule 15.04.2014

HAC можно использовать для поиска кодов типов для определенных типов в системе Hybris:

Перейдите по адресу: :/hac/maintain/deployments

Это даст вам следующую информацию:

  1. Код типа
  2. Стол
  3. Тип
  4. Расширение
person TheOutSideBox    schedule 29.10.2013