自定义详细信息
 
生成报告后,有多种方法可用于自定义报告的各个方面:
自定义宏
自定义查询构建器类型
对于使用自定义输入页面的报告,支持执行其他自定义:
自定义报告输出格式
自定义报告生成客户端
自定义报告生成 URL
自定义宏
自定义宏时使用标准 Windchill 应用程序服务委派机制。此自定义示例会创建一个新宏,以自动计算截断时间。
1. 执行以下步骤,以创建一个用于实现 MacroExpressionProcessor 接口的类:
a. 创建一个新包或使用现有包。对此包进行命名,例如 myPackage。
b. 创建一个新类,并从 wt.query.report 包中的 MacroExpressionProcessor 接口继承。对此类进行命令,例如 TimeCutoffMacroProcessor。
c. 对此类进行编译。
d. 填充 buildExpression() 方法的实现。此实现会读取当前系统时间 (以毫秒为单位),计算新时间,并创建新日期。日期值以 wt.query.DateExpression 的形式返回。这是必需的,鉴于日期和时区设置的 Java 表示,在 SQL 表达式中对日期进行了特殊处理。
public class TimeCutOffMacroProcessor implements MacroExpressionProcessor {
@Override
public ColumnExpression buildExpression( Element a_element, Map a_parameterMap ) throws QMLException
{
final int DAYS=3;
long currentSeconds= (System.currentTimeMillis()/1000);
long timeSeconds= currentSeconds - (60*60*24*DAYS);
java.util.Date time= new java.util.Date(timeSeconds * 1000);
return (ColumnExpression) DateExpression.newExpression(time, Timestamp.class.getName());
}

@Override
public Object getValue()throws WTException{
final int DAYS=3;
long currentSeconds= (System.currentTimeMillis()/1000);
long timeSeconds= currentSeconds - (60*60*24*DAYS);
java.util.Date time= new java.util.Date(timeSeconds * 1000);
return time;
}
}
e. 填充 getValue() 方法的实现。此值为上一步中计算所得的实际日期值。如果将宏指定为默认值,则将调用此方法来填充“报告构建器”输入字段。
2. 为宏创建逻辑名称并将其映射到实现类。例如,对于逻辑名称 "TIME_CUTOFF" 和类 "myPackage.TimeCutoffMacroExpressionProcessor",条目将如下所示:
wt.services/svc/default/wt.query.report.MacroExpressionProcessor/
TIME_CUTOFF/java.lang.Object/0=myPackage.TimeCutoffMacroProcessor/singleton
dbservice.properties.xconf 中存在的预设条目为:
<Service context="default" name="wt.query.report.MacroExpressionProcessor">
<Option cardinality="singleton" requestor="java.lang.Object"
selector="CURRENT_TIME" serviceClass= "wt.query.report.CurrentTimeMacroProcessor"/>
<Option cardinality="singleton" requestor="java.lang.Object"
selector="CURRENT_USER_NAME" serviceClass= "wt.query.report.UserNameMacroProcessor"/>
<Option cardinality="singleton" requestor="java.lang.Object"
selector="TIME_CUT_OFF" serviceClass="ext.mypkg.TimeCutOffMacroProcessor"/>
</Service>
3. 执行以下步骤,以创建一个使用新宏的新报告查询:
a. 打开现有的 Foldered 查询并将其另存为新查询,例如 FolderedModified。
b. 根据文件柜名称移除条件。
c. 添加条件。在“条件”选项卡中,设置以下值,如下表所示:
字段
Class
Foldered
Attribute
thePersistInfo.modifyStamp
Operator
>
Value
TIME CUTOFF
现可通过“查询构建器”“条件”选项卡访问 TIME_CUTOFF 宏,以将其用于报告中。
d. 保存查询。
4. 执行报告。
对于在条件或默认值中使用宏的报告,查询构建器会在运行时计算宏,并在报告生成窗口的“条件”窗格中显示结果值。也可以在“条件”窗格输入字段中使用宏作为输入。宏名称应以 $$ 字符开头和结尾,以将值表示为宏。例如,要在输入字段中使用预设 CURRENT_USER_NAME 宏,需将值输入为 $$CURRENT_USER_NAME$$
自定义查询构建器类型
查询构建器使用对象模型信息来显示要用于构建查询的所有可能类型的列表。它通过搜索所有实现 wt.fc.NetFactor 接口的类型来完成此工作。但是,可能存在未实现 wt.fc.Net.Factor 接口的类,同时也存在实现可持续对象接口的子类,因此可在查询中使用。例如,wt.index.Indexable。为了能够使用这些类型构建查询,可在服务特性文件中将这些类型列为资源。dbservice.properties 中的预设条目用于处理 Indexable 接口,如下所示:
wt.services/rsc/default/wt.query.report.ClassName/
wt.index.Indexable/java.lang.Object/0=wt.index.Indexable
要自定义查询构建器类型列表,可以添加新条目。例如,对于类 myPackage.myClass,条目将如下所示:
wt.services/rsc/default/wt.query.report.ClassName/
myPackage.myClass/java.lang.Object/0= myPackage.myClass
只有当此类未实现 NetFactor 接口,但具有实现可持续对象接口的子类时,才需要这样做。
自定义报告输出格式
* 
使用自定义输入页面的报告支持此自定义。
提供了几种预设报告输出格式。所有这些格式均适用于一般用途。也就是说,这些格式应从任何查询生成合理的输出。如果这些格式均不适用,则可对其进行修改或创建全新的格式。
CSS 自定义
所提供的所有 HTML 报告格式 (派生自 Microsoft Word 的格式除外) 都使用 CSS1 样式表来指定字体、颜色、大小和间距详细信息。使用 CSS1 可将这些详细信息与页面布局的其他方面分开,并放置到一个或多个可重用样式表中。因此,自定义 HTML 报告的这些方面的最简单方法是编辑所使用的 CSS 文件。有关 CSS1 的详细信息,请参阅 W3C CSS1 规范,目前可通过以下 URL 访问:http://www.w3.org/TR/REC-CSS1
* 
如果访问此 URL 有困难,请尝试使用站点 URL www.w3.org。
在此需要用到两个 CSS 文件:htmlFormat4Print.css 和 htmlFormat4Screen.css。两者均位于 <Windchill 代码库>\templates\reports 中。htmlFormat4Print.css 文件用于指定打印时 HTML 的外观,而 htmlFormat4Screen.css 文件用于指定在屏幕上查看时 HTML 的外观。实际上,浏览器并不支持 CSS 的这一方面,因此,打印输出也是由 htmlFormat4Screen.css 控制的。但是,htmlFormat4Print.css 与 htmlFormat4Screen 相较而言,您更喜欢使用前者,因此前者主要用于与其他 Windchill HTML 页面保持一致。
要更改报告所使用的 CSS 样式表,或对输出格式进行更大的更改 (与通过 CSS1 进行的更改相比),必须如下节所述自定义 XSLT 样式表。
XSLT 自定义
如前所述,通过将 XSLT 样式表转换应用于 XML 查询结果来生成报告。其中包括所有预设格式。XSLT 样式表不仅能生成任何 HTML 布局,还能生成任何其他 XML 或文本格式。
XSLT 样式表基于模板和规则的概念。大多数 XSLT 样式表主要是由静态的 XML 或 HTML 标记和文本组成的;即,逐字显示在输出中。这样,样式表的其余部分即由根据输入 XML 计算输出的动态部分的各项规则组成。根据模板和规则的混合,XSLT 自定义的特性可能会因简单的 HTML 编写而异于纯编程。有关 XSLT 的权威性规范,请参阅 W3C XSLT 规范,目前可通过以下 URL 访问:http://www.w3.org/TR/xslt
* 
如果访问此 URL 有困难,请尝试使用站点 URL www.w3.org。
有关 XSLT 的其他信息,请参阅 "What is XSLT?" 链接和 "Resources" 区域,目前可通过以下 URL 访问:http://www.xml.com
* 
如果访问此 URL 有困难,请尝试使用站点 www.xslinfo.com。
提供的样式表
自定义输出格式的一种方法是修改 <Windchill>\codebase\templates\reports\ 中提供的其中一个 XSLT 样式表。这些样式表在下表中进行了详细说明。
* 
Windchill UI 中用于指定 XSLT 样式表的字段中,必须输入相对于 <Windchill>\codebase\ 的文件路径。例如,excel97WebQuery.xsl 必须引用为 "templates/reports/excel97WebQuery.xsl"。
XSLT 样式表
标准格式名称
说明
identity.xsl
XML
对 XML 查询结果执行标识转换;即,它会输出 XML 输入。
csvFormat.xsl
CSV (逗号分隔变量)
生成逗号分隔值格式 (用于读入电子表格等)。
tsvFormat.xsl
TSV (Tab 分隔变量)
生成 Tab 分隔值格式 (用于读入电子表格等)。
simpleHtmlFormat.xsl
HTML
生成简单的 HTML 格式。与所提供的其他 HTML 格式不同,此格式不对数值列进行额外的格式设置。
htmlWithSorting.xsl
HTML (支持排序)
与 simpleHtmlFormat.xsl 类似,不同之处在于通过列标题的超链接进行排序。
htmlWithMerging.xsl
HTML (支持合并)
与 simpleHtmlFormat.xsl 类似,不同之处在于在特定条件下合并垂直方向重复的单元格。与所提供的其他功能相比,此转换过程较为耗时。
sortedHtmlAsXML.xsl
生成的结果与 htmlWithSorting.xsl 相同,不同之处在于输出是格式正确的 XML,而非传统的 HTML,且结果中包含其他非 HTML 属性。这样有助于将更多的 XSLT 转换 (例如,mergeHTMLCells.xsl) 应用于结果。
mergeHTMLCells.xsl
与 htmlWithMerging.xsl 类似,用于合并 HTML (必须是格式正确的 XML) 中的单元格。此外,输入必须具有额外的属性注释。此样式表不可直接用于查询结果 XML。而在将其应用于 sortedHtmlAsXML.xsl 的结果时,整体效果是生成支持排序和合并的 HTML。
msw2000ls.xsl
Microsoft Word 2000 HTML (横向)
生成一个包含 Microsoft Word 2000 元数据的简单 HTML 格式。将结果放到 Microsoft Word 2000 上时,会保留最初指定的边距、表格边框等。此外,对浮点数据列指定小数点制表符。结果具有横向页面方向。
msw2000p.xsl
Microsoft Word 2000 HTML (纵向)
除了结果具有纵向页面方向外,与 msw2000ls.xsl 相同。
xslfo.xsl
PDF
生成 XSL 格式化对象,这是一种基于 XML 的高精度页面布局标准 (请参阅 http://www.w3.org/TR/xsl)。这在标准格式列表中称为 PDF 格式,因为默认情况下会将此格式后处理为动态生成 PDF。这是通过 Apache FOP (请参阅 http://xml.apache.org/fop) 来实现的,具体由以下用户首选项控制:
\wt\query\report\template\postprocmap\application\xslfo+xml
此格式当前受到 FOP 功能的限制 (例如,必须提供列宽度,而无法通过内容计算得出),未来将随着 FOP 功能的不断完善而得到改进。
excel97WebQuery.xsl
生成与 Excel 97 及更高版本兼容的 Excel Web 查询 (.iqy) 格式。此 Excel 格式记录了电子表格数据源自的 URL,并且可定期或按需刷新 URL 中的数据。为了实现 Excel 2000 的最佳使用效果,需在下载时将 Excel Web 查询 (.iqy) 文件的 MIME 类型设置为 application/x-excel-web-query;,此格式随后会自动加载到 Excel 2000 中。而如果使用的是 Excel 97,则必须先保存已下载的文件,然后通过 Excel 97 中的“运行 Web 查询...”命令选择该文件。
excel2000WebQuery.xsl
生成仅与当前受 Windchill 支持的 Excel 版本兼容的 Excel Web 查询 (.iqy) 格式。(有关第三方产品支持、软件兼容性和平台支持的详细信息,请参阅发布日历。)
该样式表在 Excel Web 查询中使用新功能,以尝试保留电子表格中的格式,而不保留 HTML URL 数据源中的格式。
includes/linker.xsl
提供一个 XSLT 模板 generateURLHref,此模板由提供的 HTML 和 XSL FO 格式使用,以从 XML 结果节点生成指向 Windchill 对象的超链接,其中包含在选择整个 Windchill 对象时由查询层提供的其他属性信息。当前支持对象、版本、电子邮件和内容下载链接。
includes/excelWebQueryBase.xsl
excel97WebQuery.xsl 和 excel2000WebQuery.xsl 后台的共享实现。此样式表允许在样式表中包含此实现,以指定生成 HTML 表的 XSLT 样式表的相对 URL。然后,生成的 Excel Web 查询会通过 (再次) 执行报告获取其数据,但需要使用指定的 HTML 表格式。因此,使用此 Web 查询后,可通过更改此 HTML 格式来更改以 Excel 形式显示的数据。目前,excel97WebQuery.xsl 和 excel2000WebQuery.xsl 均使用 simpleHtmlFormat.xsl。
includes/msw2000.xsl
msw2000ls.xsl 和 msw2000p.xsl 后台的共享实现。页面大小、页边距和方向均被指定为输入。此样式表仅用于通过其他样式表实现包含目的。
includes/htmlWithSortingBase.xsl
htmlWithSorting.xsl 和 sortedHtmlAsXML.xsl 后台的共享实现。此样式表仅用于通过其他样式表实现包含目的。
includes/localizeString.xsl
为本地化字符串提供 XSLT 指定模板 (即宏)。此实现使用 XSLT 扩展函数回调到 Java,以访问 Java 资源束。此样式表仅用于通过其他样式表实现包含目的。
includes/urlEncode.xsl
为 URL 编码提供 XSLT 指定模板。此实现使用 XSLT 扩展函数在 Java 中调用 WTURLEncoder.encode。此样式表仅用于通过其他样式表实现包含目的。
由于 XSLT 基于模板这一特性,只能基于对预期输出格式 (如 HTML) 的相关认识对所提供的样式表进行某些修改。例如,所提供的使用 CSS1 样式表的格式可使用 XSLT 样式表中的以下行生成对这些文件的引用:
<link rel="stylesheet" type="text/css"
href="{$windchill}/templates/reports/htmlFormat4Screen.css"
media="screen"/>
<link rel="stylesheet" type="text/css"
href="{$windchill}/templates/reports/htmlFormat4Print.css"
media="print"/>
这些行中唯一不算严格意义上的 HTML 的部分是 { } 大括号所括的部分,虽然这部分与 JavaScript 表达式用法类似,但实际上是 XSLT XPath 表达式。在这种情况下,表达式引用的是变量 windchill,先前已为其分配 Windchill 代码库的 URL。
XML 资源束
所提供的 XSLT 样式表可使用 XML 资源束来本地化文本。并未为每个区域设置生成不同版本的相应 XSLT 样式表,而是将与区域设置相关的文本提取到单独的 XML 文件中。这些 XML 文件即被宽泛地称为 XML 资源束,并根据区域设置通过 XSLT 对这些文件进行检索和搜索。
之所以采用此方法,原因如下:
借助 XSLT 和 HTML 编写所采用的技术、语法和工具,可轻松实现本地化;此即 XML。
令 XSLT 样式表与其本地化数据之间的耦合更加紧密。由于查找 XML 资源束时使用的是相对 URL,因此,可相对于引用它们的 XSLT 文件而非相对于 Windchill 代码库来安装这些资源束。
本地化过程中无需使用 XSLT 扩展函数。
所提供的 XSLT 样式表所使用的 XML 资源束位于 <Windchill 代码库>\templates\reports\defReportRB_*.xml 中。
如果您确定在自己的 XSLT 样式表中使用此方法,请参阅所提供的 XML 资源束以及为用法示例提供的 XSLT 文件。请记住以下事项:
XML 资源束必须是格式正确的 XML。有关详细信息,请参阅 XML.com 中带注释的 XML 规范,目前可通过以下 URL 访问:http://www.xml.com/pub/axml/axmlintro.html
* 
如果访问此 URL 有困难,请尝试使用站点 URL www.xml.com。
不带注释的 W3C XML 规范的原始版本目前可通过以下 URL 访问:http://www.w3.org/TR/REC-xml
* 
如果访问此 URL 有困难,请尝试使用站点 URL www.w3.org。
在 <?xml ...?> 标头中列出的编码应与保存文件时实际使用的标头相匹配,并且应受所使用 XML 解析器 (Xerxes 1.2.2) 的支持。例如,在 Windows NT 上,您可以在记事本中使用“另存为 Unicode”选项,并在 XML 资源束中指定 "unicode" 的编码。
新格式
 
除修改现有 XSLT 外,还可以编写全新的 XSLT 样式表。您可以使用以下步骤编写新样式表:
1. 编写所需输出格式的示例。例如,使用 HTML 编辑器生成所需格式的示例;在 Microsoft Office 中创建一个示例文档,并将其另存为 HTML (之前就是采用这种方式创建了基于 Microsoft Word 的 HTML 格式);或将 Adobe Illustrator 绘图导出为 SVG。
* 
如各种 chart.xsl 样式表中所述使用 Apache Batik (请参阅本章前面“提供的样式表”一节中的表格),由此提供了一种以最少的 XSLT 知识生成 SVG 的替代方法。
2. 将样本输出的静态片段复制到框架 XSLT 样式表中,并根据需要对其进行编辑或转义,以确保它们是格式正确的 XML。(所有 XSLT 都必须是格式正确的 XML。)
3. 参照示例输出,编写 XSLT 以将输入 XML 转换为输出的动态部分。
在步骤 3 中要完成的转换的数量和复杂程度会因格式的不同而发生变化,并且在很大程度上决定了创建新格式所需的工作量。XSLT 提供了广泛的功能,可用于对 XML 数据进行排序、筛选、求和和组合。此外,您还可以提供调用其他语言 (包括 Java 和 JavaScript) 的 XSLT 扩展函数和元素。有关详细信息,请参阅 Saxon 文档。
XML 结果格式
在使用 XSLT (或任何其他方法) 成功检索所需数据时,了解查询结果 XML 格式非常重要。此格式大体如下所示。粗体部分表示动态数据,省略号 (...) 表示省略的项。
<?xml version="1.0" encoding="UTF-8" ?>
<queryResult>
<metadata>
<name>Report Name</name>
<description>Report Description</description>
<objectIdentifier>Report Object Id</objectIdentifier>
<sourceSystem>Windchill Codebase URL</sourceSystem>
<sourceGateway>Windchill Gateway URL</sourceGateway>
<executingPrincipal>
<fullName>User’s Full Name</fullName>
<objectIdentifier>User Object ID</objectIdentifier>
</executingPrincipal>
<timeOfExecution>Time when Executed</timeOfExecution>
<locale>Locale of User</locale>
</metadata>
<auxData>
<dataItem name="requestParam1">value</dataItem>
. . .
<dataItem name="requestParamN">value</dataItem>
</auxData>
</qml>
. . .
</qml>
<actualParameter parameterId="ParamName1"> Value
</actualParameter>
. . .
<actualParameter parameterId="ParamNameN"> Value
</actualParameter>
<result>
<heading tag="column1TagName"
type="Java data type">column header</heading>
. . .
<heading tag="columnNTagName"
type="Java data type">column header</heading>
<row idx="1">
<column1TagName>value</column1TagName>
. . .
<columnNTagName>value</ColumnTagName>
</row>
. . .
<row idx="N">
. . .
</row>
</result>
</queryResult>
如果选择了整个 Windchill 顶级对象 (可持续对象),则会生成列标记元素的其他属性,包括对象 ID、分支 ID (如果对象已版本化) 以及对象的类名称。WTUser 对象还包括电子邮件属性。生成这些属性主要是为了简化超链接的生成。只要存在针对 HTML 和 PDF 格式的预设 XSLT 样式表,这些样式表即会使用这些属性来生成对象的超链接。
通过在列名称中使用 $$ 字符,可以更灵活地生成超链接。如果通过查询构建器指定了包含 $$ 的列名称, 则不会为其创建单个单元格;而是将名称解析为如下形式。如果列名称中 $$ 前面的部分与不包含 $$ 的另一列名称相匹配,则其数据会作为属性添加到另一列中,而这一行为是由此部分后跟 $$ 来决定的。
例如,假定通过查询构建器指定了以下列:
Part
Part$$branchID
Part$$type
这样,每个 XML 行都将包含 Part 元素,如下所示:
<Part branchID="dataFromBranchIdColumn"
type="dataFromTypeColumn">dataFromPartColumn</Part>
行不会包含单独的 Part$$branchID 或 Part$$type 列。此功能可供您选择正确的数据来获取超链接 (如本节前面内容所述),而无需选择整个可持续对象。
如果列类型为 java.util.Date,则根据 HTTP 请求的区域设置对列数据进行格式设置。此外,列元素具有 "value" 属性,其中包含原始 Java 字符串值。如果需要其他日期格式自定义,则可以使用此值。
下表汇总了由查询结果 XML 中的各种顶级元素传递的数据。
元素
说明
metadata
关于从中生成数据的查询的元信息,以及执行查询的用户的元信息。
auxData
使用的请求参数。
qml
完整地定义所执行报告模板查询的详细信息 (有关详细信息,请参阅 <Windchill 代码库>\wt\query\qml\qml.dtd)。
actualParameters
执行查询时使用的查询参数。
result
列标题和类型,以及数据行。
使用 XSLT 样式表作为报告格式
 
要将 XSLT 样式表用作报告格式,必须在报告模板用户界面中指定它,或在生成时使用 HTML 报告生成表单将报告模板的格式指定为“生成时询问”。无论是哪一种情况,都可以使用两种方法来指定格式:自定义和标准。
自定义格式规范是使用最多两个相对或绝对 URL 来实现的。如果 URL 不是绝对 URL,则为相对于 Windchill 代码库的 URL。如果指定了两个 XSLT URL,则会将其顺次应用于报告结果。自定义规范机制允许使用不在 Windchill 服务器上的 XSLT 样式表,以便对新样式表进行测试。该机制还允许顺次应用两个 XSLT 样式表,而这一点是通过标准格式机制无法实现的。
标准格式规范是通过从列表中选择一个 XSLT 样式表来实现的。所提供的大多数 XSLT 样式表均包含在此列表中。可通过编辑 dbservice.properties 将其他格式添加到此列表中。这些特性条目的开头均为 wt.services\rsc\default\wt.query.report.DefaultXSL。
如果要将现有格式替换为自定义格式,则此格式类型可能存在附加特性条目,用以覆盖 XSL。此特性以 wt.services/svc/default/com.ptc.core.query.report.client.generation.ReportSAXTransform 开头,因此,应移除此特性。
这些条目的格式即 Windchill 应用程序服务委派机制的格式。如果需要本地化其他条目,请编辑 Java 资源束 wt.query.template.TemplateResource。
自定义报告生成客户端
* 
使用自定义输入页面的报告支持此自定义。
报告生成客户端由 HTML 表单和 HTTP 处理器组成,前者可提示用户提供其他报告生成输入,后者用于执行报告并应用 XSL 转换。可以按照与典型 HTML 客户端自定义相同的方式自定义这两个客户端。有关详细信息,请参阅使用 Windchill JSP 框架自定义 HTML 客户端
此外,报告生成特定代码可用作单独类中的静态方法,因此可供重用。ReportTemplateHelper 类提供了多种报告处理方法 (有关详细信息,请参阅已安装 Windchill Javadoc 中的 wt.query.template.ReportTemplateHelper 类条目)。
* 
在以前的版本中,使用了子类型 (即通过“类型和属性管理”实用程序创建的类型) 的报告需使用报告命令 (有关详细信息,请参阅已安装 Windchill Javadoc 中的 com.ptc.core.query.report.command.common 包条目) 进行处理。目前,ReportTemplateHelper API 直接支持子类型和客户创建的属性。尽管报告命令仍受支持,但不再需要这些命令。
上述两个客户端均依赖于面向 XSLT 处理器开发的包装器 API。有关此 API 的详细信息,请参阅已安装 Windchill Javadoc 中的 wt.xml.xslt 包条目。
此 API 提供以下功能:
独立于单个 XSLT 实现 (例如 Saxon,即当前正在使用的 XSLT 处理器库)
用于隐藏特定实现 (例如,字符串、Java IO 流、DOM 或 SAX) 详细信息的 XML 源的高级抽象
用于 Windchill 中 XSLT 操作的干净 API
用于 XSLT 转换中复杂链接的易用高级设施
除上述功能外,如需了解此 API 提供的其他功能,可以使用标准 JAXP (XML 处理的 Java API) API 或直接访问 Saxon。有关详细信息,请参阅 Saxon Web 页面,目前可通过以下 URL 访问:
但请注意,与 Windchill 捆绑在一起的 XSLT 库可能会在将来发生变化,并且 Windchill XSLT 和 JAXP API 的用户将受到此类更改的影响。
报告生成表单
报告生成表单用于在执行之前收集其他报告输入参数。该表单由两个主要部分组成:报告参数和输出格式。
报告参数部分从查询中指定的数据构建而来。如果将报告查询作为 XML 源,则 ReportTemplateHelper.buildParameterTemplates() 方法会返回一个表示查询参数的 ParameterTemplate 实例数组。当前客户端访问此参数模板数据来构建表单以提示用户进行输入。请注意,如果指定的名称包含在 HTTP 参数中,则处理会绕过任何参数模板 (请参阅下面的“自定义报告生成 URL”一节)。这是自定义表单的一种间接方法。例如,在报告生成 URL 中完整地指定所有参数值将导致不会生成任何参数输入字段。此外,如果已在报告模板中设置了 XSL 规范,并且所有必需的参数 (如果有的话) 在 HTTP 参数中指定了值,则当前表单处理会完全跳过该表单并直接转至报告执行处理。
输出格式部分基于报告模板对象的 XSL 规范生成。如果存在,则跳过输出格式部分。否则,将生成用于指定格式的输入字段。ReportTemplateHelper.getAvailableXSLFormats() 方法用于构建标准 XSL 的下拉列表选项。
报告生成输出
报告生成输出依赖于 XSLT API。基本步骤如下所示:
1. 使用 ReportTemplateHelper.generateXML() 方法将报告数据生成为 XML。
2. 获取要应用的 XSL 样式表列表。可将其指定为报告模板对象的属性,或指定为 HTTP 参数。报告模板对象 XSL 规范属性优先于 HTTP 参数值。此逻辑是在 ReportTemplateHelper.getXSLSpec() 方法中实现的。
3. 创建 XSLT 转换对象,并根据需要将样式表的数组链接在一起。此方法是在 ReportTemplateHelper.getTransform() 中实现的。
4. 使用 ReportTemplateHelper.getPostProcessor() 获取基于输出介质类型的后处理器。此方法使用首选项机制来检索后处理器的类名称。
5. 设置响应输出类型并为响应输出流生成数据:
if(postProcessor==null)
{
// No post processor found
response.setHeader("content-type",
ReportTemplateHelper.concatMediaTypeAndEncoding(
outputMimeType, finalSheet.getOutputEncoding()));
transform.outputToStream( response.getOutputStream() );
}
else
(
// Post processor found
response.setHeader("content-type",
ReportTemplateHelper.concatMediaTypeAndEncoding(
postProcessor.getOutputMediaType(),
postProcessor.getOutputEncoding()));
postProcessor.process( transform, response.getOutputStream() );
创建新客户端
前面几节介绍了当前报告生成客户端和一些简单的自定义点。基于 XSLT API、ReportTemplateHelper 方法和报告命令,可通过多种方式创建全新的客户端。但是,本主题的详细讨论超出了本文档的范围。
以下是一些可行的自定义示例:
使用返回 TypeInstances、QueryResult 或 Java Swing TableModel 对象的 ReportTemplateHelper API 或报告命令。这些方法可用于使用特定显示类型或必须实现其他结果集处理的 Java 客户端。
在后台或批处理模式下执行报告生成 (例如,在夜间运行报告) 并将结果保存在 Windchill 中。
自定义报告生成 URL
* 
使用自定义输入页面的报告支持此自定义。
在自定义应用程序以无缝集成报告生成功能时,需要了解报告生成 URL,这一点很重要。调用报告的 URL 可使用已知的 URL 参数进行动态创建或静态设置 (例如,设置书签)。有两种类型的报告生成 URL:生成表单 URL 和执行报告 URL。“生成表单 URL”会从用户请求其他输入 (仅在必要时),并生成一个指向“执行报告”页面的表单操作按钮。“执行报告”页面会执行查询并将输出返回到 HTTP 请求输出流。
可以直接编辑这两个 URL 来添加 URL 参数。可为原始的或编辑后的 URL 加上书签,或采用超链接形式,以供将来重用。也可以编程方式生成 URL。ReportTempateHelper 类为每种类型的 URL 提供 API。还提供了其他一些版本,每个版本均采用了不同的参数。有关详细信息,请参阅已安装 Windchill Javadoc 中的 getGenerateFormURL() 和 getExecuteReportURL() 类条目。
“生成表单 URL”可直接指定参数值。对于针对 URL 指定的任何参数名称,都会跳过输入字段。此外,所有 URL 参数均通过表单操作按钮传递到“执行报告 URL”。“执行报告 URL”还会从 URL 参数 (通过 ReportTemplateHelper 方法) 派生所有报告参数值。如果报告参数不存在 URL 参数,则使用报告参数的 默认值。此外,可使用下表中所述的其他几个 URL 参数。
URL 参数名称
说明
jrb
用于本地化结果列标题的 Java 资源束的名称。如果为其提供了 Java 资源束的名称,则提供的 XSLT 样式表均可用来本地化结果列标题。此举旨在允许重用单个查询以支持多个区域设置,原因在于报告模板用户界面并不提供按区域设置输入字符串的方法。
format
指定格式类型:formatDelegate 或 formatCustom。仅当报告模板对象没有 XSL 规范时,才使用此参数。
delegateName
指定要从 Windchill 代码库获取 XSL 样式表的委派名称。委派名称必须与 dbservice.properties 文件中指定的值相匹配。仅当报告模板对象没有 XSL 规范且 format URL 参数的值为 "formatDelegate" 时,才使用此参数。
xsl1
指定自定义 XSL 样式表的 URL。此样式表将立即应用于查询结果,并可为用户生成直接输出,或为另一个 XSL 样式表的输入生成合适的输出。仅当报告模板对象没有 XSL 规范且 cformat URL 参数的值为 "formatCustom" 时,才使用此参数。
xsl2
指定自定义 XSL 样式表的 URL。此样式表应用于第一个 XSL 样式表 (由 xsl1 指定) 的输出,且应为用户生成输出。仅在报告模板对象没有 XSL 规范,format URL 参数的值为 "formatCustom",且已指定 xsl1 URL 参数的情况下,才使用此参数。
这对您有帮助吗?