2013-09-11 3 views
1

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

В Hybris вики они дают этот пример, так что вы знаете, что элемент имеет тип продукта:

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

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

ответ

2

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

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

0

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

Перейти к::/HAC/поддерживать/развертывания

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

  1. кода типа
  2. Таблица
  3. Тип
  4. Расширение
0

Ниже приведен образец примерного скрипта для этого в гибридах 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

Смежные вопросы