通过事件处理程序更新checkin上的列

时间:2009-04-14 17:00:15

标签: sharepoint events event-handling

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

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列正在更新 来自文档库的文档,但如果我签入,则不会发生 文件来自word文档,当它承诺“其他用户不能 看看你的变化,直到你签到。你想签到吗?“。

你可以帮我知道如何获得专栏有什么问题吗? 如果我从里面办理登记也会更新。

或者有什么办法可以让我自己关闭这个提示。

2 个答案:

答案 0 :(得分:1)

您应该做的第一件事就是变更两种情况下都会触发相同的事件。我会通过将一些调试语句写入日志文件来做到这一点,但我也是一个学校。如果我要调试该代码,我会将大部分代码(如SMTP邮件声明)取消,以提高信噪比。

一旦处理完毕,你就可以深入了解根本原因

答案 1 :(得分:0)

您的代码可能还有问题。请尝试以下方法......

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本身。