SugarCRM 문서 원본 보기
←
SugarCRM
둘러보기로 가기
검색하러 가기
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
이 문서는 편집하거나 다른 명령을 할 수 없도록 보호되어 있습니다.
문서의 원본을 보거나 복사할 수 있습니다.
오픈소스로 제공되는, On-Premise/On-Demand/Appliance 방식의 CRM인 sugarCRM (Sugar Community Edition)을 소개한다. * 홈페이지 :*http://www.sugarcrm.com/ :*http://www.codeplex.com/sugarcrm/ :*http://www.sugarforge.org/content/open-source/, http://www.sugaropensource.org/, http://sourceforge.net/projects/sugarcrm/ * 다운로드 : http://sourceforge.net/project/showfiles.php?group_id=107819 * 라이센스 : AGPL v3 + 상용 라이센스 * 플랫폼 : Windows, Solaris, Linux, Mac OS ==Document== *기술지원 :*Forum : http://forums.sugarcrm.com/ :*Blog : http://developers.sugarcrm.com/wordpress/ *[http://apidocs.sugarcrm.com/ API Document] : [http://www.phpdoc.org/ phpDocumentor 2]를 사용하여 추출한 API Document :*Ultimate : [http://apidocs.sugarcrm.com/api/6.5.4/ult API], [http://apidocs.sugarcrm.com/schema/6.5.0/ult Schema] :*Enterprise : [http://apidocs.sugarcrm.com/api/6.5.4/ent API], [http://apidocs.sugarcrm.com/schema/6.5.0/ent Schema] :*Corporate : [http://apidocs.sugarcrm.com/api/6.5.4/corp API], [http://apidocs.sugarcrm.com/schema/6.5.0/corp Schema] :*Professional : [http://apidocs.sugarcrm.com/api/6.5.4/pro API], [http://apidocs.sugarcrm.com/schema/6.5.0/pro Schema] :*Community : [http://apidocs.sugarcrm.com/api/6.5.4/ce API], [http://apidocs.sugarcrm.com/schema/6.5.0/ce Schema] *http://developers.sugarcrm.com/docs/ENT/6.4/n/Application_Guides/-docs-Application_Guides-Sugar_Enterprise_Application_Guide_6.4.0-toc.html *[http://support.sugarcrm.com/02_Documentation/01_Sugar_Editions/02_Sugar_Enterprise/Sugar_Enterprise_6.5/Sugar_Enterprise_Administration_Guide_6.5.0 Sugar Enterprise 6.5.0 Administration Guide - SugarCRM Support Site] *[http://support.sugarcrm.com/02_Documentation/04_Sugar_Developer/Sugar_Developer_Guide_6.5 Sugar Developer Guide 6.5 - SugarCRM Support Site] *[http://support.sugarcrm.com/04_Find_Answers/03_Developers Developers - SugarCRM Support Site] *[http://support.sugarcrm.com/05_Resources/03_Supported_Platforms/Sugar_6.5.x_Supported_Platforms 지원 플랫폼] *[http://status.sugarcrm.com/ On-Demand Status] ==설치 가이드== 아래 설치 가이드는 Windows Server 2003을 기준으로 작성한 것 입니다. 설치 환경이 틀릴 경우에는 별도의 주석을 달아 주세요. ===설치전 사전 준비 사항=== *[[MySQL 5.0.51|MySQL Community Server 5.0.51]] 설치 :*[[MySql Tools for 5.0|MySql Tools for 5.0]] 설치 *[[Apache HTTP Server 2.2.8|Apache HTTP Server 2.2.8 with OpenSSL 0.9.8g]] *[[PHP 5.2.5|PHP 5.2.5]] 설치 :*PHP에 [[PHP 5.2.5#GD Library 설치|GD Library 2.0.35]] 설치 :*PHP에 gettext 모듈 설치 :*PHP에 [[PHP 5.2.5#IMAP 설치|IMAP 확장팩]] 설치 :*PHP에 mbstring 모듈 설치 :*PHP에 mysql, mysqli 모듈 설치 :*PHP에 curl 모듈 설치 :*php.ini에서 다음과 같이 설정 한다. memory_limit = 128M : 최소 40M 이상 upload_max_filesize = 10M : 최소 6M 이상 post_max_size = 10M : 최소 6M 이상 ===Sugar CRM 설치=== *[http://sourceforge.net/projects/sugarcrm/files/ 다운로드 사이트]에서 설치 프로그램인 "SugarCE-5.2.0j.zip"을 다운로드 한다. :*Apache의 Document Root인 c:/www 아래 c:/www/sugar/ 폴더($SUGAR_HOME)에 다운로드 받은 압축 파일의 압축을 풀어 저장 한다. <br> *Sugar CRM은 PHP 버전이 최소 5.1.0 이상이 되어야 하며, 5.2.x를 권장 하므로 5.3.0일 경우 다음과 같이 조치를 취하여야 정상적으로 설치가 된다. //--- $SUGAR_HOME/include/utils.php의 setPhpIniSettings() 함수에서 3라인을 주석 처리 한다. function setPhpIniSettings() { //--- 3562 라인 // if(function_exists('gzclose') && headers_sent() == false) { // ini_set('zlib.output_compression', 1); // } //--- $SUGAR_HOME/install/welcome.php에서 (163 라인) if (version_compare(phpversion(),'5.1.0') < 0 || version_compare(phpversion(),'5.3.0') >= 0) { //--- 위 문장을 아래와 같이 수정 한다. if (version_compare(phpversion(),'5.1.0') < 0 || version_compare(phpversion(),'5.3.0') > 0) { <br> *[http://localhost/sugar/install.php http://localhost/sugar/install.php]에 접속하여 SugarCRM 설정을 시작 한다. :[[그림:install_sugar_001.png|설치 시작]] :*하단의 "Next" 버튼을 선택 한다. <br> *"I Accept"를 체크하여 라이선스를 확인한 후 "Next" 버튼을 선택 한다. :[[그림:install_sugar_002.png|라이선스 확인]] <br> *"Custom Install"을 선택한 후 "Next" 버튼을 선택 한다. :[[그림:install_sugar_003.png|Custom Install]] <br> *Database Type으로 "MySQL(MySQLi detected)"를 선택한 후 "Next" 버튼을 선택 한다. :[[그림:install_sugar_004.png|DBMS 선택]] <br> *다음과 같이 DBMS 정보를 설정한 후 "Next" 버튼을 선택 한다. Database Name : "sugardb" (SugarCRM용으로 생성한 Database 명) Host Name : "localhost" Database Administrator Username : "root" Database Admin Password : xxxx Select Box에서 “Provide existing user”를 선택 한다. Sugar Database Username : "sugar" (SugarCRM용으로 생성한 DB 사용자) Sugar Database User Password : xxxx Re-enter Sugar Database User Password : xxxx Populate Database with Demo Data? : "yes" 선택 (데모용 데이터가 생성됨) :[[그림:install_sugar_005.png|DBMS 설정]] <br> *"I Accept" 버튼을 선택하여 위 설정에 따라 DB가 생성되도록 한다. :[[그림:install_sugar_006.png|DB 생성 확인]] <br> *SugarCRM의 접속 정보 및 관리자(admin)의 암호를 설정 한다. URL of Sugar Instance : "http://localhost/sugar" System Name : "SugarCRM" Sugar Admin User Password : xxxx Re-enter Sugar Admin User Password : xxxx :[[그림:install_sugar_007.png|접속 정보]] <br> *다음과 같이 보안 옵션을 설정 한다. Send Anonymous Usage Statistics ? : not check Automatically Check For Updates? : not check Use a Custom Session Directory for Sugar : not check Use a Custom Log Directory : not check Provide Your Own Application ID : not check (SugarCRM Clustering시 사용함) :[[그림:install_sugar_008.png|보안 옵션]] <br> *다음과 같이 지역 설정을 한다. Default Date Format : "2006/12/23" Default Time Format : "11:00pm" Default Language : "US English" Default Name Format : "s lf" Character Set most commonly used in your Locale : "UTF-8" Character Set for Import/Export : "UTF-8" Export (.csv) Delimiter : "," Default Currency : "Korean Won" Significant Digits : "0" 1000s Separator : "," Decimal Separator : "." :[[그림:install_sugar_009.png|지역 설정]] <br> *설정값을 확인하고 "Install" 버튼을 선택하여 설정을 시작 한다. :*$SUGAR_HOME/config.php 설정 파일이 생성됨 :*Database가 설정이 되고 데모 데이타가 등록됨 :*시간이 오래 걸릴 수 있으므로 끈기를 가지고 기다려야 함 :[[그림:install_sugar_010.png|설정 적용]] <br> *SugarCRM이 제대로 설정된 것을 확인하고 "Next" 버튼을 선택 한다. :[[그림:install_sugar_011.png|설정 적용 완료]] <br> *한글 언어팩을 설치할 수 있는 화면이나 여기서는 "Next" 버튼을 선택하여 Skip 한다. :*SugarCRM의 초기 설정에서 적용한 사항은 관리자 화면에서 다시 설정할 수 있다. :*또는 $SUGAR_HOME/config.php 파일을 직접 수정하여 다시 설정할 수 있다. :[[그림:install_sugar_012.png|언어팩 설정]] <br> *Registration (Optional) 화면에서 오픈소스의 발전을 위해 Sugar CE를 설치한 것을 SugarCRM에 알리고자 할 경우 필요한 정보를 입력한 후 "Send Registration" 버튼을 선택 한다. :[[그림:install_sugar_013.png|설치 알림]] <br> *SugarCRM의 설치가 완료 되어 로그인 창이 표시된다. :*설치시 등록한 관리자(admin)으로 로그인 하여 보자. :[[그림:install_sugar_014.png|로그인]] <br> *첫 로그인시 TimeZone을 설정하는 화면이 표시된다. :*"Asia/Seoul(GMT+9)"를 선택한 후 "Save" 버튼을 선택 한다. :[[그림:install_sugar_015.png|TimeZone 설정]] <br> ===한글팩 설치=== 한글팩 설치는 한글팩(language_ko_KR.zip)이 있다는 가정하에서 설명 한다. *한글팩 설치 :*관리자로 로그인 한다. :*"Admin -> Module Loader" 메뉴를 선택 한다. :*"찾아보기..."을 선택한 후 language_ko_KR.zip을 선택 한다. :*"Upload" 버튼을 눌러 한글팩을 서버로 업로드 한다. :*업로드된 한글팩 옆에 표시되는 "install" 버튼을 눌러 한글팩을 설치 한다. *디폴트 언어 변경 :*$SUGAR_HOME/config.php 'languages' => array ( 'ko_KR' => 'Korean', 'en_us' => 'English (US)', ), 'default_language' => 'ko_KR', *Module Builder(모듈 생성 도구) 오류 수정 :*한글팩을 설치하면 Module Builder(모듈 생성 도구)가 정상 동작하지 않는다. ::*한글팩을 설치할 경우, json.js (json-min.js) 파일의 _prepare() 함수가 호출되면 반환되는 문자열 앞에 이상한 문자열이 붙어 JavaScript Exception이 발생 한다. ::*따라서 JSON을 사용하여 서버 프로그램을 호출한 후 실행되는 parse() 함수에서 사용되는 s=_prepare(s) 함수 다음에, 반환되는 문자열에 대한 복구 작업을 해 주어야 한다. ::*반환되는 문자열을 복구하는 함수는 s = s.substring(s.indexOf("{")); 이다. ::*json.js (json-min.js) 파일은 아래 sugar_grp1_yui.js 파일안에 포함 되므로 sugar_grp1_yui.js를 직접 수정 한다. :*vi $SUGAR_HOME/include/javascript/sugar_grp1_yui.js ::*vi $SUGAR_HOME/include/javascript/yui/build/json/json-min.js 파일을 수정한 후, "관리 -> 복구 -> JS 그룹 파일 재생성" 메뉴을 선택하여 sugar_grp1_yui.js 파일을 다시 생성하여도 된다. /json-min ?_prepare //--- s=_prepare(s); 를 찾기 위한 명령임 //--- s=_prepare(s); 문자열 바로 뒤에 아래 문자열을 추가 한다. s = s.substring(s.indexOf("{")); *MS Explorer의 경우 GET 방식으로 한글을 넘겨 줄 때, 발생하는 오류 수정 :*해결방안: 한글을 넘겨 주는 부분을 JavaScript의 encodeURI() 함수를 사용하여 인코딩 한다. :*오류 현상 1 : Studio의 레이아웃에서 필드의 속성값을 편집하는 화면이 깨어진다. ::*/modules/ModuleBuilder/tpls/layoutView.tpl 파일에서 editProperty 화면을 호출하는 부분을 수정 한다. (onclick 부분) ::*/modules/ModuleBuilder/tpls/listView.tpl 파일에서 editProperty 화면을 호출하는 부분을 수정 한다. :*오류 현상 2 : Studio의 레이아웃에서 패널의 속성값을 편집하는 화면이 깨어진다. ::*/modules/ModuleBuilder/javascript/studio2.js 파일에서 editProperty 화면을 호출하는 부분에서 title_label과 value_label을 수정 한다. :*오류 현상 3 : 하위 패널 호출 시 화면이 표시되지 않는다. ::*/modules/ModuleBuilder/javascript/ModuleBuilder.js 파일에서 handleTreeClick: function(o) { var node = o.node; //--- ModuleBuilder.getContent(node.data.action); 이 라인을 지우고 다음 라인과 같이 수정 한다. ModuleBuilder.getContent(encodeURI(node.data.action)); return false; }, ==Ubuntu용 설치 가이드== *[http://sourceforge.net/project/showfiles.php?group_id=107819 다운로드 사이트]에서 SugarCE-5.5.0beta2.zip 를 /var/www/ 에 다운로드 한다. *SugarCRM 소스 준비 cd /var/www unzip SugarCE-5.5.0beta2.zip mv SugarCE-Full-5.5.0beta2 sugar chown -R www-data:www-data sugar *SugarCRM 설치를 위한 준비 apt-get install php5-curl vi /etc/php5/apache2/php.ini memory_limit = 128M : 최소 40M 이상 upload_max_filesize = 20M : 최소 20M 이상 post_max_size = 30M : 최소 20M 이상 /etc/init.d/apache2 restart *[http://localhost/sugar/ http://localhost/sugar/]에 접속하여 SugarCRM을 설치 한다. :*설치에 대한 상세 내역은 위에 정리된 사항을 참조 한다. ==CentOS용 설치 가이드== [[CentOS]] 5.5에서 SugarCRM을 설치해 보자. *[http://sourceforge.net/project/showfiles.php?group_id=107819 다운로드 사이트]에서 SugarCE-6.1.1.zip 를 다운로드 한다. *SugarCRM 소스 준비 cd /var/www/html unzip SugarCE-6.1.1.zip mv SugarCE-Full-6.1.1 sugar chown -R apache:apache sugar *SugarCRM 설치를 위한 준비 vi /etc/php.ini memory_limit = 128M : 최소 40M 이상 upload_max_filesize = 20M : 최소 20M 이상 post_max_size = 30M : 최소 20M 이상 service httpd restart *[http://localhost/sugar/ http://localhost/sugar/]에 접속하여 SugarCRM을 설치 한다. :*설치에 대한 상세 내역은 위에 정리된 사항을 참조 한다. *Crontab 설정 :*service crond restart :*crontab -l :*crontab -e * * * * * cd /nfsdata/www/html/rockplace; php -f cron.php > /dev/null 2>&1 * * * * * cd /nfsdata/www/html/manage; php -f cron.php > /dev/null 2>&1 *Sugar에서 사용하는 PHP Extension :*curl, gd2, imap, mbstring :*zip, zlib :*Database 연동 모듈 *설치 후 첫 파일에서 오류 화면이 표시될 경우 mv .htaccess .htaccess_org ==관리자 가이드== ===로그 설정=== *로그 파일 :*$SUGAR_HOME/include/SugarLogger/LoggerManager.php :*$SUGAR_HOME/include/SugarLogger/SugarLogger.php *$SUGAR_HOME/config.php에서 로그 설정 :log_dir : 로그가 저장되는 폴더 :log_file : 로그 파일명, 초기값은 "sugarcrm.log" :log_memory_usage : :logger => level : 로그 레벨 (debug, info, error, fatal, security, off) :logger => file ::ext : 로그 파일 확장자, 초기값은 ".log" ::name : 로그 파일명, 초기값은 "sugarcrm" ::dateFormat : 날자 포맷 ::maxSize : 로그 파일 최대 크기 ::maxLogs : 로그 파일 최대 갯수 ::suffix : 로그 파일 뒤에 붙는 문자열, 초기값은 "%m_%Y" *프로그램에서 로그 남기기 $GLOBALS['log']->debug('로그 메시지'); $GLOBALS['log']->info('로그 메시지'); ===License 표시 변경=== *vi include/MVC/View/SugarView.php :*666 라인에 있는 $copyright 를 변경 한다. ===한글팩 제작=== SugarCRM의 한글팩을 만들기 위해 en_us 언어로 부터 ko_kr 파일을 추출하여 한글 언어팩을 작성 한다. *한글팩 작성을 위한 폴더 생성 mkdir /tmp/sugar #--- 다운로드 받은 SugarCE-6.1.1.zip의 압축을 여기에 푼다. mkdir /tmp/sugar_ko_kr *ant를 사용하여 언어로 부터 한글 파일을 복사하기 위한 build 파일을 만든다. :*vi /tmp/sugar_ko_kr/build.xml <?xml version="1.0" encoding="UTF-8"?> <project name="sugar" default="init" basedir="."> <property name="dirSugar" value="/tmp/sugar" /> <property name="dirSugarKoKr" value="/tmp/sugar_ko_kr" /> <!-- SugarCRM 소스로부터 Language Pack과 관련된 파일만 추출 한다. --> <target name="init"> <copy todir="${dirSugarKoKr}"> <fileset dir="${dirSugar}" includes="**/en_us.*.html, **/en_us.lang.php, **/*.en_us.lang.php, **/*.en_us.php, **/en_us.*.tpl, **/*.lang-en.php, **/en.js, **/en_dlg.js" excludes="cache/**/*" /> </copy> <move todir="${dirSugarKoKr}"> <fileset dir="${dirSugarKoKr}" includes="**/en_us.*.html, **/en_us.lang.php, **/*.en_us.lang.php, **/*.en_us.php, **/en_us.*.tpl, **/*.lang-en.php, **/en.js, **/en_dlg.js" /> <filtermapper> <replacestring from="en_us" to="ko_kr" /> <replacestring from="en_us.lang.php" to="ko_kr.lang.php" /> <replacestring from="en_us.php" to="ko_kr.php" /> <replacestring from="lang-en.php" to="lang-ko.php" /> <replacestring from="en.js" to="ko.js" /> <replacestring from="en_dlg.js" to="ko_dlg.js" /> </filtermapper> </move> </target> </project> *영어 파일을 복사하여 한글 파일로 이름만 변경 한다. (위에서 만든 build.xml 파일 사용) cd /tmp/sugar_ko_kr ant init *vi /tmp/sugar_ko_kr/manifest.php <?php $manifest = array( 'acceptable_sugar_versions' => array ( 'exact_matches' => array(), 'regex_matches' => array ( 0 => "6\.6\.1.*" ), ), 'acceptable_sugar_flavors' => array ( 0 => 'CE', 1 => 'PRO', 2 => 'ENT', ), 'name' => 'Korean Language Pack', 'description' => 'Korean Language Pack', 'author' => 'pnuskgh', 'published_date' => '2011/01/23', 'version' => '0.1', 'type' => 'langpack', 'icon' => '', 'is_uninstallable' => true, ); $installdefs = array( 'id'=> 'langpack_ko_kr', 'copy' => array( array('from'=> '<basepath>', 'to'=> '.', ), ), ); ?> *SugarCRM 한글팩(langpack_ko_kr.zip) 작성 :*/tmp/sugar_ko_kr/ 폴더에 있는 파일을 열어 열심히 한글로 번역 한다. :*/tmp/sugar_ko_kr/ 폴더의 내용을 묶어 langpack_ko_kr.zip 파일을 작성 한다. ===한글 설치 프로그램 제작=== *vi /install.php 파일을 다음과 같이 수정 한다. $supportedLanguages = array( 'ko_KR' => 'Korea - 한국어', //--- 이 라인을 추가 한다. 'en_us' => 'English (US)', $default_lang = 'ko_KR'; //--- 디폴트로 ko_KR을 지정 한다. */install/language/ko_KR.lang.php 파일을 작성 한다. */install/demoData.ko_KR.php 데모 데이터 파일을 작성 한다. ===테마 구조=== ===Dashlet=== *참고 문헌 :*[http://www.sugarcrm.com/wiki/index.php?title=Dashlets SugarCRM - Dashlets] ==SOAP/REST== *[http://axis.apache.org/axis/ AXIS 1.4] wsdl2java.bat -o . -p com.sugar http://cloud.smartprocess.co.kr/testEnt/service/v4/soap.php?wsdl *SugarsoapLocatior.java // private java.lang.String sugarsoapPort_address = "http://cloud.smartprocess.co.kr/testEnt/service/v4/soap.php"; private java.lang.String sugarsoapPort_address = Config.getString("sugar.serverurl", "http://cloud.smartprocess.co.kr/testEnt/") + "service/v4/soap.php"; *SugarsoapBuindingStub.java public static String SugarServerurl = Config.getString("sugar.serverurl", "http://cloud.smartprocess.co.kr/testEnt/") + "service/v4/soap.php"; _call.setSOAPActionURI(SugarsoapBindingStub.SugarServerurl + "/login"); *SugarsoapBuindingStub.java 함수 public com.sugar.Entry_value login(com.sugar.User_auth user_auth, java.lang.String application_name, com.sugar.Name_value[] name_value_list) public void logout(java.lang.String session) public com.sugar.Get_entry_result_version2 get_entry(java.lang.String session, java.lang.String module_name, java.lang.String id, java.lang.String[] select_fields, com.sugar.Link_name_to_fields_array[] link_name_to_fields_array, boolean track_view) public com.sugar.Get_entry_result_version2 get_entries(java.lang.String session, java.lang.String module_name, java.lang.String[] ids, java.lang.String[] select_fields, com.sugar.Link_name_to_fields_array[] link_name_to_fields_array, boolean track_view) public com.sugar.Get_entry_list_result_version2 get_entry_list(java.lang.String session, java.lang.String module_name, java.lang.String query, java.lang.String order_by, int offset, java.lang.String[] select_fields, com.sugar.Link_name_to_fields_array[] link_name_to_fields_array, int max_results, int deleted, boolean favorites) public com.sugar.New_set_relationship_list_result set_relationship(java.lang.String session, java.lang.String module_name, java.lang.String module_id, java.lang.String link_field_name, java.lang.String[] related_ids, com.sugar.Name_value[] name_value_list, int delete) public com.sugar.New_set_relationship_list_result set_relationships(java.lang.String session, java.lang.String[] module_names, java.lang.String[] module_ids, java.lang.String[] link_field_names, java.lang.String[][] related_ids, com.sugar.Name_value[][] name_value_lists, int[] delete_array) public com.sugar.Get_entry_result_version2 get_relationships(java.lang.String session, java.lang.String module_name, java.lang.String module_id, java.lang.String link_field_name, java.lang.String related_module_query, java.lang.String[] related_fields, com.sugar.Link_name_to_fields_array[] related_module_link_name_to_fields_array, int deleted, java.lang.String order_by) public com.sugar.New_set_entry_result set_entry(java.lang.String session, java.lang.String module_name, com.sugar.Name_value[] name_value_list) public com.sugar.New_set_entries_result set_entries(java.lang.String session, java.lang.String module_name, com.sugar.Name_value[][] name_value_lists) public com.sugar.Get_server_info_result get_server_info() public java.lang.String get_user_id(java.lang.String session) public com.sugar.New_module_fields get_module_fields(java.lang.String session, java.lang.String module_name, java.lang.String[] fields) public int seamless_login(java.lang.String session) public com.sugar.New_set_entry_result set_note_attachment(java.lang.String session, com.sugar.New_note_attachment note) public com.sugar.New_return_note_attachment get_note_attachment(java.lang.String session, java.lang.String id) public com.sugar.New_set_entry_result set_document_revision(java.lang.String session, com.sugar.Document_revision note) public com.sugar.New_return_document_revision get_document_revision(java.lang.String session, java.lang.String i) public com.sugar.Return_search_result search_by_module(java.lang.String session, java.lang.String search_string, java.lang.String[] modules, int offset, int max_results, java.lang.String assigned_user_id, java.lang.String[] select_fields, boolean unified_search_only, boolean favorites) public com.sugar.Module_list get_available_modules(java.lang.String session, java.lang.String filter) public java.lang.String get_user_team_id(java.lang.String session) public void set_campaign_merge(java.lang.String session, java.lang.String[] targets, java.lang.String campaign_id) public com.sugar.Get_entries_count_result get_entries_count(java.lang.String session, java.lang.String module_name, java.lang.String query, int deleted) public com.sugar.Get_entry_result_for_reports get_report_entries(java.lang.String session, java.lang.String[] ids, java.lang.String[] select_fields) public java.lang.String[] get_module_fields_md5(java.lang.String session, java.lang.String[] module_names) public com.sugar.Last_viewed_entry[] get_last_viewed(java.lang.String session, java.lang.String[] module_names) public com.sugar.Upcoming_activity_entry[] get_upcoming_activities(java.lang.String session) ==SugarCRM 아키텍처== ===사용 라이브러리=== {| cellspacing="1" cellpadding="1" border="1" width="100%" |- |width="30%" bgcolor="cyan" align="center" valign="middle"|라이브러리 |width="20%" bgcolor="cyan" align="center" valign="middle"|라이선스 |width="50%" bgcolor="cyan" align="center" valign="middle"|상세 설명 |- |Sugar Community Edition |align="center"|GNU GPL 3.0 |오픈소스 CRM |- |[[tcpdf]] |align="center"|GNU LGPL 2.1 |PDF 제작 |- |[[phpmailer]] |align="center"|GNU LGPL 2.1 |메일 발송 |- |[[PHP_Compat]] |align="center"|PHP License 3.0 | |- |[[nusoap]] |align="center"|Free |Web Services Toolkit for PHP |- |[[HTTP_WebDAV_Server]] |align="center"|PHP License 3.0 |WebDAV 서버 |- |[[HTML_Safe]] |align="center"|BSD style license | |- |[[domit_rss]] |align="center"|Free |DOM based RSS parser for PHP |- |[[domit]] |align="center"|Free |DOM parser for PHP |- |[[Crypt_Blowfish]] |align="center"|PHP License 3.0 | |- |[[TreeView]] |align="center"|BSD License |Javascript, Tree 형태의 항목을 표시 |- |[[yui]] (Yahoo User Interface) |align="center"|BSD License |Javascript, UI 모듈 |- |[[tiny_mce]] |align="center"|GNU LGPL 2.1 |Javascript, |- |[[Ext JS]] |align="center"|GNU LGPL 3.0 |Javascript, |- |[[jscalendar]] |align="center"|GNU LGPL 3.0 |Javascript, 달력 |} ===프로그램 호출 구조=== *호출 URL: http://localhost/sugar/index.php?module=Accounts&action=index :*'''module''': /sugar/modules/Accounts/ 폴더에 있는 모듈이 사용됨 :*'''action''': ::*/sugar/include/MVC/Controller/action_file_map.php 참조 ::*/sugar/include/MVC/Controller/action_view_map.php 참조 ::*아래 정리된 범례. action_명 (view_명) ::*index: ::*DetailView (detail): ::*EditView (edit): ::*MultiEditView (multiedit): ::*Popup (popup): ::*Vcard (vcard): ::*ImportVcard (importvcard): ::*ImportVcardSave (importvcardsave): ::*SugarPdf (sugarpdf): ::*SaveTimezone ::*InitialSync ::*Logout ::*RetrieveEmail ::*view 명: ajax, classic, config, detail, edit, html, importvcard, importvcardsave, json, list, multedit, noaccess, popup, serialized, sidequickcreate, sugarpdf, vcard, xml :*'''return_module''' :*'''return_action''' :*return_id: :*id: :*record: :*view: :*Delete: :*entire: :*mass: :*type: :*ie_assigned_user_id: :*configure: :*RTL: :*LTR: :*query_string: :*module_tab: :*parentTab: :*popup: :*lvso: :*query: :*displayColumns: :*orderBy: :*sortOrder: :*entryPoint: :*massupdate: :*usertheme: :*noThemeSave: :*usercolor: :*userfont: :*userthemegrouptabs: :*MSID: *호출 URL에 따른 처리 프로그램 :*/sugar/include/MVC/Controller/SugarController.php#process(); :*/sugar/include/MVC/View/SugarView.php#process(); ::*/sugar/modules/Accounts/views/view.view_명.php ::*/sugar/include/MVC/View/views/view.view_명.php */sugar/modules/Accounts/ 폴더 구조 :*views/: Default. /sugar/include/MVC/View/views/ :*tpls/: Default. /sugar/include/MVC/View/tpls/ :*metadata/: 메타데이터 :*Dashlets/: 대쉬렛 :*SugarFeeds/: 피드 :*language/: 언어 파일, ko_KR.lang.php ===디렉토리 구조=== ===프로세스 구조=== index.php를 분석하여 SugarCRM의 프로세스 흐름을 파악한다. *require_once('include/entryPoint.php') :*require_once('config.php') : 환경 설정 :*require_once('config_override.php') : 환경 설정 개인화 :*require_once 'include/SugarObjects/SugarConfig.php' : SugarCRM 환경 설정 :*require_once('include/utils.php') :*require_once('sugar_version.php'); :*require_once('include/database/PearDatabase.php'); :*require_once('include/database/DBManager.php'); :*require_once('include/database/DBManagerFactory.php'); :*require_once('include/dir_inc.php'); :*require_once('include/Localization/Localization.php'); :*require_once('include/javascript/jsAlerts.php'); :*require_once('include/TimeDate.php'); :*require_once('include/modules.php'); :*require_once('data/SugarBean.php'); :*require_once('include/utils/file_utils.php'); :*require_once('include/utils/mvc_utils.php'); :*require_once('include/SugarEmailAddress/SugarEmailAddress.php'); :*require_once('include/SugarLogger/LoggerManager.php'); :*require_once('modules/Trackers/BreadCrumbStack.php'); :*require_once('modules/Trackers/Tracker.php'); :*require_once('modules/Trackers/TrackerManager.php'); :*require_once('modules/ACL/ACLController.php'); :*require_once('modules/Administration/Administration.php'); :*require_once('modules/Administration/updater_utils.php'); :*require_once('modules/Users/User.php'); :*require_once('modules/Users/authentication/AuthenticationController.php'); :*require_once('include/utils/LogicHook.php'); :*require SUGAR_PATH . '/include/SugarObjects/SugarRegistry.php'; *require_once('include/MVC/SugarApplication.php') :*require_once('include/MVC/Controller/ControllerFactory.php') ::*require_once('include/MVC/Controller/SugarController.php') : 디폴터 Controller :::*require_once('include/MVC/View/SugarView.php'); :::*require_once('modules/Administration/updater_utils.php'); :::*$this->process(); :::*$this->processView(); ::::*$view->process(); ::*require_once('custom/modules/'.$module.'/controller.php') : 모듈별 사용자 정의 Controller ::*require_once('modules/'.$module.'/controller.php') : Module별 Controller ::*$controller = new SugarController() : 디폴터 Controller :*require_once('include/MVC/View/ViewFactory.php') ::*require_once('include/MVC/View/SugarView.php'); ::*'custom/modules/'.$module.'/views/view.'.$type.'.php : 사용자 정의 모듈별 View ::*modules/'.$module.'/views/view.'.$type.'.php' : Module별 View ::*custom/include/MVC/View/views/view.'.$type.'.php : 사용자 정의 디폴트 View ::*include/MVC/View/views/view.'.$type.'.php : 디폴트 View :*require_once('modules/Users/authentication/AuthenticationController.php') :*$app->execute() ::*Request parameter : module, action, usertheme, MSID, entryPoint, massupdate ::*$this->controller = ControllerFactory::getController($module); ::*$this->controller->checkEntryPointRequiresAuth($_REQUEST['entryPoint']) :::*$this->loadUser(); :::*$this->ACLFilter(); :::*$this->preProcess(); :::*$this->controller->preProcess(); ::*$this->loadLanguages(); ::*$this->checkDatabaseVersion(); ::*$this->loadDisplaySettings(); ::*$this->loadLicense(); ::*$this->loadGlobals(); ::*$this->setupResourceManagement($module); ::*$this->controller->execute(); ::*sugar_cleanup(); :*require_once('include/resource/ResourceManager.php'); :*require_once ('modules/Sync/file_config.php'); :*require_once('modules/Sync/SyncController.php'); :*require_once('themes/'.$GLOBALS['theme'].'/layout_utils.php'); ===화면 구조=== *include/MVC/View/SugarView.php :*$this->displayHeader(); ::*Theme : header.tpl _leftFormHiddenLastViewed.tpl _leftFormHiddenShortcuts.tpl <div id="header"> _companyLogo.tpl _colorFontPicker.tpl _globalLinks.tpl _welcome.tpl _headerSearch.tpl _headerModuleListGroupTabs.tpl _headerModuleList.tpl _headerLastViewed.tpl _headerShortcuts.tpl </div> <div id="main"> _leftFormHide.tpl :*$this->preDisplay(); :*$this->displayErrors(); :*$this->display(); ::*Module과 Action에 해당하는 template이 사용됨 :*$this->displaySubPanels(); ::*$subpanel->display(); :*$this->displayFooter(); ::*Theme : footer.tpl *Default Theme :*Sugar <- default ===Shortcut Menu=== *SugarCRM의 좌측 메뉴에 보여지는 Shortcut Menu (바로가기 메뉴)를 정리 한다. */modules/모듈명/Menu.php 에 권한에 따른 바로 가기 메뉴가 정의 되어 있다. ==동적 구조== *Relate 변수 select name, type, ext2, ext3 from fields_meta_data where custom_module = 'cases' and type = 'relate'; select custom_module, name, type, len, required, ext1, ext2, ext3, ext4 from fields_meta_data where custom_module = 'Campaigns' order by name; *relationship desc relationships; ==문제 해결== *Sugar 화면이 깨어지고 Ajax 관련 오류 창이 표시됨 CentOS에 설치된 PHP 라이브러리의 버전이 달라 문제가 발생 합니다. - jssource/Minifier.php 파일 수정 //--- 158 line, pnuskgh // $this->input = preg_replace('/\h/u', ' ', $this->input); $this->input = preg_replace('/[ \t]/u', ' ', $this->input); - Admin -> Repair -> Repair JS Files 실행 - cache/ 폴더의 파일을 모두 삭제 *Home 화면에서 Dashlet의 탭이 계속 실행중으로 표시됨 :*cache/xml/ 폴더를 apache:apache 권한으로 생성을 합니다. ==Localization== === 한글팩 작성 === *Localization 범위 :*한글 번역, 이미지 등 한글화 :*어순 : 성 이름 :*날짜, 시간 :*다중 통화 (Currency) :*주소 *PHP 파일 번역 :*ko_KR.lang.php :*~Dashlet.ko_KR.lang.php :*demoData.ko_KR.php :*phpmailer.lang-ko.php *Template 파일 번역 :*LotusLiveSignup.ko_KR.tpl :*footer.tpl *JavaScript 파일 번역 :*ko.js, ko_dlg.js :*calendar.js, calendar-min.js *HTML 파일 번역 :*ko_KR.notify_template.html :*ko_KR.Portal.html *이미지 파일을 [[Gimp|gimp]]를 사용하여 새로 작성 *PDF 파일에서 한글이 깨어짐 :*[http://sourceforge.net/projects/tcpdf/files/ TCPDF]에서 hysmyeongjostdmedium.php 파일을 다운로드 :*include/tcpdf/fonts/ 폴더에 복사 :*"Admin -> Repair -> Quick Repair and Rebuild" 메뉴 실행 :*개인별 Profile에서 PDF Settings을 다음과 같이 설정 ::*Font for Header and Body : MyungJo Medium (Korean) ::*Font for Footer : MyungJo Medium (Korean) :*[http://www.xml-convert.com/en/convert-tff-font-to-afm-pfa-fpdf-tcpdf http://www.xml-convert.com/en/convert-tff-font-to-afm-pfa-fpdf-tcpdf] *vi include/Sugarpdf/sugarpdf_default.php :*helvetica를 MyungJo Medium (Korean)로 변경 합니다. (미확인 사항) 'PDF_FONT_NAME_MAIN'=>'helvetica', 'PDF_FONT_NAME_DATA'=>'helvetica', *TCPDF에 ttf 폰트 추가 (실패) :*[http://hangeul.naver.com/index.nhn 나눔글꼴]을 다운로드 합니다. :*[http://www.xml-convert.com/en/convert-tff-font-to-afm-pfa-fpdf-tcpdf http://www.xml-convert.com/en/convert-tff-font-to-afm-pfa-fpdf-tcpdf] 사이트에서 ttf2ufm.exe 파일을 다운로드 합니다. :*ttf2ufm.exe ~.ttf 명령을 사용하여 ~.ufm 파일을 생성 합니다. :*/include/tcpdf/fonts/utils/makefont.php 파일을 수정하여 nanumgothiccoding.php, nanumgothiccoding.z, nanumgothiccoding.ctg.z 파일을 생성 합니다. ::*php -q makefont.php NanumGothicCoding.ttf NanumGothicCoding.ufm ::*생성된 파일을 /include/tcpdf/fonts/ 폴더에 복사 합니다. === 주소 === *Address Localization :*include/SugarFields/Fields/Address/ko_KR.DetailView.tpl, ko_KR.EditView.tpl ===한글로 모듈(거래처) 목록 검색=== *AJAX 목록 화면에서 한글로 검색시 화면이 표시되지 않음 include/ListView/ListViewData.php 파일의 529 라인에서 $queryString = htmlentities($_REQUEST[$field_name]);을 아래와 같이 변경함 $queryString = htmlentities($_REQUEST[$field_name], null, "UTF-8"); ===메일 발송시 보낸 사람 이름=== *메일 발송시 보낸 사람 이름이 깨어짐 modules/Emails/Email.php 851 line From : $this->from_addr_name = $this->from_addr; To : $this->from_addr_name = "{$mail->FromName} <{$mail->From}>"; :*근본적으로 해결을 하려면 $mail->FromName 값이 MIME으로 인코딩 되었을 경우에만 decode를 하도록 수정할 것 ==Tips== *[http://developers.sugarcrm.com/wordpress/2012/10/15/conditional-formatting-on-cases-list-view-and-dashlets/ Conditional Formatting on Cases List view and Dashlets, 2012.10.15] *[http://developers.sugarcrm.com/wordpress/2012/10/08/customizing-the-query-used-for-a-subpanel/ Customizing the query used for a subpanel, 2012.10.08] *Leveraging ACL access levels in your code :*[http://developers.sugarcrm.com/wordpress/2012/10/03/leveraging-acl-access-levels-in-your-code-part-1-admindeveloper-access/ Leveraging ACL access levels in your code: Part 1 – Admin/Developer access] :*[http://developers.sugarcrm.com/wordpress/2012/10/04/leveraging-acl-access-levels-in-your-code-part-2-record-level-acls-and-some-more-module-level-acls/ Leveraging ACL access levels in your code: Part 2 – Record Level ACLs and some more Module Level ACLs] :*[http://developers.sugarcrm.com/wordpress/2012/10/05/leveraging-acl-access-levels-in-your-code-part-3-field-level-acls/ Leveraging ACL access levels in your code: Part 3 – Field Level ACLs] == 참고 문헌 == *[[Sugar Customize|Sugar Customize]] *[http://cafe.naver.com/sugacrm 네이버 슈가 카페] *[http://dbminfo.tistory.com/ DBM, CRM 자료창고] *[https://www.youtube.com/user/DiscoverSugarCRM Sugar Youtube] *기타 오픈소스 CRM :*[http://civicrm.org/ CiviCRM] : PHP 기반 :*[http://www.opencrx.org/ openCRX] : Java 기반 :*[http://www.opentaps.org/ Opentaps] : Java 기반, 도요타에서 사용중 == 지원 업체 == {{지원업체}} [[Category:오픈소스|Category:오픈소스]]<br/>[[Category:CRM|Category:CRM]]<br/>[[Category:한글화|Category:한글화]]<br/>[[Category:Sugar|Category:Sugar]]<br/>[[Category:WebSite|Category:WebSite]]
이 문서에서 사용한 틀:
틀:지원업체
(
원본 보기
)
SugarCRM
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
변수
보기
읽기
원본 보기
역사 보기
더 보기
검색
주요 메뉴
오픈소스 컨설팅
오픈소스
오픈소스 라이선스
오픈소스 커뮤니티
오픈소스 종류
오픈소스 현황
오픈소스 한글화
문자셋과 인코딩
Storage
Network
보안
고가용성
모니터링
오픈 API
오픈 서비스
Cloud
BigData
Android
산사랑 노트
둘러보기
인기 문서
최근 수정 문서
모든 문서
모든 분류
임의 문서
위키 사용법
자매 사이트
CMS
오비컨 홈페이지
오비컨 CMS
블로그
데모 - SuiteCRM
산사랑의 Twitter
산사랑의 Facebook
친구 사이트
공개SW 포털
OLIS
한국공개소프트웨어협회
AppCenter 지원본부
OLC
PSEG
개발자 블로그
블로터
개인 메뉴
메뉴 수정
양식함
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보