5

我正在使用 SDL Tridion 2011 SP1 构建一个 GUI 扩展。当编辑器点击新的“保存和评论”按钮时,我想收集一些用户输入。此按钮将收集一些用户输入,然后触发 CME 的内置保存命令。

然后使用事件处理程序,我想捕获该用户输入,并对其进行一些自定义处理。我的简单事件处理程序如下:

using System;
using System.Text;
using Tridion.ContentManager.Extensibility.Events;
using Tridion.ContentManager.Extensibility;
using Tridion.ContentManager.ContentManagement;
using System.IO;

namespace UrbanCherry.Net.SDLTridion.EventHandlers
{
  [TcmExtension("VersionCommenting")]
  public class VersionCommenting : TcmExtension
  {
    public VersionCommenting()
    {
      Subscribe();
    }

    public void Subscribe()
    {
      EventSystem.Subscribe<Component, SaveEventArgs>(AddCommentToItemVersion,
                                                      EventPhases.Initiated);
    }

    private void AddCommentToItemVersion(Component source, SaveEventArgs args,
                                         EventPhases phase)
    {
      //Do some work here   
    }
  }
}

args.ContextVariables我的 GUI 扩展是否可以使用 the或其他方法以某种方式向 SaveEventArgs 添加值?

4

2 回答 2

1

只是一个想法,不知道如何在 GUI 扩展中实际执行此操作,但是您是否想过在单击按钮时将注释设置为项目上的应用程序数据?

于 2012-06-27T18:04:27.190 回答
1

没有直接的方法可以将参数从 GUI 扩展传递到事件处理程序。所以我能想象的唯一方法是将附加信息捎带到现有的数据结构中。应用程序数据(如 Will 所建议的)就是这样一种数据结构,但您也可以考虑将信息捎带到现有的 Component XML 上

由于您同时拥有 GUI 扩展和事件处理程序,因此您基本上可以在前者中做任何您想做的事情,只要您在后者中“撤消”这些更改。

所以我可以想象一种方式:

  1. 在您的 GUI 扩展中,将带有注释的自定义元素注入到组件 XML 中
  2. 在您的事件处理程序中,提取注释并删除自定义元素

I haven't tested this approach, but have done similar thing with custom Data Extenders: change the command or data sent to the server and then on the server detect that change and act on it (before passing it on to TCM).

Of course you'd have to make sure your event handler in this case removes the comment from the Component XML in one of the earlier phases.

If you want to do it safely you should take the comment off from the Component XML in a very early event phase and then only save the comment in the pre-commit/post-commit phase. In between those phases you'd have to store the comment somewhere, but at least the data made it from the GUI to the server by then.

于 2012-07-05T17:24:48.163 回答