2012-11-21 29 views
2

我有一個包含多個計算屬性的類。我想將這些屬性添加到預計的sql表中,以便我可以查詢它們。但是,我注意到計算的屬性默認情況下不會投影到sql表中。爲了讓他們投射到SQL表,關鍵字SqlComputeCode必須在括號中指定數據類型使用'SqlComputeCode'關鍵字將計算屬性投影到sql表中

Property Age As %String [SqlComputeCode...] 

但是之後加入,我不能確定確切的語法來用在這裏並沒有找到關於它的文檔特別有用(我認爲Intersystems需要展示更多的例子)。由於該屬性已計算,因此我已經有一個get方法來進行計算。

Method AgeGet() As %String 
{ 
    ... 
    Quit "Something" 
} 

我只是想在我的sql表格投影中的get方法中使用計算。誰能幫我嗎?在此先感謝...

回答

3

您無法從SQL計算中訪問實例方法。所以你需要重構你有的方法 - 最直接的方法就是類方法。

Property Age As %String [SqlComputeCode = {S {Age}=##CLASS(MyClass).GetAge({DateOfBirth})}, SqlComputed] 

ClassMethod GetAge(DateOfBirth as %Date) 
{ 
    Q ##CLASS(MyDateRoutineClass).DifferenceInYears(##CLASS(MyDateRoutineClass).Now(),DateOfBirth) 
} 

Method AgeGet() As %String 
{ 
    ... 
    Quit ..GetAge(..DateOfBirth) 
} 
+2

在Cache數據庫的SAMPLES命名空間的Sample.Person類中還有另一個這樣的例子。 – mcbainpc

+2

在現代版本中,您可以使用'{*}'鏈接到當前屬性 'S {*} = .. GetAge({DateOfBirth})' – SSH

相關問題