- 서비스 구성 둘러보기
- 홈 화면 구성
- 모듈 화면 구성
- 모듈별 공통 메뉴와 작업
- 메인 메뉴
- 통합 검색
- 통합 검색(기본 검색) 설정
- 고급 검색
- 기본 검색
- 목록에서 필터 사용
- 즐겨찾기
- AOD (Advanced OpenDiscovery) 설정
- AOD 인덱스 최적화
- LogicHook
- 프로파일
- 직원
- 하위 메뉴
- 목록 화면
- 상세 조회 화면
- 홈 화면
- 이메일 템플릿
- Vardefs
- 파일 구조
- Module 속성
- Fields
- 필드의 type
- SugarFields
- 필드의 dbType
- 공통 속성
- id type 필드
- name type 필드
- text type 필드
- enum type 필드
- int type 필드
- link type 필드
- relate type 필드
- function type 필드
- relationships
- indices
- Data Loader
- 비밀번호 저장 구조
- 이메일 저장 구조
- 계약 모듈 구조
- Search
- 통합 검색
- 통합 검색 설정
- 고급 검색
- 기본 검색
- 목록에서 필터 사용
- 즐겨찾기
- AOD (Advanced OpenDiscovery) 설정
- AOD 인덱스 최적화
- LogicHook
- 모듈별 vardefs.php 파일 설정
- Person Package
- 차계부 (Car Book)
- OBCon Package
- Call Center Package
- Multi-Instance Service Model
서비스 구성 둘러보기
홈 화면 구성
사용자로 로그인하면 홈(Home) 화면이 표시 됩니다.
홈 화면은 화면 상단에 아래와 같은 여러 메뉴가 표시 됩니다.
홈 메뉴 : 홈 화면 바로가기 입니다.
메인 메뉴 : 필터와 필터별 모듈 메뉴를 표시 합니다.
필터 : 모듈을 그룹핑한 것으로 "관리 > 메뉴 구성"에서 설정 합니다.
모듈 : 필터에 속한 모듈을 표시 합니다.
통합 검색 : 통합 검색 화면을 표시 합니다.
알림 : 알림이 있는 경우, 알림 표시 합니다.
개인 메뉴 : 개인 설정(프로파일, 직원)과 관리 메뉴(관리) 등을 표시 합니다.
프로파일 : 로그인한 사용자의 개인정보를 수정하는 화면을 표시 합니다.
직원 : 직원 목록을 표시 합니다.
관리 : 관리자로 로그인한 경우에만 표시되며, 선택시 관리자 화면이 표시 됩니다.
지원 포럼 : https://suitecrm.com/forum/index
About : 서비스(SuiteCRM)에 대한 기본 정보 제공
로그아웃 : 로그아웃
최근 사용 : 최근에 사용한 레코드를 표시 합니다.
즐겨찾기 : 레코드 중에 즐겨찾기(별표)를 선택한 레코드를 표시 합니다.
대시보드 : 대시렛을 추가할 수 있는 대시보드를 표시 합니다.
모듈 화면 구성
메인 메뉴에서 특정 모듈을 선택하면 모듈 화면이 표시 됩니다.
모듈 화면은 아래와 같이 여러 메뉴가 표시 됩니다.
홈 메뉴 : 홈 화면 바로가기 입니다.
"선택한 모듈명" : 메인 메뉴에서 선택한 모듈의 이름을 표시 합니다.
메인 메뉴 : 필터와 필터별 모듈 메뉴를 표시 합니다.
필터 : 모듈을 그룹핑한 것으로 "관리 > 메뉴 구성"에서 설정 합니다.
모듈 : 필터에 속한 모듈을 표시 합니다.
통합 검색 : 통합 검색 화면을 표시 합니다.
알림 : 알림이 있는 경우, 알림을 표시 합니다.
개인 메뉴 : 개인 설정(프로파일, 직원)과 관리 메뉴(관리) 등을 표시 합니다.
하위 메뉴 : 모듈의 하위 메뉴를 표시 합니다.
최근 사용 : 최근에 사용한 레코드를 표시 합니다.
작업 영역 : 모듈의 하위 메뉴 또는 선택한 작업에 따른 작업 영역 입니다.
모듈별 공통 메뉴와 작업
분류 | 업무 | 상세 설명 |
---|---|---|
하위 메뉴 (모듈 메뉴) | ~ 생성 | 모듈에 레코드를 생성 합니다. |
vCard로 ~ 생성 | vCard로 모듈을 생성 합니다. | |
~ 목록 | 모듈에 등록된 레코드의 목록을 보여 줍니다. | |
~ 가져오기 | csv 파일로 모듈 레코드를 대량으로 등록 합니다. | |
대규모 작업 | 다량 업데이트 | 선택한 모든 레코드의 특정 필드를 한번에 수정 합니다. |
병합 | 선택한 레코드를 병합 합니다. | |
PDF로 저장 | - 선택한 레코드를 PDF로 저장 합니다. - 인쇄를 위해서 PDF Template을 선택 합니다. | |
내보내기 | 레코드를 csv 파일로 내보냅니다. | |
삭제 | 선택한 모든 레코드를 삭제 합니다. | |
보안 그룹: 대량 할당 | 선택한 모든 레코드에 지정한 보안 그룹을 할당 합니다. | |
작업 | 편집 / 복재 / 삭제 | 레코드 편집/복재/삭제 합니다. |
중복 찾기 | 중복된 레코드를 찾고 병합 합니다. | |
PDF로 저장 | 레코드를 PDF로 저장 합니다. | |
변경 로그 보기 | - 레코드에서 지정한 필드의 변경 로그를 조회 합니다. - 표시 내용 : 필드, 이전 값, 새 값, 편집자, 변경일 | |
내보내기 | 레코드를 csv 파일로 내보냅니다. | |
하위 패널 | 활동 | 작업, 미팅, 전화통화 기록, 이메일 작성을 표시 합니다. |
히스토리 | - 노트 또는 첨부 생성, 이메일 보관을 표시 합니다. - 요약 보기, 필터 작업을 선택할 수 있습니다. | |
문서 | 문서를 표시 합니다. | |
보안 그룹 | 보안 그룹을 표시 합니다. | |
하위 패널의 작업 | 생성 | 빠른 레코드 생성 화면을 표시 합니다. |
선택 | 레코드를 검색하여 선택 합니다. | |
편집 | 현재 레코드 편집 합니다. | |
삭제 | 현재 레코드 삭제 합니다. |
하위 메뉴 : 모듈을 선택한 경우, 좌측 메뉴에 표시되는 모듈별 메뉴 입니다.
대규모 작업 : 모듈 목록 화면에서 선택할 수 있는 작업 입니다.
작업 : 모듈 상세 조회 화면에서 선택할 수 있는 작업 입니다.
하위 패널 : 모듈 상세 조회 화면 하단에 표시되는 하위 패널 입니다.
하위 패널의 작업 : 하위 패널에서 선택할 수 있는 작업 입니다.
메인 메뉴
"관리 > 개발자 도구 > 메뉴 구성" 메뉴에서 메인 메뉴에 표시할 필터와 모듈을 구성 합니다.
필터, 모듈 형태로 메뉴를 구성 합니다.
설정 방법은 관리자 매뉴얼을 참고 합니다.
통합 검색
화면 상단에 있는 검색 아이콘을 선택하여 통합 검색을 한다.
"가져오기" 메뉴를 사용하여 등록된 것은 고급 검색에서 표시되지 않습니다.
검색 예약어
고급 검색 : * 사용
기본 검색 : % 사용 (*도 사용할 수 있도록 수정함)
통합 검색에서 검색을 실행하면 기본 검색 화면이 표시 됩니다.
기본 검색
모듈별 검색 결과를 각 모듈별로 표시 합니다.
"검색" 버튼 우측에 있는 "고급" 링크를 선택하여 검색할 모듈과 결과의 표시 순서를 설정 합니다.
고급 검색
검색어를 입력한 후 "검색" 버튼을 선택하면, 모듈별 검색 결과를 한번에 표시 합니다.
AOD 미활성화시
"기본 검색" 화면만 표시 한다. 기본 검색은 관리자가 설정에서 지정한 활성 모듈별로 검색 결과를 표시 한다.
AOD 활성화시
"고급 검색" 화면을 표시 한다. 고급 검색은 Zend Lucene search framework을 사용하여 통합 검색을 한다.
상단의 "고급 검색 사용" 링크를 선택하여 고급 검색 화면으로 전환 하거나 "기본 검색 사용" 링크를 선택하여 기본 검색 화면으로 전환 한다.
통합 검색(기본 검색) 설정
"관리 > 시스템 > 통합 검색" 메뉴에서 통합 검색에 사용할 모듈과 검색 순서를 설정 한다.
활성 모듈 : 통합 검색에서 사용할 모듈
비활성 모듈 : 통합 검색에서 사용하지 않을 모듈
고급 검색
Zend Lucene search framework를 사용하여 검색 한다. 검색시 "*"를 사용 한다.
기본 검색
지정한 활성 모듈에 대해서 모듈별로 검색 결과를 표시 한다. 검색시 "%" 문자를 사용 한다. (*도 사용할 수 있도록 수정함)
목록에서 필터 사용
등록 : 목록에서 "필터 > 고급필터"에서 "저장할 검색 이름"을 지정하여 검색 필터를 저장 한다.
수정 : 목록에서 "필터 > 고급필터"에서 "수정" 버튼을 선택하여 "내 필터"에 지정된 필터를 수정 한다.
삭제 : 목록에서 "필터 > 고급필터"에서 "삭제" 버튼을 선택하여 "내 필터"에 지정된 필터를 삭제 한다.
목록에서 "내 필터"의 하위 메뉴에서 저장한 필터를 선택하여 검색 한다.
필터를 사용한 목록 보기에서 'x' 버튼을 선택하여, 적용된 필터를 해지 한다.
즐겨찾기
상세 조회 화면 상단에 있는 별표를 선택하여 "즐겨찾기" 항목을 추가하거나 삭제 한다.
즐겨찾기 항목은 "최근 사용" 항목 아래에 "즐겨찾기"에 표시 된다.
목록에서 "기본 필터"에 있는 "내 즐겨찾기"를 체크하여 사용할 수도 있다.
AOD (Advanced OpenDiscovery) 설정
"관리 > 고급 OpenAdmin > AOD 설정" 메뉴에서 "AOD 활성화"를 선택 한다.
통합 검색에서 "고급 검색" 화면이 표시 된다.
고급 검색에서 Zend Lucene search framework를 사용 한다.
고급 검색 결과 표시시 검색 점수(Search Score)도 표시 한다.
AOD 인덱스 최적화
"Optimize AOD Index" 스케쥴러를 사용하여 인덱스를 최적화 한다.
AOD_Index.php 파일의 optimise() 함수를 호출 한다.
LogicHook
데이터를 저장 또는 수정시 after_save LogicHook이 호출하여 Lucene Index를 갱신 한다. 삭제시에는 after_delete, 복구시에는 after_restore LogicHook을 호출 한다.
프로파일
프로파일 메뉴에서 사용자 정보를 관리할 수 있습니다.
사용자 프로파일 탭 : 사용자 기본 정보를 지정 또는 변경 관리 합니다.
비밀번호 탭 : 비밀번호 수정 합니다.
테마 탭 : 사용자에게 표시되는 화면 테마를 설정 합니다.
고급 탭 : 화면 출력 및 언어, 모듈, 통화 등을 설정 합니다.
외부 계정 탭 : Facebook, Twiter 등에서 사용할 외부 계정을 관리 합니다.
"비밀번호" 탭을 선택한 후 비밀번호를 변경할 수 있습니다.
현재 비밀번호 : 지금 등록된 비밀번호
새 비밀번호 : 변경할 비밀번호
비밀번호 확인 : 변경할 비밀번호
저장
취소
사용자 설정 초기화
홈페이지 재설정 : 홈 화면의 대시보드를 초기화 합니다.
직원
직원 목록과 직원 상세 정보를 조회 합니다.
"직원" 메뉴, "프로파일" 메뉴, "관리 > 사용자 > 사용자 관리" 메뉴에서 직원 정보를 수정할 수 있습니다.
직원은 서비스에 접근할 수 있는 사용자 이면서 참여와 협업의 대상으로 사용 됩니다.
직원(Employee)의 참여와 협업 활용 방법
활동의 참석자로 추가
메일 수신, 참조, 숨은 참조로 추가
모듈의 담당자 지정
사용자는 서비스에 로그인할 수 있습니다. 로그인을 하지 않는 직원도 관리할 수 있습니다.
하위 메뉴
모듈 메뉴 선택시 모듈별로 하위 메뉴를 표시 합니다.
목록 화면
모듈의 목록 화면 아래와 같은 기능을 제공 합니다.
레코드 선택 : 레코드 선택시 사용 합니다.
대규모 작업 : 선택한 레코드에 적용할 수 있는 작업 입니다.
최소 하나 이상의 레코드를 선택한 경우만 활성화 됩니다.
검색 필터 : 레코드를 검색하기 위한 빠른 필터와 고급 필터를 제공 합니다.
컬럼 선택 : 목록에 표시할 컬럼을 선택하고 표시 순서를 설정 합니다.
목록에서 표시되는 컬럼의 위측에 있는 화살표를 선택하여 오름차순, 내림차순으로 정렬 합니다.
보안 그룹: 대량 할당 : 선택한 레코드에 보안 그룹을 할당하거나 삭제 합니다.
PDF 템플릿 모듈에서 작성 가능한 Template 유형은 아래와 같습니다.
가망고객, 거래처, 연락처
견적서, 계약, 청구서
목록 화면 > 다량 업데이트
선택한 레코드의 특정 필드를 다량으로 업데이트 합니다.
영업기회 목록에서 2개의 레코드를 선택한 후 대규모 작업으로 "다량 업데이트"를 선택한 경우의 화면 입니다.
목록 화면 하단에 다량 업데이트를 할 수 있는 영역이 표시 됩니다.
목록 화면 > 병합
여러개의 레코드를 하나로 병합 합니다.
맨 왼쪽열에 포시되는 레코드가 저장된 주 레코드 입니다.
병합 저장 : 병합한 레코드를 저장 합니다.
취소 : 병합을 취소 합니다.
주 레코드로 설정 : 현재 열을 주 레코드로 설정 합니다.
삭제 : 현재의 열을 병합 대상에서 제외 합니다.
"<<" : 이 값을 주 레코드에 반영 합니다.
선택한 여러 레코드를 병합하여 하나의 레코드를 생성 합니다. 최종 저장되는 레코드는 화면 맨좌측에 있는 레코드 입니다. 우측에 표시되는 레코드에서 값을 선택하여 주 레코드의 필드값을 수정하거나 직접 수정할 수 있습니다.
병합시 일반적인 작업 절차는 아래와 같습니다.
선택한 레코드 중에서 가장 최신의 데이터를 가진 레코드를 주 레코드로 선택 합니다.
우측에 표시한 레코드 중에서 최신 값을 가지고 있는 필드로 주 레코드를 갱신 합니다.
필요한 경우, 주 레코드를 직접 수정 합니다.
"병합 저장" 버튼을 선택하여 레코드 병합을 실행 합니다.
목록 화면 > PDF로 저장
목록 화면에서 레코드를 선택한 후 "PDF로 저장" 작업을 선택 합니다.
모듈 유형에 해당하는 PDF 템플릿이 있으면 PDF 템플릿을 선택할 수 있는 창이 표시 됩니다.
선택한 PDF 템플릿으로 pdf가 생성되어 저장 됩니다.
목록 화면 > 내보내기
csv 파일 형식
"필드명1","필드명2" : 헤더행으로 필드명 저장
"필드값1","필드값2" : 행을 바꾸어 여러 레코드 저장
다운로드한 CSV 파일을 사용하여 "가져오기"를 할 경우에 헤더행에서 가져오기에 사용할 필드만 남겨 두고 작성하면 됩니다. 단, 이 경우에 레코드가 저장되는 영역에서도 헤더에 해당하는 필드만 남겨 두어야 합니다.
"프로파일" 메뉴의 "고급" 탭에서 가져오기/내보내기 설정
상세 조회 화면
"관리 > 개발자 도구 > 모듈과 하위 패널 표시"
관리자 화면과 프로파일에서 사용할 모듈과 하위패널을 지정할 수 있습니다.
"관리 > 개발자 도구 > 모듈과 하위 패널 표시" 메뉴에서 서비스에서 사용할 모듈과 표시할 하위 패널을 지정 합니다.
"프로파일 > 고급" 에서 사용자별로 사용할 모듈을 지정 합니다. 관리자 화면에서 설정한 모듈과 하위 패널 내에서 설정이 가능 합니다.
상세 조회 화면 > 중복 찾기
여러 영업대표가 영업활동을 진행하다보면 거래처와 연락처의 중복이 자주 발생 합니다. 이런 경우 담당자를 두어 특정 주기(한달)에 한번씩 거래처와 연락처를 정리 합니다. 정리는 일반적으로 아래 순서를 진행 됩니다.
"중복 찾기" 기능을 사용하여 중복되는 레코드를 찾습니다.
"병합" 기능을 사용하여 중복된 레코드를 병합 합니다.
아래와 같은 교육을 통해 중복되는 데이터의 입력을 방지할 수 있습니다.
거래처와 연락처 등록전에 미리 검색을 한 후, 존재하지 않을 경우에 등록 합니다.
거래처 명 등을 입력할 때, 정해진 규칙대로 입력 합니다.
예) 명함에 표시되는 거래처명으로 등록 합니다.
상세 조회 화면 > 변경 로그 보기
모듈에서 감사 필드로 등록된 필드의 변경 로그를 표시 합니다.
"감사" 필드는 레코드에서 중요한 필드로 변경 history를 남기고 싶은 필드를 감사 필드로 선택 합니다.
홈 화면
홈 화면 구성
홈 화면은 상단의 탭과 하단의 대시렛으로 구성 됩니다.
탭 영역
대시렛 추가 : 현재의 탭에 대시렛을 추가 합니다.
탭 추가 : 새로운 탭을 추가 합니다.
탭 편집 : 탭을 선택하여 삭제 합니다.
대시렛 영역
대시렛 옵션 편집
새로 고침
대시렛 삭제
대시렛은 드래그앤드랍으로 위치를 조정 합니다.
"프로파일" 메뉴에서 "홈페이지 재설정" 버튼을 선택하면 홈 화면이 초기화 됩니다.
"관리 > 시스템 > 시스템 설정" 메뉴의 설정
홈페이지 대시렛의 최대 수 : 15
홈 화면 구성
탭 추가
탭 이름과 컬럼수를 입력한 후 탭을 추가 합니다.
탭 편집
"-" 버튼을 선택하여 탭을 삭제 합니다.
대시렛 옵션
일반
대시렛 이름과 일반 설정을 합니다.
제목 : 대시렛 이름
행보기 : 표시할 행의 수
자동-다시 가져오기 : 갱신 주기 설정
필터
검색 조건을 지정 합니다.
내 항목만 : 선택시 자신이 소유한 레코드만 표시 합니다.
대시렛 종류에 따라 옵션이 다릅니다.
modules/${Module}/Dashlets/${Dashlet}/
${Dashlet}.php : Dashlet Class
${Dashlet}.meta.php : Dashlet Metadata
${Dashlet}.data.php
$dashletData['MyOpportunitiesDashlet']['searchFields']
$dashletData['MyOpportunitiesDashlet']['columns']
Last modified: 2019.01.01 ~ 2020.07.07, version 0.003
이메일 템플릿
"이메일 > 이메일 템플릿 목록" 메뉴를 선택 합니다.
서비스에서 사용하는 이메일 템플릿을 관리 합니다.
유형 | 영문 이름 | 이름 | 상세 설명 |
---|---|---|---|
system | System-generated password email | 시스템 생성 비밀번호 | "관리 > 비밀번호 관리" 메뉴 시스템에서 임의로 생성한 비밀번호를 발송 합니다. |
Forgot Password email | 비밀번호 재설정 링크 | "관리 > 비밀번호 관리" 메뉴 사용자가 비밀번호를 잊어 버렸을 경우, 다시 비밀번호를 설정하기 위한 링크를 발송 합니다. 로그인 화면에서 "비밀번호를 잊어 버리셨나요?" 링크를 선택하여 비밀번호 재설정 링크를 발송할 수 있습니다. | |
Event Invite Template | 이벤트 초청 이메일 | Event 초청 이메일을 발송 합니다. | |
Case Creation | 고객지원 생성 | 고객지원(Case)가 생성 되었음을 알립니다. | |
User Case Update | 사용자 - 고객지원 수정 | 사용자에게 고객지원(Case)가 수정 되었음을 알립니다. | |
Contact Case Update | 연락처 - 고객지원 수정 | 고객에게 고객지원(Case)가 수정 되었음을 알립니다. | |
Case Closure | 고객지원 마감 | 고객지원(Case)가 종료 되었음을 알립니다. | |
Joomla Account Creation | 포털 계정 생성 | Joomla 포털에 계정이 생성 되었음을 알림 |
서비스에서 제공하는 이메일 템플릿을 수정하거나 새로운 이메일 템플릿을 등록하여 사용할 수 있습니다.
이메일 템플릿 : System-generated password email (시스템 생성 비밀번호)
제목 : 고객 관리 : 임시로 생성한 비밀번호
이메일 템플릿 : Forgot Password email (비밀번호 재설정 링크)
제목 : 고객 관리 : 비밀번호 재설정 링크
"$변수명"을 사용하여 관련 레코드의 값을 이메일에 추가할 수 있습니다.
이메일 템플릿 생성/수정시 "변수 추가"에서 모듈과 필드를 선택하면 해당 변수명이 표시 됩니다.
"$변수명"을 사용하여 동적인 이메일 템플릿을 생성 하세요.
Last modified: 2020.07.07 ~ 2020.07.07, version 0.001
Vardefs
Bean에 대한 정보를 저장 한다.
테이블
필드 (fields)
관계 (relationships)
색인 (indices)
파일 구조
custom/Extention/modules/${Modules}/Ext/Vardefs/${field}_~_c.php
# custom/modules/${Modules}/Ext/Vardefs/vardefs.ext.php (자동 생성됨)
modules/${Module}/vardefs.php
Module 속성
$dictionary[${Module}]
이름 | 타입 | 상세 설명 |
---|---|---|
table | String | 데이터베이스 테이블 이름 |
comment | String | 테이블 설명 |
fields | Array | 아래 참조 |
relationships | Array | 아래 참조 |
indices | Array | 아래 참조 |
audited | Boolean | true. 감사 하용 |
duplicate_merge | Boolean | true. 병합 허용 |
optimistic_locking | Boolean | |
optimistic_lock | Boolean | |
unified_search | Boolean | true. 통합 검색 허용 |
unified_search_default_enabled | Boolean | |
full_text_search | Boolean | |
custom_fields | Boolean | true. 사용자 정의 필드 사용 |
acl_fields | Boolean | |
inline_edit | Boolean | |
engine | String | MyISAM |
mysqlengine | String | MyISAM |
Fields
필드의 type
modules/DynamicFields/ 폴더 참조
FieldCases.php : type에 해당하는 widget 할당
custom/modules/DynamicFields/templates/Fields/Template${Type}.php
modules/DynamicFields/templates/Fields/Template${Type}.php
CustomTemplate${Type} class
Template${Type} class
FieldViewer.php : type에 해당하는 tpl 할당
custom/modules/DynamicFields/templates/Fields/Forms/${type}.php
modules/DynamicFields/templates/Fields/Forms/${type}.php
get_body() 함수 호출
modules/DynamicFields/templates/Fields/Forms/varchar.tpl
Category | Type | Description |
---|---|---|
문자열 | name | 레코드 이름 |
user_name | 사용자 이름 | |
varchar | 문자열 | |
encrypt | 암호화된 문자열 | |
text | 텍스트 | |
longtext | 텍스트 | |
phone | 전화번호 | |
이메일 | ||
url | URL | |
longhtml | HTML | |
enum | 선택목록 | |
multienum | 다중 선택목록 | |
dynamicenum | 동적 선택목록 | |
숫자 | tinyint | 작은 정수 |
int | 정수 | |
short | 작은 정수 | |
long | 큰 정수 | |
decimal | 실수 | |
float | 실수 | |
통화 | currency | 통화 |
currency_id | 통화 아이디 | |
논리 | bool | 논리값 |
날자 | date | 날자 |
time | 시간 | |
datetime | 날자 시간 | |
datetimecombo | 날자 시간 콤보 | |
파일 | file | 파일 |
image | 이미지 | |
Table 연동 | id | 다른 모듈의 ID를 저장 |
relate | id 필드를 참조하여 값을 가져 온다. | |
link | Relationship 정보로 데이터 추출 | |
assigned_user_name | 담당자 | |
modified_user_name | 수정자 | |
parent | ||
parent_type | ||
기타 | function | 함수 호출 |
CronSchedule | ||
readonly | 읽기전용 | |
none | 사용하지 않는 필드 |
SugarFields
Field : base, int, float, datatime, link
custom/include/SugarFields/Fields/${Field}/SugarField${Field}.php
include/SugarFields/Fields/${Field}/SugarField${Field}.php
include/SugarFields/Fields/Base/SugarFieldBase.php
CustomSugarField${Field} class
SugarField${Field} class
include/SugarFields/Parsers/Rules/${Modules}ParseRule.php
include/SugarFields/Parsers/Rules/ParseRules.php
${Modules}Parse Rule class
필드의 dbType
dbType | Description |
---|---|
id | |
varchar | |
int | |
double | |
datetime | |
text |
공통 속성
이름 | 타입 | 상세 설명 |
---|---|---|
name | String | 필드 이름 |
vname | String | 시스템 레이블 (예, LBL_LEAD_SOURCE) |
type | String | 필드의 종류 |
len | Integer | DB 필드 크기 |
size | Integer | 필드 크기 |
precision | String | 소수점 아래 자리수 |
required | Boolean | true. 필수 필드 |
isnull | Boolean | true. null 허용 |
audited | Boolean | true. 감사 1. Audit |
inline_edit | Boolean | |
reportable | Boolean | true. 보고서에서 사용 |
isMultiSelect | ||
quicksearch | String | enabled |
unified_search | Boolean | true. 통합 검색에서 검색 가능 |
enable_range_search | Boolean | true. 범위 검색에서 검색 가능 |
full_text_search | Array | Reserved |
studio | String | visible. 스튜디오에 표시 |
studio | Array | visible editview, detailview, listview, searchview quickcreate, basic_search, advanced_search no_duplicate, formula |
massupdate | Boolean | 1. 대량 업데이트 허용 |
import | ||
importable | String | required |
exportable | ||
duplicate_merge | Boolean | disabled |
duplicate_merge_dom_value | String | 0 |
merge_filter | String | disabled |
default | String | 디폴트 값 (NULL, ...) |
no_default | Boolean | true. 디폴트 없음 |
default_value | ||
display_default | String | |
comment | String | 필드 설명 |
comments | String | 필드 설명 |
help | String | 도움말 |
module | String | 모듈 이름 |
table | String | 테이블 이름 |
bean_name | String | Bean 이름 |
dbType | String | DB에 저장되는 field type |
relationship | String | Rationship 이름 |
relationship_fields | Array | |
rel_field | Array | |
join_primary | ||
link | Stirng | reports_to_link |
link | Boolean | |
link_type | String | one, many, relationship_info |
join_link_name | ||
linkModuleOverride | ||
link_target | ||
link_class | ||
link_file | ||
side | String | right. relationship에서 오른쪽에 위치 |
function | Array | include : PHP 파일 이름 name : 실행할 함수 이름 params : 전달하는 인수 returns : html. 결과를 html로 반환 onListView : true. 목록에 표시 |
function_require | String | PHP 파일 이름 |
function_class | String | Class 이름 |
function_name | String | 함수 이름 |
function_params | Array | 함수에 전달하는 인수 |
function_params_source | String | parent. 디폴트값, this |
sort_on | ||
sort_on2 | ||
fields | ||
db_concat_fields | ||
inline_edit | Boolean | 1. 인라인 편집 지원 |
validation | array | type, compareto, blank, min, max |
rname | ||
id_name | ||
source | String | non-db |
options | ||
dependency | ||
rows | String | 행 수 |
cols | String | 열 수 |
ext2 | ||
disable_num_format | ||
min | 최소값 | |
max | 최대값 | |
save | 저장 여부 | |
dbtype | ||
editable | ||
group | 관련 필드를 하나의 그룹으로 묶을 때 사용 | |
type_name | ||
parent_type | ||
id | ||
db_field | ||
rel_fields | ||
db_concat_fields | ||
join_name | ||
auto_increment | ||
validation | ||
do_report | ||
editor | ||
parentenum | ||
hideacl | ||
allowEapm | ||
popupHelp | ||
noChange | ||
fileId | ||
fields | ||
docType | ||
docUrl | ||
docId | ||
readonly | ||
write_only | ||
length | ||
sensitive | ||
width | 넓이 | |
height | 높이 | |
gen | ||
additionalFields | ||
hide_history_contacts_emails | ||
ignore_role | ||
operator | String | subquery |
query_type | String | default |
subquery | String | SQL문 |
id type 필드
이름 | 타입 | 상세 설명 |
---|---|---|
name | String | 필드 이름 |
vname | String | 시스템 레이블 (예, LBL_LEAD_SOURCE) |
type | String | 필드의 종류 : id |
id_name | String | name과 동일 |
table | String | 테이블 이름 |
rname | String | table의 참조할 필드 이름 |
module | String | 모듈 이름 |
dbType | String | DB 필드 타입 |
name type 필드
이름 | 타입 | 상세 설명 |
---|---|---|
link | Boolean | true. |
dbType | String |
text type 필드
이름 | 타입 | 상세 설명 |
---|---|---|
rows | String | 행 수 |
cols | String | 열 수 |
enum type 필드
이름 | 타입 | 상세 설명 |
---|---|---|
options | String | 선택목록 이름 |
dependency | Boolean | true. 의존 관계 있음 |
int type 필드
이름 | 타입 | 상세 설명 |
---|---|---|
disable_num_format | String | 1. 포맷 사용 않음 |
max | Boolean | false. 최대값 없음 |
min | Boolena | false. 최소값 없음 |
link type 필드
이름 | 타입 | 상세 설명 |
---|---|---|
relationship | String | 테이블 이름 |
source | String | non-db. DB에 저장하지 않음 |
이름 | 타입 | 상세 설명 |
---|---|---|
relationship | String | 테이블 이름 |
source | String | non-db. DB에 저장하지 않음 |
module | String | 모듈 이름 |
bean_name | String | Bean 이름 |
id_name | String | 필드 이름 |
side | String | right |
save | Boolean | true. 저장 허용 |
table | String | 테이블 이름 |
link | String |
relate type 필드
이름 | 타입 | 상세 설명 |
---|---|---|
link | String | |
rname | String | Reserved |
id_name | String | Reserved Table 필드 이름 (name과 동일) |
table | String | Reserved 필드_테이블 |
module | String | 모듈 이름 |
dbType | String | DB 필드 타입 |
ext2 | String |
function type 필드
이름 | 타입 | 상세 설명 |
---|---|---|
function | Array | include : PHP 파일 이름 name : 실행할 함수 이름 returns : html. 결과를 html로 반환 |
이름 | 타입 | 상세 설명 |
---|---|---|
function_require | String | PHP 파일 이름 |
function_class | String | Class 이름 |
function_name | String | 함수 이름 |
function_params | Array | 함수에 전달하는 인수 |
source | String | function |
relationships
이름 | 타입 | 상세 설명 |
---|---|---|
relationship_type | String | one-to-one one-to-many many-to-many |
lhs_module | String | 왼쪽 모듈 |
lhs_table | String | 왼쪽 테이블 |
lhs_key | String | 왼쪽 테이블 키 one-to-many인 경우 id 값을 가지 |
rhs_module | String | 오른쪽 모듈 |
rhs_table | String | 오른쪽 테이블 |
rhs_key | String | 오른쪽 테이블 키 |
relationship_role_column | String | |
relationship_role_column_value | String |
자동으로 설정되는 레이블 변경
custom/Extension/modules/${Modules}/Ext/Language/ko_KR.*.php
one-to-one
Left module : ${begin}
Right module : ${end}
순번 : ${n} (1부터 시작)
one-to-many
${varname} = ${begins}_${ends}_${n}
#--- 데이터베이스 관련 항목
# 테이블 : ${varname}_c
# id
# date_modified
# deleted
# ${varname}${begin}_ida : ${begin} 모듈의 ID
# ${varname}${end}_idb : ${end} 모듈의 ID
#--- Relationshop 메타 파일
# custom/Extension/modules/relationships/relationships/${varname}MetaData.php
#--- ${begin} 모듈에 생성되는 항목
# custom/Extension/modules/relationships/vardefs/${varname}_${Begins}.php
# custom/modules/${Begins}/Ext/Vardefs/vardefs.ext.php (자동 생성)
# 변수 : ${varname} #--- Relationship의 데이터 아이디
$dictionary[${Begins}]["fields"][${varname}] = array (
'name' => ${varname},
'vname' => 'LBL_${VARNAME}_FROM_${END}_TITLE',
'source' => 'non-db',
'type' => 'link', #--- Relationship을 사용한 link
'relationship' => ${varname}, #--- Relationship 이름
'side' => 'right',
'module' => ${Begins},
'bean_name' => ${Begins},
);
#--- ${end} 모듈에 생성되는 항목
# custom/Extension/modules/relationships/vardefs/${varname}_${Ends}.php
# custom/modules/${Ends}/Ext/Vardefs/vardefs.ext.php (자동 생성)
# 변수 : ${varname}${begin}_ida #--- Relationship의 데이터 아이디
# Relationship 테이블에서 right 항목이 현재 레코드의 ID와 같은 항목을 찾은 후 left 항목을 반환
$dictionary[${ends}]["fields"]["${varname}${begin}_ida"] = array (
'name' => '${varname}${begin}_ida',
'vname' => 'LBL_${VARNAME}_FROM_${END}_TITLE',
'source' => 'non-db',
'reportable' => false,
'type' => 'link', #--- Relationship을 사용한 link
'relationship' => '${varname}', #--- Relationship 이름
'side' => 'right', #--- right와 현재 레코드의 ID가 같아야 함
);
# 변수 : ${varname} : ${begin} 데이터의 ID
$dictionary[${ends}]["fields"][${varname}] = array (
'name' => ${varname},
'vname' => 'LBL_${VARNAME}_FROM_${BEGIN}_TITLE',
'source' => 'non-db',
'type' => 'link', #--- Relationship을 사용한 link
'relationship' => ${varname}, #--- Relationship 이름
'id_name' => '${varname}${begin}_ida',#--- 현재 레코드에서 참조할 변수명
'module' => ${Begins},
'bean_name' => ${Begins},
);
# 변수 : ${varname}_name #--- ${begin} 데이터의 이름
$dictionary[${ends}]["fields"]["${varname}_name"] = array (
'name' => '${varname}_name',
'vname' => 'LBL_${VARNAME}_FROM_${BEGIN}_TITLE',
'source' => 'non-db',
'save' => true,
'type' => 'relate', #--- 관계 필드
'link' => '${varname}', #--- Relationship 이름
'id_name' => '${varname}${begin}_ida',#--- 현재 레코드에서 참조할 변수명
'table' => ${begins},
'module' => ${Begins},
'rname' => 'name', #--- 모듈에서 가져올 필드의 이름
);
many-to-many
indices
이름 | 타입 | 상세 설명 |
---|---|---|
name | String | 인덱스 이름 (idx_~) |
type | String | primary. Primary 인덱스 index. 인덱스 unique. |
fields | Array | array(필드1, 필드2) |
Data Loader
비밀번호 저장 구조
//--- 비밀번호 해시 : user_hash
//--- strtolower(md5($password)) : $로 시작않는 32자
//--- hashlib.md5(password.encode('utf-8')).hexdigest().lower() : $로 시작
//--- repo_python/SuiteCRM/Zztemp.py의 getPasswordHash() 함수 참조
SELECT id, user_name, user_hash
FROM users;
이메일 저장 구조
//--- Users : email_addr_bean_rel, email_address / outbound_email
//--- Accounts : email_addr_bean_rel, email_address
//--- Contacts : email_addr_bean_rel, email_address
//--- Outbound Email
//--- mail_smtppass: Blowfish encode 적용 (Utils.blowfish_encode() 함수 참조)
SELECT id, user_id, name, mail_smtpserver, mail_smtpport, mail_smtpuser, mail_smtppass
FROM outbound_email;
//--- Bean(bean_module, bean_id)에 해당하는 이메일이 저장된 ID
SELECT bean_module, bean_id, email_address_id
FROM email_addr_bean_rel
ORDER BY bean_module ASC;
//--- 이메일 저장
SELECT id, email_address, email_address_caps
FROM email_addresses
ORDER by email_address;
계약 모듈 구조
계약 테이블 구조
~_cstm 테이블은 사용자 정의 필드가 저장되는 테이블 이다.
계약 모듈 관련 가져오기 마법사 항목
계약 : 계약의 일반 사항을 관리 한다.
제품 항목 그룹 : 계약의 제품 항목에서 그룹을 지정 한다.
제품 항목 : 계약의 제품 항목에서 각 제품 항목을 지정 한다.
계약 모듈 관련 스튜디오 항목
계약
제품 항목
특수한 목적으로 사용되는 모듈로 견적서, 계약, 청구서 모듈과 연동하여 사용 한다.
별도의 화면이 존재하지 않고 견적서, 계약, 청구서 모듈의 "제품 항목"으로 사용 된다.
주의 : 여러 모듈에서 같이 사용되므로 수정시 견적서, 계약, 청구서 모듈에 모두 반영 된다.
Search
통합 검색
화면 상단에 있는 검색 아이콘을 선택하여 통합 검색을 한다.
AOD 미활성화시
"기본 검색" 화면만 표시 한다. 기본 검색은 관리자가 설정에서 지정한 활성 모듈별로 검색 결과를 표시 한다.
AOD 활성화시
"고급 검색" 화면을 표시 한다. 고급 검색은 Zend Lucene search framework을 사용하여 통합 검색을 한다.
상단의 "고급 검색 사용" 링크를 선택하여 고급 검색 화면으로 전환 하거나 "기본 검색 사용" 링크를 선택하여 기본 검색 화면으로 전환 한다.
통합 검색 설정
"관리 > 시스템 > 통합 검색" 메뉴에서 통합 검색에 사용할 모듈과 검색 순서를 설정 한다.
활성 모듈 : 통합 검색에서 사용할 모듈
비활성 모듈 : 통합 검색에서 사용하지 않을 모듈
고급 검색
Zend Lucene search framework를 사용하여 검색 한다. 검색시 "*"를 사용 한다.
URL : index.php?action=UnifiedSearch&module=Home&query_string=~
module : Home
action : UnifiedSearch
query_string : 검색하고자 하는 문자열
search_fallback : 값이 있으면 LuceneSearch를 사용하지 않는다.
showGSDiv : 선언이 되면 LuceneSearch를 사용하지 않는다.
modules/Home/UnifiedSearch.php
start : 표시할 레코드 순번 (0, 1, 2, ...). Default는 0 이다.
amount : 한 페이지에 표시할 레코드 갯수. Default는 20개 이다.
total : 전체 레코드 갯수
doSearch() : 검색
AOD_Index module
modules/AOD_Index/Index/Index/ : Lucene Index를 저장하는 폴더
cache/modules/AOD_Index/QueryCache/~ : 검색 결과를 serialize 하여 임시 저장
find() : 검색
modules/AOD_Index/Lib/Search/Lucene.php : Zend_Search_Lucene
index() : 인덱스 생성. after_save LogicHook을 사용 한다.
optimise() : 인덱스 최적화
AOD_IndexEvent module
기본 검색
지정한 활성 모듈에 대해서 모듈별로 검색 결과를 표시 한다. 검색시 "%" 문자를 사용 한다.
URL : index.php?action=UnifiedSearch&module=Home&search_fallback=1&query_string=~
modules/Home/UnifiedSearch.php
modules/Home/UnifiedSearchAdvanced.php의 search() 함수 호출
custom/modules/Home/UnifiedSearchAdvancedForm.tpl
modules/Home/UnifiedSearchAdvancedForm.tpl
목록에서 필터 사용
등록 : 목록에서 "필터 > 고급필터"에서 "저장할 검색 이름"을 지정하여 검색 필터를 저장 한다.
수정 : 목록에서 "필터 > 고급필터"에서 "수정" 버튼을 선택하여 "내 필터"에 지정된 필터를 수정 한다.
삭제 : 목록에서 "필터 > 고급필터"에서 "삭제" 버튼을 선택하여 "내 필터"에 지정된 필터를 삭제 한다.
목록에서 "내 필터"의 하위 메뉴에서 저장한 필터를 선택하여 검색 한다.
필터를 사용한 목록 보기에서 'x' 버튼을 선택하여, 적용된 필터를 해지 한다.
saved_search table
search_module : 모듈 이름
contents : 저장된 필터
검색 조건을 담은 객체를 문자열로 변환
Base64로 인코딩
assigned_user_id : 소유자 아이디
즐겨찾기
상세 조회 화면 상단에 있는 별표를 선택하여 "즐겨찾기" 항목을 추가하거나 삭제 한다.
즐겨찾기 항목은 "최근 사용" 항목 아래에 "즐겨찾기"에 표시 된다.
목록에서 "기본 필터"에 있는 "내 즐겨찾기"를 체크하여 사용할 수도 있다.
favorites table
parent_type : 모듈 이름
parent_id : 모듈의 레코드 아이디
assigned_user_id : 소유자 아이디
AOD (Advanced OpenDiscovery) 설정
"관리 > 고급 OpenAdmin > AOD 설정" 메뉴에서 "AOD 활성화"를 선택 한다.
통합 검색에서 "고급 검색" 화면이 표시 된다.
고급 검색에서 Zend Lucene search framework를 사용 한다.
고급 검색 결과 표시시 검색 점수(Search Score)도 표시 한다.
AOD 인덱스 최적화
"Optimize AOD Index" 스케쥴러를 사용하여 인덱스를 최적화 한다.
AOD_Index.php 파일의 optimise() 함수를 호출 한다.
LogicHook
데이터를 저장 또는 수정시 after_save LogicHook이 호출하여 Lucene Index를 갱신 한다. 삭제시에는 after_delete, 복구시에는 after_restore LogicHook을 호출 한다.
#--- custom/modules/logic_hooks.php
$hook_array['after_save'] = Array();
$hook_array['after_save'][] = Array(1, 'AOD Index Changes', 'modules/AOD_Index/AOD_LogicHooks.php','AOD_LogicHooks', 'saveModuleChanges');
#--- AOD_Index.php 파일의 index() 함수를 호출 한다.
$hook_array['after_save'][] = Array(30, 'popup_select', 'modules/SecurityGroups/AssignGroups.php','AssignGroups', 'popup_select');
$hook_array['after_delete'] = Array();
$hook_array['after_delete'][] = Array(1, 'AOD Index changes', 'modules/AOD_Index/AOD_LogicHooks.php','AOD_LogicHooks', 'saveModuleDelete');
$hook_array['after_restore'] = Array();
$hook_array['after_restore'][] = Array(1, 'AOD Index changes', 'modules/AOD_Index/AOD_LogicHooks.php','AOD_LogicHooks', 'saveModuleRestore');
#--- custom/modules/unified_search_modules_display.php
모듈별 vardefs.php 파일 설정
unified_search : true. 통합 검색 대상 모듈
unified_search_default_enabled: true. 디폴트로 통합 검색 사용 설정이 되어 있는 모듈
full_text_search : true. 전문 검색 지원
필드 정보
unified_search : 통합 검색 대상 필드
full_text_search
Person Package
차계부 (Car Book)
한글명 | 영문명 | Type | 상세 설명 |
---|---|---|---|
일자 | OccurrenceDate | Date | |
분류 | Category | DropDown | 주유비, 주차비, 톨비, 보험료, 공과금, 범칙금, 정기 검사, 수리, 기타 |
지출 항목 | Item | TextField | |
거래처 | Account | TextField | |
금액 | Price | Currency | |
주행거리 | Distance | Integer | 단위: km |
주유량 | Amount | Integer | 단위: 리터 |
주유 단가 | UnitPrice | Integer | 단위: 원 |
비고 | Description | TextField |
Workflow : name = Category + "/" + Item