Sharepoint 通过事件处理程序更新签入时的列

Sharepoint 通过事件处理程序更新签入时的列,sharepoint,events,event-handling,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

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

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 document提示“其他用户不能”时,从word document中删除文档 在您签入之前查看您的更改。是否签入?“

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


或者是否有任何方法可以关闭提示本身。

您应该做的第一件事是在两种情况下都触发相同的事件。我会通过向日志文件中写入一些调试语句来实现这一点,但我也有点像老派。如果要调试该代码,我会对大多数代码(如SMTP邮件语句)进行注释,以提高信噪比


一旦处理好了,您就可以深入研究根本原因了。您应该做的第一件事是确定在这两种情况下都触发了相同的事件。我会通过向日志文件中写入一些调试语句来实现这一点,但我也有点像老派。如果要调试该代码,我会对大多数代码(如SMTP邮件语句)进行注释,以提高信噪比


一旦处理完毕,您就可以深入研究根本原因了,您的代码也可能存在问题。试试下面的

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文档使用同步事件可能会导致调用事件,但随后会调用事件本身。

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

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文档使用同步事件可能会导致调用事件,但随后会调用事件本身。

是的,您使用的是什么事件?问题是“SmtpMail.Send(objMailMesg)”调用在这两种情况下都有效。所以我们可以假设调用“oItem(“ApproveStatus”)=“Submitted”oItem.Update()”正在被调用。所以我们可以排除逻辑错误的情况。是的,您使用的是什么事件?问题是“SmtpMail.Send(objMailMesg)”调用在这两种情况下都有效。所以我们可以假设调用“oItem(“ApproveStatus”)=“Submitted”oItem.Update()”正在被调用。所以我们可以排除逻辑错误的情况。