2007년 11월
소개
Salesforce.com과 Google은 인기 있는 '서비스형 소프트웨어' 애플리케이션을 호스팅하며 두 조직 모두 개발자가 이러한 애플리케이션을 지원하는 대규모 데이터 저장소에 액세스할 수 있는 API를 제공합니다. 두 API 세트를 결합하면 흥미로운 일이 시작됩니다. 엔터프라이즈 설정과 Salesforce.com에서 G Suite의 사용이 계속 증가하고 있으며 Salesforce.com은 맞춤 비즈니스 애플리케이션을 빌드하기 위한 광범위한 플랫폼을 구축했으므로 개발자 (바로 여러분!)가 Google과 Salesforce.com의 기능을 결합할 수 있는 기회가 많습니다.
이 도움말에서는 Salesforce.com 플랫폼이나 Google Data 프로토콜을 처음 사용하는 경우에도 RESTful Google Data API를 사용하여 엔터프라이즈 매시업을 빌드하는 방법을 보여줍니다. 개발 환경을 설정하고, 기존 Salesforce.com 및 Google 매시업을 설치한 다음, 직접 작성하는 방법을 알려드리겠습니다.
안녕하세요, Salesforce.com!
저처럼 Salesforce.com을 처음 사용하는 경우 Apex Developer Network인 ADN에서 개발자 계정에 가입하는 것부터 시작해야 합니다. 개발자 계정은 모든 기능을 갖춘 Salesforce.com 계정은 물론 Apex 위키 및 토론 게시판에 대한 액세스 권한도 제공합니다.
다음으로 Eclipse용 Apex Toolkit을 가져와야 합니다. 이 툴킷에는 Java 1.5 및 Eclipse 3.2.2 이상이 필요합니다. Eclipse를 잘 아는 경우 툴킷의 소프트웨어 업데이트 사이트는 http://www.adnsandbox.com/eclipsetoolkit/10.0/
입니다. Eclipse 플러그인에 익숙하지 않거나 설치 중에 문제가 발생하면 Apex 위키에 자세한 설치 안내가 나와 있습니다.
툴킷이 설치되면 Eclipse의 도움말 시스템에 통합된 Apex 도움말 콘텐츠에 액세스할 수 있습니다. Eclipse에서 Help | Help Contents | Apex Toolkit for Eclipse로 이동하여 이 콘텐츠를 확인하세요. 도움말 리소스 중 하나는 새 프로젝트를 만들고 S-Controls, 클래스, 트리거를 추가하는 방법을 보여주는 빠른 시작 튜토리얼입니다. Apex 코드를 사용해 본 적이 없다면 이 튜토리얼을 살펴보고 Apex 프로젝트를 만든 후 계속 진행해야 합니다.
Google Calendar로 일정 내보내기
Ron Hess는 Salesforce.com에서 Google Calendar로 일정을 내보낼 수 있는 Google Calendar 매시업 애플리케이션을 작성했습니다. 또한 Ron은 자신의 매시업이 작동하는 방식을 설명하는 도움말도 작성했습니다. 나중에 빌드 방법을 보여드릴 Google 스프레드시트 애플리케이션은 Ron의 Google Calendar 매시업을 모델로 합니다. Ron, 고마워요.
Salesforce.com 파워 사용자라면 안내 없이도 Ron의 Google Calendar 애플리케이션을 통합하고 사용할 수 있습니다. 처음에는 약간의 도움이 필요했으므로 Ron의 앱이 작동하는 모습을 확인하기 위해 다음 단계를 따랐습니다.
- 애플리케이션을 설치합니다.
- Google Calendar Mash-up 페이지로 이동하여 Get It Now를 클릭합니다.
- ADN 사용자 인증 정보를 입력하고 계속을 클릭합니다.
- 이용약관을 읽고 계속을 클릭합니다.
- '패키지 콘텐츠 검토' 페이지에서 다음을 클릭합니다.
- 보안 수준을 선택하고 다음을 클릭합니다.
- 설치를 클릭합니다.
- Salesforce.com AJAX 프록시 구성
- '관리 설정' 메뉴에서 보안 컨트롤 | 원격 사이트 설정을 클릭합니다.
- Remote Site Settings(새 원격 사이트)를 클릭합니다.
- '원격 사이트 이름'에 Google을 입력하고 '원격 사이트 URL'에 https://www.google.com을 사용합니다.
- 저장을 클릭합니다.
- 이벤트 세부정보 페이지에 'Google에 추가' 버튼을 추가합니다.
- '앱 설정' 메뉴에서 맞춤설정 | 활동 | 이벤트 페이지 레이아웃을 클릭합니다.
- '이벤트 레이아웃' 행에서 수정을 클릭합니다.
- '세부정보 페이지 버튼' 영역을 더블클릭합니다.
- 'Google에 추가'를 강조 표시하고 오른쪽 (>) 화살표를 클릭하여 버튼을 추가합니다.
- 확인을 클릭합니다.
- '페이지 레이아웃 속성' 페이지에서 저장을 클릭합니다.
- 이벤트 내보내기
- 왼쪽 상단에서 홈을 클릭하여 캘린더를 확인합니다.
- 이벤트가 없으면 새 이벤트를 클릭하여 만듭니다.
- 이벤트를 클릭하여 이벤트 세부정보 페이지를 확인합니다.
- Google에 추가 버튼을 클릭합니다.
- JavaScript 알림을 통해 확인을 클릭합니다.
- Google 사용자 이름과 비밀번호로 로그인합니다.
- 액세스 권한 부여를 클릭하여 Salesforce 애플리케이션에 Google Calendar에 대한 쓰기 액세스 권한을 부여합니다.
- Google Calendar에서 일정을 확인합니다.
Google Sheets 애플리케이션 빌드
Salesforce.com 페이지를 클릭하는 데 지쳤고 코드를 작성할 준비가 되었을 것입니다. Eclipse를 다시 실행하면 이제 생성한 Apex 프로젝트에 Ron의 Google Calendar 앱용 S-Controls가 포함되어 있습니다. 이는 Eclipse용 Apex Toolkit이 Salesforce.com과 지속적으로 동기화되기 때문입니다. 멋지죠?
인증 컨트롤과 같은 Google Calendar 매시업의 일부 기능을 재사용하여 자체 Google 데이터 앱을 빌드할 수 있습니다. 이 섹션의 나머지 부분에서는 Salesforce.com 연락처를 Google 스프레드시트로 내보내는 앱을 빌드하는 방법을 보여줍니다.
간단한 S-Control 게시
S-Control은 Salesforce.com에서 호스팅되고 사용자가 애플리케이션에 액세스할 때 웹브라우저에서 실행되는 파일입니다. S-Control에는 HTML, CSS, JavaScript와 같이 웹브라우저에서 표시하거나 실행할 수 있는 모든 유형의 콘텐츠가 포함될 수 있습니다.
Salesforce.com과 Google 매시업에는 여러 가지 움직이는 부분이 있으므로 JavaScript에 깊이 들어가기 전에 모든 배관이 올바른지 확인하기 위해 간단한 S-Control을 호출하는 'Google로 내보내기' 버튼을 연락처 목록 페이지에 추가했습니다.
Apex 프로젝트에서 'S-Controls' 폴더를 마우스 오른쪽 버튼으로 클릭하고 Apex | New S-Control을 선택합니다. 새 S-Control에 export_contacts라는 라벨과 이름을 지정하고 유형은 맞춤 HTML로 둔 다음 완료를 클릭합니다.
새 S-Control에는 기본 HTML 파일이 포함됩니다. <head>에 많은 JavaScript를 추가할 예정이지만 연락처가 내보내지는 동안 사용자에게 표시할 항목이 있도록 먼저 <body>를 채울 수 있습니다. 이 HTML을 S-Control의 본문에 복사하여 '대기 점'과 Google 스프레드시트 로고를 표시합니다.
<div id="waiting" align="center" /> <img src="/img/icon/home32.png" height="64" width="64" /> <img src="/img/waiting_dots.gif" alt="Please wait..." title="Please wait..." height="25" width="196" /> <img src="http://docs.google.com/images/doclist/logo_docs.gif" /> <p><h3>Exporting contacts to Google Spreadsheets, please wait...</h3></p> </div>
이제 S-Control을 게시하고 이를 호출하는 버튼을 설정할 수 있습니다.
- Eclipse를 사용하여 S-Control 파일을 게시합니다.
- Apex 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Apex | Synchronize with Salesforce(Apex | Salesforce와 동기화)를 선택합니다.
- 디렉터리 트리에서 새 S-Control을 찾아 마우스 오른쪽 버튼으로 클릭하고 원격 재정의 및 서버에 게시를 선택합니다.
- S-Control을 찾을 수 없는 경우 Apex Toolkit에서 이미 업로드했을 수 있지만 동기화 관점을 사용하여 최신 코드가 서버에서 실행되는지 확인하는 것이 좋습니다.
- Salesforce.com UI를 사용하여 이 S-Control을 호출하는 버튼을 정의합니다.
- '앱 설정' 메뉴에서 맞춤설정 | 연락처 | 버튼 및 링크를 클릭합니다.
- '맞춤 버튼 및 링크' 섹션에서 새로 만들기를 클릭합니다.
- 라벨에 Google로 내보내기를 입력하고 이름은 Export_to_Google로 유지합니다.
- 디스플레이 유형으로 '목록 버튼'을 선택합니다.
- 콘텐츠 소스로 '맞춤 S-Control'을 선택합니다.
- 동작으로 '사이드바가 있는 기존 창에 표시'를 선택합니다.
- 맞춤 S-Controls 메뉴에서 'export_contacts'를 선택합니다.
- 연락처 목록에 버튼을 추가합니다.
- '앱 설정' 메뉴에서 맞춤설정 | 연락처 | 검색 레이아웃을 클릭합니다.
- '연락처 목록 보기' 행에서 수정을 클릭합니다.
- 'Google로 내보내기'를 강조 표시하고 오른쪽 (>) 화살표를 클릭하여 버튼을 추가합니다.
- 저장을 클릭합니다.
- 테스트해 보세요.
- 연락처 탭을 클릭합니다.
- '모든 연락처'를 보기로 선택하고 이동을 클릭합니다.
- 새로 생긴 Google로 내보내기 버튼을 클릭합니다.
- 'waiting_dots'를 확인하지만 다른 일은 일어나지 않습니다.
Google Sheets와 상호작용
Google Calendar 매시업의 소스를 살펴보면 gcal_snippet.scf 파일에 Google Calendar 서버의 추상화가 포함되어 있습니다. Google 스프레드시트와 상호작용하려면 Google 스프레드시트 서버용 유사한 파일을 만들어야 합니다. Salesforce.com AJAX 프록시를 사용하고 Google AuthSub로 인증하는 Ron Hess의 코드를 재사용하고 Google Calendar에 이벤트를 쓰는 함수를 Google Sheets에 정보를 쓰는 함수로 바꿨습니다. 이 파일의 전체 소스는 gspreadsheet_snippet.scf에서 확인할 수 있습니다.
그런 다음 export_contacts.scf S-Control에 JavaScript를 추가하여 Salesforce.com에서 연락처 정보를 쿼리하고 Google 스프레드시트에 작성했습니다. Salesforce.com에서 데이터를 가져오는 것은 쉽습니다. 쿼리를 구성하고 데이터가 반환될 때 실행할 콜백 함수를 제공하기만 하면 됩니다. 예를 들면 다음과 같습니다.
var query = 'Select FirstName, LastName, Phone From Contact'; var queryResult = sforce.connection.query(query, queryCallback);
Salesforce.com에서 연락처 정보를 얻은 후에는 내보낼 위치를 파악해야 합니다. RESTful Google 데이터 프로토콜에서 각 스프레드시트는 고유한 URL로 식별할 수 있습니다. 메타피드 URL (http://spreadsheets.google.com/feeds/spreadsheets/private/full
)을 쿼리하여 사용자의 스프레드시트 목록과 연결된 URL을 가져올 수 있습니다. 다음 메서드는 이러한 스프레드시트를 반복하여 특정 제목이 있는 스프레드시트를 찾습니다. 올바른 스프레드시트를 찾으면 먼저 워크시트 목록을 가져온 다음 첫 번째 워크시트의 셀 피드 URL을 반환합니다.
function getCellFeedUrl() { var SPREADSHEET_TITLE = 'Salesforce.com Contacts'; var WORKSHEET_REL = 'http://schemas.google.com/spreadsheets/2006#worksheetsfeed'; var CELLSFEED_REL = 'http://schemas.google.com/spreadsheets/2006#cellsfeed'; // Query to find the spreadheet called "Salesforce.com Contacts" var spreadsheets = g.getFeed('http://spreadsheets.google.com/feeds/spreadsheets/private/full'); var entries = g.getEntryList(spreadsheets); for (var e in entries) { if (g.getTitle(entries[e]) == SPREADSHEET_TITLE) { var worksheetsFeedUrl = g.link(entries[e],WORKSHEET_REL); var worksheets = g.getFeed(worksheetsFeedUrl); var worksheetEntries = g.getEntryList(worksheets); return g.link(worksheetEntries[0], CELLSFEED_REL); } } }
Google 스프레드시트 데이터 API에서 사용할 수 있는 피드에 대한 자세한 내용은 참조 가이드를 참고하세요.
queryCallback
함수는 getCellFeedUrl
메서드를 사용하여 셀 업데이트 요청을 보내는 데 필요한 셀 피드 URL을 찾은 다음 연락처 정보를 한 번에 하나의 셀에 씁니다.
function queryCallback(queryResult) { var cellFeedUrl = getCellFeedUrl(); var contacts = queryResult.getArray('records'); for (var i=0; i<contacts.length; i++) { g.updateCell(cellFeedUrl, i+1, 1, contacts[i].LastName + ", " + contacts[i].FirstName); g.updateCell(cellFeedUrl, i+1, 2, contacts[i].Phone); } jumpback(); // Return to the contacts page when your done }
updateCell
메서드는 gspreadsheet_snippet.scf S-Control에 있습니다. 이 메서드는 지정된 행과 열에 있는 셀의 수정 URL을 가져온 다음 업데이트된 셀의 Google 데이터 표현을 포함하는 HTTP PUT
메시지를 전송합니다.
GoogleSpreadsheet.prototype.updateCell = function(cellsFeedUrl, row, column, content ) { var cellEntry = this.getFeed(cellsFeedUrl+'/R'+row+'C'+column); var cellEditUrl = this.link(cellEntry,'edit'); var newCellEntry = "<atom:entry xmlns:atom='http://www.w3.org/2005/Atom'>" + "<atom:category scheme='http://schemas.google.com/spreadsheets/2006' " + "term='http://schemas.google.com/spreadsheets/2006#cell' />" + "<gs:cell xmlns:gs='http://schemas.google.com/spreadsheets/2006' " + "row='" + row + "' col='" + column + "' inputValue='" + content + "' />" + "</atom:entry>"; this.putEntry(cellEditUrl, newCellEntry); }
Google 스프레드시트 데이터 API를 사용하여 셀을 업데이트하는 방법에 대한 자세한 내용은 개발자 가이드를 참고하세요.
Google 스프레드시트 데이터 API는 하위 도메인 https://spreadsheets.google.com
를 사용하므로 위의 코드가 작동하려면 먼저 Salesforce.com AJAX 프록시 서버를 구성하고 https://spreadsheets.google.com
를 추가해야 합니다.
Google Docs로 이동하여 데이터를 저장할 새 스프레드시트를 만들어야 합니다. Salesforce.com Contacts로 저장해야 합니다.
이러한 S-Control을 업로드하면 연락처 정보를 Google 스프레드시트로 내보낼 수 있습니다. 다른 방법은 어떤가요? Salesforce.com 및 Google Data API에 대한 새로운 지식을 바탕으로 Google 스프레드시트에서 Salesforce.com으로 연락처 정보를 가져오는 코드를 작성할 수도 있습니다.
결론
이 도움말에서는 Salesforce.com 플랫폼과 Google 데이터 API에 대해 간략하게만 다루었지만 이제 이러한 강력한 시스템을 활용하기 위해 작성할 수 있는 모든 애플리케이션을 생각해 보세요. Google 데이터 API 제품군은 항상 확장되어 애플리케이션에서 활용할 수 있는 정보를 더 많이 제공하며, Salesforce.com 플랫폼은 이 도움말에서 다루지 않은 유용한 도구를 많이 제공합니다. AppExchange에서 다음 엔터프라이즈 매시업을 기대하겠습니다.
즐겁게 코딩해 보세요!