2017-07-18 16 views
3

私は今日のビューワークで日付範囲を作ろうとしています。しかし、私はそれを動的にするためにクエリの範囲に設定する機能はありません。Axapta 2012 - AxesビューとGETDATE()

例:

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE VIEW [dbo].[MYCUSTINVOICETABLEVIEW] AS 
SELECT T1.INVOICEID AS INVOICEID,T1.DATAAREAID AS DATAAREAID,T1.PARTITION AS PARTITION,T1.RECID AS RECID 
FROM CUSTINVOICETABLE T1 
WHERE (INVOICEDATE<={ts '2017-07-18 00:00:00.000'}) 
GO 

をしかし、その代わりにlast synchronization dateに対する探しているのは、私はtodayに比べて見てみたい: enter image description here

を作成します。

SELECT ... FROM CUSTINVOICETABLE T1 
WHERE (INVOICEDATE<=GETDATE()) 

どのように私はこれのためにクエリの範囲を設定できますか?これまで試み


  • ..GetDate()
  • ..today()
  • ..currentDate()
  • lessThanDate(0)
  • "< GETDATE() "
  • < currentSessionDateTime()

How to refresh/Synch View based on a Query with dynamic range?によれば、(UserID()の場合は)不可能です。私はそれが日付のための同じケースであるかどうか再確認したいと思います。ビューは、同じボックス(Axeフォームではない)上の他のアプリケーションによって消費されています。

+0

は、私の知る限りでは、それは日付でも同じです。ビューにいくつかのSQLを挿入できるので、計算列でトリッキーなことができるかもしれませんが、私はそれをお勧めしません。ビューを使用するたびにフィルタを設定する方がよい。 –

答えて

3

これはきれいではありませんが、もっと良い方法があるかもしれないと私はまだ想像していますが、ここでは私がテストしたばかりの解決策があります。明らかに、x ++、フォーム、およびレポートでこれを実行する方がはるかに優れた方法がありますが、以下の結果はAXから外部から照会でき、依然として動的結果を返します。

トップレベルビューが消耗品ビューであるクエリ>ビュー>クエリ>ビュー構造があります。あなたは、そのビューのクエリを作る

public server static str today() 
{ 
    return 'CONVERT (date, GETDATE())'; 
} 

、および拡張されたクエリを置く:

最初のビューは、動的な日付を取得するために、次のコードによって移入必要なデータと計算された日付列を、持っていますあなたのフィールドとダイナミックなGETDATE()カラムをチェックするための範囲。次に、外部アプリケーションが消費できるクエリの上に構築されたビューがあります。

以下の例では、すべてのフィールドリストが動的yesに設定されています。明らかに、ルートクエリから関連するデータをすべて持ち歩くことになります。

Example of what the artifacts would look like

次のビュー定義内の画像結果の例は:

CREATE VIEW "DBO".TESTVIEW AS SELECT T1.SALESID AS SALESID, 
T1.RECEIPTDATEREQUESTED AS RECEIPTDATEREQUESTED, 
T1.DATAAREAID AS DATAAREAID,T1.PARTITION AS PARTITION,T1.RECID AS RECID, 
(CAST ((CONVERT (date, GETDATE())) AS DATETIME)) AS CURRENTDATE 
FROM SALESTABLE T1 

CREATE VIEW "DBO".TESTCONSUMABLEVIEW AS 
SELECT T1.CURRENTDATE AS CURRENTDATE,T1.RECEIPTDATEREQUESTED AS RECEIPTDATEREQUESTED, 
T1.SALESID AS SALESID,T1.DATAAREAID AS DATAAREAID,T1.PARTITION AS PARTITION, 
T1.RECID AS RECID 
FROM TESTVIEW T1 WHERE (RECEIPTDATEREQUESTED<CURRENTDATE) 
+0

なぜクエリを使用しましたか?クエリを実行せずに実行してください。 –

+0

ビューを使用してクエリを使用することは、クエリを使用しないオプションとほとんど同じようにサポートしていないため、ベストプラクティスの習慣です。この場合、あなたのソリューションがより好きですが、それは大幅に簡素化されています。作成したビューをルートデータソースとして使用することができます。 –

1

私の答えは@Spencerカーショウの答えをオフに基づいています。彼の仕事については信用できますが、質問を必要としないより簡潔な回答を提供したいと思っています。

あなたが望むものを達成するには、3つのことが必要です。

  1. 正しくいくつかのランダムなフィールドに

1.を使用して範囲に入れ

  • は、このメソッドを追加するには、ビューに計算列を追加計算列
  • に使用する静的メソッドを作成します。あなたの意見に:

    public server static str today() 
    { 
        return 'CONVERT (date, GETDATE())'; 
    } 
    

    2.フィールドノードを右クリックし、New>Date Computed Columnをクリックします。プロパティセットViewMethod = todayenter image description here

    範囲を追加します。フィールドにdataAreaIdを選択します(これは任意です)。 Valueプロパティを("YourComparisonField" < "today")に設定します。構文はここで重要です。

    enter image description here

    はこれが生成します。

    CREATE VIEW [dbo].[AAATESTVIEW] 
    AS 
    SELECT T1.ADDRESS AS ADDRESS 
        ,T1.MODIFIEDDATETIME AS MODIFIEDDATETIME1 
        ,T1.RECID AS RECID1 
        ,T1.PARTITION AS PARTITION 
        ,T1.RECID AS RECID 
        ,(CAST((CONVERT(DATE, GETDATE())) AS DATETIME)) AS TODAY 
    FROM LOGISTICSPOSTALADDRESS T1 
    WHERE (N'modifiedDateTime1' < N'today') 
    GO 
    
  • +0

    アルファベット順の比較をしていますが、実際の日付ではありません。 – Reinard

    +0

    'Value'セクションで引用符を削除してみてください。私はあなたがそれらを必要とするとは思わないが、何らかの理由で私はそれらなしでエラーを起こしていた。 –

    +0

    もう1つのことは、 '1'または' 0'を返す単一の計算列を作成し、同じ行で必要なフィールド比較と組み合わせて 'getDate()'を使用させることだけです。これにより、きれいに見える結果が得られる可能性があります。 –