Frage

Mit WSS 3.0 kann ich eine E -Mail an eine Gruppe senden, wenn eine neue Aufgabe zu einer Aufgabenliste hinzugefügt wird. Ich möchte eine wöchentliche Aufgabe ausführen, die Erinnerungen an Aufgaben ausführt, die innerhalb bestimmter Zeiträume, dh 2 Tage, 7 Tage, 14 Tage usw. fällig sind Die WS2K3 -Box und fragt die WSS -Datenbank ab. Irgendwelche Ideen, welche Tabellen ich überprüfen sollte? Im Allgemeinen gibt es ein Gesamtschema für das WSS3 -Datenbanksystem?

Wenn jemand eine vorhandene Lösung mit Code kennt, lassen Sie es mich bitte wissen.

Thx ++

Jerry

War es hilfreich?

Lösung

Meine Vorschläge:

  • Erstellen Sie keine Konsolen -App, erstellen Sie eine Klasse, die von erbt SPJobDefinition.
  • einstellen SPJobLockType.Job Für diesen Timer wird dies gewährt, dass der Job nur einmal auf dem gesamten Farm ausgeführt wird, auch wenn Sie mehrere Front-End-Server betreiben
  • Öffnen Sie im Timer -Job die SPSite, SPWeb Objekte, die Sie benötigen, finden Sie dann das SPList\
  • Verwendung SPQuery Filtern Sie nur die Artikel heraus, die Sie benötigen - ich glaube, Sie müssen diejenigen herausfiltern, bei denen Status ist! = vollständig
  • Schaufeln Sie durch die Ergebnissammlung (die vom Typ sein wird SPListItemCollection, Wenden Sie Ihre Regeln an, überprüfen Sie die DueDate und Datetime.Now, Senden Sie die E-Mails
  • Da eine Aufgabe einfach eine ist SPListItem, es hat ein Properties Eigenschaft, das eigentlich eine Grundstückstasche ist - Sie können alle Eigenschaften hinzufügen, die Sie benötigen. Fügen Sie also eine Eigenschaft hinzu My_LastSentReminderDate. Verwenden Sie diese Eigenschaft, um zu überprüfen, ob Sie nicht zu viel von "Corporate Spam" senden :-)
  • So installieren Sie Ihre SPJobDefinition In einer SharePoint -Farm können Sie ein PowerShell -Skript verwenden. Ich kann Ihnen bei Bedarf Beispiele geben.

Vergiss es nicht Threading.Thread.CurrentThread.CurrentCulture = Your_SPWeb_Instance.Locale, Andernfalls funktionieren Vergleiche möglicherweise nicht, wenn das Web ein anderes Gebietsschema hat!

Bearbeiten: So sieht eine typische Erinnerung in meinen Anwendungen aus:

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

Um einen Timer -Job zu registrieren, verwende ich normalerweise diese Art von Skript:

[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()

Andere Tipps

Jedes Mal, wenn Sie etwas in SharePoint benötigen, das regelmäßig ausgeführt wird, müssen Sie 99 Mal von 100 einen Timerjob erstellen. Dies sind geplante Aufgaben, die in SharePoint ausgeführt werden.

Weitere Informationen: Siehe Andrew Connells Artikel über Timerjobs.

PS Abfragen /aktualisieren Sie niemals die Datenbanken in Bezug auf SharePoint direkt! Dies wird Sie "nicht unterstützt", dh wenn etwas passiert, wird Microsoft (viel) Geld für die Behebung berechnen, anstatt um regelmäßige Unterstützung zu bitten. (Wenn Sie einen MSDN -Abonnenten sagen, erhalten Sie bis zu 4 kostenlose Support -Anrufe pro Jahr).

Versuchen Sie nicht, direkt zur Datenbank zu gehen. Sie werden es sehr schwer fällt, weil es undokumentiert, nicht unterstützt und nicht empfohlen wird. SharePoint verfügt jedoch über ein vollständig vorgestellter Objektmodell.

Wenn Sie auf Microsoft.SharePoint.dll (befindet sich im globalen Montage -Cache eines Computers mit installiertem SharePoint) verweisen, können Sie auf die Daten zugreifen. Die Objekte, mit denen Sie beginnen möchten, sind Sp -Site, SPWeb, Splist, Spquery und Splistitem. All das können Sie sehr leicht finden http://msdn.microsoft.com In einer Suche.

Eine weitere weniger flexible, aber codefreie Möglichkeit, die Sie ausprobieren können, besteht darin, verschiedene Ansichten zu erstellen, die bevorstehende Aufgaben enthalten und dann über die GUI eine Warnung einrichten, wenn Elemente zu dieser Ansicht hinzugefügt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top