如何在.NET中覆盖VBScript GetObject方法

时间:2011-10-11 13:48:07

标签: tridion

我在VBScript中有以下代码

' Retrieve the keyword category for page section names
Set SectionCat = TDSE.GetObject(WebdavToUri(getPublicationWebDav(WEBDAV_SECTION_CAT)), 1)
' Retrieve the localized section keyword
Set SectionKeyword = SectionCat.GetKeywordByTitle(meta)

' Open the English translated section keyword
Set SectionKeyword = TDSE.GetObject(SectionKeyword.Id, 1, WEBDAV_UKEN_PUB)

SectionName = SectionKeyword.Title

其中 WEBDAV_UKEN_PUB 是WebDavPath,现在在VBScript GetObject方法中我们可以选择传递三个参数1)Item.ID,2)TDSDefines.OpenModeEditWithFallback和3)WebDavPath从哪里制作对象

现在我想在2009年.Net模板中编写相同的逻辑,下面是示例代码,我正在尝试写但不能摆脱VBScript对象。

Category cat = engine.GetSession().GetObject(WebdavToUri(getPublicationWebDav(Constants.WEBDAV_SECTION_CAT,package,engine), engine)) as Category;
if (cat != null)
{
//_log.Info("Category" + cat.Title);
Keyword keyword = cat.GetKeywordByTitle(meta);
//_log.Info("keyword 1" + keyword.Title);

keyword = engine.GetObject(Constants.WEBDAV_UKEN_PUB) as Keyword;

//_log.Info("keyword 2 " + keyword.Title);
if (keyword != null)
{
sectionName = keyword.Title;
}
keyword = null;

我能够创建Category对象,但是当我尝试使Keyword对象失败并给出对象引用错误时。

我们是否有任何类似于VBScript GetObject的类或方法,它将通过传递的webdavpath创建Object,或者有人可以为此提供示例代码。

2 个答案:

答案 0 :(得分:2)

我认为你的问题在这里:

keyword = engine.GetObject(Constants.WEBDAV_UKEN_PUB) as Keyword;

您正在使用发布的WEBDav URL,然后尝试动态转换为关键字。您无法将发布转换为关键字,因此转换失败并且您的关键字变量被指定为null。

以这种方式使用动态强制转换是一种欺骗自己的简单方法。当您在编译时不知道您期望的类型时,应使用“As”关键字(C#关键字而不是Tridion关键字)。如果你知道你期望一个Keyword类型的项目,那么你应该写:

keyword = (Keyword)engine.GetObject(Constants.WEBDAV_UKEN_PUB);

这种方式 - 当转换失败时,您将获得一个正确识别问题的异常。

答案 1 :(得分:1)

在TOM.NET中,我们无法获取对象并指定要从哪个pub读取它,我们需要将TcmUri修改为在上下文中。

所以:

Repository context = (Repository)session.GetObject(WEBDAV_UKEN_PUB);
TcmUri keywordInContext = new TcmUri(keyword.Id.ItemId, keyword.Id.ItemType, context.Id.ItemId);
Keyword keyword = (Keyword)session.GetObject(keywordInContext);