質問

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

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

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


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

役に立ちましたか?

解決

単に、このための回避策はありません。リストの値は、データベースに格納され、検索クローラーのような他のfeatursに、動的フィールドは作成できません。

「のように」戻されるように

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

他のヒント

Christophe (PathToSharePoint) の記事に加えて、これは Today のトリックとそれが機能しない理由についても説明しています。

計算列での Today の使用に関する真実

数多くの捏造がありますが、おそらく最良のものは Dessie のコンソール アプリです (MNM が前述)

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

それは良いことですが、完璧ではありません。たとえば、タイムゾーンの違いを気にする必要があるかもしれません。

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

あなたはそれを更新する必要が今日のコラムを作成する場合。あなたは、タイマージョブのいずれかで、またはユーザによってヒットしたページにjQueryのスクリプトを置くことによってそれを行うことができます。このスクリプトは、アップデートを行うにはSPServices.SPUpdateMultipleListItemsを呼び出すことができます。あなたは今日だけ値を更新する必要があるリストアイテムを更新するように、例えば、CAML句を渡します1日1回。

私のアドバイスはあなたのためにこの計算を行い、フィールド上であなたを作成し、あなたのSharePointリストでそれを参照することです。しかし、それは単純な実装をうまくいくわけではありません。

私はまだ運、いずれかの解決策を探してされていないが...今日のコラムのトリックは、動的ではないという制限があります。

私は、なぜ私たちは午前12時で、毎日現在の日付と特定の特定の列を更新するタイマージョブを作成していない、しかし1つの提案を持っています。私はあなたのすべてのいくつかは、それ以上のヘッドと思うかもしれません知っています。ただ、私の提案:D !!

私は、任意のコーディングを行うことなく、この問題に非常に荒いが、ワーキング溶液を思い付きました。私は私が延滞列にして、その列becuaseにも行う方法を見つけるために苦痛だったと働いていたどのように私は、今日のコラムを作り、両方の方法を説明します。

まず、私は「今日」という名前の列を作った(息をのみます!)。次は、「延滞日数」という名前の列を作りました。私は、SharePointデザイナーを開いて、新しいワークフローを作成しました。私は(私がそうでなければ、私は私たちのサーバー上に構築無駄なデータの束を回避するために、コーディングに頼らなければならなかった、このリストは、バージョン管理をオフに心に留めておく)項目を更新/編集されるたびに実行するように設定します。私は単にワークフロー変数に変更された日付を格納するためのアクションを設定し、その変数に今日の列の値を変更します。変更された列は、日付/時間であり、私の今日のコラムはちょうど日付ですが、それがうまく転送されます。私はその後、2時間にわたって一時停止するワークフローを設定します。あなたは、あなたが明らかにしたい時間のどんな量に設定することができ、あなたの今日のコラムを更新するために、それはちょうど私の場合、すなわち、2AMの最新の可能な時間を変更します。

日延滞列に上。これはその人のためのコードである -

=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])))))

この数日で数形式の延滞日数を示し、またはその延滞されていない場合、それは「None」を示していません。あなたは数形式または文字列形式ではなくDATEフォーマットのいずれかを使用することができます。さて、私がこの問題に実行されていて、コーディングを掘り下げしたくない人に役立ちます願っています。

編集:私は確実にするために、マイナス期日の代わりに、今日マイナス期日閉じ日間延滞列に上記のコードでは、私は今日は日を過ぎている場合は、日付を使用するために、閉じられていることで置くことを言うのを忘れましたアイテムが閉じられた後に、計算のdoesntが発生しておくこと。あなたはおそらく、そのコードに気づいているだろうが、私は念のためにそれを指摘しなければならないと感じています。

EDIT 2:「閉じた」私は問題がマークされていた、正しく後に延滞日数を計算していなかった私の計算列のための私の第二編集前で持っていたコード私は、更新されたコードに置きます。それは最初と同じロジックであるように、コードの最後の部分は、意味がありませんが、それはので、私はどんなチャンスを取るしたくなかった働いていました! :)

平和ます。

私は次のように使用し、何の問題もなかったしました。

フィールド名:延滞

フィールドタイプ:計算

戻り値のデータタイプ:はい/いいえ

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

ここでは、回避策です。

今日と呼ばれる日付列を作成します。 (式が間違った値を返すという事実を無視して)自分の計算式でこの列を使用します。 あなたが式で行われた後、リストから今日のコラムを削除します。

それはこのように動作するいくつかの理由!今、Sharepointのは、今日の日付としてあなたの式で今日扱います。

注:あなたが式を変更することを決定した場合、あなたは再び今日のコラムを作成する必要があります。それ以外の場合は、有効な列として今日認識しない。

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

これで、希望どおりに機能する式ができました。 今日 コラムをご覧ください。使用したい方はこちらをご覧ください。また、保留中のベースが使用されるステータス列もあり、残りの数式は日付の差に基づいています。 今日 - 作成されました.

=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",""))))))

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

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