在Windchill中,如何通过QuerySpec获取本地属性值

时间:2019-04-17 17:08:40

标签: ptc-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”不是“ class”类的成员   com.lcs.wc.product.LCSSKU“ 2019-04-16 20:53:05,092信息   [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);

1 个答案:

答案 0 :(得分:-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");