Tridion IsPublished方法在签出组件时引发InvalidUriException

Tridion IsPublished方法在签出组件时引发InvalidUriException,tridion,tridion-2011,Tridion,Tridion 2011,我在文件夹中循环组件,并根据其发布状态搜索其DateTime类型的一个字段位于当前日期到未来7天范围内的组件 但如果任何组件被签出,那么IsPublished方法将抛出异常InvalidUriException。如果我不想通过捕获异常并继续循环来跳过这个签出组件,那么如何处理这种情况 编辑: 第三行为检出的组件抛出InvalidUriException componentUri = new TcmUri(node.Attributes[CommonConstants.Id].Value).Get

我在文件夹中循环组件,并根据其发布状态搜索其DateTime类型的一个字段位于当前日期到未来7天范围内的组件

但如果任何组件被签出,那么IsPublished方法将抛出异常
InvalidUriException
。如果我不想通过捕获异常并继续循环来跳过这个签出组件,那么如何处理这种情况

编辑: 第三行为检出的组件抛出
InvalidUriException

componentUri = new TcmUri(node.Attributes[CommonConstants.Id].Value).GetVersionlessUri();
dummyComponent = engine.GetObject(componentUri) as Component;
bool isPublished = PublishEngine.IsPublished(dummyComponent , publicationTarget);

无效uri异常表示tcm id(项)不存在。签出组件时,可能会在uri后附加次要版本号,例如tcm:xx-yy-yy-v1。所以你需要抓住它


尝试以下操作:打开签出组件的版本历史记录,查看最新版本的ID。

查看您在组件中传递的代码,它不应该是TcmUri吗?
甚至在硬编码URI时也会引发异常?

如果方法不支持版本URI或可编辑URI,则会引发无效的URI异常。使用无版本uri,我认为它应该可以正常工作。您可以使用TcmUri.GetVersionLess uri方法。
published的
IsPublished
of
PublishEngine
引发异常?请重新表述您的要求,我不太理解这个案例。componentUri=new TcmUri(node.Attributes[CommonConstants.Id].Value)。GetVersionlessUri();dummyComponent=engine.GetObject(componentUri)作为组件;bool isPublished=PublishEngine.isPublished(matchComponent,publicationTarget);第三条语句在签出组件时抛出异常。代码示例没有解释您的问题。dummyComponent似乎与代码的其余部分无关(这是错误的类型转换)。我们看不出matchComponent来自哪里。您确定这不仅仅是代码中的逻辑问题吗?您能否输入一个断点并获取导致问题的Uri的值,然后查看该项是否存在?很抱歉,我愿意检查dummyComponent的发布状态。我想将这个虚拟组件推送到我的包中,这样我就可以读取这个组件的字段。您已经看到了我附加的代码段。当我将tcm uri作为无版本并使用以下语句dummyComponent=engine.GetObject(componentUri)作为组件时;然后,它再次将v0追加到组件的末尾。PublishEngine.IsPublished不会添加v0。可能是返回项目签出版本的engine.GetObject。您能调试并查看dummyComponent的TcmUri吗。