在SDL Trdidion 2009中扩展到页面图标状态

时间:2012-05-02 16:37:13

标签: tridion

我们正在使用SDL Tridion 2009 SP1。     我们已经实现了一项新功能,即CMS中的扩展程序,它允许我们锁定页面。     如果页面被锁定,则无法再发布(锁定页面的信息保存在为此扩展创建的数据库中)。

我们想要添加一个新图标,该图标将通知用户页面的新状态。

现在有4个图标组合(无动作,检查,发布,检查和发布)

由于我没有使用CMS界面的长期经验,因此我想找到一些帮助,找到对性能没有影响的解决方案。 在不进行大量修改方面很容易实现。

以下是我对此的调查:

我注意到cms中图标的渲染方式并不是一个易于更新的简单机制。 每次我们点击CMS左侧的项目时,为了从右侧呈现列表,对WebGUIResponder.aspx进行ajax调用(带有xml请求)。页。

我们将获得的响应是​​包含属性字段Icon

的xml
<tcm:ListItems xmlns:tcm="http://www.tridion.com/ContentManager/5.0" 
    ID="tcm:yyy-zzzz-4" Managed="68" ItemType="4">
    <tcm:Item ID="tcm:yyy-zzzzz-64" Type="64" Title="NotificationTest" 
        Modified="2011-05-09T09:42:27" FromPub="400 YYYY Website Master (EN-GB)" 
        IsNew="false" Icon="T64L0P1"/>
</tcm:ListItems>

基于此字段图标属性(Icon =&#34; T64L0P1),图像名称开始被处理。

  • T64 =表示它是一个页面
  • 未检查L0 =
  • P1 =已发布

对于这样的字段,图像名称结果将为= T64.16x16.List.Published.gif

我无法找到通过页面xml更新此字段的方法,不是保存在xml中的信息,而是在dll中构建时 xml请求。 (某处基于已发布的其他字段以及其他此类图标字段的计算。)

因此,如果无法修改此字段,我们可能选择的选项是: 为了在CMS中集成我们的更改而不修改它们的.dll(这与SDL Trdion的新版本的兼容性在dlll中修改不好) 并且没有改变太多我正在考虑这种方法的逻辑。

我们可以对新页面WebGUICheckPageLocked.aspx进行新的Ajax调用(需要测试会对性能产生什么影响)。  在此页面后面的代码中,我们可以确定页面是否被锁定(使用我们的内部函数来确定页面是否已锁定,此功能是否已经完成)。 在页面中,我们将图标字段更改为T64L0P1E01(添加一些额外信息,以便我们确定页面的新状态)。 我们还将修改在GetPNGIconName javascript函数中,我们可以考虑新信息E01进行额外检查...)

如果有人对此有更好的想法,也许这可以轻松完成,也许这是我们可以更新Icon字段的方式。

亲切的问候, 克里斯蒂娜

1 个答案:

答案 0 :(得分:5)

我会在论坛上粘贴我的答案,所以每个人都可以看到(并且可能会提出有关如何以不同方式进行操作的想法?)...

2011年,我会使用Data Extender更改图标。

由于这是2009年,您将需要使用不那么优雅的前身:GUI Responder Extension。 基本上,您需要操作为相关请求返回的XML(例如文件夹上的GetList)。

我无法立即找到任何关于此的文档 - 这并不奇怪,因为它是旧版本。但它归结为:

  1. 创建一个包含具有以下方法签名和属性的类的.NET程序集:
  2.     [ResponseMessageHandler]
        public XmlDocument HandleMessage(XmlDocument messageXml, string userName, HttpContext httpContext, object tcmSession)
    
    1. 在该方法中,您可以根据自己的逻辑更改XML中设置的图标。
    2. 在扩展配置文件中,添加一个部分以挂钩您关注的列表的响应 (将“YourResponderExtension.dll”替换为您添加的程序集的名称):
    3. <ProcessResponse>
          <!-- GetList -->
          <ExecuteWhen>/tcmapi:Message/tcmapi:Response/tcmapi:Request/tcmapi:GetList</ExecuteWhen>                                                                                    
      
          <!-- Handler for all of the above -->
          <Execute>/bin/YourResponderExtension.dll</Execute>
      </ProcessResponse>
      
      1. 在适用之前添加更多元素 - 并尽可能使XPath查询具体,以避免不必要地调用您的扩展。您可能还需要检查.NET代码中使用XPath查询无法执行的更多情况。
      2. 压缩您的扩展程序并使用TcmExtensionInstaller.exe进行部署。
      3. 从您的文字中我假设您已经研究过如何在2009年创建和打包扩展程序。 我希望这些小步骤可以让你开始。

        如果您有任何问题或后续问题,请告诉我,我会看看是否可以回答。