0

我在 Windchill 中的一个类型上创建了一个本地字符串类型属性。我正在尝试使用 QuerySpec 获取该属性的值,但它引发了以下异常:

2019-04-16 20:53:05,092 INFO [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 信息 [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);
4

1 回答 1

-1

通常 ClassAttribute 获取属性名称而不是列名称(数据库列)。您的ptc_str_89typeInfoLCSProduct列实际上是typeInfoLCSProduct.ptc_str_89 ,就像Statestate.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");
于 2019-11-20T08:54:52.950 回答