Question

WSS 3.0 me permet d'envoyer un e-mail à un groupe quand une nouvelle tâche est ajoutée à une liste de tâches. Ce que je voudrais faire est d'exécuter une tâche hebdomadaire qui envoie des rappels de tâches à cause dans certaines périodes, soit 2 jours, 7 jours, 14 jours, etc. Je pensais que la façon la plus simple serait de construire une petite application C # qui se trouve sur la boîte de WS2K3 et interroge la base de données de WSS. Toutes les idées sur lesquelles les tableaux que je devrais vérifier? Plus généralement il un schéma global pour le système de base de données WSS3?

Si quelqu'un est au courant d'une solution existante avec le code s'il vous plaît laissez-moi savoir.

Thx ++

Jerry

Était-ce utile?

La solution

Mes suggestions:

  • ne pas créer une application console, créez une classe qui hérite de SPJobDefinition.
  • set SPJobLockType.Job à cette minuterie, ce accordera que le travail est exécuté qu'une seule fois dans toute la ferme, même si vous utilisez plusieurs serveurs frontaux
  • dans le, travail du minuteur, ouvrez le SPSite, SPWeb objets que vous avez besoin, puis trouver le SPList \
  • Utilisation de filtre SPQuery sur uniquement les éléments dont vous avez besoin - je crois, vous devrez filtrer ceux où Status = complet
  • !
  • Boucle à travers la collection de résultats (qui sera de type SPListItemCollection, appliquez vos règles, la vérification de la DueDate et Datetime.Now, envoyer les e-mails
  • Comme une tâche est tout simplement un SPListItem, il possède une propriété Properties, qui est en fait un sac de propriété - vous pouvez ajouter toutes les propriétés dont vous avez besoin. Alors, ajoutez un My_LastSentReminderDate de propriété. Utilisez cette propriété pour vérifier si vous n'êtes pas envoyer trop de « spam d'entreprise »: -)
  • Pour installer votre SPJobDefinition dans une ferme SharePoint, vous pouvez utiliser un script PowerShell. Je peux vous donner des exemples, le cas échéant.

Ne pas oublier de Threading.Thread.CurrentThread.CurrentCulture = Your_SPWeb_Instance.Locale, sinon des comparaisons de date peuvent ne pas fonctionner si le Web a un lieu différent!

EDIT: Voici comment un rappel typique ressemble dans mes applications:

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

Pour enregistrer un travail du minuteur, j'utilise généralement ce genre d'un script:

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

Autres conseils

Chaque fois que vous besoin de quelque chose dans sharepoint qui est exécuté périodiquement, 99 fois sur 100, vous aurez besoin de construire un TimerJob. Ceux-ci sont des tâches planifiées qui fonctionnent à l'intérieur de SharePoint et vous pouvez créer votre propre, puis en utilisant une fonction + featurereceiver à fait « installer » la timoerjob (définition) et lui attribuer un calendrier.

Pour plus d'informations:. Voir TimerJobs

P.S. Jamais requête / mettre à jour les bases de données relatives à SharePoint directement! Cela vous fera « non pris en charge », à savoir si quelque chose arrive Microsoft facturera (beaucoup) d'argent pour venir réparer, au lieu d'être en mesure de demander un soutien régulier. (Si vous êtes abonné MSDN dire que vous obtenez jusqu'à 4 support gratuit appels par an).

Ne pas la peine d'essayer d'aller directement à la base de données. Vous aurez un temps très difficile, car il est en situation irrégulière, non pris en charge, et non recommandé. SharePoint a en fait un modèle objet très complet bien.

Si vous faites référence à Microsoft.SharePoint.dll (situé dans le Global Assembly Cache d'une machine avec SharePoint installé), vous pouvez accéder aux données de cette façon. Les objets que vous aurez envie de commencer par SPSite , SPWeb , SPList, SPQuery et SPListItem . Tous que vous pouvez trouver très facilement sur http://msdn.microsoft.com dans une recherche.

Une autre possibilité moins souple, mais sans code que vous pouvez essayer est de créer plusieurs vues différentes qui incluent des tâches à venir alors via l'interface graphique mis en place une alerte lorsque des éléments sont ajoutés à ce point de vue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top