사용자 이름별로 세션 ID를 가져 오는 것과 같은 작업을 수행하는 메소드가 없습니다. 직접 작성해야하며 일반적으로 SQL을 사용하는 것이 가장 좋습니다. 쿼리가 아닌 메서드에서 SQL을 래핑 할 수 있습니다. 당신은 심지어 스마트 한 번만 세션 개체를 열 수
Method GetSEssionIdByUserName(UserName as %String) As Sample.Session [ Private ]
{
s c=$O(^Sample.SessionD("")),f=""
while ((f="") && (c'="")){
s p=##class(Sample.Session).%OpenId(c)
if $isobject(p){
s:p.UserName=UserName f=c
}
//alternatively if you're sure about the global structure, something like this:
//assume the Username is stored at position 3 for a sec:
//s:$LG(^Sample.SessionD(c),3)=UserName f=c
s c=$O(^Sample.SessionD(c))
}
q ##class(Sample.Session).%OpenId(f)
}
하지만, 아래로 : 당신은 SQL을 사용하지 않는 주장하는 경우
Method GetSessionIdByUserName(UserName As %String) As Sample.Session [ Private ]
{
&SQL(SELECT %ID INTO :ID from Sample.Session
WHERE UserName = :UserName)
Q ##class(Sample.Session).%OpenId(ID)
}
출처
2012-10-15 18:49:32
psr
+1 - 좋은 예. 나는 동의한다, 겨자를 자르지 않을 것이다. –
또는 사용자 이름이 모든 세션 항목에서 고유해야한다는 것을 알고 있다면 클래스에 고유 색인을 항상 추가 할 수 있습니다 :'Index UserNameIndex on UserName [Unique];'그런 다음 위의 메소드는 하나 또는 두 개의 행만 필요합니다. 이름이 색인에 존재하는지 점검하는 코드. 그럴 경우 ID 값을 반환합니다. 그렇지 않은 경우, 사용자 이름이 없음을 의미하는 null을 리턴합니다. – Derek