我在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);
答案 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");