Tridion 如何获取修订者的详细信息?

Tridion 如何获取修订者的详细信息?,tridion,tridion-2011,Tridion,Tridion 2011,我正在尝试获取页面的修订者和签出用户用户详细信息。下面是我的代码 Page Page=engine.GetObject(package.GetValue(“Page.ID”))作为页面; 字符串修改器=page.revisor.Description; 字符串currentuser=page.CheckOutUser.Description; 目前,该页面由用户“A”更新 用户“B”现在已签出页面。但是我将修订者和签出用户设置为“B”,但是修订者应该是“A” “page.Revisor.Des

我正在尝试获取页面的
修订者
签出用户
用户详细信息。下面是我的代码

Page Page=engine.GetObject(package.GetValue(“Page.ID”))作为页面;
字符串修改器=page.revisor.Description;
字符串currentuser=page.CheckOutUser.Description;
目前,该页面由用户“A”更新 用户“B”现在已签出页面。但是我将
修订者
签出用户
设置为“B”,但是修订者应该是“A”

“page.Revisor.Description”正在考虑签出版本而不是当前版本


如何获得正确的修订者详细信息?

如果您正在阅读页面的签入版本(即,您的ID为“tcm:xx-xx-64”),它将按照您的预期工作。H如果您正在阅读动态版本(即签出版本-“tcm:xx-xx-64-v0”),则当
Revisor
checkout用户
相同时,您将看到这种情况。原因是页面的动态版本与签入版本不同。动态版本是唯一的临时对象,其中所有操作都是由签出项目的用户执行的,因此,此版本的页面的
Revisor
CheckOutUser
就是签出该页面的用户。

TOM.NET API文档为
VersionedItem.Revisor
属性声明了以下内容:获取一个值,指示上次修改此(此版本)项的用户

因此,实际上,您将获得此时签出该项目的用户,而不是在此之前最后一次修改该项目的用户

因此,如果您需要以前的修订者,您应该打开该项目的版本,从其历史中读取它。您只需使用
Session.GetObject(TcmUri)
即可使用以前的版本创建TcmUri的新实例:
TcmUri(itemId、itemType、publicationId、version)


顺便说一下,您给出的代码示例来自一个模板,但您指出您正在事件处理程序中使用它(事件处理程序中没有引擎)。在模板中,您将不会得到此结果,因为发布该项目时应使用该项目的上次签入版本。对于预览,您将看到与现在相同的结果,因为当前(已签出)版本同样适用于该结果。

谢谢发布@user1428019。你可能也对这个项目感兴趣。如果您有时间,请使用相同的SO帐户注册。是的,Bart,我知道事件处理程序中没有引擎,我错误地添加了这一行,我只是试图从模板中获取正确的信息,然后我会将其转换为事件处理程序。请注意,模板代码和事件处理程序之间的行为会有所不同,这也取决于您订阅的阶段。正如模板的预览和发布之间存在差异一样。谢谢Bart。除了将dll上载到服务器并重置IIS之外,还有其他方法对事件处理程序代码进行单元测试吗?这会影响到在Tridion CME中工作的其他用户。实际上,您无法真正对事件处理程序代码进行单元测试,如果您有一个开发环境,那么您应该在这里编写代码,而不会影响生产环境的作者和编辑。但是,您确实可能会妨碍该服务器上的其他开发人员。在模板中测试代码并不是一个非常坏的主意,只是要注意,您可能会在行为上遇到一些差异;字符串LastUser=vi.Revisor.Description;巴特,这对吗?获取最后一个修饰符描述。我相信我们也使用“次要”版本来指代这些动态的中间更新。@alvinr实际上不是,次要版本指代“1.3”、“2.6”等等,它只对签出用户可见。动态版本-为D-v0。这是最新的次要版本。例如,其他用户可以查看是否有动态版本,但用户无法查看是“2.1”还是“2.6”