質問

WSS 3.0は、新しいタスクがタスクリストに追加されたときにグループにメールを送信できます。私がやりたいのは、特定の期間以内に期限切れのタスクのリマインダーを送信する毎週のタスクを実行することです。つまり、2日、7日、14日などです。 WS2K3ボックスはWSSデータベースを照会します。どのテーブルをチェックすべきかについてのアイデアはありますか?より一般的には、WSS3データベースシステムの全体的なスキーマはありますか?

誰かがコードを使用して既存のソリューションを知っている場合は、私に知らせてください。

thx ++

ジェリー

役に立ちましたか?

解決

私の提案:

  • コンソールアプリを作成しないでください。 SPJobDefinition.
  • 設定 SPJobLockType.Job このタイマーに、これにより、複数のフロントエンドサーバーを実行している場合でも、ジョブは農場全体で1回だけ実行されることを認めます
  • タイマージョブでは、開きます SPSite, SPWeb 必要なオブジェクトは、を見つけます SPList\
  • 使用 SPQuery 必要なアイテムのみを除外 - ステータスがあるものを除外する必要があると思います!=完了
  • 結果コレクションをループします(タイプのものになります SPListItemCollection, 、ルールを適用して、チェックします DueDateDatetime.Now, 、電子メールを送信します
  • タスクは単にaです SPListItem, 、持っています Properties 実際にはプロパティバッグであるプロパティ - 必要なプロパティを追加できます。したがって、プロパティを追加します My_LastSentReminderDate. 。このプロパティを使用して、「コーポレートスパム」をあまり送っていないかどうかを確認してください:-)
  • あなたをインストールします SPJobDefinition SharePointファームでは、PowerShellスクリプトを使用できます。必要に応じて、例を挙げることができます。

忘れないでください Threading.Thread.CurrentThread.CurrentCulture = Your_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

タイマージョブを登録するには、通常、この種のスクリプトを使用します。

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

他のヒント

定期的に実行されるSharePointで何かが必要なときはいつでも、100のうち99回はタイマージョブを構築する必要があります。これらは、SharePoint内で実行されるスケジュールされたタスクであり、独自のタスクを作成し、機能 + featureceiverを使用して実際にTimoerjob(定義)を「インストール」し、スケジュールを割り当てることができます。

詳細については、Andrew Connell'sを参照してください Timerjobsに関する記事.

PSは、SharePointに関連するデータベースを直接クエリ /更新しません!これにより、「サポートされていない」ことができます。つまり、Microsoftが定期的なサポートを求めるのではなく、Microsoftが(多くの)お金を請求して修正するために(多くの)お金を請求します。 (MSDNサブスクライバーと言っている場合は、年間4つの無料サポートコールを受け取ります)。

データベースに直接行こうとしないでください。それは文書化されておらず、サポートされておらず、推奨されていないので、あなたは非常に苦労するでしょう。ただし、SharePointには、完全な特徴のオブジェクトモデルがあります。

Microsoft.sharePoint.dll(SharePointがインストールされたマシンのグローバルアセンブリキャッシュにある)を参照すると、データにアクセスできます。始めたいオブジェクトはそうです spsite, spweb, 、スプリスト、spquery、およびsplistitem。これらはすべて非常に簡単に見つけることができます http://msdn.microsoft.com 検索で。

柔軟ではないがコードなしの可能性を試すことは、GUIがそのビューにアイテムが追加されるときのアラートを設定して、今後のタスクを含むいくつかの異なるビューを作成することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top