바라기의 이야기

선택목록 필드를 읽기모드에서 깔끔하게 보이도록 하는 코드 본문

Develop/Domino

선택목록 필드를 읽기모드에서 깔끔하게 보이도록 하는 코드

baragi76 2010. 3. 16. 09:49

다 알지도 모르겠지만...

라디오버튼, 확인란 등...
CS에서 저장을해서 읽기 모드로 볼 경우, 선택되어진 값만 보이도록 처리하기 위해서 어떻게 표현을 하시는지요.( 물론 있는 그대로를 보여줄 경우는 해당 필드만 놔두면 되겠지만요... ^^ )

가정1. 라디오버튼을 사용.

전제1. 읽기 모드시엔 사용자가 선택한 값만 보이도록 함.
전제2. 내부코드에서 필드값을 코드화하여 사용함.
전제3. 해당 값이 추가 변경될 수 있으므로 한곳에서 관리를 해야함.


--------------------------------------------------------------------------
물론 방법은 여러가지 입니다.... 그중 한가지에 대해서 기록을 합니다.


목록 선택 필드(Options 필드)에 사용자는 기아, 현대, 삼성, 대우, 쌍용, 기타 중 하나를 선택할 수 있다고 생각을 해보죠.
그럼 Options 필드의 종류를 "라디오 단추"로 선택하고, 선택목록값에 "기아", "현대", "삼성", "대우", "쌍용", "기타"를 입력해 놓으실 겁니다.[가정1]
그러나 만약 내부 프로그램에서 해당 값을 사용하여 먼가를 처리하는 코드가 있다라고 하면??[전제2]
한글을 사용하는 것보다는 특정 코드값으로 처리를 해야할 경우가 발생됩니다.
이런경우 Options 필드의 선택목록값을 파이프(|)를 이용하여 Alias를 지정하죠~ "기아|0", "현대|1", "삼성|2", "대우|3", "쌍용|4", "기타|etc" 처럼요.
물론 Options 필드를 읽기모드에서 보이도록 처리하면 될 수도 있으나, [전제1]의 목적과 [전제3]의 목적을 달성하기 위해 닥질이 필요합니다.

1. Options 필드는 읽기모드시 숨김처리를 합니다.
2. 그 바로 위나 아래에 <계산된 문자열>을 삽입합니다. 코드는 이후에.
3. OptionsList 필드를 양식 맨 상단에 추가합니다.(맨 아래도 상관없구요... ^^)
4. OptionsList 필드는 종류 : 문자열, 표시할때 계산, 다중값 허용, 읽기/편집모드 모두 숨김으로 설정하고 값으로 "기아|0" : "현대|1" : "삼성|2" : "대우|3" : "쌍용|4" : "기타|etc"로 설정합니다.
5. Options 필드의 선택목록값을 수식으로 변경하여 OptionsList를 입력합니다.


자 그럼 마지막으로 2번 항목에서 삽입한 <계산된 문자열>의 수식을 지정해야 합니다.
어떻게 하시겠습니까?
그냥 Options라고 하시면 어떻게 표현되는지 아시죠?
만약 기아를 선택하셨다면?? 0이라 표현이 될겁니다.
[전제1]에 위배되죠...


자~ 그럼...
이 부분의 코드를 기록하기 위해 장황하게... ㅠㅠ

첫번째 단순 무식(?)한 방법
=========================================================================================
result := "";

@For( i := 1 ; i <= @Elements(OptionsList) ; i := i + 1 ;
    @If( @Right( @Subset( @Subset( OptionsList ; i ) ; -1 ) ; "|" ) = Options ;
        @Set( "result" ; @Left( @Subset( @Subset( OptionsList ; i ) ; -1 ) ; "|" ) ) ;
        "" )
);

result
=========================================================================================
R6 부터 수식에도 반복문이 생긴건 아시죠?? ^^

위와 같은 방법으로 할 수 있습니다.
코드는 간단하죠? OptionsList 값을 하나씩 반복하면서 파이프(|)뒤에 값과 Options 값과 일치하는 부분을 찾아서 보여주는 거죰...
확실한 방법일 수 있으나 항목 수 만큼 반복해야 하니깐 왠지 모르게 다른 방법이 없을까 찾아보게 됩니다....



두번째 조금은 무모할지 모르나 간단하고 빠르게 목적을 달성할 수 있는 방법입니다.
=========================================================================================
res := @Implode( OptionsList ; "^^^" );
result := @Explode( @Word( res ; "|" + Options + "^^^" ; 1 ) ; "^^^" );
@Subset( result ; -1 )
=========================================================================================
코드 줄이 짧아졌죠...
간단하게 설명하자면.  OptionsList 값을 "^^^"로 합칩니다.
그리고 "|" + Options + "^^^"값으로 @Word 함수를 호출하면... 맨끝에 원하는 값이 위치하게 됩니다.
다시 "^^^"로 Explode 처리하면~~~ 배열로 잡히면서 맨 끝에 값이 원하는 값...

루프 돌리는 것보다 속도가 훨씬 빠를것이라 예상이 되네요...
이 한 코드로 속도 향상을 기대하는건 쩜 힘들지만... 이런 코드덜이 쌓이면?? ^^