控制SDL Tridion 2011自定义解析器的顺序

Chr*_*ers 4 tridion

我有被配置用于支持SDL Tridion 2011,其被设计为防止自定义解析页面组件,其使用多媒体组件从当用户发布链接正在发布多媒体组件.此自定义解析器正在替换旧的事件处理程序,如下所示:

private void MMCmpPublishHandler(Component source, PublishEventArgs args, 
                                 EventPhases phase)
{
    if (source.ComponentType == ComponentType.Multimedia)
    {
        args.PublishInstruction.ResolveInstruction.IncludeComponentLinks = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

过去在调用解析器之前调用旧的事件处理程序.我通过使用以下提取配置我的Tridion.ContentManager.config文件,在默认解析器之后配置我的新解析器:

<add itemType="Tridion.ContentManager.ContentManagement.Component">
    <resolvers>
        <add type="Tridion.ContentManager.Publishing.Resolving.ComponentResolver" assembly="Tridion.ContentManager.Publishing, Version=6.1.0.996, Culture=neutral, PublicKeyToken=360aac4d3354074b"/>
        <add type="UrbanCherry.Net.SDLTridion.CustomResolvers.DynamicBinaryLinkResolver" assembly="UrbanCherry.Net.SDLTridion.CustomResolvers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e7729a00ff9574fb"/>
    </resolvers>
</add>
Run Code Online (Sandbox Code Playgroud)

代码工作正常,虽然看起来反直觉(从性能角度来看)将新的解析器放在默认解析器之后,因为默认解析器需要时间来查找所有已解析的项目,只是将它们全部删除.

我尝试更改解析器的顺序,以便首先调用新的解析程序,但永远不会调用新的解析程序,并且事件日志中会出现以下错误:

Object reference not set to an instance of an object.


Component: Tridion.ContentManager.Publishing
Errorcode: 0
User: NT AUTHORITY\SYSTEM

StackTrace Information Details:
   at Tridion.ContentManager.Publishing.Resolving.ResolveEngine.ResolveItems(IEnumerable`1 items, ResolveInstruction instruction, IEnumerable`1 contexts)
   at Tridion.ContentManager.Publishing.Resolving.ResolveEngine.ResolveItem(IdentifiableObject item, ResolveInstruction instruction, PublishContext context)
   at Tridion.ContentManager.Publishing.Handling.DefaultPublishTransactionHandler.HandlePublishRequest(PublishTransaction publishTransaction)
   at Tridion.ContentManager.Publishing.Handling.DefaultPublishTransactionHandler.ProcessPublishTransaction(PublishTransaction publishTransaction)
   at Tridion.ContentManager.Publishing.Publisher.QueueMessageHandler.HandleMessage()
Run Code Online (Sandbox Code Playgroud)

有没有人知道是否可以在默认解析器之前调用自定义解析器,如果没有,你能否提出一种有效的方法来实现与旧事件处理程序相同的行为?

Séb*_*RAT 5

我们已向Tridion SDL支持提出了事件请求.请在下面找到他们的答案:

研发部门已确认您发现的问题是与迁移到SP1缺陷.现在无法再在默认解析程序之前放置自定义解析程序.此问题预计将在以后的版本中处理.