블로그 이미지
baragi76

카테고리

분류 전체보기 (115)
생활 (10)
My Story (34)
My Album (1)
HomePage (0)
Hobbies (21)
Develop (42)
Utility (1)
Project (6)
Statistics Graph
Total234,719
Today4
Yesterday22

공지사항

달력

« » 2019.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

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

라디오버튼, 확인란 등...
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 처리하면~~~ 배열로 잡히면서 맨 끝에 값이 원하는 값...

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

댓글을 달아 주세요


(Options)
Option Declare

--------------------------------

(Declarations)
Dim ss As NotesSession
Dim curDb As NotesDatabase                                '// 현재 Database
Dim curAgent As NotesAgent                                '// 현재 Agent
Dim curLog As NotesLog                                                '// Log 기록

Const LOG_PROGRAM                                                        = "에이전트 프로그램(프로세스) 이름-로그 기록명"                '★

Const DBPATH_LOG                                                        = "Application\log.nsf"                                                                        '★

---------------------------------
Sub Initialize
'★ 에이전트명은 언제나 -> (에이전트명)|agAgentName        
%REM
함수명 :         Initialize
인자        :        -
반환        :        -
목적        :        -
작성정보        :         v1.0 / 이동완 / 2006-04-07                '★
%END REM
        On Error Goto ErrorHandle
       
        Set ss = New NotesSession
        Set curDb = ss.CurrentDatabase
        Set curAgent = ss.CurrentAgent
       
        '// Log Object 생성 및 Open
        Set curLog = New NotesLog( curAgent.Name & | Log(| & curDb.FilePath & |)| )
        Call curLog.OpenNotesLog( curDb.Server, DBPATH_LOG )
       
        '// Start Log
        Call WriteLog( Err(), LOG_PROGRAM & " 시작" )
       
        '// ------------------------------------------------------------------------------------------------------------------
        '// 실제 코드 (여기에 작성하세요~)
        '// ------------------------------------------------------------------------------------------------------------------
        '★
        '// ------------------------------------------------------------------------------------------------------------------
       
        '// End Log
        Call WriteLog( Err(), LOG_PROGRAM & " 종료" )
        Call curLog.Close()
       
        Exit Sub
ErrorHandle:
        Call WriteLog( Err(), curAgent.Name & |::Initialize ERROR[| & Cstr( Erl() ) & |] : | & Error() )
        Call curLog.Close()
        Exit Sub
End Sub

----------------------------------
Function WriteLog( ErrorOption As Integer, LogMessage As String )
%REM
함수명 :         WriteLog
인자        :        ErrorOption        - 오류코드 ( 0 : 정상로그, 이외 오류코드 )
반환        :        -
목적        :        로그 DB에 결과 기록
작성정보        :         v1.0 / 이동완 / 2006-04-07
%END REM
        On Error Goto ErrorHandle
        If( ErrorOption = 0 ) Then
                Call curLog.LogAction( |[| & curDb.FilePath & |] | & LogMessage )
        Else
                Call curLog.LogError( ErrorOption, |[| & curDb.FilePath & |] | & LogMessage )
        End If
        Exit Function
ErrorHandle:
        Print |[| & curDb.FilePath & |] | & curAgent.Name & |::WriteLog ERROR[| & Cstr( Erl() ) & |] : | & Error()
        Msgbox |[| & curDb.FilePath & |] | & curAgent.Name & |::WriteLog ERROR[| & Cstr( Erl() ) & |] : | & Error()
        Exit Function
End Function

--------------------------------
Function UserFunctionTemplate( x As Integer ) As Boolean
%REM
함수명 :         함수명(UserFunctionTemplate)                                                        '★
인자        :        인자명(x)                - 인자설명                                                                                '★
반환        :        반환값형식(Boolean)                - 반환값에 대한 설명                        '★
                                - True         : 존재함.                                                                                '★
                                - False         : 없음.                                                                                        '★
목적        :        함수 목적 기록                                                                                                '★
작성정보        :         v1.0 / 이동완 / (작성일/최근 수정일)2006-04-07                '★
%END REM
        On Error Goto ErrorHandle
       
        '// ------------------------------------------------------------------------------------------------------------------
        '// 실제 코드 (여기에 작성하세요~)
        '// ------------------------------------------------------------------------------------------------------------------
        '★
        '// ------------------------------------------------------------------------------------------------------------------
       
        Exit Function
ErrorHandle:
        Call WriteLog( Err(), curAgent.Name & |::함수이름 ERROR[| & Cstr( Erl() ) & |] : | & Error() ) '// 아래코드 형식으로 '★
        'Call WriteLog( Err(), curAgent.Name & |::UserFunctionTemplate ERROR[| & Cstr( Erl() ) & |] : | & Error() )
        Exit Function
End Function
Posted by baragi76

댓글을 달아 주세요


웹사이트에서 사진위에 마우스 오버시 저장, 인쇄 관련해서 아이콘이 뜨는데~
그걸 없애주는 부분입니다. IMG 태그의 속성으로 넣어주면 표현이 되질 않네욤


galleryimg="no"
Posted by baragi76

댓글을 달아 주세요


Body의 속성으로 주면 우측마우스 버튼등의 팝업창을 막을 수 있는 듯합니다.

oncontextmenu="return false" onselectstart="return false" ondragstart="return false"
Posted by baragi76

댓글을 달아 주세요


alt 태그를 넣은 이미지에 마우스 포이터를 가져가면 풍선도움말이 나타납니다.

이 도움말이 일반적으로 한줄로 나타나는데
을 넣어서 여러줄로 표시가 가능합니다.

< IMG SRC = "images/flower.gif " ALT = "첫번째 줄 &#13 두번째 줄 &#13 세번째 줄" >
Posted by baragi76

댓글을 달아 주세요


때에 따라서 배경화면을 특별하게 제어해야 하는 경우가 있죠?

bg.gif 라는 이미지 파일을 배경화면으로 세로로만 반복하도록 하려면 다음과 같이 하시면 됩니다.

<html>

<head>

<title>빽그라운드</title>

<style type="text/css">

body {background-image:url(bg.gif);background-repeat:repeat-y}

</style>

</head>
Posted by baragi76

댓글을 달아 주세요


LotusScript의 Trim 함수 많이 쓰시죠?
JavaScript에서도 가끔(?) 사용되는 함수입니다.

Trim~~
앞뒤 공백을 제거하고 중간에 겹쳐진 스페이스를 하나의 스페이스로...

---------------------------------------------------------------------------------------------------
function Trim(sValue)
{
        sValue = String(sValue);
        // 다중 공백 제거
        for( ; sValue.indexOf("  ") != -1 ; )
                sValue = sValue.replace( "  ", " " );
       
        // 앞 공백 제거
        if( sValue.indexOf(" ") == 0 )
                sValue = sValue.substring( 1, sValue.length );

        // 뒤 공백 제거
        if( sValue.lastIndexOf(" ") == sValue.length -1 )
                sValue = sValue.substring( 0, sValue.length-1 );

        return sValue;
}
Posted by baragi76

댓글을 달아 주세요


예전에 내 Knowledge DB에 작성해 놓은 문서인데요...
JS의 xmldoc와 VBScript의 tar 인수값이 문서 ID였는지 모르겠네요... ㅋㅋㅋ


---------------------------------------------------------------------------------------------------
HTTP개체를 VB나 JScript로 선언하고 노츠에서 Back-End로 처리하듯이 웹 스크립트로 처리한다면..??

물론, 어떤 분들은 숨겨진 프레임을 사용할 수도 있다고들 합니다.
하지만 숨겨진 프레임은 서브밋후 스크립트는 완료를 기다려 주지 않죠.. 바로 다음 로직이 수행되니 서브밋후 후속 조치에 어려운점들이 많습니다.

자 그럼.. 이 방법은 긴말이 필요 없습니다.

문서삭제를 예를 들어 간단한 셈풀 쏘스를 드립니다.

<script language="JScript">
function PostOrder (xmldoc)
{
var http = new ActiveXObject ("Microsoft.XMLHTTP");
http.Open("POST", "http://server/notes.nsf/view/Unid?DeleteDocument", false);
http.Send(xmldoc);
.
.
.

}
</script>

<script language=VBScript>
sub deleteDoc(tar)
dim Http
Set Http = CreateObject("Microsoft.XMLHTTP")

Targetpage = tar
Http.open "POST", Targetpage, False
Http.send RequestXML
.
.
.
End Sub
</SCRIPT>
Posted by baragi76

댓글을 달아 주세요


웹으로 개발된 싸이트 경우, 사용자들의 다양한 OS, 브라우저 환경으로 개발자가 미쳐 생각못한 에러들이 발생할 수 있습니다. 이런 에러들을 기록으로 남겨 개발자가 싸이트를 개선해나가기 위한 한가지 아이디어입니다. 일단 제 머리속에서 상상되는 에러 유형 세가지는

1. 일반(General) 에러
2. 자바스크립트 에러
3. 에이전트 수행 에러

먼저 1번
아시다시피 노츠에는 $$ReturnGeneralError 라는 에러화면용 양식이 있습니다. 에러 발생시 이 양식이 표시되는데, 대부분 경우 단순히 에러메세지 뿌려주는 정도에 그칩니다. 여기에 추가적으로 버튼을 만들어서 사용자가 그 에러를 관리자/담당자에게 메일 혹은 문서로 알리는 방법입니다. $$ReturnGeneralError 양식은 특수양식이라 $$ViewTemplateDefault처럼 읽기모드로 열리기 때문에, 양식을 submit 시킬수가 없습니다. 따라서 방법은 여러가지 있겠지만....

<form>
<a href=어쩌구>이 에러를 관리자에게 보내시겠습니까?</a>
<input type=hidden name=xxx value=yyy>
</form>

위와 같은 식으로 이 양식안에 강제로 form태크와 hidden 필드를 만듭니다. 그리고 사용자가 버튼을 눌렀을때 에러 report용 양식을 팝업으로 띄우고나서, 이 팝업 양식의 onLoad 이벤트안에 window.opener.document.forms[0].xxx.value 이런식으로 $$ReturnGeneralError 양식의 hidden 필드값에 접근합니다. 이 hidden 필드로는 MessageString(에러메세지), HTTP_User_Agent(사용자 브라우저 환경), Path_Info(참조된 URL 경로)등을 이용하면 되겠죠. 이런 값들을 팝업 양식에서 가져다가 양식을 onLoad 이벤트에서 submit 시켜버리면 문서는 자동으로 처리되게 됩니다.

2. 자바스크립트 에러
양식안에다가 window.onerror = errorCapture
이런식으로 한줄 적어주고나서
function errorCapture(msg, url, lineno){

}
위와 같은 함수를 적어주면 됩니다.
그러면 페이지에 자바스크립트 에러가 발생할지, errorCapture라는 함수가 자동으로 호출되며 msg, url, lineno (변수명은 변경
가능) 변수로 에러메세지, URL 경로, 에러가 발생한 라인넘버가 자동으로 들어오게 됩니다. 그러면

function errorCapture(msg, url, lineno){
window.onerror = null
window.location = '에러report용 양식 경로?OpenForm&msg='
+msg+'&url='+url+'&lineno='+lineno;
window.onerror = errorCapture
}

대충 위와 같은 식으로 그 세개의 변수값을 url 뒤에 붙여 에러 report용 양식을 불러주면 됩니다. 그럼 그 양식안에서 url 뒤 값을 짤
라 해당 필드에 값을 셋팅하고 자동으로 양식을 submit 시켜버리면 역시 문서는 자동 처리되게 됩니다.

3-1. 에이전트 에러
에이전트 맨 상단에
on Error goto errorCapture

위와 같이 적고
맨 아래에

errorCapture :
if Erl > 0 then
print "<script>window.location = '에러report용 양식 경로?OpenForm&msg='
+Error$+'&url='+db.title+"/"+db.path+"/"+agent.name+'&lineno='+CStr(Erl)+"'</scr
ipt>"
end if

대강 이런식으로 적으면 에러메세지, 에이전트 경로, 에러발생 라인 넘버 등이 url 뒤에 붙어서 에러 report 용 양식을 부르게 됩니다.
그 다음은 역시 마찬가지

3-2. 에이전트 에러 (WebQueryOpen)
아시겠지만 WebQueryOpen 이벤트에서 수행되는 에이전트 경우 에러가 발생해도 위 방법 적용이 안됩니다.
그래서 이 경우
errorCapture :
if Erl > 0 then
doc.isError = 1
doc.errorMsg = Error$
doc.errorPath = db.title+"/"+db.path+"/"+agent.name
doc.errorLine = Erl
end if

대강 위와 같은 식으로 적고나서, 이 에이전트를 수행한 양식안에다가

<script>
if( "isError필드" == 1 )
window.location = '에러 report용 양식 경로?OpenForm&msg='+"errorMsg필드"
+'&url='+"errorPath필드"+'&lineno='+"errorLine필드"
</script>

위와 같은 식으로 적으면 에러 발생시 양식이 열리면서 report용 양식으로 바로 이동하며, 그 다음은 역시 마찬가지입니다.
Posted by baragi76

댓글을 달아 주세요


사용자가 E-Mail 주소를 형식에 맞게끔 입력했는지 체크하는 자바스크립트 코드

<script language="javascript">
function isEmail(str) {
// regular expression 지원 여부 점검
var supported = 0;
if (window.RegExp) {
var tempStr = "a";
var tempReg = new RegExp(tempStr);
if (tempReg.test(tempStr)) supported = 1;
}
if (!supported)
return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
return (!r1.test(str) && r2.test(str));
}
</script>
Posted by baragi76

댓글을 달아 주세요