Axapta 2012 - Axe 视图和 GETDATE()

问题描述 投票:0回答:3

我正在尝试在视图中设置相对于今天的日期范围。但我没有找到任何函数可以在查询范围中设置以使其动态。

示例:

创造:

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
进行比较。

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

有什么想法可以为此设置查询范围吗?


到目前为止尝试过:

  • ..GetDate()
  • ..今天()
  • ..当前日期()
  • 小于日期(0)
  • ”< GETDATE()"
  • < currentSessionDateTime()

根据如何根据具有动态范围的查询刷新/同步视图?,这是不可能的(对于 UserID())。我想仔细检查日期的情况是否相同。该视图正在被同一个盒子上的其他应用程序(不是 Axe 表单)使用。

axapta microsoft-dynamics x++
3个回答
3
投票

这并不漂亮,我仍然认为可能有更好的方法,但这是我刚刚测试过的解决方案。显然,在 x++、表单和报告中有更好的方法可以做到这一点,但是可以从 AX 外部查询下面的结果,并且仍然会返回动态结果。

您有一个“查询”>“视图”>“查询”>“视图”结构,其中顶级视图是您的可使用视图。

第一个视图包含您需要的数据和计算日期列,由以下代码填充以获取动态日期:

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

然后,您对该视图进行查询,并在其上放置扩展查询范围以检查您的字段与动态 GETDATE() 列。然后,您可以在该查询之上构建一个视图,供外部应用程序使用。

在下面的示例中,所有字段列表均设置为动态是。显然,您将从根查询一直携带相关数据。

图片中的示例产生以下视图定义:

 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)

1
投票

我的答案基于@Spencer Kershaw 的答案。因此,他的工作值得赞扬,但我想提供一个更简洁的答案,不需要查询,并希望对于其他尝试完成任务的人来说更清楚。

要实现你想要的目标,你需要做三件事。

  1. 创建用于计算列的静态方法
  2. 将计算列添加到您的视图中
  3. 使用一些随机字段正确放入范围内

1. 将此方法添加到您的视图中:

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

2. 右键单击字段节点,然后单击

New>Date Computed Column
。在属性上设置
ViewMethod = today

3. 添加范围。选择

dataAreaId
作为字段(这是任意的)。将
Value
属性设置为等于
("YourComparisonField" < "today")
。语法在这里可能很重要。

这会产生:

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
投票

还有更简单的方法。

您非常接近在查询范围内使用正确的输入。应该是

© www.soinside.com 2019 - 2024. All rights reserved.