이 작업에서 기술적으로 풀어야 되는 최고의 숙제는 COM 개체를 CPP 코드를 이용하여 붙이는 작업이다.
그렇다고 COM 관련 API를 직접 붙여 만들기는 귀찮기도 하고, 기술적으로 능력이 딸리기 때문에, 힘들고, 대신 Visual Studio의 기능을 십분활용하는 방법으로 진행한다.

이 중 MFC 기반으로 만드는 응용 프로그램인 경우, 전체 프로그램의 사이즈는 커지지만,
그래도 편하게 작성할 수 있는 장점은 확실히 이용가능하다고 본다.
여기서 작업 결과물은 ActiveX로 나와야 겠지만, 먼저 COM 연결과 같은 테스트에 가까운 작업 부분에 대해서는 MFC 기반 응용 프로그램으로 만들어 직접 테스트와 디버깅을 하여 결과물을 만든 후 그 내용을 ActiveX로 붙이는 것이 좋을 것 같다.
이를 위해 하는 작업은 COM의 TypeLib를 사용하여 ProxyClass를 자동으로 생성하는 방법을 적용한다.
TypeLib에서 ProxyClass를 만드는 방법은 Visual Studio 버전에 따라 틀리지만, 여기서는 모든 작업을 Visual Studio 2005로 할 것이며, 이 방법을 중심으로 펼칠 예정이다.

Proxy Class 만들기.

  • 프로젝트에서 컨텍스트 메뉴를 띄우고 추가를 선택한다.
  • 추가 아래에서 클래스를 선택한다.
  • 클래스 추가라는 제목의 마법사가 뜨면, 그 중 MFC 항목을 선택한 후 템플릿 중 TypeLib의 MFC 클래스를 선택한다.
  • 사용 가능한 형식 라이브러리에서 원하는 COM을 선택한다. 여기서는 ClearQuest OleServer를 선택한다.
  • 그러면 이 COM에 딸린 각종 인터페이스들이 나열되는데, 그 중 필요한 인터페이스를 선택한다. 여기서는 CQ Workflow의 작업에 필요한 IOAdEntityDef, IOAdEntityDefs, IOAdSession 세가지가 필요하다. 그래서 그 클래스를 추가한다.
  • 그러면 프로젝트의 헤더 파일 목록에 위의 세가지에 대한 프락시 클래스 정의 내용이 담긴 헤더 파일(*.h) 파일이 추가된다.

 

일단 위의 헤더 파일이 만들어졌으면 1차적으로 완성된 것이다.

 

Proxy Class 활용하기.

COM에서 인터페이스를 이용하여 사용하려면, COM에 대한 인스턴스가 필요하다. 지금 위의 작업까지 된 부분은 운영체제 내 등록되어 있는 COM 자체의 설정 값들을 읽어온 것이 전부이다. 이 설정 값만으로는 실제 메모리 존재하는 것이 아니다. 그렇다고 단순하게 Proxy Class를 new 해서 만드는 것은 사실 아무 의미 없다. Proxy Class를 new해서 만드는 것 만큼이나, COM 자체에 대한 인스턴스를 만드는 것이 같이 병행 되어야 하고, 인스턴스화 된 COM 개체를 new해서 만드는 Proxy Class와 연결하면 되는 것이다. 이제 이 COM을 메모리에 올리고 new 해서 만드는 Proxy Class와 연결하는 작업을 수행할 것이다.

ClearQuest OleServer를 사용하려면, 최초 Session 이 필요하다. 즉 이 Session에 대한 인스턴스가 있다면, 이 인스턴스를 통해서 각종 하위 내용들을 끄집어 낼 수 있다. 즉 시작점 같은 의미를 하는 부분을 먼저 인스턴스화 하는 것이 핵심인 것이다.  그래서 다음과 같은 순서로 실행하면 된다.

먼저 Proxy Class를 new 해준다. 여기서는 시작 인스턴스로 사용할 IOAdSession 이라는 것을 먼저 시도하게 된다.
COAdSession *pSession = new COAdSession();

이제 만들어진 ProxyClass에 COM 인스턴스를 싣는다. 이 Proxy Class들은 모두 COleDispatchDriver를 상속받는데, 그 상위 클래스에 정의된 CreateDispatch 함수를 실행하면 된다. 이 때 Program ID 혹은 CLSID를 알아야 하는데, 이 중 제일 접근하기 쉬운 Program ID로 정의해서 넣는다.
pSession->CreateDispatch(_T(“CLEARQUEST.SESSION”));

이제 인터페이스에 정의된 매소드를 실행해 본다.
pSession->UserLogon(_T(“admin”), _T(“”),_T(“udb1”), 1L, _T(“7.0.0”));

 

정리를 하자면, 일단 TypeLib를 통해 ProxyClass를 만든다. 이 작업은 직접 만들 수 있지만, 귀찮으니, MFC에서 제공하는 자동화 도구를 사용해서 만든다. 그리고 난뒤, Proxy Class의 인스턴스를 만들고, 그 안에서 다시 COM 자체의 인터페이스를 생성한 뒤, 실제로 사용한다는 것이다.

728x90
전에 간신히 방법을 찾았다가, 스키마 DB를 초기화 하는 바람에, 해당 VB 스크립트를 분실했었다.
어제 간신히 ActiveX 만들어서 실험하려고 했는데, 안되서 짜증나 퇴근했었다.
겨우 겨우 찾았다.
(아래 링크는 PDF 파일 링크임)


위의 링크 내용은 레쇼날 엔지니어와 핑퐁 메일을 주고 받은 내용 같다.
요는 이렇다.

Form에 추가한 ActiveX의 속성에 들어가 InitScript를 만들어 연결하면,
param 이라는 파라미터를 받게된다.

param안에 object를 들고오면 되는데 방법은 간단하다.

Dim ctrlTest

Set ctrlTest = param.objectItem
이 간단한걸...

왜 CQ API 목록에는 없는거야?

728x90

이에 대한 문서는 방대하니 많고, 많은 커뮤니티에서는 오르락 내리락 하던 문건이기 때문에 다시 언급하기는 그렇지만, 일단, 까먹기 전에 기록해두는게 좋을 것 같아 언급한다.

IBM의 참고 사이트는 아래의 링크를 참고한다.
http://www.ibm.com/developerworks/wikis/display/rationalcccq/Creating+logins+for+SQL+Server+2005 

1. SQL 2005 내에 DB 생성.

맨 처음 SQL 2005용 DB를 생성하려면, Microsoft SQL Server Management Studio를 띄우도록 한다. 그리고 난 뒤, 왼편에 “개체 탐색기”에 있는 트리에서 “데이터베이스”를 선택한 뒤, 오른쪽 버튼 클릭(컨텍스트 메뉴 띄우기)하면 메뉴가 뜨는데, 그 중 “새 데이터베이스(N)”을 클릭한다.

2. 새 DB 옵션 설정.

“새 데이터베이스(N)”을 클릭하면 새로 생성될 DB에 대한 각종 옵션을 넣게 된다.  총 3가지 분류가 있는데, 각 부분을 나누어 설명한다.

  1. 일반 옵션
    일단 “데이터베이스 이름”에 데이터베이스 이름을 넣는다. 여기서는 Test를 위한 Schema로 cqschemaTest로 만들었다. 그리고 DB에 대한 성능 보장이 필요하다면 “데이터베이스 파일(F)” 항목에서 처음 크기와 증분 크기를 결정해서 적용해주는 것이 좋다.
    나머지 옵션들은 기본 값으로 구성하면 된다.
  2. 옵션
    특별히 설정하는 것은 없지만, 그래도 신경을 써주는 것이 좋다.
    ”데이터 정렬”에서는 “Korean_90_CS_AI_KS_WS” 를 선택해 준다. 원래 다른 곳에서는 이 부분의 값을 기본값으로 하라고 했는데, 왠지 잘 안된 느낌이다. _CS_ 부분이 바로 Case Sensitive 라고 해서 대소문자 구분을 확실하게 해주는 옵션이다. 일단 이래야 CQ에서 949가 제대로 뜨는 것 같다.
    “복구모델”은 안정성에 따라 구성하는것이 좋다. 안전하게 다룰라면 역시 “전체”를 선택하고, 단순히 복구 로그의 중요도가 무척 낮은 단순 테스트용도라면  “단순”으로 선택해주면 된다.
    그리고 “호환성 수준”을 “SQL Server 2000(80)”으로 해준다. 이게 반드시 필요한지는 모르겠지만, 그대로 불안한 마음에 설정했는데, 나쁜것 같지는 않다. – 아직 SQL 2005의 자세한 기능은 모르지만, 보안상의 이유로 틀어 막은 부분을 풀지 않을까라는 생각이다. -  나머지 항목은, 알면 상관 없지만, 잘 모른다면 안 건드리는 것이 좋을 것 같다.
  3. 2.3 파일 그룹.
    DB파일을 다중으로 구성할 때 사용되는 옵션인데, 여기서는 그 부분에 대한 고려 사항은 없으므로 생략한다.

3. 사용자 생성.

이제 CQ에서 접속할 때 사용될 계정을 생성한다. 이미 만들어진 sa를 쓰면 되지 않나… 라고 생각하시는 분도 있지만, 그런 행동은 보안 상으로 최악의 시나리오를 만드는 것이고 CQ 관련 Installation 가이드에서도 절대 하지 말라는 이야기 뿐이다. 가급적 별도 계정을 만들어 구성한다.
또한 이 구성을 하려면, “서버 인증” 이 “Window 인증 모드”이면 안된다 반드시 “혼합모드(SQL Server 및 Windows 인증 모드)”이여야 한다. 인증 변경에 대한 자세한 설명은 아래의 링크를 참고하세요.
http://godori12.tistory.com/tag/MS%20SQL2005....

  1. 계정 생성.
    DB 생성만큼 쉽다. 먼저 Microsoft SQL Server Management Studio를 실행한다. 그리고 좌측의 “개체 탐색기”를 따라 들어가 “보안 –> 로그인” 폴더 위에서 오른쪽 버튼을 클릭해서 나오는 컨텍스트 메뉴 내용 중 “새 로그인(N)..” 을 선택한다.
  2. 신규 - 일반
    “새 로그인(N)…”을 클릭하면 “로그인 – 신규” 창이 뜨는데, 맨 처음 나오는 항목이 “일반” 항목이다.
    먼저 로그인 이름에는 사용할 ID 이름을 넣는다. 여기서는 cqroot라고 했다.
    인증 유형 두가지를 선택하게 끔 되어있는데, 그 중 “SQL Server 인증(S)”을 선택한다. 그리고 해당 ID에서 사용할 새로운 암호를 넣는다.
    반드시 “암호 정책 강제 적용(F)”는 반드시 끄도록 한다. 나머지는 기본값으로 두고 다음 항목으로 넘어간다.
    0 
  3. 신규 – 서버 역할.
    여기는 절대 아무것도 체크하면 안된다, CQ에서 접속할 때 DB 접근 관련 권한에 오류가 발생할 수 있기 때문이다. 그대로 모든 체크를 비우도록 한다. 혹여 체크되어 있다면 반드시 체크를 끄도록 한다.
  4. 신규 – 사용자 매핑.
    여기가 제일 중요한 부분이다.
    사용할 DB 앞에 반드시 “매핑” 열에 매핑해준 뒤,  “사용자”와 “기본 스키마”안에 새로 만들 계정의 ID를 똑같이 넣도록 한다.  이 부분은 반드시 지켜줘야 하는데 안그러면 CQ에서 빈 스키마 생성시 오류가 발생한다. 주의하고 넣도록 한다. 
    그리고 해당 DB 항목을 체크하면 아래 쪽에 “데이터베이스 역할 멤버 자격(R)” 내용 중 db_owner 도 체크해 준다.
     
  5. 신규 – 보안 개체 및 상태.
    별 다른 설정 내용은 없다 기본값 그대로 해서 두면 된다.

4. CQ 스키마 생성.
이제는 CQ 스키마를 생성한다. 여기서 부터는 예전에 해왔던 CQ 생성방법과 동일하다.

  1. ClearQuest Maintenance Tool을 실행한다.
  2. 아이콘 중 Create 아이콘을 클릭한다.
  3. 우측에 있는 “Vender:”에서 “SQL_SERVER”를 선택한다.
    선택하면 아래의 텍스트 박스가 몇개 더 붙는다.
  4. “Physical Database Name:” 에는 아까 만든 데이터베이스 이름을 넣는다. 여기서는 cqschemaTest 이므로 cqschemaTest 라고 넣어주면 된다.
  5. “Database server name:" 에는 현재 DB서버가 동작하고 있는 서버의 서버 이름을 넣느다.
  6. “Administrator name”에는 앞서 만든 계정을 넣는다. 여기서는 "cqroot” 이다.
  7. “Administrator Password”에는 해당 계정의 암호를 넣는다.
  8. 나머지는 그대로 두고 “다음(N)>”을 클릭한다.
  9. ClearQuest Data Code Page에서 949(Korean Unified Hangeul Code ))를 선택한다.
  10. Create sample database의 체크를 끈다. (나중에 필요할 때 즈음에 만들어도 되므로 당장 만들필요는 없다. ) 그리고 “마침”을 클릭하면 된다.
  11. 정상적으로 완료 되면 아래쪽 버튼 중 “Done”이 생기는데 클릭하면 된다.

여기까지 무사히 도착했다면 작업이 완료된 것이다.

하지만, 사용자 환경은 무척이나 다양하기 때문에, 다양한 상황에 따른 다양한 에러가 발생할 수 있다.
가급적이면 Google 같은 곳에서 해당 문제점을 검색해 보면 어느정도 해결은 가능한다. 일단 필자가 지금까지 겪었던 오류들이 이것 저것 많았지만, 추수려 보면 크게 3가지 정도 발생한 것 같다. 각 에러와 그 대처 방법은 아래와 같다.

  1. 1. Database에 로그인을 할 수 없습니다.
    이 경우에는 대부분이 DB 서버가 죽었거나, 오류가 발생했을 때, 혹은 도메인\사용자 ID 스타일의 계정 – Windows 인증 계정을 사용할 때 발생된다. 앞에서 설명에서 언급했듯이 Windows 계정으로 하지 말고 반드시 Server 인증 방식으로 변경해서 처리해 줘야 한다.
  2. “select from master…” 뭐시기 하는 오류가 보일 때.
    대부분은 앞에 사용자 계정 설정 할 때 “사용자 매핑” 처리가 잘못된 경우이다. 반드시 “사용자”와 “기본 스키마” 항목에 사용자 ID 넣어 준다.
  3. 949 언어를 지원하지 않는다.
    앞서 설정한 내용 중 데이터베이스 생성할 때, “Korean_90_CS_AI_KS_WS” 를 선택해주라고 했는데, 일단 이걸로 선택하면 큰 문제없이 동작한다. 혹시 언어 코드가 잘못되거나 이상하게 동작한다면 반드시 체크 해보록 한다.

각 옵션은 만들고 난 뒤 “속성”에 들어가 수정할 수 있으므로 찬찬히 확인하도록 한다.

728x90

+ Recent posts

728x90