Как получить значение локального атрибута через QuerySpec в Windchill

Я создал атрибут локального строкового типа для типа в Windchill. Я пытаюсь получить значение этого атрибута с помощью QuerySpec, но выдает следующее исключение:

2019-04-16 20:53:05,092 ИНФОРМАЦИЯ [ajp-nio-127.0.0.1-8011-exec-5] wt.system.err - wt.query.QueryException: атрибут «ptc_str_89typeInfoLCSProduct» не является членом класса «класс com.lcs.wc.product.LCSSKU" 2019-04-16 20:53:05,092 INFO [ajp-nio-127.0.0.1-8011-exec-5] wt.system.err — Вложенное исключение: атрибут «ptc_str_89typeInfoLCSProduct» не является членом класса "класс com.lcs.wc.produ

Ниже приведен мой код:

    String colorwayId = product.getFlexType().getAttribute("colorwayID")
            .getColumnName();
    QuerySpec qs = new QuerySpec(); 
    int classIndex = qs.appendClassList(typeDefRef.getKey().getClass(), false); 
    ClassAttribute ca = new ClassAttribute(
            typeDefRef.getKey().getClass(), colorwayId);
    qs.appendSelect(ca, new int[] { classIndex }, false);
    QueryResult qr = PersistenceHelper.manager.find(qs);

person miserable    schedule 17.04.2019    source источник
comment
Почему бы вам не использовать PersistableAdapter API для получения значений атрибутов?   -  person Vignesh Vino    schedule 25.04.2019
comment
Мне нужно получить максимальное значение из трех столбцов.   -  person miserable    schedule 25.04.2019


Ответы (1)


Обычно ClassAttribute получает имя атрибута вместо имени столбца (столбец базы данных). Ваш столбец ptc_str_89typeInfoLCSProduct на самом деле является typeInfoLCSProduct.ptc_str_89, как State является state.state.

Чтобы получить эту информацию, вам нужно использовать PersistableAdapter следующим образом:

public String getAttributeColumnName(String softType, String logicalAttributeName) throws WTException {
    PersistableAdapter persistableAdapter = new PersistableAdapter(softType, Locale.getDefault(), Operation.DISPLAY);
    persistableAdapter.load(logicalAttributeName);

    AttributeTypeSummary attributeDescriptor = persistableAdapter.getAttributeDescriptor(logicalAttributeName);

    return null != attributeDescriptor ? (String) attributeDescriptor.get(AttributeTypeSummary.DESCRIPTION) : null;
}

И затем используйте этот метод:

String colorwayId = getAttributeColumnName("your_softtype", "attribute_name_from_type_manager");
person Emil    schedule 20.11.2019