小编Bjø*_*len的帖子

如何确定自定义解析程序中的发布用户/访问引擎

要在发布期间启用自定义用户首选项,我们希望在解析步骤(在自定义解析程序内)中找出发布用户的内容(因此不是为发布服务配置的用户帐户,而是启动发布操作的用户).

要查找原始发布用户,我们需要访问PublishTransaction对象(特别是Creator属性); 我们无法在自定义解析程序中使用Session中的User属性,因为此Session是由Publisher服务创建的(并且会为我们提供服务帐户).

为了找到当前的PublishTransaction Mihai为我们提供了一个优秀的黑客.在本质上; 如果我们能够掌握Engine对象,我们就可以确定上下文发布事务.

在我们的自定义解析器中,使用四个参数调用Resolve方法:

public void Resolve(
    IdentifiableObject item,
    ResolveInstruction instruction, 
    PublishContext context, 
    ISet<ResolvedItem> resolvedItems
) { }
Run Code Online (Sandbox Code Playgroud)
  • 该项可用于向我们提供Session对象,但IdentifiableObject和Session都不包含对Engine的引用.
  • resolve指令只是解析的一组数据属性.
  • 发布上下文(遗憾的是不是PublishingContext)仅保存发布和发布目标.
  • ResolvedItem可以让我们再次访问Session而不是Engine.

我的问题(最后)将是双重的:
1.我是否错过了可以确定上下文用户帐户的任何潜在点(除了PublishTransaction)?
2.我是否错过了可以根据调用IResolver.Resolve()方法的参数确定引擎的任何潜在点?


编辑:我意识到我忽略了为什么我们想要使用额外的元数据(来自用户首选项)自定义发布活动的更广泛的图片,因为它有点长故事;

我最终需要的是激活组件模板中特定版本的组件(通过向上移动版本列表并查找链接到专用标记组件的版本),但为了做到这一点,我需要知道标记组件是.出于这个原因,我们发布了标记组件(它将解析所有链接的组件和最终的页面),自定义解析器允许我们将标记组件的TCMURI推送到会话缓存中(使其可以在CT中访问).

现在,我们希望在用户级别为特定标记组件设置"首选项",以允许在此标记上下文中发布较小批量的资产(而不是一次发布链接到标记的所有内容).

因为在CT内部运行的TBB实际上有可用的Engine对象,我们可以使用Mihai的方法并确定发布用户(而不是从解析器推送标记上下文,而不是我们最初做的),并以这种方式完全绕过该问题.

我想知道为什么在解析和渲染操作之间信息可用性存在这样的差异; 两者都是同一出版背景的后续部分.我不禁觉得我忽略了一些非常基本的东西,但也许我不是,从解析器访问发布上下文或引擎根本不可能.


编辑:由Dominic推定并由Nuno确认,在解决时没有"引擎"; 因此我的问题的这一半已得到回答.离开了

我是否错过了可以确定上下文用户帐户的任何潜在点(PublishTransaction除外)?

resolver tridion

5
推荐指数
1
解决办法
233
查看次数

标签 统计

resolver ×1

tridion ×1