У меня есть настраиваемый резолвер, настроенный для SDL Tridion 2011, который предназначен для предотвращения публикации страниц и компонентов , использующих мультимедийный компонент , когда пользовательпубликует связанный мультимедийный компонент .Этот пользовательский резолвер заменяет старый обработчик событий, который выглядел следующим образом:
private void MMCmpPublishHandler(Component source, PublishEventArgs args,
EventPhases phase)
{
if (source.ComponentType == ComponentType.Multimedia)
{
args.PublishInstruction.ResolveInstruction.IncludeComponentLinks = false;
}
}
Старый обработчик событий вызывался до вызова распознавателей.Я настроил мой новый распознаватель так, чтобы он запускался после задания по умолчанию распознавателя, настроив мой файл 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>
Код работает нормально, хотя он кажется противоинтуитивным (из представленияв перспективе), чтобы разместить новый распознаватель после распознавателя по умолчанию, так как распознаватель по умолчанию требует времени, чтобы найти все разрешенные элементы, только чтобы все они были удалены снова.
Я попытался изменить порядок распознавателей, чтобы новый распознавательсначала вызывается, но новый распознаватель никогда не вызывается, и в журнале событий появляется следующая ошибка:
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()
Кто-нибудь знает, возможно ли вызвать пользовательский преобразователь перед преобразователем по умолчанию, и еслиНе можете ли вы предложить эффективный способ достижения того же поведения, что и старый обработчик событий?