2017-04-04 43 views
0

我嘗試在AOT中重新創建SQL視圖,並且需要添加引用視圖(FISCALCALENDARFLATTENEDVIEW)的計算列。在班級中,我無法檢索此視圖的字段。問題在於「sGREGORIANDATE =」行,我指定了一個fieldStr(),無法爲View執行。我把SQL語句只是爲了幫助理解我嘗試實現的目標。X ++ Compute列

CREATE VIEW [dbo].[vw_DimFiscalPeriod] AS 
SELECT 
T1.RECID AS LEDGERRECID, 
T1.PARTITION AS PARTITION, 
T1.RECID AS RECID, 
T2.CALENDARID AS CALENDARID, 
T2.CALENDARRECID AS CALENDARRECID, 
T2.GREGORIANDATE AS GREGORIANDATE, 
T2.MONTH AS MONTH, 
T2.PERIODNAME AS PERIODNAME, 
T2.PERIODOFFSET AS PERIODOFFSET, 
T2.PERIODRECID AS PERIODRECID, 
T2.QUARTER AS QUARTER, 
T2.QUARTEROFFSET AS QUARTEROFFSET, 
T2.YEARNAME AS YEARNAME, 
T2.YEAROFFSET AS YEAROFFSET, 
T2.PARTITION AS PARTITION#2, 
(CAST ((((T1.RECID) * (100000)) + (DateDiff(d, {ts '1900-01-01 00:00:00.000'}, T2.GREGORIANDATE))) AS NVARCHAR(50))) AS LEDGERGREGORIANDATEID 
FROM AXDB.dbo.LEDGER T1 
INNER JOIN 
AXDB.dbo.FISCALCALENDARFLATTENEDVIEW T2 
ON T1.FISCALCALENDAR = T2.CALENDARRECID 
AND T1.PARTITION = T2.PARTITION 

我創建了類,但是對於我的計算,不支持來自對象和列表的視圖的字段。 sRECID沒問題,但sGREGORIANDATE定義不是。

public class vw_DimFiscalPeriod extends common 
{ 
private static server str GregoriandDateID() 
{ 
    str sReturn, 
    str sRECID, 
    str sGREGORIANDATE; 
    DictView dictView; 

    dictView = new DictView(tableNum(vw_DimFiscalPeriod)); 
    sRECID = dictView.computedColumnString(tableStr(Ledger), fieldStr(RecId),FieldNameGenerationMode::FieldList, true); 
    sGREGORIANDATE = dictView.computedColumnString(viewstr(FiscalCalendarFlattenedView), fieldStr(GregorinaDate), FieldNameGenerationMode::FieldList, true); 

    sReturn = "("+RECID+" * 100000) + DateDiff(d, {ts '1900-01-01 00:00:00.000'}, " + sGREGORIANDATE + ")"; 

    return sReturn; 
} 
} 

回答

0

我認爲應該工作,爲sGREGORIANDATE行應該看起來像這樣:

 sGREGORIANDATE = SysComputedColumn::returnField(tableStr(FiscalPeriodDateView), tableStr(FiscalCalendarFlattenedView), fieldStr(FiscalCalendarFlattenedView, GregorianDate)));