要在发布期间启用自定义用户首选项,我们希望在解析步骤(在自定义解析程序内)中找出发布用户的内容(因此不是为发布服务配置的用户帐户,而是启动发布操作的用户).
要查找原始发布用户,我们需要访问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)
我的问题(最后)将是双重的:
1.我是否错过了可以确定上下文用户帐户的任何潜在点(除了PublishTransaction)?
2.我是否错过了可以根据调用IResolver.Resolve()方法的参数确定引擎的任何潜在点?
编辑:我意识到我忽略了为什么我们想要使用额外的元数据(来自用户首选项)自定义发布活动的更广泛的图片,因为它有点长故事;
我最终需要的是激活组件模板中特定版本的组件(通过向上移动版本列表并查找链接到专用标记组件的版本),但为了做到这一点,我需要知道标记组件是.出于这个原因,我们发布了标记组件(它将解析所有链接的组件和最终的页面),自定义解析器允许我们将标记组件的TCMURI推送到会话缓存中(使其可以在CT中访问).
现在,我们希望在用户级别为特定标记组件设置"首选项",以允许在此标记上下文中发布较小批量的资产(而不是一次发布链接到标记的所有内容).
因为在CT内部运行的TBB实际上有可用的Engine对象,我们可以使用Mihai的方法并确定发布用户(而不是从解析器推送标记上下文,而不是我们最初做的),并以这种方式完全绕过该问题.
我想知道为什么在解析和渲染操作之间信息可用性存在这样的差异; 两者都是同一出版背景的后续部分.我不禁觉得我忽略了一些非常基本的东西,但也许我不是,从解析器访问发布上下文或引擎根本不可能.
编辑:由Dominic推定并由Nuno确认,在解决时没有"引擎"; 因此我的问题的这一半已得到回答.离开了
我是否错过了可以确定上下文用户帐户的任何潜在点(PublishTransaction除外)?