4

我们有许多用 VBScript 为 SDL Tridion 5.2 编写的自定义脚本。这些脚本使用 TOM API 对 Tridion 对象执行大量批量操作。

在最近升级到 2011 SP1 之后,我们现在需要更改大量组件演示中使用的组件模板,最好的方法是运行脚本来更新必要的页面和组件演示。

以前,我们可以运行一些类似于以下代码的 VBScript 来进行此更改。在 2011 年,我们还能运行这些脚本来进行这种改变吗?

是否像在 Content Manager 服务器 (Windows 2008 R2) 上启用 Classic ASP 一样简单?

<%
'##### CREATE TRIDION API OBJECTS #####
Set TDSE = Server.CreateObject("TDS.TDSE")
Call TDSE.Initialize()

'##### CALL FUNCTION - PASS IN STRUCTURE GROUP STARTING POINT #####
Call UpdateComponentTemplates(TDSE.GetObject("tcm:44-39929-4", OpenModeEditWithFallback, "tcm:0-44-1"))

Sub UpdateComponentTemplates(arg_strStructureGroup)
    '##### GET ALL ITEMS WITHIN SPECIFIED STRUCTURE GROUP #####
    For Each objItem In arg_strStructureGroup.GetItems
        '##### IF ITEM IS A STRUCTURE GROUP #####
        If TypeName(objItem) = "StructureGroup" Then
            '##### CALL THE FUNCTION AGAIN, PASSING IN THE STRUCTURE GROUP #####
            Call UpdateComponentTemplates(objItem)
        End If
        '##### IF ITEM IS A PAGE #####
        If TypeName(objItem) = "Page" Then
            For Each objComponent In objItem.ComponentPresentations
                '##### CHECK EXISTING COMPONENT TEMPLATE & UPDATE WITH THE NEW ONE #####
                If objComponent.ComponentTemplate.ID = "tcm:44-493-32" Then
                    'objComponent.ComponentTemplate = "tcm:44-216181-32"
                    'objItem.Save(True)
                    '##### OUTPUT STATUS MESSAGE #####
                    Response.Write(objItem.Title & " ......................... UPDATED<br />") & vbCrlf
                    Response.Flush()
                End If
            Next
        End If
    Next
End Sub

Response.Write("<p>Job Done!!!</p>") & vbCrlf

'##### CLEAN UP OBJECTS #####
Set TDSE = Nothing
%>

我知道这可能可以使用核心服务来完成,但是在不了解此代码或 .Net 的情况下,是否仍然可以使用 VBScript 来执行此操作?

4

2 回答 2

5

是的,这在 2011 年有效,因为仍然支持 TOM COM+ API。我最近在 2011 系统上成功运行了一个非常相似的脚本。如果您要更新很多项目,您可能希望将其移动到 .net 控制台应用程序,因为模板或网页可能会超时。如果这样做,请确保对所有 TOM 对象使用 marshal.releaseobject。

于 2012-12-12T14:39:02.840 回答
2

正如罗伯特所说,这将起作用。如果您不想启用经典 ASP,您可以考虑将代码片段放在页面或组件模板中,然后在以特权用户身份登录时使用新模板预览项目。这将以相同的方式执行模板。尽管如果您预计执行时间很长,您可能会得到类似于 Robert 描述的 ASP 超时的模板超时。

完成后请确保删除或隐藏您的“代码”模板。

于 2012-12-12T15:46:13.467 回答