在SDL Tridion 2011中运行VBScript自定义页面

Ste*_*son 4 tridion

我们有许多自定义脚本,这些脚本是用VBScript for 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
%>
Run Code Online (Sandbox Code Playgroud)

我知道这可能是使用核心服务完成的,但是如果不了解这个代码或.Net,是否仍然可以使用VBScript来做到这一点?

rob*_*rtc 5

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