2

この msdn の投稿を読んでいます: http://msdn.microsoft.com/en-us/library/aa981241.aspx

コンテンツ クエリ Web パーツを編集して、30 日以内に発生するか、30 日以内に再発するイベント リストのアイテムのみを表示しようとしています。[開始日] を [今日] + 30 と比較して、この共有 Web パーツ構成を変更できるため、再発しないイベントに対処するのは簡単ですが、定期的なイベントの場合は [開始日] と [終了日] のようです] は、繰り返し発生するイベントが発生する期間を説明していますが、イベントの最も近い再発を判断するために何をすべきかわかりません。cqwp は 3 つのフィルター アイテムしか使用しないため、クエリをオーバーライドせずに繰り返し発生するアイテムと 1 回だけ発生するアイテムの両方を処理することはできません。

再発に使用する必要があるフィールドは、msdn-microsoft-com/en-us/library/microsoft.sharepoint.spfieldrecurrence_members.aspx のいずれかですが、どれも適切ではないようです。

「月の 4 日」の再発にどのように対処しますか msdn-microsoft-com/en-us/library/microsoft.sharepoint.weekofmonth.aspx

基本的に、1 週間以内に発生するイベントのみを表示するために、クエリをオーバーライドして、定期的に発生するイベントと単一の発生イベントをフィルター処理するにはどうすればよいでしょうか。

次のコードを CQWP .webpart ファイルに追加しました。

<Where>
<Or>
<And>
  <Neq>
    <FieldRef Name="FRecurrence"/>
    <Value Type="Recurrance">1</Value>
  </Neq>
  <And> 
    <Lt>
      <FieldRef Name="EventDate" Type="DateTime"/>
      <Value Type="DateTime"><Today OffsetDays="30"/></Value>
    </Lt>
    <Gt>
     <FieldRef Name="EventDate" Type="DateTime"/>
    <Value Type="DateTime"><Today /></Value>
    </Gt>
  </And>
</And>
<DataRangesOverlap>
  <FieldRef Name="EventDate" />
  <FieldRef Name="EndDate" />
  <FieldRef Name="RecirrenceId" />
  <Value Type="DateTime"><Month /></Value>
</DataRangesOverlap>
</Or>   
</Where>

「選択した Web パーツを追加できません。ファイル形式が無効です。Web パーツ ファイル (.WebPart) をインポートしてみてください。」

4

1 に答える 1

1

SharePoint の定期的なイベントは注意が必要です。この投稿は、定期的なイベントの混乱を理解するための唯一の最良のリソースです

SharePoint カレンダーと iCal 形式にエクスポートする方法を理解する

CEWPでこれを行うことができるとは思いませんが、次のようなものを使用して繰り返しを取得できます

    SPList list = oSPWeb.GetList(listGuid);
    SPQuery query = new SPQuery();
    query.ExpandRecurrence = true;
    query.CalendarDate = new DateTime(2010, 6, 17);

    query.Query = "<Where><DateRangesOverlap><FieldRef Name=\"EventDate\" /><FieldRef Name=\"EndDate\" /><FieldRef Name=\"RecurrenceID\" /><Value Type=\"DateTime\"><Week /></Value></DateRangesOverlap></Where>";
    SPListItemCollection listItems = list.GetItems(query);
    foreach (SPListItem items in listItems)
    {
        // items["EventDate"].ToString()
    }

次に、今週発生する定期的なイベントと非定期的なイベントを取得します。

ただし、これはカレンダー ビューで使用するように設計されていることに注意してください。

query.CalendarDate = new DateTime(2010, 6, 17);
query.Query = "<Where><DateRangesOverlap><FieldRef Name=\"EventDate\" /><FieldRef Name=\"EndDate\" /><FieldRef Name=\"RecurrenceID\" /><Value Type=\"DateTime\"><Month /></Value></DateRangesOverlap></Where>";

(月の設定に注意してください) すると、この月のカレンダー ビューに表示されるすべてのイベント (2010 年 5 月 31 日から 2010 年 7 月 4 日まで) が取得されます。

于 2010-06-17T16:22:59.610 に答える