2012-11-21 5 views
2

나는 계산 된 속성이 여러 개인 클래스가 있습니다. 나는 그들에 쿼리 할 수 ​​있도록 투영 SQL 테이블에 이러한 속성을 추가하고 싶습니다. 그러나 계산 된 속성이 기본적으로 SQL 테이블에 투영되지 않는 것으로 나타났습니다. 그들이 SQL 테이블에 프로젝트에 도착하는 키워드 SqlComputeCode 그러나 데이터 유형'SqlComputeCode'키워드를 사용하여 계산 된 속성을 SQL 테이블에 투영합니다.

Property Age As %String [SqlComputeCode...] 

을 지정한 후 괄호 안에 추가해야합니다, 여기에 사용되는 정확한 구문의 확실 해요과를 찾을 수 없습니다 특히 도움이되는 문서 (Intersystems에서 더 많은 예제를 보여줘야한다고 생각합니다). 프로퍼티가 계산되었으므로 이미 계산을 수행하는 get 메소드가 있습니다.

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

이 계산 방법을 내 SQL 테이블 프로젝션에 사용하고 싶습니다. 누구든지 나를 도울 수 있습니까? 미리 감사드립니다 ...

답변

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

캐시 데이터베이스의 SAMPLES 네임 스페이스에있는 Sample.Person 클래스에 다른 예제가 있습니다. – mcbainpc

+2

최신 버전에서는 현재 속성에 대한 링크로'{*}'를 사용할 수 있습니다 'S {*} = .. GetAge ({DateOfBirth})' – SSH