使用的是windchill 11.0
因工作需要,需要在自定义的软属性上使用文件夹选择组件,之前都没有使用过此组件,所以经过很长时间的研究终于成功使用了,所以记录下方法,以供需要的人以参考。此方法可能不是最好的实现方式,若有更好的方式也欢迎评论留言。下面具体介绍下使用方法
为软属性配置datautility(具体操作不详述),dataUtility返回LocationInputComponent,并增加onchange事件
LocationInputComponent locationInputComponent = new LocationInputComponent(
valueInputComponent.getLabel(),
preGeneratedFolder, // 默认显示的文件夹OID,不能为空
oldDisplayValue, // 显示值,这里是文件夹路径,如:/xxx库/测试1
preSelectedContext // 默认文件夹所属容器OID,不能为空。
);
locationInputComponent.addHiddenField("selectedFolderFromFolderContext", preGeneratedFolder); // 添加隐藏字段,key必须为 selectedFolderFromFolderContext
locationInputComponent.setId(valueInputComponent.getId());
locationInputComponent.setName(valueInputComponent.getName());
locationInputComponent.setColumnName(valueInputComponent.getColumnName());
locationInputComponent.setRequired(true);
locationInputComponent.getLocationTextBox().addJsAction("onchange", "javascript:setTargetLocValue(this)"); // 增加此方法用于将选择的文件夹赋值到当前组件上,不然无法使用 --可能有更好的方式
在对应的jsp页面上提供setTargetLocValue方法
// 将selectedFolderFromFolderContext 组件上的值 复制到其兄弟组件(排除type为text ---此为显示目录路径的组件,不需要赋其他值,否则显示有问题)
function setTargetLocValue(thisTarget){
var newValue = thisTarget.parentNode.querySelector('input[name="selectedFolderFromFolderContext"]').value;
thisTarget.parentNode.querySelectorAll('input').forEach(el=>{
if(el.getAttribute("type") != 'text'){
el.value = newValue
}
});
}
以上两步即可正常使用LocationInputComponent组件。当然对应属性的显示也应该使用dataUtility处理下,否则显示的是文件夹的OID(也不在此详述)。