Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sharepoint 扩展WSS3任务列表以支持定期提醒_Sharepoint_Wss_Task_Recurring_Reminders - Fatal编程技术网

Sharepoint 扩展WSS3任务列表以支持定期提醒

Sharepoint 扩展WSS3任务列表以支持定期提醒,sharepoint,wss,task,recurring,reminders,Sharepoint,Wss,Task,Recurring,Reminders,WSS 3.0允许我在将新任务添加到任务列表时向组发送电子邮件。我想做的是运行一个每周任务,发送特定时间段内到期的任务提醒,即2天、7天、14天等。我认为最简单的方法是构建一个位于WS2K3框上的小型C#应用程序,并查询WSS数据库。你知道我应该检查哪些桌子吗?更一般地说,WSS3数据库系统是否有一个总体模式 如果有人知道现有的代码解决方案,请让我知道 Thx++ Jerry不要费心直接去数据库。你将有一个非常困难的时间,因为它是没有文件记录的,不受支持的,不推荐。不过,SharePoint实际

WSS 3.0允许我在将新任务添加到任务列表时向组发送电子邮件。我想做的是运行一个每周任务,发送特定时间段内到期的任务提醒,即2天、7天、14天等。我认为最简单的方法是构建一个位于WS2K3框上的小型C#应用程序,并查询WSS数据库。你知道我应该检查哪些桌子吗?更一般地说,WSS3数据库系统是否有一个总体模式

如果有人知道现有的代码解决方案,请让我知道

Thx++


Jerry

不要费心直接去数据库。你将有一个非常困难的时间,因为它是没有文件记录的,不受支持的,不推荐。不过,SharePoint实际上有一个功能齐全的对象模型

如果引用Microsoft.SharePoint.dll(位于安装了SharePoint的计算机的全局程序集缓存中),则可以通过这种方式访问数据。首先要使用的对象是、SPList、SPQuery和SPListItem。所有这些你都可以在搜索中很容易地找到


您可以尝试的另一种不太灵活但无需代码的方法是创建几个不同的视图,其中包括即将到来的任务,然后通过GUI设置一个警报,提醒您何时将项目添加到该视图中。

不要费心尝试直接转到数据库。你将有一个非常困难的时间,因为它是没有文件记录的,不受支持的,不推荐。不过,SharePoint实际上有一个功能齐全的对象模型

如果引用Microsoft.SharePoint.dll(位于安装了SharePoint的计算机的全局程序集缓存中),则可以通过这种方式访问数据。首先要使用的对象是、SPList、SPQuery和SPListItem。所有这些你都可以在搜索中很容易地找到


您可以尝试的另一种不太灵活但无代码的方法是创建多个不同的视图,其中包括即将到来的任务,然后通过GUI设置一个警报,提醒您何时将项目添加到该视图中。

每当您需要在sharepoint中定期执行某些内容时,100次中有99次您需要构建TimerJob。这些是在SharePoint内部运行的计划任务,您可以创建自己的任务,然后使用feature+featurereceiver实际“安装”timoerjob(定义)并为其分配计划

欲知更多信息,请参阅安德鲁·康奈尔的


注意:切勿直接查询/更新与SharePoint相关的数据库!这将使您“不受支持”,即如果发生任何事情,microsoft将收取(大量)费用来修复它,而不是要求定期支持。(如果您是MSDN订户,您每年最多可以接到4个免费支持电话)

每当您需要在sharepoint中定期执行某些内容时,100次中有99次您都需要构建TimerJob。这些是在SharePoint内部运行的计划任务,您可以创建自己的任务,然后使用feature+featurereceiver实际“安装”timoerjob(定义)并为其分配计划

欲知更多信息,请参阅安德鲁·康奈尔的

注意:切勿直接查询/更新与SharePoint相关的数据库!这将使您“不受支持”,即如果发生任何事情,microsoft将收取(大量)费用来修复它,而不是要求定期支持。(如果您是MSDN订户,您每年最多可以接到4个免费支持电话)

我的建议:

  • 不要创建控制台应用程序,创建从
    SPJobDefinition
    继承的类
  • SPJobLockType.Job
    设置为此计时器,这将允许作业在整个服务器场中仅执行一次,即使您正在运行多个前端服务器
  • 在计时器作业中,打开所需的
    SPSite
    SPWeb
    对象,然后找到
    SPList
    \
  • 使用
    SPQuery
    只过滤掉你需要的项目-我相信,你必须过滤掉那些状态为=完整的
  • 循环浏览结果集合(类型为
    SPListItemCollection
    ),应用规则,检查
    DueDate
    Datetime。现在,发送电子邮件
  • 由于任务只是一个
    SPListItem
    ,因此它有一个
    Properties
    属性,实际上是一个属性包-您可以添加任何需要的属性。因此,添加一个属性
    My_LastSentMemberDate
    。使用此属性检查您是否发送了太多的“公司垃圾邮件”:-)
  • 要在SharePoint场中安装
    SPJobDefinition
    ,可以使用PowerShell脚本。如果需要,我可以给你举个例子
不要忘记
Threading.Thread.CurrentThread.CurrentCulture=您的_SPWeb_Instance.Locale
,否则,如果web具有不同的区域设置,则日期比较可能无法工作

编辑:这是我的应用程序中典型的提醒方式:

Public Class TypicalTimer
    Inherits SPJobDefinition

    Public Sub New(ByVal spJobName As String, ByVal opApplication As SPWebApplication)
        'this way we can explicitly specify we need to lock the JOB
        MyBase.New(spJobName, opApplication, Nothing, SPJobLockType.Job)
    End Sub

    Public Overrides Sub Execute(ByVal opGuid As System.Guid)
        'whatever functionality is there in the base class...
        MyBase.Execute(Guid.Empty)
        Try
            Using oSite As SPSite = New SPSite("http://yourserver/sites/yoursite/subsite")
                Using oWeb As SPWeb = oSite.OpenWeb()
                    Threading.Thread.CurrentThread.CurrentCulture = oWeb.Locale
                    'find the task list and read the "suspects"
                    Dim oTasks As SPList = oWeb.Lists("YourTaskListTitle")
                    Dim oQuery As New SPQuery()
                    oQuery.Query = "<Where><Neq><FieldRef Name='Status'/>" & _
                                    "<Value Type='Choice'>Complete</Value></Neq></Where>"
                    Dim oUndoneTasks As SPListItemCollection = oTasks.GetItems(oQuery)

                    'extra filtering of the suspects.
                    'this can also be done in the query, but I don't know your rules
                    For Each oUndoneTask As SPListItem In oUndoneTasks
                        If oUndoneTask(SPBuiltInFieldId.TaskDueDate) IsNot Nothing AndAlso _
                            CDate(oUndoneTask(SPBuiltInFieldId.TaskDueDate)) < Now().Date Then
                            ' this is where you send the mail
                        End If
                    Next
                End Using
            End Using
        Catch ex As Exception
            MyErrorHelper.LogMessage(ex)
        End Try
    End Sub
End Class
我的建议是:

  • 不要创建控制台应用程序,创建从
    SPJobDefinition
    继承的类
  • SPJobLockType.Job
    设置为此计时器,这将允许作业在整个服务器场中仅执行一次,即使您正在运行多个前端服务器
  • 在计时器作业中,打开所需的
    SPSite
    SPWeb
    对象,然后找到
    SPList
    \
  • 使用
    SPQuery
    只过滤掉你需要的项目-我相信,你必须过滤掉那些状态为=完整的
  • 循环浏览结果集合(类型为
    SPListItemCollection
    ),应用规则,检查
    DueDate
    Datetime。现在,发送电子邮件
  • 由于任务只是一个
    SPListItem
    ,因此它有一个
    Properties
    属性,这实际上是一个属性包-您可以添加您需要的任何属性。因此,添加一个属性
    My\u LastSentR
    
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Administration")
    [System.Reflection.Assembly]::LoadWithPartialName("Your.Assembly.Name.Here")
    $spsite= [Microsoft.SharePoint.SPSite]("http://yourserver/sites/yoursite/subsite")
    
    $params = [System.String]("This text shows up in your timer job list (in Central Admin)", $spsite.WebApplication
    $newTaskLoggerJob = new-object -type Your.Namespace.TypicalTimer -argumentList $params
    
    $schedule = new-object Microsoft.SharePoint.SPDailySchedule
    $schedule.BeginHour = 8
    $schedule.BeginMinute = 0
    $schedule.BeginSecond = 0
    $schedule.EndHour = 8
    $schedule.EndMinute = 59
    $schedule.EndSecond = 59
    
    $newTaskLoggerJob.Schedule = $schedule
    $newTaskLoggerJob.Update()