Rally 拉力纸板渲染:将项目添加到卡头

我想在默认纸板看板应用程序中将自定义用户属性的值添加到卡片的标题中。我在渲染函数中添加了以下内容: 这会将文本值添加到卡头中,但这样做会将所有者名称和图像向下对齐一行。我已经看过CSS,但是没有看到任何依赖于长度的格式化,但是我对这个领域还是比较陌生的。我尝试在CSS中更改字体大小,但没有任何改变。添加上面的代码总是将所有者名称和所有者图像向下推一行。 对于我可能做错了什么或是否有更干净的方法来做这件事的任何帮助,我们将不胜感激。您正在添加一个div,它是一个块元素,这就是为什么您将获得新行

如何使用Rally REST API从测试集中删除(取消映射)测试用例?

如何使用RESTAPI从Rally中的测试集中删除测试用例 它打算从JavaScript调用。我无法在他们的文件中找到信息;非常感谢您提供一个链接。既然您使用的是Javascript,那么您是否也在使用Rally的AppSDK?如果是这样的话,那么编写一个简单的AppSDK示例来说明这一点就相对简单了——它具有AppSDK提供的额外功能 如果您使用的是直接的REST,一个问题是测试用例没有TestSet属性字段——映射是测试集有一个测试用例集合。方法是通过REST查询测试集: 这将提供类似以下

Rally GetNextetition

使用API2.0,我在一个超级看板上工作,当呈现卡片时,我想要一个按钮,将故事移动到下一个sprint 我从添加迭代组合开始,但这太过分了。我可以添加按钮和代码,但是有没有办法获得下一次迭代 我没有看到任何东西在那里,我想我会在这里问之前,我开始编码 看板是特定于迭代的,所以我可以向上移动一两个sprint,但仍然希望将其向前推进,所以我必须抓住当前迭代,以某种方式获得下一个 想法?您可以查询开始日期在今天之后的迭代,按开始日期排序。这将为您提供记录[0]中的下一次迭代 Ext.create('

Rally SDK2:等待微调器对象?

SDK2中是否有可用的忙微调器对象来指示用户应等待的时间 在SDK1中,它被称为: var wait = new rally.sdk.ui.basic.Wait(config) 我在新文档中没有看到等效对象,我们没有在SDK 2中制作等效组件,因为此功能内置于Ext中。从任何元素都可以调用()和() 当我使用网格进行此操作时,它只会使其变灰--我看不到动画或你在拉力网格中看到的“加载…”文本。如何做到这一点?您使用的是哪个SDK版本?2.0p5应该可以很好地处理面具。有可能是装载。。。动画从当

Rally 回望API:已删除的项目

我想使用lookback API查看已删除对象的历史记录,如果我知道格式化的id,我认为这应该很简单。我只需要查询: {FormattedID:'dexxx'} 但是,当一个对象被删除时,Lookback API是否会记录任何特殊的内容(比如,我能确切地知道它是什么时候被删除的,或者是由谁删除的)?它能帮助我找到回收站中的正确位置,以便我尝试取消删除它吗?不幸的是,回溯API没有提供任何跟踪回收站中删除或条目的内容。重点肯定是分析,并为敏捷度量提供一个强大的报告引擎 这并不排除在某些情况下,LB

Rally 通过WSAPI聚合迭代累积流对象

我试图通过Java通过WSAPI获得迭代累积流对象字段。出于某种原因,我得到了IterationObjectID的空白值。你知道怎么解决吗 通过WSAPI 1.43或更早版本查询迭代累积流对象时,似乎没有返回IterationObjectID属性。但是,在通过WSAPI 2.0查询迭代累积流对象时,可以检索相同的属性。Rally Support目前正在调查此事。您能分享一下您的查询代码吗?

如何向Rally.ui.tree.PortfolioTree添加其他列

我正在尝试修改标准的Portfolio Hierarchy报告,以包含其他列。但是我看不到一种方法来阅读portfoliotree文档。这可能吗?不幸的是,现在不直接支持添加其他列 您可以覆盖treeitem模板(如的“自定义UI”部分所示),以添加要显示的其他字段。这可能不足以满足你想要做的事情,但你可以试一试 下一个SDK版本将附带分层树网格,它将是Rally.ui.Tree的一个更完善的版本,并且应该与常规网格一样可配置。在此之前,我希望这会有所帮助

Rally API未检索系统字段的自定义值

我正在使用以下web服务检索环境字段值 它返回系统值:开发、测试、暂存和生产 若我添加或更改环境字段值,web服务仍然返回相同的数据 我希望web服务返回新更新的值,如Env-2、Env-3等 根据我的测试,它应该可以满足您的需要。是否通过代理(可能正在缓存旧响应)

Rally API V1.x的新API密钥与LoginKey

在Rally关于新API密钥的文档中,它指出,虽然以前您需要使用LoginKey在外部系统中显示信息,但这种影响现在可以为每个应用程序生成API密钥。-但是,它并没有说明如何用新的API密钥替换应用程序的LoginKey 对于使用loginkey的外部API V1 AP,您是否只需使用新的API键更改查询字符串loginkey=中的loginkey标记,或者是否有其他使用API键的过程,例如不同的查询字符串参数?您不必将loginkey替换为API 1.x的API键。使用AppSDK1编写的遗留

Rally 求总数

我建立了一个网格,其中一列是实际小时数。我想知道如何计算实际工作时数,从而得出总的实际工作时数。显然,空白的实际工作时数将被输入为零。我尝试过使用Ext.Array.each,但我不知道参数应该是什么。我还尝试将我的网格转换成一个表格,然后将所有的单元格相加,但这也没有奏效。这是我的加载函数: //this.ownerComboBox = comboBox; this.add({ xtype : 'rall

使用设置自定义Rally TaskBoard应用程序

我正在根据公司需要定制TaskBoard应用程序(),并希望添加“设置”菜单项。 有人知道如何使用这个老式应用程序吗?我联系了拉力赛支持团队,他们的反应如下: 感谢您就定制应用程序编码向Rally提供支持 用于任务板应用程序。不幸的是,这方面没有一个好的例子 然而,如何做到这一点,最新的AppSDK候选程序已经修复了 设置面板问题,您最好使用文档中的示例 地址: 所以,我认为这是不可能的

Rally API 2查询历史速度

我在一个版本中进行了一些迭代处理,我想知道团队在那个时间点的速度是多少,有没有办法使用回溯API或以其他方式获取该时间段的信息 i、 e.当时的拉力生成速度,或手动计算最后10个或所有时间速度测量值 因此,根据下面的回答,我得出了以下代码: _getVelocity: function() { this.logger.log("_getVelocity"); var me = this; var deferred = Ext.create('Deft.Deferred')

查询以获取我曾经在Rally中处理过的所有用户故事的列表

我是一个开发者。我遇到了一个场景,在这个场景中,我需要获得我曾经处理过的所有用户故事的列表,但现在它的所有者是其他人,比如QA。现在,这些用户故事的所有者是QA人员,所以我不能以[owner='MyName']的身份编写查询 有什么想法吗?我没有用过Rally,但我只是在想:既然这是你写的一个故事,你很有可能对它添加了一些评论,甚至可能是你自己创作的。 有没有办法在查询中使用此选项 例如-[CommentBy=Adarsh Kumar]或[CreatedBy=Adarsh Kumar] 我使用R

Rally 集合:document.Referer未返回完整的URL

我们已经使用Rally SDK创建了一个自定义应用程序。我们在用户故事的自定义字段中提供此应用程序的链接。一旦我们点击这个链接,它就会被重定向到应用程序。在这个应用程序中,我们想知道它是从哪个用户故事重定向过来的。 出于同样的目的,我们正在使用document.referer。但是,它只返回“”而不是完整的URL 根据我们的研究,我们了解到,要获得完整的URL,必须在网页中提及具有适当值的refferer元标记。我们认为在本案中没有提到 如果我们的理解有误,请纠正。 如果您能提出任何替代方案来实

是否可以使用rally sdk使用highcharts热图?

我正在构建一个rally自定义HTML应用程序。我想创建一个热图。我该怎么做 我试图创建“热图”类型的反弹图(代码如下)。因此,我在控制台中看到404错误消息: GET https://rally1.rallydev.com/slm/panel/highcharts/heatmap.js?_dc=1558434971290 404 当我试图直接使用Highcharts库时,我会与两次加载Highcharts发生冲突。因此,我猜分析库不会加载,并且会出现类似Lumenize.Time undef

Rally App SDK 2.0:如何在上获取工具提示

如果我有一个PortfolioItems集合,并且在configs列中包含PercentDoneByStoryPlanEstimate,我会得到预期的进度条。但是当我将鼠标悬停在进度条上时,我看不到工具提示中包含我在拉力赛中看到的额外信息 如何在应用程序中显示工具提示 示例代码: Rally.onReady(function() { Ext.define('CustomApp', { extend: 'Rally.app.App',

手动将列添加到rallycardboard组件

我正在创建一个rallycardboard,其中每一列代表一个发行版,这些卡片是要安排到这些发行版中的功能。组件的默认机制将所有可用版本呈现为板上的列。对于我们的特定应用程序,这是不合理的,因为我们的工作区中有数千个版本 我能够覆盖addColumn方法,仅在组中至少分配了一个功能的版本中包含一个列。下一步是让用户可以手动添加当前没有任何分配工作的发布列。为此,我存储了第一步中排除的所有列,并用这些值创建了一个组合框。我希望这样,当用户从组合框中选择发布时,该发布列将添加到板中 我能够重新配置我

向rallygridboard自定义HTML添加列的问题

我试图做的是设置一个自定义报告,将一组特定的用户故事导出到Excel中,并添加一个下拉列表,按计划对用户故事进行排序 我在将列'Parent'添加到网格时遇到问题,我认为这将是一项简单的任务,但我遇到了麻烦 任何帮助都会很好 谢谢 Parent是用户故事的父级。您是否希望它显示公文包项父项?如果是这样的话,你应该使用Feature字段…@KyleMorse我希望看到美国的母公司(Feature)。目标是显示主动性(Feature.Parent.Parent)。但是,我也尝试了“功能”,没有填充该

从Rally执行测试用例

我想知道我们是否可以从Rally运行一个测试用例。我知道我们可以使用java/Rest Rally API添加测试用例、添加缺陷等,但是我们可以从Rally调用测试用例吗?提问背后的原因是因为我想自动化QA周期的整个过程,即。测试用例添加>>测试用例执行>>测试用例结果报告。 请亮一点 谢谢执行一个测试用例实际上只是创建一个与该测试用例相关联的新TestCaseResult对象。如果在迭代上下文中执行测试用例,还可以选择将TestCaseResult与测试集相关联 我可能会向TestCase对象

Rally 查询尚未设置值的属性

你们中有谁知道如何查询rally中当前尚未设置字符串属性值的一组内容吗? 我无法查询等于空字符串的值。这不需要解析。我也不能用“null”。或者更确切地说,我可以尝试“null”,它可以很好地解析,但不会找到任何结果 query = @rally_api.find(:defect, :fetch =>true, :project_scope_up => false, :project_scope_down => false,

导航到rally应用程序中的外部URL

我想建立一个类似“自定义URL应用程序”的应用程序,我可以从下拉列表中选择几个URL进行导航 听起来很简单,但我找不到在Rally应用程序中进行外部导航的方法我自己就知道了 通过使用javascript window.location.replace('http://www.bing.com'); 我自己也弄明白了 通过使用javascript window.location.replace('http://www.bing.com');

Rally 将反弹图表导出为jpeg格式

Highcharts通过exportChart()方法支持此功能,但rallychart不支持此功能?现在有工作吗 var chart = this.down('#chart'); chart.exportChart({ type: 'image/jpeg' }); highcharts解决方案将您的数据发送到他们的服务器。在我们弄清楚他们在服务器端安装了什么并复制它之前,我们不打算公开该功能。我们担心客户可能不知道他们正在向第三方发送数据。

在Rally Rest API中用于HierarchycalRequirement的时间

我有一个与Rally API web服务挂钩的报告。它列出了向外部客户机演示的用户故事和缺陷。 开发人员在时间表中填写他们在任务上花费的时间,但当我尝试使用“TaskActualTotal”值获取实际花费的时间时,它总是返回为0 这些值被明确记录为时间表上的我的内部报告生成这些值 我是否需要调用使用不同方法所花费的时间 谢谢开发人员是否在时间跟踪器模块中输入时间?实际值和时间跟踪器模块之间没有连接。实际值也早于时间跟踪器 “实际值”字段设计用于在回顾期间提供对未履行承诺根本原因的洞察,而“时间跟

Rally 集合功能和汇总的网格

我正在尝试制作一个网格,该网格同时显示一个汇总(汇总及其子项) 当我将网格的模型设置为“PortfolioItem/Feature”时,第一个单独的查询会起作用,但当我将模型更改为“PortfolioItem”时,网格不会显示任何数据,并且将OR添加到过滤器中肯定不会有帮助 var filter = Ext.create('Rally.data.QueryFilter', { property: 'Parent.ObjectID', operator: '=', valu

Rally 为一个故事找MMF

我觉得我错过了一些东西,但我想知道一个故事的MMF。我试着从Feature和PortfolioItem字段中提取信息,但最后我只看到了故事的Feature Ext.create('Rally.data.WsapiDataStore', { model: 'User Story', autoLoad: true, fetch: ['Name', "Iteration", "PlanEstimate", "PortfolioItem", "Feature"],

Rally 为什么赢了';t任务模型中返回Ready和BlockedReason值

我试图返回一个任务列表,并包含就绪和BlockedReason值。下面的代码将返回“configCfgs”中列出的所有列,但这两列除外。你知道怎么抓住他们吗 this.grid = this.add({ xtype: 'rallygrid', model: model, columnCfgs: ['FormattedID', 'Name', 'Ready', 'Blocked', 'BlockedReason', 'WorkProduct', 'Owner', 'Rele

拉力网格中的弹出窗口:RallypercentDonePoverPlugin

我正在创建一些RallyGrid,这些RallyGrid在accordion容器中的选项卡面板容器中显示功能级别的公文包项 不幸的是,如果在第一次呈现容器时隐藏了rallygrid,那么如果我包含RallyPercentDonePoverPlugin插件,就会出现问题: 使用选项卡面板,当呈现非活动面板中的RallyGrid时,如果它们包含RallyPercentDonePoverPlugin并显示使用它的字段,则会发生崩溃 使用手风琴面板,如果首次渲染网格时网格未打开(在gridspec上设置

Rally 格栅/树栅的过滤器控制

过滤器控制组件是否可用于Grid/TreeGrid(类似于Portfolio Items仪表板中的过滤器)?根据SDK 2.0文档,此组件似乎仅适用于GridBoard。GridBoard是treegrid或board的包装,filtercontrol插件应该与treegrid一起使用。下面是一个树型网格的示例,其中enableherarchy设置为true,并且rallygridboardcustomfiltercontrol插件: Ext.define('CustomApp', {

Rally 使用int非反射查询进行存储筛选

我有以下过滤器: var iterationFilter = Ext.create('Rally.data.wsapi.Filter', { property: 'Iteration', operation: '=', value: this.selectedIteration }); var containsTestCaseFilter = Ext.create('Rally.data.w

现在使用哪个Rally API创建缺陷?

我尝试了所有示例并得到了错误-不再需要将“.js”附加到WSAPI资源。请举例说明。这只是一个警告-它实际上并没有阻止任何工作。你能给我们一些关于如何访问api的更多信息吗?你在写应用程序吗?您是否正在使用其他工具包之一?你的回答中还有其他错误吗 该警告只意味着可以从所有ref URL中删除.js。wsapi版本2中正确的缺陷创建端点如下: /slm/webservice/v2.0/defect/create您好,欢迎来到Stackoverflow!!如果你能在提出新问题之前阅读这些指南,那就太

Rally 当有两个以上的AND子句时,多子句和查询不起作用

我为我的公司创建了一个自定义应用程序,只要其中只有两个字段,查询就可以正常工作,一旦添加第三个字段,它就不会返回任何记录: 作为参考,我正在查询故事和缺陷: var query = []; var queryCriteria = buildQueryFilter(STORIES); query[0] = { key : STORIES, type : "HierarchicalRequirement", fetch : "FormattedID,Name,O

如何在rally userstories页面上设置默认视图

在默认用户故事页面上使用rally时,如何设置默认视图 我有一个自定义视图,我希望它自动打开 创建或编辑自定义视图时,在用于设置显示列的表单部分的正下方有一个选项“设为默认值”。注意:这只会将视图设置为登录的默认视图,甚至对于您的帐户,它也只会将视图设置为“计划->用户故事”页面的默认视图

Rally API:深度查询中的精确匹配问题

我正在查询与任何具有特定标记的测试集关联的测试结果 但是,此查询不起作用: (TestSet.Tags.Name=“foo”) 工作原理是: (TestSet.Tags.Name包含“foo”) 如果第二个查询返回与标记“foo”匹配的结果,我认为第一个查询应该可以工作。我想这是一只虫子吧 我可以通过使用第二个查询来解决这个问题,但问题当然是它也可以匹配名为“foo2”的标记,因此我的查询可能会有额外的结果(可能更多),我必须过滤掉它们。此外,现在我还需要让我的查询获取“标记”,因此我得到的每个

如何为Rally自定义网格构造大型查询?

我正在尝试为一个自定义网格构造一个查询。如果将用户故事分配给我的项目中的58个迭代中的一个,我希望选择该用户故事 这是有效的; ((Iteration.Name=“sprint 1-1/1/2012-1/31/2012”)或(Iteration.Name=“sprint 1-1/24-2/1”)) 但事实并非如此; ((Iteration.Name=“sprint 1-1/1/2012-1/31/2012”)或(Iteration.Name=“sprint 1-1/24-2/1”)或(Itera

Rally 如何通过2.0rc1在功能级别获取数据

如何获取功能级别的数据 eg : General ID: F1780 Name: XYZ Description: XXXX Project: Region - Americas Schedule Release: 2013 Jul 请建议如何获取上述数据。以下是一个功能网格示例,其中包含ID、名称、描述、项目、版本和相关用户故事等列 Ext.define('CustomApp', { extend

在rallyApps中使用fontawesome图标

我最近发现,使用app2sdk可以访问一些字体,效果非常好。例如,在这里,我使用它们在rallygrid中显示趋势箭头: 这比任何其他选择都要简单得多,因为您可以轻松地将这些图标(在本例中为颜色)设置为字体样式。它还提供了大量可用的图标 但是使用这个功能明智吗?这个特性在rc2中有效,但在rc1中不起作用,我认为它在任何地方都没有文档记录。有人知道它是否可能在SDK的未来版本中继续工作吗 此外,并非所有图标都可用-在Rally中是否会定期更新此图标?我们有基于的Rally图标。这是一项正在进行

Rally 是否有方法将筛选器应用于包含指定模型之一上不存在的属性的treestore?

我试图用用户故事和缺陷填充treegrid,但我希望在过滤器中使用的参数之一是缺陷模型上不存在的属性 如果筛选器包含该属性,则不会返回任何结果。是否有变通方法或特殊过滤器定义?treegrid/treestore从工件wsapi端点请求数据。有一个名为TypeDefOid的隐藏可查询字段,可用于将筛选器限制为特定类型,如下所示: ((TypeDefOid != <defectTypeDefOid>) OR ((TypeDefOid = <defectTypeDefOid>

Rally 2.0 JavaScript API-动态创建HTML表和设置值

我正在使用自定义HTML Rally Grid开发一个必须返回一些统计信息的表。我的JavaScript在HTML的开头被调用,我正在body标记中创建一个表。因此,我的JavaScript使用字段ID在表中设置值。问题是:正在加载该表,但当Rally.launchApp方法运行时,该表将消失。奇怪的是,如果我检查字体代码,表仍然存在 <!DOCTYPE html> <html> <head> <title>Grid With Freefo

使用columncfgs在rallygrid中设置列的弯曲/宽度

如果使用字符串表示为rallygrid指定columnCfgs,则可以为不同的列获得一些很好的内置功能,例如,FormattedID列在呈现时具有指向该项的链接。然而,一些字段有一个默认的flex,使它们比需要的长很多(主要是名称),这使得网格看起来与我想要的大不相同 您可以将“名称”列指定为 {text: 'Name', dataIndex:'Name', flex: 1}, 但是有没有一种方法可以为使用以下格式声明的列指定flex: 'Name' ?这是一个奇怪的网格,我们想在SDK 2

Rally 特定于用户的应用程序设置

我已经开始使用服务器端应用程序设置,看来共享应用程序的默认机制是在整个项目范围内保存应用程序设置;因此,如果个人对应用程序设置进行更改,这些更改将反映给所有未来用户。在我的具体案例中,这不是理想的用法。如果我可以为每个用户设置不同的设置,而不让每个用户添加自定义HTML的单独实例,我会很高兴。这是否可能使用服务器端设置,或者我是否需要研究使用cookies来保存每个用户的设置 注意:我已经阅读了关于appsettingscope()的文档,但它并没有显示“user”是一个选项 谢谢 康纳,你为应

Rally 释放网格过滤器

我有Rally.ui.grid.grid的功能,我想为发行版添加过滤器,就像在公文包项目页面上一样。我怎么能做到? 这是我的网格 this._myGrid = Ext.create('Rally.ui.grid.Grid', { xtype: 'rallygrid', title: 'Feature Scoring Grid', store: myStore, enableEditing: true, enableR

Rally/Bugzilla连接器首次进口测试

我第一次从Bugzilla向Rally导入bug时遇到了问题。这不是我通常使用的东西,我通常处于固件的黑暗地带,所以我为我迄今为止所做的任何愚蠢/愚蠢的事情道歉。我已经设法让这些服务正常工作,但是现在我已经力不从心,找不到任何可以帮助我继续工作的东西 让我们从一些背景信息开始。。。我主要遵循和的安装说明 安装了扩展的远程linux服务器上的Bugzilla 4.4 运行本地windows的bzapi 本地执行rally2_bugzilla_连接器。 在日志文件中,当运行服务更新\u BUGZIL

Rally 如何通过SDK2.0中的给定任务获取用户故事

我正在创建一个基于任务模型的网格,但我需要显示用户故事的信息,如格式化的Id和名称等 我已经浏览了文档,但在任务模型中找不到用户故事字段 只是想知道我该怎么做: columnCfgs : [ { text : 'User Story Id', DataIndex : 'userStory.FormattedId' } ] 您要查找的字段称为WorkProduct,因为除了故事、测试集、缺陷等之外,任务还可能与其他类型相关联。谢谢Kyle。这就是我需要的。但是,如果我编写一个筛选器,并且需

Rally 树木重建用过滤器

我刚刚开始尝试为Rally编写可用于confluence wiki的脚本。我已经使用了基本的TreeStoreBuilder来处理我的大量字段,但是我需要将它约束到迭代(理想情况下是最新的)以及硬代码项目/子项目,因为我希望在一个wiki页面上有来自不同项目的多个图表,所以我期望它会受到约束。我目前掌握的代码如下 谢谢! 标记 您可以在此处查看筛选: 和项目范围: 我能够添加一些过滤,并且能够使迭代的工作正常。名称和项目。名称。。。家长。名字不起作用,所以不确定我错过了什么。我正在我的Rally

将自定义网格与Rally SDK合并

在Rally SDK中,有一些自定义网格所做的事情是您无法用表来做的——特别是对项目重新排序 对于我正在制作的一个应用程序,合并一个自定义网格会很好,但我希望能够以编程方式配置它们——例如,设置列名和宽度、查询参数等,然后将其作为我的应用程序的一部分——我可能会在应用程序中设置几个具有不同查询参数的网格 有可能吗?不可能。然而 我们正在努力开发一个基于extjs框架的全新appsdk。它将有很多你在Rally中熟悉的功能(比如网格w/re排名、内联编辑等) 今年春天/夏天晚些时候再看吧 当一个现

Rally 如何在2.0rc1中获取userstories及其所有对话帖子?

如何在2.0rc1中获取userstories及其所有对话帖子 我试过了 model:'HierarchicalRequirement', fetch:[Discussion] 但这不会返回任何对话帖子,这里有一个完整的代码示例,可以打印ConversationPosts。我创建了两个Rally.data.WsapiDataStores,一个用于HierarchicalRequirement对象,另一个用于ConversationPost对象,因为当前WsapiDataStore不能有多个模型

如何将测试用例和步骤从Excel上传到RALLY DEV?

我想上传多个TC以及从Excel到Rally Dev工具的步骤 请帮助我。有一个Rally Excel插件,允许导入/导出功能。 有关详细信息,请参见此和导入/导出 为了导入测试用例步骤,您需要首先导入测试用例,然后导入第二个对象:测试用例步骤。它必须分两个阶段完成,首先是测试用例,然后是测试步骤,在测试步骤中指定父对象测试用例 如果您还有其他问题,请联系拉力赛支持 你应该写下你迄今为止试过的东西。

  1    2   3   4   5   6  ... 下一页 最后一页 共 12 页