Запуск пользовательских страниц VBScript в SDL Tridion 2011

У нас есть ряд пользовательских скриптов, написанных на VBScript для SDL Tridion 5.2. Эти скрипты используют TOM API для выполнения ряда массовых действий над объектами Tridion.

После недавнего обновления до 2011 SP1 у нас появилось требование изменить шаблон компонента, используемый в большом количестве презентаций компонентов, и лучший способ сделать это — запустить скрипт для обновления необходимых страниц и презентаций компонентов.

Раньше мы могли запустить некоторый код VBScript, подобный приведенному ниже коду, чтобы внести это изменение. Можем ли мы в 2011 году запускать эти сценарии, чтобы внести подобные изменения?

Это так же просто, как включить классический ASP на сервере Content Manager (Windows 2008 R2)?

<%
'##### 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
%>

Я знаю, что это, вероятно, можно сделать с помощью Core Service, но без знания этого кода или .Net возможно ли использовать для этого VBScript?


person Stef Robinson    schedule 12.12.2012    source источник
comment
Почему бы тебе просто не попробовать? Или вы пробовали и есть проблема?   -  person Frank van Puffelen    schedule 12.12.2012


Ответы (2)


Да, это работает в версии 2011, поскольку API TOM COM+ все еще поддерживается. Недавно я успешно запустил очень похожий скрипт в системе 2011 года. Если вы обновляете много элементов, вы можете переместить их в консольное приложение .net, поскольку время ожидания шаблона или веб-страницы может истечь. Если вы сделаете это, обязательно используйте marshal.releaseobject для всех объектов TOM.

person robrtc    schedule 12.12.2012

Это будет работать, как заявил Роберт. Если вы не хотите включать классический ASP, вы можете поместить фрагмент кода в шаблон страницы или компонента, а затем просмотреть элемент с новым шаблоном, войдя в систему как привилегированный пользователь. Это выполнит шаблон таким же образом. Хотя, если вы ожидаете очень длительного времени выполнения, вы, скорее всего, получите тайм-ауты шаблона, подобные тем, которые описывает Роберт для тайм-аутов ASP.

Просто не забудьте удалить или скрыть свой шаблон «кода» после того, как закончите.

person GourmetCMS    schedule 12.12.2012
comment
Или вы можете поместить его в файл *.vbs и запустить с помощью cscript. - person Quirijn; 12.12.2012