10

たとえば、SharePoint リストの集計列で今日の日付を使用して、タスクが期限切れかどうかを判断できるようにしたいと考えています。"Today" という名前のダミーの列を作成し、それを数式で使用してから削除することで、SharePoint を "騙して" Today 関数を使用させるという、十分に文書化されたトリックがあります。

問題は、この方法が確実に機能しないことです。計算は動的ではありません。アイテムが保存されたときにのみ作成されるため、今日の「列」は実質的に変更日になります。(これがおそらく、SharePoint で Today 関数を簡単に使用できない理由です。)

誰かがうまくいく解決策を見つけましたか? クライアント側で実際の日付を取得し、色、フラグなどを表示するためにjavascriptを使用できることは知っていますが、「サーバー側」のソリューションを探しています。


参考までに、Today コラムのトリックとその問題については、次の 2 つの投稿と関連するコメントでかなり詳しく説明されています 。 pathtosharepoint.wordpress.com/2008/08/14/calculated-columns-the-useless-today-trick/

4

9 に答える 9

4

クリストフ(PathToSharePoint)の記事に加えて、これは今日のトリックとそれが機能しない理由もカバーしています

計算列でTodayを使用することについての真実

ファッジはたくさんありますが、おそらく最高のものはデセのコンソールアプリ(MNMが前述)です。

Today参照を含むSharePoint計算列を動的に更新する

良いですが完璧ではありません。たとえば、さまざまなタイムゾーンについて心配する必要があるかもしれません。

このルートを進む前に、本当にこれを行う必要があるかどうかを自問する必要があります。例えば ​​:-

于 2009-06-25T12:28:13.687 に答える
4

これを回避する方法はありません。リストの値はデータベースに保存され、検索クローラーなどの他の機能に「そのまま」返されるため、動的フィールドを作成することはできません。

計算に今日の日付を使用して値を表示するカスタム フィールドを作成することができます。

于 2009-05-18T21:35:27.777 に答える
1

今日の列を作成する場合は、更新する必要があります。これは、タイマー ジョブを使用するか、ユーザーがアクセスするページに jquery スクリプトを配置することで実行できます。スクリプトは SPServices.SPUpdateMultipleListItems を呼び出して更新を行うことができます。Today の値を更新する必要があるリスト アイテムのみを更新するように、CAML 句を渡します (たとえば、1 日 1 回)。

于 2013-03-04T15:48:11.540 に答える
0

私のアドバイスは、この計算を行うonフィールドを作成し、SharePointリストで参照することです。単純な実装ではありませんが、機能します。

于 2009-05-18T20:16:54.737 に答える
0

以下のものを使用しましたが、問題ありませんでした。

フィールド名: 延滞

フィールド タイプ: 計算済み

返されるデータの種類: はい/いいえ

方式: =AND([Due Date]<NOW(),Status<>"Completed",[Due Date]<>"")

于 2013-10-30T17:13:54.310 に答える
0

私は非常に大雑把ではあるが、コーディングを一切行わずにこの問題を解決する方法を思いつきました。今日のコラムを作成した方法と、それを期限切れのコラムにどのように組み込んだかの両方を説明します。

まず、「今日」という名前のコラムを作成しました(はぁ!)。次に、「Days Overdue」という名前の列を作成しました。次に、sharepoint デザイナーを開き、新しいワークフローを作成しました。アイテムが編集/更新されるたびに実行するように設定しました(このリストのバージョン管理をオフにしたことを覚えておいてください。そうしないと、サーバーに大量の無駄なデータが蓄積されるのを避けるためにコーディングに頼らなければならなかったでしょう)。単純に変更日をワークフロー変数に保存するようにアクションを設定し、today 列の値をその変数に変更します。変更された列は日付/時刻で、今日の列は単なる日付ですが、問題なく転送されます。次に、ワークフローを 2 時間一時停止するように設定しました。これは明らかに好きな時間に設定できます。今日の列が更新される可能性のある最新の時刻、つまり私の場合は午前 2 時が変更されるだけです。

延滞日数欄に。これはその男のコードです -

=IF([Due Date]>Today,"None",IF([Date Closed]=0,Today-[Due Date],IF([Due Date]>[Date Closed],"None",IF(Today>=[Date Closed],[Date Closed]-[Due Date],IF([Due Date]<Today,Today-[Due Date])))))

これは、延滞日数を日数の形式で示します。延滞していない場合は、「なし」と表示されます。数値形式または文字列形式を使用できますが、日付形式は使用できません。さて、これがこの問題に直面していて、コーディングを掘り下げたくない人に役立つことを願っています.

編集: 上記のコードの延滞日数の列で、今日が締め切り日を過ぎている場合は、今日から締め切り日を差し引いた日付ではなく、締め切り日から締め切り日を差し引いた日付を使用して、計算が確実に行われるようにすることを忘れていました。アイテムが閉じられた後も発生し続けません。おそらくコードで気づいたでしょうが、念のため指摘しておくべきだと思いました。

編集 2: 計算列の 2 回目の編集の前に使用していたコードは、問題が「クローズ」とマークされた後、期限切れの日数を適切に計算しませんでした。更新されたコードを入れました。コードの最後の部分は、最初と同じロジックであるため、意味がありませんが、機能したので、チャンスを逃したくありませんでした。:)

平和。

于 2009-06-24T21:43:18.827 に答える
0

私は解決策を探していましたが、まだ運がありません..今日の列のトリックには、動的ではないという制限があります。

ただし、1 つの提案があります。毎日午前 12 時に特定の特定の列を現在の日付で更新するタイマー ジョブを作成しないでください。頭がおかしいと思う人もいるかもしれません。ちょうど私の提案:D!!

于 2009-06-17T07:33:47.943 に答える
-1

回避策は次のとおりです。

今日という日付列を作成します。計算式でこの列を使用します (式が間違った値を返すという事実を無視してください)。数式の処理が完了したら、リストから [Today] 列を削除します。

なぜかこんな風に動く!これで、Sharepoint は数式の Today を今日の日付として扱います。

注: 数式を変更する場合は、Today 列を再度作成する必要があります。そうしないと、Today が有効な列として認識されません。

于 2012-05-28T17:04:41.633 に答える
-1

@Farzadのアプローチを試してみましたが、完全に機能しているようです。経過日数でカスタムカウントを行いたかったので、以前は作成日列と変更日列の違いを使用していた計算列を追加しました。これは、ユーザーが投稿を更新するたびにのみ表示されていました。

これで、希望どおりに機能し、Today列を使用する式ができました。これは、使用したい人のためのものです。また、On Hold のベースが使用される Status 列もあり、残りの式はToday - Createdの日付差に基づいています。

=IF(Status="On Hold","On Hold",IF(AND(Today=Created,(DATEDIF(Created,Today,"D")=0)),"New",IF(AND(Today<>Created,(DATEDIF(Created,Today,"D")=0)),"New (updated)",IF(DATEDIF(Created,Today,"d")>3,"Need Update Immediately",IF(DATEDIF(Created,Today,"d")=1,"One day old",IF(DATEDIF(Created,Today,"d")=2,"Two days old",""))))))

基本的には、ビューにグループを追加し、必要に応じてデータを除外できるラベルを取得するネストされたIF条件の集まりです。これが答えを探している人に役立つことを願っています!

于 2012-12-14T07:33:18.610 に答える