【问题标题】:Publishing page from workflow从工作流发布页面
【发布时间】:2012-12-28 08:50:45
【问题描述】:

每当创建或修改页面时,我们都希望将其发布到暂存目标。 为此,我们有手动活动“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

【问题讨论】:

  • 当您提到页面在创建或修改时没有发布时,您实际上是在完成活动并将其发送到下一个自动活动吗?
  • 这是我第一次实现工作流,在我们的工作流中,第一个活动是手动活动,用于创建或修改页面,之后我们有自动活动,在编辑脚本下我们有上面提到的代码部分。谢谢。

标签: tridion tridion-2011


【解决方案1】:

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

  1. 在 SG 中使用工作流流程定义集创建一个新页面(或编辑页面)。
    • 验证页面是否已锁定并在工作流中。从快捷方式部分,转到“我的任务”。您应该在那里看到您的页面。如果不是,那么 SG 可能缺少流程定义。
  2. 右键单击“我的任务”中的页面,然后单击“完成活动”。这应该会完成您的手动步骤并将其发送到您的自动活动。然后,该活动应执行脚本,该脚本将发布页面,然后完成自动活动,将工作流程发送到下一步。
    • 验证页面是否已发布(检查发布队列)。
    • 如果该页面尚未发布,请转到该页面并检查其状态。如果在自动活动期间发生错误,工作流项目将被“暂停”并停留在该活动上。如果您看到这一点,您可以从源“工作流脚本”下的事件日志中获取错误的详细信息。

如果遵循上述操作,并且工作流项目正确地沿着工作流流程移动(通过您的自动活动而没有错误并进入您的下一个活动)并且您仍然没有看到它被发布,那么请验证 Nuno 的建议。

另外请注意,您不必使用 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

【讨论】:

    【解决方案2】:

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

    除了查看各种日志外,建议设置 clean=false 并检查直到创建包的时间点。这会让你知道它已经达到了多远。当然会放一些调试信息,看看是否一切正常。

    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
    

    谢谢 输入电压

    【讨论】:

      【解决方案3】:

      您可以测试以下几点:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-17
        • 1970-01-01
        • 2019-05-05
        • 1970-01-01
        • 2021-12-20
        相关资源
        最近更新 更多