从工作流发布页面

时间:2012-12-28 08:50:45

标签: tridion tridion-2011

每当创建或修改页面时,我们都希望将其发布到Staging目标。 为此,我们有手动活动“Create or Edit Page”,然后我们有自动活动“Publish to Staging”,我们已经编写了以下代码,但在创建或修改页面时未发布。此外,没有错误显示如何调试出错的地方。

' Script for Automatic Activity Content Manager Workflow

Set oTDSE = CreateObject("TDS.TDSE")
Call oTDSE.Initialize
Set ObjCurrentItem = CurrentWorkItem.GetItem(3)
sDestinationServer = "tcm:0-2-65538"
Set oPage = oTDSE.GetObject(ObjCurrentItem.ID, 3) 

Call oPage.Publish(sDestinationServer, True, True, True)

FinishActivity "Publish to Staging for Review"

set oPage = Nothing
set ObjCurrentItem = Nothing
set oTDSE = Nothing

3 个答案:

答案 0 :(得分:3)

由于您提到这是您的第一个工作流程实现,因此以下是其他一些尝试/查找的基础知识。由于这是一个页面工作流程,我假设您正在创建/编辑页面的结构组已经与该SG工作流程选项卡中的工作流程过程定义相关联。

  1. 使用工作流程流程定义集在SG中创建新页面(或编辑页面)。
    • 确认页面已锁定且位于工作流程中。从快捷方式部分,转到“我的任务”。你应该在那里看到你的页面。如果没有,则SG可能缺少流程定义。
  2. 右键单击“我的任务”中的页面,然后单击“完成活动”。这应该完成您的手动步骤并将其发送到您的自动活动。然后,该Activity应该执行脚本,该脚本将发布页面,然后完成自动活动,将工作流程过程发送到下一步。
    • 验证页面是否已发布(检查发布队列)。
    • 如果页面尚未发布,请转到该页面并检查其状态。如果在自动活动期间发生错误,则工作流项将被“暂停”并停留在该活动上。如果您看到这一点,可以从“工作流程脚本”源下的事件日志中获取错误的详细信息。
  3. 如果按照上述步骤操作,并且工作流程项目正在沿着工作流程正确移动(通过您的自动活动而不会出现错误并进入下一个活动)并且您仍然没有看到它被发布,那么请验证Nuno建议的内容。 / p>

    另请注意,您不必使用TDSE对象打开页面,因为您已经通过CurrentWorkItem.GetItem()方法打开了该页面...您的脚本可以缩短:

    Dim ObjCurrentItem
    Set ObjCurrentItem = CurrentWorkItem.GetItem()
    
    Call ObjCurrentItem.Publish("tcm:0-2-65538", True, True, True)
    FinishActivity "Publish to Staging for Review"
    
    Set ObjCurrentItem = Nothing
    

答案 1 :(得分:1)

正如您所看到的,这是一个非常古老的代码,但可以通过Workflow发布对象。 “此代码还会发布引用此项目的页面。”

除了查看各种日志之外,建议设置clean = false并检查包的创建点。这会让你知道它到达了多远。 Ofcourse放了一些调试消息,看看是否一切都运行良好。

Sub WFPublishPages(  ByRef oComponent,  ByRef targets,  ByRef activateBlueprinting,  ByRef activateWorkflow,  ByRef rollbackOnFailure,  ByRef publishTime,  ByRef unpublishTime,  ByRef deployTime,  ByRef resolveComponentLinks,  ByRef priority,  ByRef ignoreRenderFailures,  ByRef maximumRenderFailures )



'    If IsNull(publishTime) Then
'        publishTime = 0
'    End If
'    If IsNull(unpublishTime) Then
'        unpublishTime = 0
'    End If
'    If IsNull(deployTime) Then
'        deployTime  = 0
'    End If
'    If IsNull(resolveComponentLinks) Then
'        resolveComponentLinks = True
'    End If
'    If IsNull(priority) Then
'        priority = PublishPriorityNormal 
'    End If
'    If IsNull(ignoreRenderFailures) Then
'        ignoreRenderFailures = false
'    End If
'    Is IsNull(maximumRenderFailures) Then
'        maximumRenderFailures = 0
'    End If


    Dim Debugstring 
    Debugstring = ""

    Dim oLRF  
    Set oLRF = TDSE.CreateListRowFilter()

        Call oLRF.SetCondition("ItemType", ItemTypePage)
        Call oLRF.SetCondition("OnlyLatestItems", True)
        Dim oXML
        Set oXML = CreateObject("MSXML2.DOMDocument.6.0")
            Call oXML.setProperty("SelectionNamespaces", "xmlns:tcm=""http://www.tridion.com/ContentManager/5.0"" xmlns:xlink=""http://www.w3.org/1999/xlink""")

            Call oXML.loadXML(oComponent.Info.GetListUsingItems(XMLListID, oLRF))

            Dim oNode 
            Dim oPage 
            Dim strPageID
            Debugstring = Debugstring & " DUBUG: ComponentID " & oComponent.ID & vbCrLf
            For Each oNode In oXML.selectNodes("/tcm:ListUsingItems/tcm:Item")
                strPageID = oNode.selectSingleNode("@ID").text
                Debugstring = Debugstring & " DUBUG: PageID " & strPageID & vbCrLf
                Set oPage = TDSE.GetObject(strPageID, OpenModeView )

                Debugstring = Debugstring & " DUBUG: oPage.Title " 
                Debugstring = Debugstring & oPage.Title 
                Debugstring = Debugstring & vbCrLf


                    Call oPage.Publish(targets , activateBlueprinting, activateWorkflow, rollbackOnFailure, publishTime, unpublishTime, deployTime, resolveComponentLinks, priority,ignoreRenderFailures,maximumRenderFailures )
                    Call WriteLog("Publish  Page: " & oPage.Title & " for component " & oComponent.Title &  " - renderTime is " & publishTime & " - deployTime is " & deployTime)
                Set oPage = Nothing
                Set oNode = Nothing          
            Next

        Set oXML = Nothing
    Set oLRF = Nothing

由于 VIN

答案 2 :(得分:0)

这里有一些你可以测试的东西:

  1. 以调试模式运行发布者(停止服务,打开命令提示符,运行c:\Program Files (x86)\Tridion\bin\TcmPublisher /debug)并检查错误
  2. 尝试从"我的任务"中发布页面。图
  3. 检查您网页的当前审批状态是否高于或等于发布目标"最低审批状态"