【问题标题】:updating a column on checkin through event handler通过事件处理程序更新签入列
【发布时间】:2009-04-15 09:43:00
【问题描述】:

我编写了以下事件处理程序代码来更新 文档库,在签入文档时:

Select Case listEvent.Type

Case SPListEventType.CheckIn

  sLog = sLog + "Newest Item is Checked-out" + vbCrLf
  Dim ApproveStatusBoolean As Boolean = True

  For Each oField In oItem.Fields
    If (oItem("ApproveStatus") = "Rejected") Then
      ApproveStatusBoolean = False ' Old document for re-review
      Exit For
    End If
  Next

  If (ApproveStatusBoolean = False) Then
    oItem("ApproveStatus") = "Submitted"
    oItem.Update()

    SmtpMail.Send(objMailMesg)
  End If
End Select

我发现如果我签入 ApproverStatus 列正在更新 文档库中的文档,但如果我签入则不会发生 当它提示“其他用户不能 在您签入之前查看您的更改。你要签到吗?”。

你能帮我知道出了什么问题如何获得专栏吗 如果我也从内部签入,则会更新。

或者有什么方法可以让我自己关闭该提示。

【问题讨论】:

    标签: sharepoint events event-handling


    【解决方案1】:

    您应该做的第一件事是确认在两种情况下都会触发相同的事件。我会通过将一些调试语句写入日志文件来做到这一点,但我也是一种老派。如果我要调试该代码,我会注释掉大部分代码,例如 SMTP 邮件语句,以提高信噪比。

    一旦解决了,你就可以挖掘根本原因

    【讨论】:

    • 是的,您使用的是什么事件? msdn.microsoft.com/en-us/library/…
    • 问题是“SmtpMail.Send(objMailMesg)”调用在这两种情况下都有效。所以我们可以假设调用“oItem("ApproveStatus") = "Submitted" oItem.Update()" 被调用。所以我们可以排除逻辑错误的情况。
    【解决方案2】:

    您的代码也可能存在问题。试试下面...

    Select Case listEvent.Type
    
    Case SPListEventType.CheckIn
    
      sLog = sLog + "Newest Item is Checked-out" + vbCrLf
    
      If (oItem("ApproveStatus") != "Rejected") Then
        oItem("ApproveStatus") = "Submitted"
        oItem.Update()
        sLog = sLog + "Item has set to ApproveStatus:Submitted" + vbCrLf
        SmtpMail.Send(objMailMesg)
      End If
    
    End Select
    

    如果您使用非 Office 文档或 Office 2003 文档,您也会得到不同的结果。您还必须测试这些。请注意,对 Office 2007 文档使用同步事件可能会导致该事件被调用,但随后是 overwritten by the old value stored within the office document 本身。

    【讨论】:

      猜你喜欢
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      • 2013-01-16
      相关资源
      最近更新 更多