‫REST for the Traveling Salesman: Using Google Data on Salesforce.com

ליין ליבראטן, תוכניות למפתחים של Google
נובמבר 2007

מבוא

חברות כמו Salesforce.com ו-Google מארחות אפליקציות פופולריות של 'תוכנה כשירות', ושתי החברות מספקות ממשקי API שמאפשרים למפתחים לגשת למאגרי הנתונים הגדולים שמפעילים את האפליקציות האלה. העניינים מתחילים להיות מעניינים כשמשלבים בין שני סוגי ממשקי ה-API. השימוש ב-G Suite ממשיך לגדול בסביבה הארגונית וב-Salesforce.com. חברת Salesforce.com יצרה פלטפורמה נרחבת ליצירת אפליקציות עסקיות בהתאמה אישית, ולכן יש הרבה הזדמנויות למפתחים (כמוכם!) לשלב את היכולות של Google ושל Salesforce.com.

במאמר הזה נסביר איך להשתמש בממשקי Google Data API מבוססי REST כדי להתחיל ליצור שילובים של נתונים ברמת הארגון, גם אם אתם רק מתחילים לעבוד עם פלטפורמת Salesforce.com או עם פרוטוקול Google Data. אני אעזור לך להגדיר את סביבת הפיתוח, להתקין שילוב קיים של Salesforce.com ו-Google, ואז לכתוב שילוב משלך.

שלום, Salesforce.com!

אם אתם חדשים ב-Salesforce.com כמוני, תצטרכו להתחיל בהרשמה לחשבון פיתוח ב-ADN, רשת מפתחי Apex. חשבון המפתח מעניק לכם חשבון Salesforce.com עם כל התכונות, וגם גישה לויקי של Apex ולפורומים לדיונים.

בשלב הבא, כדאי להוריד את Apex Toolkit for Eclipse. כדי להשתמש בערכת הכלים, צריך Java 1.5 ו-Eclipse 3.2.2 או גרסאות מתקדמות יותר. אם אתם מכירים את Eclipse, אתר עדכוני התוכנה של ערכת הכלים הוא http://www.adnsandbox.com/eclipsetoolkit/10.0/. אם אתם לא מכירים את הפלאגינים של Eclipse, או אם משהו משתבש במהלך ההתקנה, ב-Apex wiki יש הוראות התקנה מפורטות.

אחרי התקנת ערכת הכלים, אפשר לגשת לתוכן העזרה של Apex שמשולב במערכת העזרה של Eclipse. כדי לראות את התוכן הזה, עוברים ב-Eclipse אל Help | Help Contents | Apex Toolkit for Eclipse. אחד מהמשאבים לעזרה הוא מדריך לתחילת העבודה שמסביר איך ליצור פרויקט חדש ולהוסיף S-Controls, מחלקות וטריגרים. אם לא עבדתם עם קוד Apex בעבר, כדאי לעבור על המדריך הזה וליצור פרויקט Apex לפני שתמשיכו.

ייצוא אירועים ליומן Google

רון הס כתב אפליקציה של שילוב של יומן Google שמאפשרת לייצא אירועים מ-Salesforce.com ליומן Google. רון כתב גם מאמר שבו הוא מסביר איך המאשאפ שלו פועל. אפליקציית Google Spreadsheets שאראה לכם איך לבנות בהמשך מבוססת על שילוב של יומן Google של רון. תודה, רון!

אם אתם משתמשים מתקדמים ב-Salesforce.com, סביר להניח שתוכלו לשלב את אפליקציית יומן Google של Ron ולהשתמש בה בלי הוראות. בהתחלה הייתי צריך קצת עזרה, אז הנה מה שעשיתי כדי לראות את האפליקציה של רון בפעולה.

  1. מתקינים את האפליקציה:
    • נכנסים לדף Google Calendar Mash-up ולוחצים על Get It Now (קבלת התוסף).
    • מזינים את פרטי הכניסה ל-ADN ולוחצים על המשך.
    • קוראים את התנאים וההגבלות ולוחצים על המשך.
    • לוחצים על הבא בדף 'בדיקת תכולת החבילה'.
    • בוחרים רמת אבטחה ולוחצים על הבא.
    • לוחצים על התקנה.
  2. הגדרת פרוקסי AJAX של Salesforce.com
    • בתפריט 'הגדרת ניהול', לוחצים על אמצעי בקרה לאבטחה | הגדרות אתר מרוחק.
    • לוחצים על New Remote Site (אתר מרוחק חדש).
    • מזינים Google בשדה 'שם האתר המרוחק' ובשדה 'כתובת האתר המרוחק' מזינים https://www.google.com.
    • לוחצים על שמירה.
  3. מוסיפים את הלחצן 'הוספה ל-Google' לדף פרטי האירוע:
    • בתפריט 'הגדרת אפליקציה', לוחצים על התאמה אישית | פעילויות | פריסות של דפי אירועים.
    • לוחצים על עריכה בשורה 'פריסת האירוע'.
    • לוחצים לחיצה כפולה על האזור 'לחצנים בדף הפרטים'.
    • מסמנים את האפשרות 'הוספה ל-Google' ולוחצים על החץ (>) שמאלה כדי להוסיף את הלחצן.
    • לוחצים על אישור.
    • בדף 'מאפייני פריסת הדף', לוחצים על שמירה.
  4. ייצוא אירוע
    • כדי לראות את היומן, לוחצים על דף הבית בפינה הימנית העליונה.
    • אם אין לכם אירועים, לוחצים על אירוע חדש כדי ליצור אירוע.
    • לוחצים על אירוע כדי להציג את דף הפרטים שלו.
    • לוחצים על הלחצן הוספה ל-Google.
    • לוחצים על אישור בהתראה של JavaScript.
    • נכנסים באמצעות שם המשתמש והסיסמה לחשבון Google.
    • לוחצים על Grant access (מתן גישה) כדי לתת לאפליקציית SalesForce הרשאת כתיבה ביומן Google.
    • הצגת האירוע ביומן Google

פיתוח אפליקציה ל-Google Sheets

אוקיי, כנראה שנמאס לכם ללחוץ על הדפים של Salesforce.com ואתם מוכנים לכתוב קוד. מפעילים שוב את Eclipse ורואים שהפרויקט של Apex שיצרתם מכיל עכשיו את פקדי ה-S של אפליקציית יומן Google של רון. הסיבה לכך היא ש-Apex Toolkit for Eclipse מסתנכרן כל הזמן עם Salesforce.com – מגניב, נכון?

אתם יכולים ליצור אפליקציה משלכם לנתוני Google על ידי שימוש חוזר בחלק מהפונקציות של Google Calendar Mash-up, כמו אמצעי הבקרה לאימות. בהמשך הקטע הזה נסביר איך ליצור אפליקציה שמייצאת את אנשי הקשר שלכם ב-Salesforce.com לגיליון אלקטרוני ב-Google.

פרסום של S-Control פשוט

רכיב S-Control הוא קובץ שמארח Salesforce.com ומופעל בדפדפני אינטרנט כשמשתמשים ניגשים לאפליקציה שלכם. רכיב S-Control יכול להכיל כל סוג של תוכן שאפשר להציג או להפעיל בדפדפן אינטרנט, כמו HTML,‏ CSS או JavaScript.

יש הרבה חלקים נעים במיזוג של Salesforce.com ו-Google, ולכן הדבר הראשון שעשיתי היה להוסיף לחצן 'ייצוא ל-Google' לדף רשימת אנשי הקשר, שמפעיל פקד S פשוט – רק כדי לוודא שכל הצנרת תקינה לפני שהתעמקתי ב-JavaScript.

בפרויקט Apex, לוחצים לחיצה ימנית על התיקייה S-Controls ובוחרים באפשרות Apex | New S-Control (‏Apex | פקד S חדש). נותנים ל-S-Control החדש תווית ושם export_contacts, משאירים את הסוג כ-Custom HTML ולוחצים על Finish (סיום).

ה-S-Control החדש יכיל קובץ HTML עם מבנה בסיסי. תצטרכו להוסיף הרבה קוד JavaScript לתג <head>, אבל אפשר למלא קודם את התג <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 ולהגדיר לחצן שיפעיל אותו.

  1. משתמשים ב-Eclipse כדי לפרסם את קובץ ה-S-Control:
    • לוחצים לחיצה ימנית על פרויקט Apex ובוחרים באפשרות Apex | Synchronize with Salesforce (‏Apex | סנכרון עם Salesforce).
    • מוצאים את רכיב ה-S-Control החדש בעץ התיקיות, לוחצים עליו לחיצה ימנית ובוחרים באפשרות Override remote and publish to server (החלפת קובץ מרוחק ופרסום בשרת).
    • אם לא מוצאים את S-Control, יכול להיות ש-Apex Toolkit כבר העלה אותו בשבילכם, אבל מומלץ להשתמש בתצוגת הסינכרון כדי לוודא שהקוד העדכני ביותר פועל בשרת.
  2. משתמשים בממשק המשתמש של Salesforce.com כדי להגדיר לחצן שיפעיל את S-Control:
    • בתפריט 'הגדרת האפליקציה', לוחצים על התאמה אישית | אנשי קשר | לחצנים וקישורים.
    • בקטע 'לחצנים וקישורים בהתאמה אישית', לוחצים על חדש.
    • מזינים Export to Google (ייצוא ל-Google) כתווית, ומשאירים את השם Export_to_Google.
    • בוחרים באפשרות 'לחצן רשימה' בתור סוג התצוגה.
    • בוחרים באפשרות 'Custom S-Control' (פקד S מותאם אישית) בתור מקור התוכן.
    • בוחרים באפשרות 'הצגה בחלון קיים עם סרגל צד' כהתנהגות.
    • בתפריט Custom S-Controls (פקדי S מותאמים אישית), בוחרים באפשרות export_contacts (ייצוא אנשי קשר).
  3. מוסיפים את הכפתור לרשימת אנשי הקשר:
    • בתפריט 'הגדרת אפליקציה', לוחצים על התאמה אישית | אנשי קשר | פריסות חיפוש.
    • לוחצים על עריכה בשורה 'תצוגת רשימת אנשי קשר'.
    • מדגישים את האפשרות 'ייצוא אל Google' ולוחצים על החץ שמאלה (>) כדי להוסיף את הלחצן.
    • לוחצים על שמירה.
  4. אפשר להתנסות ב-Gemini:
    • לוחצים על הכרטיסייה אנשי קשר.
    • בוחרים באפשרות 'כל אנשי הקשר' בתור התצוגה ולוחצים על Go!‎ (קדימה!).
    • לוחצים על הלחצן החדש והמבריק ייצוא ל-Google.
    • צופים בנקודות שמסמלות שההודעה נשלחת, אבל לא צפוי לקרות שום דבר אחר.

אינטראקציה עם גיליונות אלקטרוניים ב-Google

אם תבדקו את המקור של Google Calendar Mash-up, תראו שהקובץ gcal_snippet.scf מכיל הפשטה של שרת Google Calendar. כדי ליצור אינטראקציה עם גיליונות אלקטרוניים של Google, צריך ליצור קובץ דומה לשרת של גיליונות אלקטרוניים של Google. השתמשתי מחדש בקוד של רון הס כדי להשתמש ב-proxy של Salesforce.com AJAX ולאמת באמצעות Google AuthSub, והחלפתי את הפונקציה שכותבת אירועים ל-Google Calendar בפונקציה שכותבת מידע ל-Google Spreadsheets. המקור המלא של הקובץ הזה זמין ב-gspreadsheet_snippet.scf.

לאחר מכן הוספתי JavaScript ל-S-Control‏ export_contacts.scf כדי לשלוח שאילתה ל-Salesforce.com לגבי פרטים ליצירת קשר ולכתוב אותם בגיליון אלקטרוני של Google. קל להוציא נתונים מ-Salesforce.com. פשוט יוצרים שאילתה ומספקים פונקציית קריאה חוזרת להרצה כשהנתונים מוחזרים. לדוגמה:

  var query = 'Select FirstName, LastName, Phone From Contact';
  var queryResult = sforce.connection.query(query, queryCallback);

אחרי שמקבלים את פרטי הקשר מ-Salesforce.com, צריך להבין לאן לייצא אותם. בפרוטוקול Google Data מבוסס ה-REST, אפשר לזהות כל גיליון אלקטרוני באמצעות כתובת URL ייחודית. אפשר לקבל את רשימת הגיליונות האלקטרוניים של משתמש מסוים (ואת כתובות ה-URL המשויכות) על ידי שליחת שאילתה לכתובת ה-URL של ה-metafeed: http://spreadsheets.google.com/feeds/spreadsheets/private/full. השיטה הבאה מבצעת איטרציה בגיליונות האלקטרוניים האלה, ומחפשת גיליון אלקטרוני עם כותרת ספציפית. כשהיא מוצאת את הגיליון האלקטרוני הנכון, היא קודם מקבלת את רשימת גליונות העבודה, ואז מחזירה את כתובת ה-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 Spreadsheets Data 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 קיימת ב-S-Control‏ gspreadsheet_snippet.scf. השיטה מקבלת את כתובת ה-URL לעריכה של התא בשורה ובעמודה שצוינו, ואז שולחת הודעת HTTP PUT שמכילה את ייצוג הנתונים של Google של התא המעודכן:

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 Spreadsheets Data API זמין במדריך למפתחים.

‫Google Spreadsheets data API משתמש בתת-הדומיין https://spreadsheets.google.com, ולכן כדי שהקוד שלמעלה יפעל, צריך להגדיר את שרת ה-proxy של Salesforce.com AJAX ולהוסיף את https://spreadsheets.google.com.

תצטרכו גם לעבור אל Google Docs וליצור גיליון אלקטרוני חדש כדי לאחסן את הנתונים. חשוב לשמור אותו כאנשי קשר ב-Salesforce.com.

אחרי שתעלו את רכיבי S-Controls האלה, תוכלו לייצא את פרטי אנשי הקשר לגיליון אלקטרוני של Google. מה לגבי הדרך השנייה? בעזרת הידע החדש שרכשתם על Salesforce.com וממשקי ה-API של Google Data, תוכלו גם לכתוב קוד לייבוא פרטי קשר מגיליונות אלקטרוניים של Google אל Salesforce.com.

סיכום

במאמר הזה הצגנו רק חלק קטן מהאפשרויות, אבל עכשיו, אחרי שקיבלתם הסבר על פלטפורמת Salesforce.com ועל Google Data APIs, אתם יכולים לחשוב על כל האפליקציות שתוכלו לכתוב כדי לנצל את המערכות העוצמתיות האלה. משפחת ממשקי ה-API של Google Data מתרחבת כל הזמן, וחושפת עוד מידע שתוכלו להשתמש בו באפליקציות שלכם. פלטפורמת Salesforce.com מציעה כלים שימושיים רבים שלא נכללו במאמר הזה. אחפש את המאשאפ הבא שלך ל-Enterprise ב-AppExchange.

שיהיה בהצלחה!

משאבים