属性自定义
您想要自定义 Windchill 对象属性的显示。
背景
Windchill 尝试在所有客户端应用程序中提供一致的属性行为。Windchill 客户端基础结构可提供对呈现标准 Windchill 支持数据类型的属性的支持功能 (有关详细信息,请参阅本主题中的“属性类型”部分)。此基础结构包括标准数据采集、呈现和表单处理机制,以及用于呈现属性的 UI 元素的可重用组件。这些组件遵守属性定义中的元数据、为该属性定义的配置以及属性的保留值 (如果有)。
Windchill 可为自定义属性的显示和行为提供多个配置点。“类型和属性管理”实用程序为推荐的配置工具。在某些情况下,可能需要使用其他配置点,例如:
模型化 Windchill 类的 Java 源文件。有关详细信息,请参阅业务对象建模中的 "GeneratedProperty"。
对象初始化规则管理有关详细信息,请参阅关于对象初始化规则
首选项管理。有关详细信息,请参阅关于首选项管理实用程序
配置文件管理。有关详细信息,请参阅作为可见性控制机制的配置文件
最常见的配置包括:
约束
可在“类型和属性管理”实用程序中针对属性设置的特性
属性的默认值
隐式影响属性行为的一些其他因素包括:
构建到基础设施中以符合 Windchill UI 标准的行为
数据库配置
属性验证器 (有关详细信息,请参阅 UI 验证)
通过覆盖标准呈现和数据采集行为的功能,框架还可提供用于自定义的扩展点。有关详细信息,请参阅本主题中的“数据实用程序”部分。
属性配置的范围
Windchill 可为同一配置提供多个配置点 (作为一种控制配置范围的机制)。通常,配置有 3 个可能的范围。
适用于所有屏幕上所有对象类型的所有属性的配置。此配置通常在首选项管理实用程序中进行设置。
应用于所有屏幕上单个类型的单个属性的配置。属性定义在“类型和属性管理”实用程序中进行设置。
仅适用于特定 UI 中单个类型的单个属性的配置。在“类型和属性管理”实用程序中或使用 java 构建器定义组件配置时对属性布局进行设置。
对于某些配置,具有相同范围的多个配置点可用于支持向后兼容性。
用于解析使用多个配置点的配置集值的机制随每个配置而改变,并在本主题中的常见 Windchill 业务属性部分的自定义部分中进行了详细说明。
有关覆盖属性约束的规则,请参阅“类型和属性管理”实用程序中的约束管理。
术语
一些常用术语的定义
术语
定义
属性面板
用于根据属性布局定义将属性显示为名称-值对的 UI。
客户端/屏幕
将在其中显示属性的最终用户 UI。示例:创建向导属性步骤。
信息页面主要属性
信息页面中的属性面板,主要用于显示小部分属性。通常显示在信息页面的顶部。
信息页面完整属性列表
属性面板,主要用于在信息页面上显示大部分属性。
GUI 组件/UI 组件
显示在屏幕上的 UI 小组件 (或复合 UI 小组件),可供用户输入或显示属性值。
属性特性
可在“类型和属性管理”实用程序中或使用其他配置点为属性设置的特性。您可以通过设置特性自定义属性的显示和数据采集。
Windchill 属性自定义概述
有三个步骤可用于获取在 UI 中呈现的属性。
1. 在 UI 中放置属性
2. 配置属性的 UI 小组件 (可选)
3. 自定义数据源 (可选)
因此,步骤 1 和 2 为最常用步骤。本文档主要处理这两个区域。
在 UI 中放置属性
Windchill 支持的局部属性容器包括:
属性面板。有关详细信息,请参阅属性面板
属性表。有关详细信息,请参阅属性表
属性也可显示在 UI 上的这些容器之外。
配置属性的 UI 小组件
预置 Windchill 会根据以下内容自动确定要用于特定属性的 UI 组件:
Windchill UI 标准
属性的数据类型
针对属性定义的约束和其他配置
Windchill 配置点可用于更改小组件的某些呈现特性
在极少数情况下,可以使用配置来指定备用小组件。对于所有其他情况,将备用小组件映射到属性需要编写自定义数据实用程序。有关详细信息,请参阅本主题中的创建数据实用程序类部分。
自定义数据源
通过配置某些数据采集特性,可更改给定 UI 上给定属性的数据源,但该操作仅用于某些非常特殊的自定义要求。
Windchill 属性类型
Windchill 支持五种类型的属性:
1. 模型化 (有关详细信息,请参阅业务对象建模)
2. 全局
(有关详细信息,请参阅创建新属性)
3. 局部 (有关详细信息,请参阅创建新属性)
4. 别名 (有关详细信息,请参阅创建新属性)
5. 计算的 (有关详细信息,请参阅创建新属性)
计算属性和别名属性
别名属性和某些计算属性从其他属性的值衍生而来。因此,不应在创建或编辑客户端使用这些属性。如果在创建或编辑布局中使用这些属性,则将显示“(不可分配)”。这些属性可在用于显示属性的保留值的 UI 中使用。
基于常量值的计算属性可能会显示在创建和编辑客户端中。
有关定义这些属性的详细信息,请参阅创建新属性
Windchill 属性配置
Windchill 对象的属性以两种模式 (通常称为输入模式和查看模式) 之一呈现。输入模式用于允许用户设置/编辑属性的值。视图模式用于在不可编辑模式下显示属性的值。
以下各节标识了显示每个数据类型的输入字段和/或值字段时所涉及的每个部分的默认实现。
字符串
默认行为和可用配置
输入
视图
呈现为:
呈现为:
UI 配置:
必需的输入
默认值
验证输入值和合法值列表
可见性和可修改性
多个值 (仅限全局 IBA)
定义自定义标签
控制字符串属性的输入字段的大小
限制为字符串属性输入的值的长度
UI 配置:
可见性 (请参阅本主题中的“可见性和可修改性”部分)
多个值 (仅限全局 IBA)
定义自定义标签
创建超链接 (请参阅本主题中的“配置点”部分)
将字符串值全部设为大写或小写
数据采集配置:
配置数据源 (有关详细信息,请参阅本主题中的“自定义数据采集”部分)
配置数据实用程序 (有关详细信息,请参阅本主题中的“数据实用程序”部分)。
数据采集配置:
配置数据源 (有关详细信息,请参阅本主题中的“自定义数据采集”部分)
配置数据实用程序 (有关详细信息,请参阅本主题中的“数据实用程序”部分)。
日期和时间
日期和时间属性可用于仅存储日期值 (yyyy-mm-dd),或存储日期和时间值 (yyyy-mm-dd hh:mm)。
默认行为和可用配置
输入
视图
呈现为:
呈现为:
UI 配置:
必需的输入
默认值
验证输入值和合法值列表
可见性和可修改性
多个值 (仅限全局 IBA)
定义自定义标签
日期输入字段类型 (有关详细信息,请参阅本主题中的“配置点”部分)
本地时区 (有关详细信息,请参阅本主题中的“配置点”部分)
UI 配置:
可见性 (请参阅“可见性和可修改性”)
多个值 (仅限全局 IBA)
定义自定义标签
日期显示格式 (有关详细信息,请参阅本主题中的“配置点”部分)
本地时区 (请参阅“配置点”)
数据采集配置:
配置数据源 (有关详细信息,请参阅本主题中的“自定义数据采集”部分)
配置数据实用程序 (有关详细信息,请参阅本主题中的“数据实用程序”部分)。
数据采集配置:
配置数据源 (有关详细信息,请参阅本主题中的“自定义数据采集”部分)
配置数据实用程序 (有关详细信息,请参阅本主题中的“数据实用程序”部分)。
整数
默认行为和可用配置
输入
视图
呈现为:
呈现为:
配置:
必需的输入
默认值
验证输入值和合法值列表
可见性和可修改性
多个值 (仅限全局 IBA)
定义自定义标签
配置:
可见性 (有关详细信息,请参阅本主题中的“可见性和可修改性”部分)
多个值 (仅限全局 IBA)
定义自定义标签
百分比 (有关详细信息,请参阅本主题中的“配置点”部分)
货币 (有关详细信息,请参阅本主题中的“配置点”部分)
数据采集配置:
配置数据源 (有关详细信息,请参阅本主题中的“自定义数据采集”部分)
配置数据实用程序 (有关详细信息,请参阅本主题中的“数据实用程序”部分)
数据采集配置:
配置数据源 (有关详细信息,请参阅本主题中的“自定义数据采集”部分)
配置数据实用程序 (有关详细信息,请参阅本主题中的“数据实用程序”部分)
实数
实数以十进制表示的形式进行存储 (例如 1.23)。
默认行为和可用配置
输入
视图
呈现为:
呈现为:
配置:
必需的输入
默认值
验证输入值和合法值列表
可见性和可修改性
多个值 (仅限全局 IBA)
定义自定义标签
配置:
可见性 (有关详细信息,请参阅本主题中的“可见性和可修改性”部分)
多个值 (仅限全局 IBA)
定义自定义标签
百分比 (有关详细信息,请参阅本主题中的“配置点”部分)
货币 (有关详细信息,请参阅本主题中的“配置点”部分)
数据采集配置:
配置数据源 (有关详细信息,请参阅本主题中的“自定义数据采集”部分)
配置数据实用程序 (有关详细信息,请参阅本主题中的“数据实用程序”部分)
数据采集配置:
配置数据源 (有关详细信息,请参阅本主题中的“自定义数据采集”部分)
配置数据实用程序 (有关详细信息,请参阅本主题中的“数据实用程序”部分)
带单位的实数
默认行为和可用配置
输入
视图
呈现为:
呈现为:
配置:
必需的输入
默认值
验证输入值和合法值列表
可见性和可修改性
多个值 (仅限全局 IBA)
定义自定义标签
测量系统 (有关详细信息,请参阅本主题中的“配置点”部分)
配置:
可见性 (有关详细信息,请参阅本主题中的“可见性和可修改性”部分)
多个值 (仅限全局 IBA)
定义自定义标签
百分比 (有关详细信息,请参阅本主题中的“配置点”部分)
货币 (有关详细信息,请参阅本主题中的“配置点”部分)
测量系统 (有关详细信息,请参阅本主题中的“配置点”部分)
数据采集配置:
配置数据源 (有关详细信息,请参阅本主题中的“自定义数据采集”一节)
配置数据实用程序 (有关详细信息,请参阅本主题中的“数据实用程序”一节)。
数据采集配置:
配置数据源 (有关详细信息,请参阅本主题中的“自定义数据采集”一节)
配置数据实用程序 (有关详细信息,请参阅本主题中的“数据实用程序”一节)。
布尔型
默认行为和可用配置
输入
视图
呈现为:
呈现为:
配置:
必需的输入
默认值
可见性和可修改性
定义自定义标签
配置:
可见性 (有关详细信息,请参阅本主题中的“可见性和可修改性”部分)
定义自定义标签
数据采集配置:
配置数据源 (有关详细信息,请参阅本主题中的“自定义数据采集”部分)
配置数据实用程序 (有关详细信息,请参阅本主题中的“数据实用程序”部分)
数据采集配置:
配置数据源 (有关详细信息,请参阅本主题中的“自定义数据采集”部分)
配置数据实用程序 (有关详细信息,请参阅本主题中的“数据实用程序”部分)
使用“包括空白选项”控制是否显示未定义的选项。有关详细信息,请参阅配置点
超链接 (即“管理可重用属性”实用程序中的 URL)
超链接属性可用于创建指向 Windchill 外部系统的链接。此属性的值应为完全限定的 URL。
示例
无效值:ptc.com
默认行为和可用配置
输入
视图
呈现为:
呈现为:
配置:
必需的输入
默认值
验证输入值和合法值列表
可见性和可修改性
多个值 (仅限全局 IBA)
定义自定义标签
配置:
可见性 (有关详细信息,请参阅本主题中的“可见性和可修改性”部分)
多个值 (仅限全局 IBA)
定义自定义标签
数据采集配置:
配置数据源 (有关详细信息,请参阅本主题中的“自定义数据采集”部分)
配置数据实用程序 (有关详细信息,请参阅本主题中的“数据实用程序”部分)
数据采集配置:
配置数据源 (有关详细信息,请参阅本主题中的“自定义数据采集”部分)
配置数据实用程序 (有关详细信息,请参阅本主题中的“数据实用程序”部分)
对象参考属性
有限的客户端基础结构支持可用于对象参考属性。预置支持对象参考类型属性的显示。对对象参考类型属性的输入/编辑的支持仅限于非常特定的属性和特定使用关系,通常不意味着可实现可重用或自定义目的。
常用属性自定义步骤
下列属性自定义可用:
必需的输入
默认值
可见性和可修改性
验证输入值和合法值列表
限制为字符串属性输入的值的长度
控制字符串属性的输入字段的大小
多个值 (仅限全局 IBA)
将字符串值全部设为大写或小写
自动创建超链接
定义自定义标签
自定义数据采集
提供备用 UI 行为
必需的输入
您想要强制为属性提供值。
解决方案元素
元素
说明
必需的约束
此配置将应用于显示属性的所有 UI 上的属性。此规则会在 UI 中以及在数据库的持久化期间强制执行。有关异常,请参阅 com.ptc.windchill.annotations.metadata.PropertyConstraints 的 javadoc。
可使用以下配置点设置约束:
对于模型化属性:
必需的 PropertyConstraint 注释 (有关详细信息,请参阅业务对象建模)
“类型和属性管理”实用程序中必需的约束 (有关详细信息,请参阅“约束”选项卡)
对于全局属性和局部属性:
“类型和属性管理”实用程序中必需的约束 (有关详细信息,请参阅“约束”选项卡)
输入必需的特性
可针对模型化、全局或局部属性设置 Input Required 特性。
范围:此配置仅在已设置特性的特定属性面板上应用于此属性。此设置只是仅限 UI 的规则,在数据库的持久化过程中不会强制执行。
Input Required 特性不能用于针对已具有必需的约束的属性禁用强制输入。
预期结果
当属性在属性面板中显示为名称-值对时,系统会在属性标签前标记 "*"。
提交数据或用户导航到另一个屏幕时,将抛出验证消息。此消息不可进行自定义。
解决方案
下面列出了实现不同类型行为所需的配置:
如果您希望...
配置
在显示属性以供输入/编辑的所有 UI 中使输入成为必需项
使用必需的约束
当属性没有用于输入值的 UI (例如导入数据、以编程方式创建对象/属性) 时,使输入成为必需项
使用必需的约束
仅在特定 UI 中使输入成为属性的必需项
使用“必需的输入”特性
仅在 UI 中使输入成为属性的必需项;在 UI 外不强制执行此操作,例如,以编程方式提供值时
使用“必需的输入”特性
* 
在允许输入数据的表格中,"*" 不会添加到列标题中。这是因为如果表格显示了多个对象类型,则对于任何给定的列,某些类型的属性可能已配置为必需的属性,而其他类型的属性则可能未进行相同配置。
默认值
您想要为属性指定默认值。
解决方案元素
元素
说明
initialValue
用于指定属性的默认值的特性。仅适用于模型化属性。
有关详细信息,请参阅 com.ptc.windchill.annotations.metadata.GeneratedProperty 的 javadoc 和业务对象建模
默认值
“类型和属性管理”实用程序中的配置。
有关详细信息,请参阅“默认值”选项卡
对象初始化规则
有关详细信息,请参阅了解对象初始化规则
默认值显示模式
用于配置默认值在 UI 中的显示方式的特性。有关详细信息,请参阅配置点中的“默认值显示模式”。
预期结果
默认值以下列三种模式之一显示在 UI 中,并且/或者会自动保留:
默认值按钮
使用默认值预先填充字段
不显示默认值
解决方案
您想要为属性指定默认值。
下面列出了实现不同类型行为所需的配置:
如果您希望...
配置
提供仅在创建 UI 中使用的默认值。
如果未在 UI 中提供值,则不希望自动保留该值。
对于模型化属性,使用初始值特性
对于全局和局部属性,请在“类型和属性管理”实用程序中提供默认值。
有关详细信息,请参阅“默认值”选项卡
提供在创建 UI 和持久化中使用的默认值
如果未在利用持久化点之前提供值,则需要自动为该属性保留该值。
使用对象初始化规则指定默认值。
提供在创建 UI 中未显示的属性的默认值,并使用此值进行持久化
此操作在您希望以编程方式 (不使用 UI) 创建对象时,或者当对象的某些属性未添加到属性的创建 UI 时适用。
* 
对象初始化规则不能应用于已在对象模型中配置初始值的属性。
使用对象初始化规则指定默认值。
指定默认值在 UI 中的显示方式
使用“默认值显示模式”特性。
限制
在对象初始化规则中指定的默认值将不会反映在“类型和属性管理”实用程序中。
在持久化期间针对属性设置的值为在 UI 中为该属性显示的值。因此,当在模型化类或“类型和属性管理”实用程序中指定默认值时,此值将仅用于在 UI 中显示。除非使用用于显示默认值的方法之一将默认值作为属性值显示在 UI 中,否则不会在持久化期间自动针对属性设置默认值。只有使用对象初始化规则指定的默认值才会以默认值形式自动保存。
可见性和可修改性
您想要控制属性的可见性和可修改性。
解决方案元素
元素
说明
不可变约束
“类型和属性管理”实用程序中定义的约束。有关详细信息,请参阅属性约束规则
可更改约束
特性约束。仅适用于模型化属性。
有关详细信息,请参阅 com.ptc.windchill.annotations.metadata.PropertyConstraints 的 javadoc 和业务对象建模
“类型和属性管理”实用程序中的可见性设置
“类型和属性管理”实用程序中的配置。有关详细信息,请参阅“可见性”选项卡
基于角色的属性可见性
配置文件管理工具中的配置。有关详细信息,请参阅管理配置文件
属性验证器
可用于执行属性验证和筛选的 Java 类。有关详细信息,请参阅 UI 验证
预期结果
对于各种配置,属性在查看模式下显示如下:
在表格外部
在表格中
隐藏属性
不显示属性 (标签和值)。
将显示列标题。对于隐藏属性的那些行对象,UI 会显示“(安全信息)”
创建者
(隐藏)
隐藏值
创建者:(隐藏)
创建者
(隐藏)
只读
当属性没有值时
创建者:(不可分配)
当属性具有值时
创建者:John Doe
当属性没有值时:
创建者
(不可分配)
当属性具有值时:
创建者
John Doe
读-写
当属性还没有值时
创建者:
当属性具有值时
创建者:
John Doe
当属性还没有值时:
创建者
当属性具有值时:
创建者
John Doe
解决方案
下面列出了实现不同类型行为所需的配置:
如果您希望...
配置
对于所有配置文件,始终从特定 UI 隐藏属性
只需将其从 UI 中排除 (即,请勿将其添加到属性面板或表格配置中)。
基于特定业务逻辑,针对所有配置文件从特定 UI 隐藏属性
使用验证服务。
仅针对特定配置文件从所有 UI 隐藏属性
使用基于角色的属性可见性。
限制:此功能仅适用于全局属性。有关详细信息,请参阅创建新属性
始终使属性在其显示的任何 UI 中处于不可修改状态
使用不可变约束/可更改约束。
限制:如果属性在创建或编辑时处于不可变状态,请勿将其添加到放置将更新字段的 UI 区域中。
针对所有配置文件,控制特定 UI 中的属性的可修改性 (隐藏值、将值设置为可编辑状态或只读状态)
使用“类型和属性管理”实用程序中的可见性设置来控制最终用户 UI 中属性的可修改性。有关详细信息,请参阅类型管理器中的可见性设置
限制:此功能仅限于创建和编辑 UI。
此外,在此情况下,可见性和可修改性设置仅适用于具有局部属性行为的属性 (所有局部属性、全局属性和某些模型化属性)。具有特殊预置行为的模型化属性 (例如名称、编号和承担者) 可能不会反映此配置。
仅针对特定配置文件控制所有 UI 中的属性的可修改性 (隐藏值、将值设置为可编辑状态或只读状态)
使用基于角色的属性可见性。
限制:此功能仅适用于全局属性。有关详细信息,请参阅创建新属性
多个配置的解决方案
当全局属性在配置文件管理工具和“类型和属性管理”实用程序中均已配置可见性时,系统将按如下方式对其进行解析:
“类型和属性管理”实用程序配置的最严格设置以及配置文件管理工具的结果将成为属性的最终可见性设置。
示例:属性“颜色”的可见性设置
在配置文件管理工具中:
隐藏值
“类型和属性管理”实用程序中,用于创建屏幕:
只读
在创建 UI 中应用的生成的可见性设置:
隐藏值 (这两个设置最严格)
验证输入值、合法值列表和级联属性
您想要限制属性允许的值。
解决方案元素
元素
说明
合法值列表约束
“类型和属性管理”实用程序中定义的约束。有关详细信息,请参阅属性约束规则
枚举列表约束
“类型和属性管理”实用程序中定义的约束。有关详细信息,请参阅属性约束规则
模型化类定义中的 EnumeratedType
有关详细信息,请参阅专业化持久化构造中的“GenAsEnueratedType 列”部分。
级联属性
“类型和属性管理”实用程序中定义的属性之间的相关性。请参阅级联属性选项卡
有效范围约束
“类型和属性管理”实用程序中定义的约束。有关详细信息,请参阅属性约束规则
upperLimit、lowerLimit 约束
定义模型化类时定义的约束。有关 PropertyConstraints 的详细信息,请参阅业务对象建模。与数字属性配合使用时,功能与范围约束相同。
通配符约束
“类型和属性管理”实用程序中定义的约束。有关详细信息,请参阅属性约束规则
正则表达式约束
“类型和属性管理”实用程序中定义的约束。有关详细信息,请参阅属性约束规则
字符串格式约束
“类型和属性管理”实用程序中定义的约束。有关详细信息,请参阅属性约束规则
无重复值约束
“类型和属性管理”实用程序中定义的约束。有关详细信息,请参阅属性约束规则
选项列表样式
用于指定如何在 UI 中显示合法值的特性。有关详细信息,请参阅本主题中“配置点”部分中的“选择列表样式”。
包括空白选项
用于指定是否在合法值列表中包括空白选项的特性。有关详细信息,请参阅本主题中“配置点”部分中的“包括空白选项”。
预期结果
您可以执行以下一个或多个操作:
通过指定用户需要从中进行选择的一组有效值来限制输入。
示例:
当包括空白选项设置为 true 时
当包括空白选项设置为 false 时
允许使用某个属性的值定义另一个属性的值,其中两个属性均已定义有效值集。
将用户输入限制在某个范围内,并在值超出范围时显示一则验证消息。
确保字符串属性的用户输入符合给定的字符模式。输入的值不符合在约束中指定的模式时,将显示一条验证消息。
要求用户输入值是唯一的。
解决方案
下面列出了实现不同行为所需的解决方案元素的组合:
如果您希望...
配置
显示包含属性合法值集的下拉列表 (也可配置为一组单选按钮);不允许用户键入值。
对于全局和局部属性,请使用:
非本地化列表的合法值列表
本地化列表的枚举列表。
对于模型化属性,请使用:
模型化类定义中的 EnumeratedType。
要针对现有模型化属性定义合法值列表,而无需重新编译,请使用“类型和属性管理”实用程序中的“合法值”列表约束 (本地化列表) 或“枚举”列表约束 (非本地化列表)。
允许用户键入值,但将值限制在给定范围内。
对于模型化属性,使用上限、下限约束。
对于局部和全局属性,使用范围约束。
允许用户键入值,但为验证值定义一个以上的范围。
有效数字约束
这仅适用于实数和带单位的实数。
允许使用某个属性的值定义另一个属性的值。
使用“类型和属性管理”实用程序中的级联属性选项卡
您想要将用户输入的值限制为符合给定的模式。
使用通配符约束、正则表达式约束或字符串格式约束
您希望要求为单个业务对象所输入的一组值是唯一的。
使用无重复值约束。
指定合法值在 UI 中的显示方式
使用“选项列表样式”特性。
使用合法值列表时,提供空白选项以清除属性的当前值。
使用“包括空白选项”特性。
组合合法值列表、有效范围约束和有效数字约束
可为一个属性定义多个配置。下表显示了组合这些配置的效果:
在属性的“类型和属性”管理实用程序中指定的约束
UI 行为
合法值列表 + 枚举列表 + 枚举类型
显示的列表将是所有约束的交集,即,该列表将具有所有已定义列表共用的条目。
示例:
给出以下约束:
1. 枚举:
COLOR_RED = 红色
COLOR_BLUE = 蓝色
COLOR_GREEN = 绿色
2. 非本地化合法值列表:
COLOR_RED
COLOR_BLUE
3. 非本地化合法值列表:
红色
蓝色
如果用户要应用 1 和 2,则生成的合法值应为:
COLOR_RED = 红色
COLOR_BLUE = 蓝色
如果用户要应用 1 和 3,结果将为空集 (无合法值)。
将所有为属性指定的合法值列表合并后,生成的列表将是所有列表的交集 (即,仅所有列表的公用条目将添加到生成的列表中)。因此,当定义了多个合法值列表时,最终可能会有一个空的合法值列表。当合法值列表为空时,最终用户 UI 会显示输入字段。
合法值列表 + 范围约束
下拉列表仅使用满足范围约束的合法值列表中的值进行填充。(可配置为一组单选按钮)。无工具提示消息。
合法值列表 + 有效数字约束
下拉列表仅使用满足从有效数字约束获得的范围的合法值表中的值进行填充。(可配置为一组单选按钮)。无工具提示消息。
范围约束 + 有效数字约束
带有工具提示 (用于指示有效范围) 的输入字段。验证消息将指示有效范围。
有效范围由这两个约束的交集决定。
合法值列表 + 范围约束 + 有效数字约束
下拉列表仅使用离散集中满足“范围约束”范围和“有效数字”约束范围的值进行填充。无工具提示消息。
限制为字符串属性输入的值的长度
您想要限制为字符串属性输入的值的长度。
解决方案元素
元素
说明
upperLimit、lowerLimit 约束
定义模型化类时定义的约束。有关详细信息,请参阅业务对象建模中有关 PropertyConstraint 的信息。
字符串长度约束
“类型和属性管理”实用程序中定义的约束。有关详细信息,请参阅属性约束规则
字符条目限制
可针对模型化、全局或局部属性设置 Character Entry Limit 特性。有关详细信息,请参阅本主题中的“配置点”部分。
预期结果
您可以在 UI 中和/或持久化期间限制字符串属性的长度,并在超出限制时向用户提供反馈。
解决方案
下面列出了实现不同行为所需的解决方案元素的组合:
如果您希望...
配置
在所有 UI (将显示属性以供编辑) 中将输入限制为特定数量的字符。
也在持久化期间应用此限制。此操作在您希望以编程方式 (不使用 UI) 创建对象时,或者当对象的某些属性未添加到属性的创建 UI 时适用。
对于模型化属性,使用上限、下限约束。
对于全局和局部属性,使用字符串长度约束。
也可针对模型化属性使用字符串长度约束,以便在不需要执行 Java 代码编译的情况下进行配置。
限制:名称属性的长度符合 Windchill UI 标准,因此不能使用此约束进行覆盖。
仅在特定 UI 中将输入限制为特定的字符数。
此外,请勿在持久化期间应用此限制。
使用“字符条目限制”特性。
注意:此限制必须小于最大字符串长度。
字节长度
最终用户 UI 中的验证还考虑了存储所输入字符所需的字节数,以考虑可变宽度编码和多字节数据库。
合并多个约束定义
在模型化类中指定 upperLimit、lowerLimit 约束,并为“类型和属性管理”实用程序中的同一属性指定一个或多个字符串长度约束后,所有这些约束都将编译在一起,以提供对于这些约束公用的范围。
因此,可输入的最小字符数将是所有下限值的最大值。可输入的最大字符数将是所有下限值中的最小值。
示例:
注释的约束:下限 = 30 上限 = 50
“类型和属性管理”实用程序字符串长度约束 1: 20 – 40
“类型和属性管理”实用程序字符串长度约束 2: 35 - 45
合并所有这些约束的结果:35 - 40
控制字符串属性的输入字段的大小
您想要自定义字符串属性的输入字段的物理宽度和/或高度。
解决方案元素
元素
说明
多行输入的字符串长度阈值
作为特性或首选项提供。有关详细信息,请参阅本主题中“配置点”部分中的“多行输入的字符串长度阈值”。
输入字段类型
作为特性提供。有关详细信息,请参阅本主题中“配置点”部分中的“输入字段类型”。
文本输入行
作为特性提供。有关详细信息,请参阅本主题中“配置点”部分中的“文本输入行”。
文本输入列
作为特性提供。有关详细信息,请参阅本主题中“配置点”部分中的“文本输入列”。
预期结果
您可以自定义某些字符串属性的输入字段的物理宽度和/或高度。
限制
对于某些特殊属性 (例如名称和编号),宽度和高度不可配置。
如果将字符串输入属性设置为在布局中跨越列,则输入字段宽度将会展开以适应所跨越列的组合宽度。即使字符串输入长度小于跨越的宽度,也会出现这种情况。
在此版本中,结构浏览器不支持列跨度。
解决方案
下面列出了实现不同行为所需的解决方案元素的组合:
如果您希望...
配置
根据字符串长度约束自动自定义所有输入字段的高度
使用多行输入的字符串长度阈值
仅针对特定属性覆盖“多行输入的字符串长度阈值”所提供的自动行为
使用输入字段类型
对于特定属性,始终显示特定类型的字段 (单行或多行)
使用输入字段类型
在多行文本输入字段中,指定在不滚动的情况下可见的实际行数。
使用文本输入行。
自定义输入字段的宽度
使用文本输入列。
请注意:对于大多数字段,字段的宽度默认为 Windchill UI 标准和属性的字符串长度约束指定的值。
多个值 (仅限全局属性)
您想要允许为一个属性分配多个值。
解决方案元素
元素
说明
单值约束
“类型和属性管理”实用程序中定义的约束。有关详细信息,请参阅属性约束规则
多值属性的分隔符。
首选项。有关详细信息,请参阅本主题中“配置点”部分中的“多值属性的分隔符”。
无重复的值
需要区分多值属性的值集的约束。不允许出现重复的值。
预期结果
您可以
为属性输入多个值
编辑为属性存储的值
编辑属性时添加/移除值
要求每个输入值是唯一的
自定义在 UI 中以“查看”模式显示多个值时所使用的分隔符
解决方案
要将全局属性配置为具有多个值,请移除其单值约束。有关详细信息,请参阅属性约束规则
如需确保每个值均唯一,请添加无重复值约束。否则,允许使用重复值。
如果分配给全局属性的多个值以查看模式显示在 UI 中,则以逗号对其进行分隔。要自定义分隔符,请使用“用于多值属性的分隔符”首选项。有关详细信息,请参阅本主题中“配置点”部分中的“多值属性的分隔符”。
限制:此时不支持别名属性和计算属性的多个值。
将字符串值全部设为大写或小写
您希望自动将字符串值全部设置为大写或小写形式,而无需对用户或提供值的任何系统提出此项要求。
解决方案元素
元素
说明
小写约束
“类型和属性管理”实用程序中定义的约束。有关详细信息,请参阅属性约束规则
大写约束
“类型和属性管理”实用程序中定义的约束。有关详细信息,请参阅属性约束规则
预期结果
您可以在创建或编辑 UI 中以任何形式 (大写、小写或大小写混合) 输入字符串的值,并将其自动存储并全部显示为大写或小写形式。
您可以通过编程方式 (使用 java 代码、导入操作等) 在创建或编辑 UI 中设置任何形式 (大写、小写或大小写混合) 的字符串属性的值,并将其自动存储并全部显示为大写或小写形式。
解决方案
`
要将字符串属性的值配置为全部自动转换为小写字符,请使用小写约束。
要将字符串属性的值配置为自动转换为全部大写,请使用大写约束。
自动创建超链接
您想要控制将嵌入到字符串值中的超链接文本自动转换为 HTML 超链接的过程。
解决方案元素
元素
说明
创建“超链接”首选项
此首选项可在属性处理类别中提供。有关详细信息,请参阅本主题中“配置点”部分中的“创建超链接”。
创建“超链接”特性
可在“类型和属性管理”实用程序属性定义中提供。有关详细信息,请参阅本主题中“配置点”部分中的“创建超链接”。
预期结果
您可以设置字符串属性,以将嵌入到字符串值中的超链接文本自动转换为 HTML 超链接。
您可以防止将嵌入到字符串值中的超链接文本自动转换为 HTML 超链接。
解决方案
要为所有属性配置此设置,请使用“创建超链接”首选项。此首选项可在属性处理类别下提供。
要为特定属性配置此设置,请使用“类型和属性管理”实用程序中可针对属性定义设置的“创建超链接”特性。
* 
特性的值会覆盖首选项的值。
定义自定义标签
您想要自定义为属性显示的标签。
解决方案元素
元素
说明
标签特性
“类型和属性管理”实用程序中定义的特性。有关详细信息,请参阅本主题中“配置点”部分中的“标签”。
显示“名称”特性
“类型和属性管理”实用程序属性定义中定义的特性。有关详细信息,请参阅“类型和属性管理实用程序”帮助主题属性信息页面
rbInfo 文件
componentRB.rbInfo
tableRB.rbInfo
com.ptc.core.htmlcomp.jstable.jstableResource
com.ptc.core.ui.tableRB
wt.enterprise.enterpriseResource (也用作默认值)
wt.identity.identityResource
wt.templateutil.table.tableResource
com.ptc.windchill.cadx.ws.wsResource
预期结果
解决方案
下面列出了实现不同行为所需的解决方案元素的组合:
如果您希望...
配置
仅在某个特定的属性面板上使用自定义标签
使用“标签”特性
仅对特定表格中的属性使用自定义列标题
如果表格使用 Java 构建器类进行定义,则在为表示属性的列定义 com.ptc.mvc.components.ComponentConfig 时,使用 setLabel() 方法设置自定义标签。有关详细信息,请参阅 Javadoc。
在将显示此属性的所有属性面板中使用相同的自定义标签
对于 TypeManaged 对象的属性,请使用“显示名称”特性。
在将显示某个属性的所有表格上,针对该属性使用相同的自定义列标题。
如果该属性具有以下 rbInfo 文件之一中的条目,请修改 rbInfo 文件条目
com.ptc.core.htmlcomp.jstable.jstableResource
com.ptc.core.ui.tableRB
wt.enterprise.enterpriseResource (也用作默认值)
wt.identity.identityResource
wt.templateutil.table.tableResource
com.ptc.windchill.cadx.ws.wsResource
对于所有其他属性,可使用“类型和属性管理”实用程序属性信息页面将属性的“显示名称”特性设置为自定义标签。
对于所有其他属性,请使用“类型和属性管理”实用程序属性信息页面将属性的“显示名称”特性设置为自定义标签。
确定属性标签的源
启用记录器 com.ptc.core.components.labels
自定义数据采集
您想要自定义属性的数据源。
解决方案元素
元素
说明
数据实用程序 ID
“类型和属性管理”实用程序或组件构建器中定义的特性。有关详细信息,请参阅本主题中“配置点”部分中的“数据实用程序 Id”。
Need 特性
“类型和属性管理”实用程序中定义的特性。有关详细信息,请参阅本主题中“配置点”部分中的 "Need"。
“目标对象”特性
“类型和属性管理”实用程序中定义的特性。有关详细信息,请参阅本主题中“配置点”部分中的“目标对象”。
预期结果
可从默认值以外的属性中提取属性的数据。
解决方案
下面列出了实现不同行为所需的解决方案元素的组合:
如果您希望...
配置
指定复合属性或参考属性的数据源
示例
状态属性的值实际上来自 State.state。针对类型定义的属性为状态。定义组件配置时,要指示此属性的数据源为 State.state,请将状态属性的 "Need" 特性的值设置为 State.state。
指定仅特定于 UI 的不同数据源
定义组件配置时,请设置属性的 "Need" 特性的值。
使用来自多个属性的数据,并使用自定义逻辑对其进行组装,以形成要在 UI 中显示的值。
只要有可能,应定义计算属性。
如果必需的计算已超出为计算属性提供的当前支持范围,请使用自定义数据实用程序。定义组件配置时,请将属性的 "Need" 特性的值设置为计算值时需要提取的属性列表。
示例:
attributeConfig.setNeed("name, number, creator");
提供备用 UI 行为
您仅在特定情况下需要自定义局部属性 (例如已将数据实用程序映射到的名称) 的呈现。由于属性 id 已映射到数据实用程序,因此使用相同的属性 id 添加另一个映射将无法按预期执行。有关其他信息,请参阅数据实用程序
解决方案元素
元素
说明
数据实用程序 ID
“类型和属性管理”实用程序或组件构建器中定义的特性。有关详细信息,请参阅本主题中“配置点”部分中的“数据实用程序 Id”。
Need 特性
“类型和属性管理”实用程序中定义的特性。有关详细信息,请参阅本主题中“配置点”部分中的 "Need"。
“目标对象”特性
“类型和属性管理”实用程序中定义的特性。有关详细信息,请参阅本主题中“配置点”部分中的“目标对象”。
预期结果
可从默认值以外的属性中提取属性的数据。
解决方案
下面列出了实现不同行为所需的解决方案元素的组合:
如果您希望...
配置
使用自定义数据实用程序仅为特定 UI 的范围呈现属性,而且已将数据实用程序映射到该属性,并且 UI 为下列项之一:
使用“类型和属性管理”实用程序或构建器类定义的属性面板
使用“类型和属性管理”实用程序或构建器类定义的表格
示例:
要使用名为 MyNumberDataUtility 的自定义数据实用程序呈现编号
1. 定义您的自定义数据实用程序 (MyNumberDataUtility)
2. 在 xconf 文件中,将自定义数据实用程序映射到自定义属性 id (myNumber)。有关详细信息,请参阅本主题中的“将数据实用程序映射到属性 ID”部分。
3. 将该属性的“数据实用程序 Id”特性设置为 myNumber
使用现有数据实用程序在呈现属性的所有 UI 中呈现该属性
在 xconf 文件中,将自定义数据实用程序映射到自定义属性 id (myNumber)
在特定 UI 中,使用现有数据实用程序呈现属性;现有 DU 可能已经映射到一个或多个属性
要使用名为 MyNumberDataUtility 的自定义数据实用程序来呈现 myNumber
1. 定义您的自定义数据实用程序 (MyNumberDataUtility)
2. 在 xconf 文件中,将自定义数据实用程序映射到自定义属性 id (myNumber)
3. 将该属性的“数据实用程序 Id”特性设置为 myNumber
为同一表格中的多个对象呈现相同的属性
列 id 必须唯一,因此需要使用目标对象和数据实用程序 Id 特性来完成此操作。例如,表格可以包含 3 列,这些列都可以呈现名称属性,但属性对应于 3 个不同对象:
1. 将所有三个属性添加到属性面板或表格定义中
2. 对于属于非支持对象的属性,请将“数据实用程序 Id”特性的值设置为 "name",并将“目标对象”设置为表示对象的属性。
示例:
要以与支持对象的名称属性的显示方式相同的方式显示 roleAObject 和 roleBObject 的名称属性,请按如下方式设置特性:
对于 roleAName
数据实用程序 Id = name
目标对象 = roleAObject
对于 roleBName
数据实用程序 Id = name
目标对象 = roleBObject
为不同对象类型的同一属性 id 指定不同的呈现器
示例:
文档状态属性的呈现方式与部件状态属性不同。
基础结构当前不支持对数据实用程序进行基于类型的查找。如果需要此类型的行为,并且您的 UI 显示相同类型的对象,则使用数据实用程序 Id 特性来完成此操作。在显示多个类型的对象的 UI (类似于文件夹页面) 上,您可以使用自定义数据实用程序,并在该自定义数据实用程序中执行基于类型的检查。
公用 Windchill 业务属性的自定义
某些 Windchill 属性需要遵守特定 Windchill 标准和规则。预置提供此行为。其中的某些行为是可自定义行为。本节列出了其中一些标准 Windchill 属性及其配置点。
编号
将编号呈现为对象信息页面的链接
用例:我想要将编号属性呈现为对象信息页面的超链接。
可使用“是信息页面链接”特性启用/禁用此行为。有关详细信息,请参阅本主题中的“配置点”部分。
使编号值由服务器生成/由服务器预生成/不可变
可使用对象初始化规则自定义编号的预设行为。
下面列出了实现编号的不同类型行为所需的对象初始化规则的组合:
如果您希望...
您需要配置 OIR,如下所示...
创建向导将如下所示的 UI...
请始终使用服务器生成的值,而不允许用户输入值。
<Value algorithm="com.ptc.core.rule.server.impl.GetImmutableConstraint"/><Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>
请始终使用在对象初始化规则中配置的预生成值,并在 UI 中显示此值,并且不允许用户修改此值。
<Value algorithm="com.ptc.core.rule.server.impl.GetImmutableConstraint"/><Value algorithm="com.ptc.core.rule.server.impl.GetServerPreGeneratedValue"/>
不可覆盖的预生成值
使用在对象初始化规则中定义的预生成值,并在 UI 中显示此值,以希望允许用户修改此值。
<Value algorithm="com.ptc.core.rule.server.impl.GetServerPreGeneratedValue"/>
可覆盖的预生成值。
始终要求用户提供值
如果没有为编号定义其他 OIR 约束,则需要空约束列表来按预期工作。
<AttrConstraint id="number"
algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints"/>
允许用户输入值,并且如果用户未提供某个值,则会在服务器上自动生成值。
<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>
* 
如果上述配置不会产生以上列出的结果,请检查这些其他配置的以下值,这些值也会影响创建或编辑 UI 中编号的可编辑性:
模型化属性的 changeable 特性约束。有关详细信息,请参阅业务对象建模
“类型和属性管理”实用程序的可见性设置。有关详细信息,请参阅“可见性”选项卡
“类型和属性管理”实用程序的可见性设置。有关详细信息,请参阅“‘可见性’选项卡”联机帮助主题。
名称
将名称呈现为对象信息页面的链接
可使用“是信息页面链接”特性启用/禁用此行为。有关详细信息,请参阅本主题中的“配置点”部分。
使名称值由服务器生成/由服务器预生成/不可变
用于编号的相同自定义方法可用于名称,以使其由服务器生成/由服务器预生成/不可变。实现名称的不同类型行为所需的对象初始化规则与本主题中“编号”部分中“使编号值由服务器生成/由服务器预生成/不可变”部分中列出的对应于编号的对象初始化规则相同。
对名称属性的枚举约束的内置支持
Windchill 版本 10.1 开始,文档、部件和 EPM 文档类型的名称属性现在对枚举约束 (静态和动态) 具有内置支持功能。请记住,每个枚举条目同时具有内部值和显示值。显示值可本地化为多种语言。
此新的支持功能允许客户轻松地限制名称属性的允许值,还允许用户查看已保存/保留名称的本地化值,具体取决于其当前区域设置。
如果已激活此功能,并且还针对任一类型的名称属性配置了枚举约束 (实际上,约束必须应用于这些 ___主数据类型),则在创建或编辑向导中,名称属性将显示为带有在枚举中指定的条目 (可能已本地化) 的组合框。在仅显示表格和信息页面中,名称属性将以已保存枚举条目的“显示”值显示。
应用于“名称”属性的枚举约束示例 (请注意,"_EN" 后缀已手动添加到用于测试的显示值中)
要激活对名称属性的枚举约束的支持功能,必须将以下特性添加到 site.xconf 中,然后必须从 windchill shell 运行 "xconfmanager –Fp" (然后必须重新启动 Windchill):<Property name="com.ptc.EnableEnumeratedName" overridable="true" targetFile="codebase/wt.properties" value="true"/>
完成此操作后,启动类型和属性管理实用程序 (从“实用程序”页面),然后从树中选择以下类型之一:文档主数据、部件主数据或 EPM 文档主数据,然后选择“名称”属性,进入“编辑”模式,添加新的枚举约束 (静态或动态),然后编辑枚举 (对于静态,添加条目;对于动态,设置提供程序和初始化字符串),然后保存更改。(有关详细信息,请参阅“类型和属性管理”文档。)
请注意,如果设置了 "com.ptc.EnableEnumeratedName" 特性,则在保存名称属性 (通过创建向导) 时,系统会将枚举条目的内部值 (而不是条目的显示值) 保存到数据库中。当名称属性在“视图”模式 (例如表格或信息页面) 中显示时,(本地化) 显示名称将从枚举中引用并显示在 UI 中。这允许使用不同区域设置的不同用户查看名称属性的不同本地化值。
但是,这也意味着,如果 "com.ptc.EnableEnumeratedName" 特性设置为 false (或已移除),或者枚举约束已禁用或删除,则内部值将显示在查看模式中。请记住该功能的这一方面信息。
位置
位置属性的 UI 行为可使用对象初始化规则进行自定义 (有关详细信息,请参阅关于对象初始化规则)。以下列出了实现位置的不同类型行为所需的对象初始化规则的组合:
如果您希望...
您需要配置 OIR,如下所示...
创建向导将如下所示的 UI...
始终使用“已分配服务器”文件夹,并且不允许用户指定文件夹。
<Value algorithm="com.ptc.core.rule.server.impl.GetImmutableConstraint"/><Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>
始终使用通过对象初始化规则定义的预生成文件夹,并在 UI 中显示此值,而且不允许用户修改此值。
<Value algorithm="com.ptc.core.rule.server.impl.GetImmutableConstraint"/><Value algorithm="com.ptc.core.rule.server.impl.GetServerPreGeneratedValue"/>
允许用户手动选择文件夹,并将启动上下文文件夹显示为默认值。
如果没有为位置定义其他 OIR 约束,则需要空约束列表来按预期工作。
<AttrConstraint id="folder.id" algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints"/>
字段将使用启动上下文中的文件夹进行填充。
向用户提供以下选项
使用通过对象初始化规则定义的预生成文件夹,或
手动选择文件夹;将启动上下文文件夹显示为默认值。
预先选择启动上下文文件夹作为默认选项。
<Value algorithm="com.ptc.core.rule.server.impl.GetServerPreGeneratedValue"/>
自动选择文件夹的值是使用对象初始化规则定义的预生成值。
向用户提供以下选项
使用在对象初始化规则中定义的预生成文件夹,或
手动选择文件夹。将启动上下文文件夹显示为默认值
预先选择预生成文件夹作为默认选项。
<Value algorithm="com.ptc.core.rule.server.impl.GetServerPreGeneratedValue"/><Value algorithm="com.ptc.core.rule.server.impl.GetRendererConstraint"><Arg>SelectGeneratedFolderByDefault</Arg></Value>
自动选择文件夹的值是在对象初始化规则中定义的预生成值。
向用户提供以下选项
使用“已分配服务器”文件夹或
手动选择文件夹;将启动上下文文件夹显示为默认值。
预先选择启动上下文文件夹作为默认选项。
<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>
向用户提供以下选项
使用“已分配服务器”文件夹或
手动选择文件夹;将启动上下文文件夹显示为默认值。
预先选择已分配服务器文件夹作为默认选项。
<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/><Value algorithm="com.ptc.core.rule.server.impl.GetRendererConstraint"><Arg>SelectGeneratedFolderByDefault</Arg></Value>
承担者属性
1. 将承担者呈现为承担者信息页面的链接
通过使用“是信息页面链接”特性可启用/禁用此行为 (有关详细信息,请参阅本主题中的“配置点”部分)。
修订版本
可以配置修订版本属性以区分已检出的原始副本和工作副本。可通过设置“区分 WIP 版本”特性来完成此操作 (有关详细信息,请参阅本主题中的“配置点”)。
生命周期状态
可以将生命周期状态属性配置为呈现所有生命周期状态,而不是仅显示当前状态。可通过设置“是呈现所有状态”特性来配置此属性 (有关详细信息,请参阅本主题中的“配置点”)。
* 
仅当在表格上或在 com.ptc.core.ui.resources.ComponentType 为 SIMPLE 的组件上显示属性时,才会应用此配置。
UI 行为
Is Render All States 设置为 true 时:
Is Render All States 设置为 false 时:
数据实用程序
数据实用程序为 java 类,可用于使用可用配置点无法完成的自定义。
数据实用程序可用于获取属性的数据和元数据,并创建将用于在 UI 中呈现属性的 UI 组件。如果核心 API 返回的数据不足以创建 UI 组件,则可以使用数据实用程序来通过附加信息增强此数据。附加信息可以通过附加查询、服务调用或可通过 Java 代码获取的任何其他内容来获取。
数据实用程序的预置实现根据 Windchill UI 标准提供为 Windchill 预置应用程序定义的行为。
您可以为任何属性 id 配置数据实用程序。
创建数据实用程序
创建新的数据实用程序包含以下步骤:
创建数据实用程序 (Java) 类
将数据实用程序类映射到 XCONF 文件中的属性 id
创建数据实用程序类
通过实现 com.ptc.core.components.descriptor.DataUtility 接口来创建数据实用程序。
由于使用应用程序上下文查找数据实用程序,因此您的实现类必须为公共类,并且必须具有公共的无参数构造函数。
强烈建议您在实现新的数据实用程序时扩展 AbstractDataUtility 基类。
如果需要补充属性值或更改属性的呈现方式,则应考虑扩展现有数据实用程序 (如果适用)。使用可用的属性报告或 JcaDebug 来查找当前映射到属性的数据实用程序。有关详细信息,请参阅可用属性报告使用 jcaDebug
1. 实现 DataUtility 接口的 getDataValue() 方法:
getDataValue() 方法可获取应针对给定属性放置在 UI 中的内容。
示例:
假设您想要将特定字符串属性的值附加到一些额外的文本中。可按以下方式完成此操作:
Object getDataValue(String component_id, Object datum, ModelContext mc)
throws WTException {
…..
…..
String rawVal = myObject.get(component_id);
String displayVal = rawVal + “My extra text”;
TextDisplayComponent gui = new TextDisplayComponent(…);
gui.setValue(displayVal);


return gui;
}
* 
避免使用 getDataValue() 进行数据库调用,原因在于在处理表格时,将针对列中的每个单元格调用一次方法。如果必须执行这些操作,请尝试使用 setModelData() (每列调用一次),并缓存结果,以便不必经常调用数据库。
2. 实现 DataUtility 接口的 setModelData() 方法:
在性能方面,我们想要处理在一次调用 setModelData() 时显示的所有对象,并同时对所有对象执行所需的数据库查询,而不是为每个对象生成单独的查询。
当需要提取多个对象时,对于需要提取多个行对象的表格,setModelData() 方法允许数据实用程序预取要呈现的所有行对象的数据。在针对任何行/单元格调用 getDataValue() 之前调用此方法,并为其提供将处理的所有对象的列表。
您可以利用此调用执行某些多对象查询并保存结果,以便以后在 getDataValue() 方法中进行使用。如果实现了此方法,则必须将数据实用程序配置为有状态项。
有关保留用户输入值的指导原则
对于级联属性规则中使用的属性,根据其在此规则中所起的作用,将其称为驱动属性或受驱动属性。当处于“创建”或“编辑”模式下的某个组件显示此类属性时,驱动程序属性值的更改会触发对所有相关受驱动属性值的重估,如适用的级联属性规则所示。在此过程中,必须为所有不受修改的驱动程序属性驱动的属性保留用户输入的值。要实现此目的,请确保满足以下所有条件:
组件处于“创建”或“编辑”模式。
自定义数据实用程序适用于此组件上显示的属性。
此属性不参与任何级联属性规则。
组件支持级联属性规则。
组件显示一个或多个参与级联属性规则的属性。
解决方案元素
元素
类型
说明
com.ptc.core.components.forms.AttributePropertyProcessorHelper
Java 类
提供帮助程序 API,协助创作自定义数据实用程序,以保留用户输入的值。有关详细信息,请参阅 Windchill Javadoc。
示例
下表显示了参考数据实用程序,这些实用程序可通过利用 AttributePropertyProcessorHelper 中的 API 来保留用户输入的值。源代码位于 <WT_HOME>/srclib/wnc/Carambola.jar 中。
数据实用程序
属性数据类型
CarambolaAttributeBooleanDataUtility
布尔型
CarambolaAttributeDateDataUtility
日期和时间
CarambolaAttributeHyperlinkDataUtility
URL
CarambolaAttributeRealNumberDataUtility
实数
CarambolaAttributeRealNumberWithUnitsDataUtility
带单位的实数
CarambolaAttributeStringDataUtility
字符串
CustomCarambolaAttributeStringDataUtility
列名称为非标准名称的字符串
CarambolaAttributeStringMultiValueDataUtility
支持多个值的字符串
访问和查看示例 UI
要访问用于在 carambola 中针对“创建”和“编辑”模式呈现这些示例的 UI,可以执行以下步骤。对于“创建”模式,请执行以下步骤:
1. 在导航窗格中,单击“自定义” > Component Catalog,然后选择 "Wizard" 组件。
2. Examples 部分中,选择“创建相同类型的多个对象”
3. My Custom Wiz Step 选项卡中,针对“类型”选择 "Poem"。
4. 添加一行,然后选择“编辑”
向导在“创建”模式下打开,其中包含 Non-Cascading Attr Group 下的属性 (映射到自定义数据实用程序)。
对于“编辑”模式,请执行以下步骤:
1. 在导航窗格中,单击“自定义” > Component Catalog,然后选择 "Wizard" 组件。
2. Examples 部分中,选择 Basic Edit Wizard
向导在“编辑”模式下打开,其中包含 Non-Cascading Attr Group 下的属性 (映射到自定义数据实用程序)。
将数据实用程序映射到属性 ID
将应用程序上下文条目添加到 xconf 文件中,如下所示:
<Service name="com.ptc.core.components.descriptor.DataUtility">
<Option serviceClass="com.ptc.core.components.factory.
dataUtilities.ProjectDataUtility"
requestor="java.lang.Object"
selector="projectHealthStatus"
cardinality="singleton"/>
</Service>
<Service name="com.ptc.core.components.descriptor.DataUtility">
<Option serviceClass="com.ptc.core.components.factory.dataUtilities.
FolderedDataUtility"
requestor="java.lang.Object"
selector="location"
cardinality="duplicate"/>
</Service>
有关基数的注解:
最安全的办法是使用 "duplicate" 基数。每次请求数据实用程序时,该项都会创建一个新实例。
可将数据实用程序配置条目添加到任何最终由应用程序上下文读入的 xconf 文件 (任何 "service.properties" 类型文件) 中。常规约定是使用名为 someprefix.dataUtilities.properties.xconf 的文件。
调用 setModelData() 时,将为数据实用程序提供一组对象,JCA 基础结构稍后将请求合适值,以针对每个对象将该值显示在表格中;数据实用程序有机会确定这些值并对其进行缓存以供日后检索。JCA 基础结构稍后将调用 getDataValue() 方法,以获取给定对象的特定表格单元格值,数据实用程序可从其先前计算的缓存中对这些值进行检索。
如何查找属性 ID
在 java 代码中创建属性配置时,必须指定属性的 id。
对于 Typed 和 TypeManaged 对象,id 应为“类型和属性管理”实用程序中针对属性显示的内部名称。对于其他对象,可在以下源中找到名称。在使用这些报告时,必须键入完全限定的类型名称,其中包括完整包 - 例如,"wt.part.WTPart"。
逻辑属性报告
可通过导航至“自定义”->“工具”->“逻辑属性报告”来查看此项。
对于 TypeManaged 类,此报告包括:
1. 在 LogicalAttributes.xml 文件中定义的别名属性 (请注意:这不再是推荐的做法。使用“类型和属性管理”实用程序来定义别名属性。)
2. 不可变 (带注释) 属性 (除非被上述属性覆盖)。
3. “类型和属性管理”实用程序中定义的属性 (除非被别名属性覆盖)。
对于非 TypeManaged 类,此报告包括:
1. 在 LogicalAttributes.xml 文件中定义的别名属性
2. 不可变 (带注释的属性) (除非被别名属性覆盖)。
在 AttributeConfigs 和 describeProperty 标记中,将此文件中的名称的逻辑形式作为属性 id 使用。请注意,并非所有列出的属性都可以在 UI 中使用。能够为属性创建 gui 组件的数据实用程序在显示之前必须可用。
可用属性报告
可通过导航至“自定义”->“工具”->“可用属性报告”来查看此项。
此报告列出了可包括在表格视图中的属性。使用 JCA ID 列中的名称,可将此列表中的任何属性包括在属性面板中。
特性报告
可通过导航至“自定义”->“工具”->“特性报告”来查看此项。
这是一个复合报告,其中包括类型的不可变属性、在逻辑属性报告中列出的逻辑属性以及在可用属性报告中列出的表格视图属性。可单击每个属性以显示与其有关的其他信息,其中包括为其注册的数据实用程序 (如果有)。请注意,DefaultDataUtility 将处理许多未列出特定数据实用程序的属性。
并非此报告中的所有属性都可以在属性面板中进行查看。特别是,计算属性通常不能在 UI 中使用。
配置点
注意事项
“类型和属性管理”实用程序属性定义:使用属性信息页面进行设置。该配置适用于所有客户端中的特定属性。
“类型和属性管理”实用程序属性面板布局定义:使用“类型和属性管理”实用程序中属性的编辑组属性特性窗口进行设置。只能用于属性面板,原因在于范围仅限于特定面板。
也可使用 ComponentConfig 构建器进行设置,该构建器可用于自定义属性面板或表格的属性。配置仅适用于特定 UI 中的特定属性。
特性名称
适用的属性数据类型
说明
首选项
(配置适用于所有客户端中的所有属性)
类型和属性管理实用程序属性定义
类型和属性管理实用程序属性面板布局定义
默认值显示模式
所有数据类型
配置如何在属性的输入字段中填充默认值 (如果存在)。
默认值为“预先填充”。
可能的值:
“无”- 默认值不用于填充输入字段
“预先填充”- 将在输入字段中设置默认值 (如果已设置)
“按钮”- 输入字段后将显示按钮,用户可单击该按钮将默认值添加到输入字段中。
在属性处理类别中作为站点级别首选项提供。
如果未指定,则将使用“默认值显示模式”首选项的值。
如果未指定,则将使用属性定义中此特性的值 (如果已指定)。否则,将使用首选项的值。
setDefaultValueDisplayMode()
选择列表 UI 样式
已定义合法值列表约束或枚举值列表约束的所有属性。
指定在为数据条目提供属性时,是否应将属性的合法值 (选项列表) 显示为下拉列表或一组单选按钮。
默认值为“下拉列表”。
可能的值:
“下拉列表”- 值将呈现在下拉列表中,用户可从中选择一个选项
“单选按钮”- 值将呈现为一组单选按钮,用户可从中选择一个选项
可作为站点级别首选项提供。
请注意:适用于所有属性 (布尔型属性除外)。在此级别,布尔型属性的样式由首选项布尔型样式控制。
如果未指定,则将使用“选项列表样式”首选项的值。
如果未指定,则将使用属性定义中此特性的值 (如果已指定)。否则,将使用首选项的值。
setSelectionListStyle()
布尔型样式
布尔型
控制如何为输入显示布尔属性 (采用单选按钮或下拉列表形式)。
默认值为“单选按钮”。
可能的值:
“下拉列表”- 值将呈现在下拉列表中,用户可从中选择一个选项
“单选按钮”- 值将呈现为一组单选按钮,用户可从中选择一个选项
可作为站点级别首选项提供。
使用“选项列表样式”特性来针对特定属性覆盖此首选项的值。
如果未指定,则将使用“布尔型样式”首选项的值。
如果未指定,则将使用属性定义中的“选项列表样式”特性的值 (如果已指定)。否则,将使用首选项的值。
setSelectionListStyle()
多行输入的字符串长度阈值
字符串
指定用于呈现字符串属性的多行输入字段的阈值。该值可以是任意正数。如果属性的最大长度超过此值,则会为数据条目显示多行输入字段。
默认值为 60。
可作为站点级别首选项提供。
如果未指定,则将使用“多行输入的字符串长度阈值”首选项的值。
如果未指定,则将使用属性定义中此特性的值 (如果已指定)。否则,将使用首选项的值。
setStringLengthThreshholdForMultilineInput()
输入字段类型
字符串
指定属性的输入字段应采用单行形式还是多行形式。此指令将覆盖 stringLengthThresholdForMultilineInput 的指令。
可能的值:
“单行”- 为该属性呈现文本框
“多行”- 为该属性呈现文本区域。
在此级别不可用
如果未指定,则不会为此特性分配默认值。
如果未指定,则将使用属性定义中此特性的值 (如果已指定)。
setInputFieldType()
日期输入字段类型
日期
指定时间戳属性的输入字段的类型是“仅日期”还是“日期和时间”,以便可以相应地创建 UI 组件。
默认值为“仅日期”。
可能的值:
“仅日期”- 使用户只能够设置日期部分。
“日期和时间”- 使用户能够同时设置日期部分和时间部分。
在此级别不可用。
如果未指定类型,将使用默认值。
如果未指定类型,则将使用属性定义中此特性的值 (如果已指定)。否则,将使用默认值。
setDateInputFieldType()
日期显示格式
日期
在查看模式下显示此属性的值时使用的日期格式字符串 (即 yyyy-mm-dd)。这不会影响在输入模式下设置值时所使用的格式。
有关完整有效字符集的信息,请参阅 Java 类 java.text.SimpleDateFormat。
如果未设置,将在 rbInfo 文件 componentRB 中使用以下格式之一:
STANDARD_DATE_DISPLAY_FORMAT - 如果“日期输入字段类型”特性的值设置为“仅日期”,将使用该格式。
STANDARD_DATE_TIME_ZONE_DISPLAY_FORMAT - 如果未设置“日期输入字段类型”特性的值,或者将其设置为“日期和时间”,将使用该格式。
在此级别不可用。
如果未指定类型,将使用默认值。
如果未指定类型,则将使用属性定义中此特性的值 (如果已指定)。否则,将使用默认值。
setDateDisplayFormat()
本地时区
日期
指定用于显示日期和时间部分 (即 yyyy-MM-dd hh:mm zzz) 的日期属性所使用的时区。仅在查看模式下使用;不用于输入模式。
可作为用户级别首选项提供
在此级别不可用。
在此级别不可用。
测量系统
带单位的实数
指定要用于带单位的实数的测量系统。
可作为用户级别首选项提供
在此级别不可用。
在此级别不可用。
创建超链接
(在 9.x 中,这称为忽略字符串中的 URL 值)
字符串
指定是否应在查看模式下将嵌入在字符串属性值中的 URL 样式文本显示为超链接 (例如:http://www.ptc.com)。
默认值为 "true"。
可作为站点级别首选项提供
请注意:从 9.x 升级到 10.0 时,如果使用 AllClient.xml 文件自定义此特性,则需要进行手动迁移。
如果未指定,则将使用“创建超链接”首选项的值。
在此级别不可用。
百分比
数字
指定是否将数值显示为百分比。此特性仅在查看模式中使用。指定时,所使用的符号将是特定于区域设置的。
默认为 false。
在此级别不可用。
如果未指定类型,将使用默认值。
如果未指定类型,则将使用属性定义中此特性的值 (如果已指定)。否则,将使用默认值。
setPercent()
货币
数字
指定是否将数值显示为货币值。此特性仅在查看模式中使用。指定时,所使用的符号将是特定于区域设置的。
默认为 false。
在此级别不可用。
如果未指定类型,将使用默认值。
如果未指定类型,则将使用属性定义中此特性的值 (如果已指定)。否则,将使用默认值。
setCurrency()
必需的输入
全部
用于将属性标记为“必填字段”,即使它们可能没有“必需的”约束,也会进行标记。此特性仅用于 UI 呈现。
与“必需的约束”不同,此特性不会触发任何服务器端验证。
请注意:如果使用此特性将具有“必需的约束”的属性标记为 "not required",除非服务器端代码以一些其他方式设置属性的值,否则将抛出服务器端异常。
此特性最常见的用法是强制用户提供未定义“必需的约束”的属性的值。
在此级别不可用。
不可用
如果未指定类型,将使用默认值。
setInputRequired()
是信息页面链接
仅限“名称”、
“编号”和承担者属性
指定是否将属性显示为指向信息页面的超链接。承担者属性将显示为指向承担者信息页面的链接。
如果未指定,则使用以下默认值:
"true" 对应于编号和容器名称
"false" 对应于所有其他属性
在此级别不可用。
在此级别不可用。
如果未指定类型,将使用默认值。
setInfoPageLink()
多值属性的分隔符
指定在显示具有多个值的属性的值时用作分隔符的字符。这仅适用于全局属性,原因在于全局属性属于唯一具有多个已分配值的属性类型。默认值为逗号,后跟一个空格。
可作为站点级别首选项提供
在此级别不可用。
不可用
文本输入列
整数值,用于指定在创建或编辑模式下呈现文本区域的宽度。这仅适用于字符串属性,并且仅在“输入字段类型”特性设置为“多行”时才使用
在此级别不可用。
在此级别不可用。
如果未指定,则宽度默认为 Windchill UI 标准和属性的字符串长度约束指定的值。
文本输入行
整数值,用于指定在创建或编辑模式下呈现文本区域的高度。这仅适用于字符串属性,并且仅在基于“多行输入的字符串长度阈值”和“输入字段类型”特性需要多行输入字段时才使用。
在此级别不可用。
在此级别不可用。
如果未指定,则行数取决于字符串长度约束和列的宽度。最大行数限制为 3。当输入超过 3 行时,将添加滚动条。
setTextInputRows()
包括空白选项
指定是否应将空白选项添加为下拉列表 (显示属性的合法值列表) 的第一个条目。
当合法值显示为一组单选按钮时,会将标签为“未定义”的按钮添加为列表中的第一个按钮。
默认值为 true。
在此级别不可用。
在此级别不可用。
如果未指定值,则该值默认为 true。
setIncludeBlankOption()
isRenderAllStates
仅生命周期状态属性
指定是否呈现所有生命周期状态,而非仅呈现当前状态。
请注意:此属性适用于组件类型为 SIMPLE 或 TABLE 的组件。
默认值为 false。
在此级别不可用。
在此级别不可用。
如果未指定值,则该值默认为 false。
setRenderAllStates()
区分 WIP 版本
仅修订版本属性
指定是否区分已检出的原始和工作副本。
在此级别不可用。
在此级别不可用。
如果未指定值,则该值默认为 false。
setDistinguishWIPVersions()
字符条目限制
指定可在 UI 中为字符串属性输入的最大字符数。
在此级别不可用。
在此级别不可用。
setCharacterEntryLimit()
数据实用程序 ID
用于数据实用程序查找的 id。如果未指定值,则使用描述符 id 进行查找。
在此级别不可用。
在此级别不可用。
setDataUtilityId()
需要
创建某列单元格的显示值所需的对象属性的逻辑名称。
当特性/列 id 不是由自省或逻辑属性定义的属性名称时,数据实用程序将使用它来检索单元格值。如果需要多个属性,请使用以逗号分隔的列表。
在此级别不可用。
在此级别不可用。
setNeed()
目标对象
Windchill 客户端体系结构基础结构处理此列时要使用的目标对象。通过配置 targetObject 特性,开发人员可告知基础结构使用从基础 api 返回的支持行对象获得的备用行对象。
在此级别不可用。
在此级别不可用。
ComponentConfig.setTargetObject()
标签
用于设置属性的标签
在此级别不可用。
针对属性定义使用显示名称。
setLabel()
模式
显示属性时所采用的模式。有 3 种可用模式:创建、编辑和查看
在此级别不可用。
在此级别不可用。
setMode()
限制
通过使用 OIR/提供输入组件来定义参考属性的离散集
在 OIR 而不是类型管理器中为 TeamTemplate 和生命周期模板属性定义预置离散集。这是因为这些属性为参考属性。
目前,我们不具有在输入模式下显示参考属性的基础结构支持。如果需要启用此功能,我们需要将每个参考属性映射到选取器。如果客户提出了此支持的请求,我们可以尝试用于 TeamTemplate 的 OIR 方法,而“生命周期模板”属性将适用于这种情况。
编写属性自定义时要添加的项目清单
配置点
多个配置的影响 - 优先性、解析方法
层次
重复 (处于相同级别和范围时)
UI 行为
确认
在 UI 中
在服务器上
具有用于收集多个值的公式的计算属性在没有 DataUtility 的情况下可能无法工作
由于某些属性是通过 dataUtility 生成的,它们的值可能无法自动添加到计算属性 (公式调用要使用的值) 中。在这种情况下,新属性也需要 dataUtility,您可以在其中正确地将值放置在一起
这对您有帮助吗?