是否可以将值从SDL Tridion 2011 GUI扩展传递到事件处理程序中的SaveEventArgs

是否可以将值从SDL Tridion 2011 GUI扩展传递到事件处理程序中的SaveEventArgs,tridion,tridion-2011,Tridion,Tridion 2011,我正在使用SDL Tridion 2011 SP1构建GUI扩展。当编辑器点击一个新的“保存和评论”按钮时,我想收集一些用户输入。此按钮将收集一些用户输入,然后触发CME的内置保存命令 然后使用事件处理程序,我希望捕获用户输入,并对其进行一些自定义处理。我的简单事件处理程序如下所示: 使用系统; 使用系统文本; 使用Tridion.ContentManager.Extensibility.Events; 使用Tridion.ContentManager.Extensibility; 使用Trid

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

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

使用系统;
使用系统文本;
使用Tridion.ContentManager.Extensibility.Events;
使用Tridion.ContentManager.Extensibility;
使用Tridion.ContentManager.ContentManagement;
使用System.IO;
命名空间UrbanCherry.Net.SDLTridion.EventHandlers
{
[TcmExtension(“版本注释”)]
公共类版本注释:TcmExtension
{
公共版本注释()
{
订阅();
}
公开无效订阅()
{
订阅(AddCommentToItemVersion,
事件阶段(已启动);
}
私有void AddCommentToItemVersion(组件源、SaveEventArgs args args、,
事件(阶段)
{
//在这里做些工作
}
}
}

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

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

没有直接的方法将参数从GUI扩展传递到事件处理程序。因此,我所能想象的唯一方法是将附加信息装载到现有的数据结构中。应用程序数据(如所建议的)是一种这样的数据结构,但也可以考虑<强>将信息捎带到现有组件XML >/P> 因为您有一个GUI扩展和一个事件处理程序,所以您基本上可以在前者中做任何您想做的事情,只要您在后者中“撤消”这些更改

所以我可以想象:

  • 在GUI扩展中,将带有注释的自定义元素注入组件XML
  • 在事件处理程序中,提取注释并删除自定义元素
  • 我还没有测试过这种方法,但已经使用自定义数据扩展器做了类似的事情:更改发送到服务器的命令或数据,然后在服务器上检测该更改并对其执行操作(在将其传递给TCM之前)

    当然,在本例中,您必须确保事件处理程序在前面的一个阶段中从组件XML中删除注释


    如果您希望安全地执行此操作,那么应该在非常早期的事件阶段从组件XML中删除注释,然后仅在提交前/提交后阶段保存注释。在这两个阶段之间,你必须把评论存储在某个地方,但是至少在那时,数据是从GUI到服务器的。

    YUP——我认为这是最后的手段,因为它不能被内容移植等等。已经有一个“系统评论”字段用于回滚、向前滚动和更新等等。所以如果可以的话,我真的很想利用这一点。也许我需要做一个增强请求,用类似Component.Save(Boolean FinishEditing,String Comment)的东西添加到API中。你也许可以使用应用程序数据作为临时存储,将数据从GUI传递到事件系统,当你将其放入系统CommentYup中时,将其从应用程序数据中删除,我想这就是我必须要做的。我希望有一个更优雅的方法来考虑“最后的选择”。。。正如您所知,Chris,Content Porter 2009 SP2导出和导入应用程序数据,这可能会让您的工作更轻松。据我所知,定制AppData不支持内容移植,即使新版本能够做到这一点。我不建议在事件之间混合状态,如果多人(几乎)同时单击“保存”和“注释”按钮,会发生什么情况?您将如何跟踪这些按钮?是否打算将注释保存在元数据字段中?我实际上希望将其保存在回滚/转发时使用的注释字段中,但这是下一个挑战您的意思是将注释作为自定义字段+值添加到内容XML中,而不在模式中定义字段吗?这是一种方法,尽管您可能必须增强FieldBuilder以确保“假字段”不会使内容无效。或者,您可以将其填充到组件XML的其他部分,或者如果需要,甚至可以将其附加到标题中。记住:既然你在这里写的是等式的两边,你就完全可以控制发生的事情。