Tridion 如何在.NET中重写VBScript GetObject方法

Tridion 如何在.NET中重写VBScript GetObject方法,tridion,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.GetKeywordByTitl

我有下面的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\u UKEN\u PUB是WebDavPath,现在在VBScript GetObject方法中,我们可以选择传递三个参数:1)Item.ID、2)tdsddefines.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;
我能够创建类别对象,但当我试图使关键字对象失败并给出对象引用错误时


我们是否有任何类或方法可以像VBScript GetObject一样工作,从传递的webdavpath生成对象,或者有人可以提供此方面的示例代码。

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

因此:


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

因此:


我认为你的问题在于:

keyword = engine.GetObject(Constants.WEBDAV_UKEN_PUB) as Keyword;
您正在使用出版物的WEBDav URL,然后尝试动态转换为关键字。您无法将发布强制转换为关键字,因此强制转换失败,并且您的关键字变量被分配为null

以这种方式使用动态强制转换是愚弄自己的简单方法。当您在编译时不知道所需的类型时,应该使用“As”关键字(C#关键字而不是Tridion关键字)。如果您知道需要关键字类型的项,则应编写:

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

这样-当强制转换失败时,您将得到一个正确识别问题的异常

我认为你的问题在于:

keyword = engine.GetObject(Constants.WEBDAV_UKEN_PUB) as Keyword;
您正在使用出版物的WEBDav URL,然后尝试动态转换为关键字。您无法将发布强制转换为关键字,因此强制转换失败,并且您的关键字变量被分配为null

以这种方式使用动态强制转换是愚弄自己的简单方法。当您在编译时不知道所需的类型时,应该使用“As”关键字(C#关键字而不是Tridion关键字)。如果您知道需要关键字类型的项,则应编写:

keyword = (Keyword)engine.GetObject(Constants.WEBDAV_UKEN_PUB);
这样-当强制转换失败时,您将得到一个正确识别问题的异常