עיבוד אצווה בפרוטוקול Google Data

עיבוד אצווה מאפשר לבצע מספר פעולות בבקשה אחת, במקום לשלוח כל פעולה בנפרד.

הערה: כדי לבצע פעולות אצווה, עליך להשתמש בגרסה אחרונה של ספריית הלקוח Google Data API שלך. ספריית הלקוח ב-JavaScript לא תומכת בפעולות אצווה.

Audience

המסמך הזה מיועד למתכנתים שרוצים לשלוח כמה פעולות בבקשה אחת באמצעות עיבוד באצווה.

המסמך הזה מבוסס על ההנחה שאתם משתמשים בספריית נתוני Java של GData. בדוגמאות שבמסמך הזה אפשר לראות איך להשתמש בספריית הלקוח של Java כדי להריץ פעולות אצווה.

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

הערה: הפרוטוקול וההליכים הכלליים יהיו זהים בספריות לקוח אחרות, אבל השיטות הספציפיות לביצוע בקשות אצווה עשויות להיות שונות. אפשר למצוא מסמכים ספציפיים לספריית הלקוחות.

מבוא

באמצעות פיד אצווה של GData, אפשר לאסוף מספר פעולות הוספה, עדכון, מחיקה ושאילתה, ולאחר מכן לשלוח ולבצע את כולן בבת אחת.

לדוגמה, הפיד הבא כולל ארבע פעולות:

<feed>
  <entry>
    <batch:operation type="insert"/>
    ... what to insert ...
  </entry> 
  <entry>
    <batch:operation type="update"/>
    ... what to update ...
  </entry>
  <entry>
    <batch:operation type="delete"/>
    ... what to delete ...
  </entry>
  <entry>
    <batch:operation type="query"/>
    ... what to query ...
  </entry>
</feed>

השירות יבצע כמה שיותר שינויים רצויים ויחזיר מידע על הסטטוס, שבעזרתו אפשר להעריך את מידת ההצלחה או הכשל של כל פעולה.

השירות מנסה לבצע כל אחת מהפעולות בתוך האצווה, גם אם חלק מהפעולות הכלולות באצווה אינן מוצלחות.

שליחת בקשה באצווה

יש לשלוח בקשת אצווה כ-HTTP POST לכתובת URL של אצווה. פידים שונים תומכים בפעולות שונות באצווה. פידים לקריאה בלבד תומכים רק בשאילתות.

כדי לראות אם פיד מסוים תומך בפעולות אצווה, אפשר להריץ שאילתות על הפיד. אם הפיד מכיל קשר קישור מסוג 'אצווה' ברמת הפיד, המשמעות היא שהפיד תומך בפעולות אצווה.

קישור 'אצווה' הוא רכיב <link> עם rel="http://schemas.google.com/g/2005#batch". המאפיין href של יחס הקישור מגדיר את כתובת ה-URL שבה עשויים להתפרסם מסמכי הפיד של פעולות אצווה.

לדוגמה, אם יתבצע הביצוע: GET http://www.google.com/base/feeds/items (הפיד הרגיל 'items' של Google Base), עשויה להופיע התגובה הבאה:

<feed xmlns=...
  <id>http://www.google.com/base/feeds/items</id>
  <link rel="http://schemas.google.com/g/2005#feed"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items"/>
  <link rel="http://schemas.google.com/g/2005#post"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items"/>
  <link rel="http://schemas.google.com/g/2005#batch"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items/batch"/>
  ...
</feed> 

בדוגמה הזו, כתובת ה-URL המקובצת היא http://www.google.com/base/feeds/items/batch.

כתיבת פיד פעולות באצווה

פיד פעולות מכיל רשימה של ערכים להוספה, לעדכון, למחיקה או לשאילתה. כל פעולה מוגדרת באמצעות רכיב <batch:operation type="insert|update|delete|query"/>.

הרכיב הזה יכול להיות צאצא ישיר של רכיב <feed>, צאצא ישיר של כל ערך בפיד או שניהם. כשהוא כלול בערך, הוא מציין את הפעולה שיש לבצע עבור הרשומה הספציפית הזו. כשרכיב זה כלול בפיד, הוא מציין את פעולת ברירת המחדל שיש לבצע בכל רשומה שאין בה רכיב <batch:operation/>.

אם הערך וגם הפיד לא מציינים פעולה, פעולת ברירת המחדל היא insert.

אין להחיל אפליקציות בכמות גדולה על אותה רשומה בפיד אחד. התוצאות לא נקבעות אם מציינים כמה פעולות לאותה רשומה.

כדי לשפר את הביצועים, יכול להיות שהפעולות לא יעובדו לפי הסדר שבו הן התבקשו. עם זאת, התוצאה הסופית תמיד תהיה זהה לתוצאות העיבוד של הרשומות.

מספר הבייטים ב-XML ששולחים לשרת לא יכול לחרוג מ-1MB (1,048,576 בייטים). באופן כללי, אין הגבלות על מספר הפעולות שאתם יכולים לבקש, כל עוד גודל הבייטים הכולל לא עולה על 1MB. עם זאת, שירותים מסוימים עשויים להטיל מגבלות נוספות.

כדי להשתמש בפעולות אצווה, יש להוסיף את הצהרת מרחב השמות באצווה כמאפיין לאלמנט <feed>:

<feed 
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
  ...
  xmlns:batch="http://schemas.google.com/gdata/batch">

הוספת פעולות

פעולת הוספה תסומן באופן הבא:

<batch:operation type="insert">

פעולת הוספה מקבילה לפרסום הרשומה. כאשר הפעולה תסתיים בהצלחה, כל תוכן הרשומה יוחזר עם הרכיב <id> המעודכן ורכיב <batch:status code="201"/>.

דוגמה לבקשת הוספה שבוצעה בהצלחה:

<entry>
  <title type="text">...</title>
  <content type="html">...</content>
  <batch:id>itemA</batch:id>
  <batch:operation type="insert"/>
  <g:item_type>recipes</g:item_type>
  ... 
</entry>

דוגמה לתגובה לבקשת הוספה מוצלחת:

<entry>
  <batch:status code="201"/>
  <batch:id>itemA</batch:id>
  <batch:operation type="insert"/>
  <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
  <link rel="self" type="application/atom+xml"
    href="http://www.google.com/base/feeds/items/17437536661927313949"/>
  <title type="text">...</title>
  <content type="html">...</content>
  <g:item_type>recipes</g:item_type>
  ... 
</entry>

עדכון פעולות

<batch:operation type="update">

פעולת עדכון מקבילה לביצוע PUT בכתובת ה-URL שאליה מפנה הרכיב <id> ברשומה. כשהפעולה מתבצעת בהצלחה, מוחזר כל תוכן הרשומה עם רכיב <batch:status code="200"/>.

הערה: בפידים מסוימים צריך גם לציין את הקישור rel="edit" לרשומה עם בקשות של עדכון אצווה. הפידים האלה כוללים את הפידים שתומכים בסגנון v1 של Google Protocol Protocol בסגנון 1, ופידים שאין להם מזהים שהם כתובות URL.

דוגמה לבקשת עדכון:

<entry>
  <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
  <batch:operation type="update"/>
  ...
</entry>

דוגמה לתגובה מוצלחת:

<entry>
  <batch:status code="200"/>
  <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
  <batch:operation type="update"/>
  ... 
</entry>

הערה: בחלק מהפידים נעשה שימוש ב-ETags חזקים כדי למנוע שינוי לא מכוון בשינויים של מישהו אחר. בעת שליחת בקשה לעדכון אצווה עבור רשומה באחד מהפידים האלה, עליך לספק את ערך ה-ETag במאפיין gd:etag של הרשומה. לדוגמה: <entry gd:etag="'F08NQAxFdip7IWA6WhVR'">...<batch:operation type="update"/>...

פעולות עדכון חלקי

בפידים שתומכים בעדכונים חלקיים, אפשר להשתמש בהם גם בבקשות באצווה. פעולת עדכון חלקית מקבילה לביצוע PATCH בכתובת ה-URL שאליה מפנה הרכיב <id> ברשומה. כשהפעולה מתבצעת בהצלחה, מוחזר כל תוכן הרשומה עם רכיב <batch:status code="200"/>.

הערה: בפידים מסוימים צריך גם לציין את הקישור rel="edit" לרשומה עם בקשות של עדכון אצווה. הפידים האלה כוללים את הפידים שתומכים בסגנון v1 של Google Protocol Protocol בסגנון 1, ופידים שאין להם מזהים שהם כתובות URL.

<batch:operation type="patch"/>

דוגמה לבקשת עדכון חלקית:

<entry gd:fields="content" gd:etag="FE8LQQJJeSp7IWA6WhVa">
  <id>http://www.google.com/calendar/feeds/jo@gmail.com/private/full/entryID</id>
  <batch:operation type="patch"/>
  <title>New title</title>
</entry>

דוגמה לתגובה מוצלחת:

<entry gd:etag="FE8LQQJJeSp7IWA6WhVa">
  <batch:status code="200"/>
  <id>http://www.google.com/calendar/feeds/jo@gmail.com/private/full/entryID</id>
  <batch:operation type="patch"/>
  <title>New title</title>
  <content></content>
  ...rest of the entry...
</entry>

מחיקת פעולות

<batch:operation type="delete">

פעולת מחיקה מקבילה להפעלת DELETE בכתובת ה-URL שאליה מפנה הרכיב <id> ברשומה. עבור פעולת מחיקה, עליך לשלוח רק את הרכיב <id> כדי למחוק את הרשומה. המערכת תתעלם מכל מידע נוסף שסיפקת ברכיבים שאינם במרחב השמות batch:. אם הפעולה תסתיים בהצלחה, תישלח רשומה עם אותו מזהה עם הרכיב <batch:status code="200"/>.

הערה: בפידים מסוימים צריך גם לציין את הקישור rel="edit" לרשומה עם בקשות למחיקת אצווה. הפידים האלה כוללים את הפידים שתומכים בסגנון v1 של Google Protocol Protocol בסגנון 1, ופידים שאין להם מזהים שהם כתובות URL.

דוגמה לבקשת מחיקה:

<entry>
  <batch:operation type="delete"/>
  <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
</entry>

דוגמה לתגובה מוצלחת:

<entry>
  <batch:operation type="delete"/>
  <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
  <batch:status code="200" reason="Success"/>
</entry>

הערה: בחלק מהפידים נעשה שימוש ב-ETags חזקים כדי למנוע שינוי לא מכוון בשינויים של מישהו אחר. כששולחים בקשת מחיקה בכמות גדולה עבור רשומה באחד מהפידים האלה, צריך לציין את הערך ETag במאפיין gd:etag של הרשומה. לדוגמה: <entry gd:etag="'F08NQAxFdip7IWA6WhVR'">...<batch:operation type="delete"/>...

פעולות שאילתה

<batch:operation type="query">

פעולה של שאילתה מקבילה להפעלת GET בכתובת ה-URL שאליה מפנה הרכיב <id> ברשומה. כשהפעולה מתבצעת בהצלחה, מוחזר כל תוכן הרשומה.

הערה: בפידים מסוימים צריך גם לציין את הקישור rel="self" לרשומה עם בקשות של שאילתות באצווה. למשל, הפידים שאין להם מזהים שהם כתובות URL.

דוגמה לבקשת שאילתה:

<entry>
  <id>http://www.google.com/base/feeds/items/1743753666192313949</id>
  <batch:operation type="query"/>
</entry>

דוגמה לתגובה מוצלחת:

<entry>
  <id>http://www.google.com/base/feeds/items/1743753666192313949</id>
  <batch:operation type="query"/>
  <batch:status code="200" reason="Success"/>
   ...
</entry>

פעולות מעקב

תוצאות הזנה של GData לא בהכרח מוחזרות באותו סדר שבו התקבלה הבקשה. אפשר לעקוב אחר פעולה לכל אורך חייה באמצעות מזהה.

עבור פעולות עדכון, מחיקה ושאילתה, ניתן להשתמש במזהה של הערך עצמו כדי לעקוב אחר הפעולה.

לגבי פעולות הוספה, מאחר שעדיין לא קיים מזהה, אפשר להעביר מזהה פעולה. אפשר להשתמש במזהה הזה כדי לקשר את רשומות התוצאות לרשומות של הבקשות. מזהה הפעולה מועבר ברכיב <batch:id>.

לכל פעולה, GData מחזיר תגובה שמציינת אם הפעולה הצליחה או נכשלה. כל תשובה מזהה את הרשומה הרלוונטית. עבור עדכון, מחיקה או פעולת שאילתה, או עבור פעולת הוספה מוצלחת, מזהה הערך תמיד יוחזר. אם ציינת מזהה אצווה, מוחזר גם המזהה הזה. מכיוון שלפעולות הוספה שנכשלו אין מזהה כניסה משויך, מוחזר רק מזהה האצווה.

בעזרת המזהה של כל פעולה אפשר לנסות שוב רק את הפעולות שנכשלו, במקום לשלוח מחדש את כל קבוצת הפעולות.

התוכן של <batch:id> הוא ערך מחרוזת שמוגדר על ידי הלקוח והדהוד חזרה ברשומת התגובה המתאימה.אפשר לציין כל ערך שיעזור ללקוח להתאים את התגובה לרשומה שבבקשה המקורית. רכיב זה יהדהד כפי שהוא בערך המתאים, גם אם הפעולה נכשלה. GData אף פעם לא מאחסן או מפרש את התוכן של מזהה האצווה הזה.

בדוגמה הבאה מוצג פיד פעולות אצווה. חשוב לשים לב שהרכיב <batch:id> מציין את הפעולה הזו כ-itemB.

<entry>
  <title type="text">...</title>
  <content type="html">...</content>
  <batch:id>itemB</batch:id>
  <batch:operation type="insert"/>
  <g:item_type>recipes</g:item_type>
</entry>

בדוגמה הבאה מוצג הערך של סטטוס האצווה שמוחזר בתגובה לפעולה הזו.

<entry>
  <id>http://www.google.com/base/feeds/items/2173859253842813008</id>
  <published>2006-07-11T14:51:43.560Z</published>
  <updated>2006-07-11T14:51: 43.560Z</updated>
  <title type="text">...</title>
  <content type="html">...</content>
  <link rel="self" 
    type="application/atom+xml" 
    href="http://www.google.com/base/feeds/items/2173859253842813008"/>
  <link rel="edit" 
    type="application/atom+xml" 
    href="http://www.google.com/base/feeds/items/2173859253842813008"/>
  <g:item_type>recipes</g:item_type>
  <batch:operation type="insert"/>
  <batch:id>itemB</batch:id>
  <batch:status code="201" reason="Created"/>
</entry>

טיפול בקודי סטטוס

קודי הסטטוס מבוטאים על ידי הרכיב הבא:

<batch:status code="200|201|404|500|..." reason="reason" [content-type="type"]/>

כל פיד בפיד התגובות מכיל רכיב <batch:status> אחד. ברכיב הזה מתואר מה קרה במהלך ביצוע הפעולה. היא מחקה את תגובת ה-HTTP שהייתה נשלחת אם הפעולה נשלחה בנפרד, במקום כחלק מפיד אצווה.

עליך לבדוק את הרכיב <batch:status> של כל ערך בתגובה כדי לראות אם הפעולה המשויכת עובדה בהצלחה. המאפיין code="n" מכיל קוד סטטוס GData.

תיאורי סטטוס

המאפיין reason="reason" של הרכיב <batch:status> מכיל הסבר מפורט יותר לגבי סטטוס הפעולה.

סוג התוכן

המאפיין content-type="type" של הרכיב <batch:status> מכיל את סוג ה-MIME של הנתונים שמכילים ברכיב <batch:status>. הערך הזה מתאים לכותרת Content-Type של תגובת סטטוס HTTP. המאפיין הזה הוא אופציונלי.

כאשר סוג התוכן מוגדר, הגוף של רכיב ה-<batch:status> מתאר מה השתבש במהלך עיבוד הערך.

זיהוי פעולות קטועות

הרכיב הבא כלול בתגובה לפעולה שנקטעה:

<batch:interrupted reason="reason" success="N" failures="N" parsed="N">

משמעות הדבר היא שעיבוד האצווה הופסק והניסיון לשחזר את סיבת ההפרעה נכשל. ייתכן שחלק מהרשומות כבר עובדו בהצלחה. כל הרשומות שלא דווח שהצליחו לפני הנקודה הזו ננטשו.

הרכיב הזה חריג מאוד ובדרך כלל מציין שהפיד שנשלח בגוף הבקשה לא היה בפורמט XML נכון.

בדומה לרכיב <batch:status>, ניתן למצוא קוד סטטוס קצר במאפיין reason. תגובה ארוכה יותר עשויה להופיע גם בתוך הרכיב.

דוגמאות לפעולות אצווה ועדכוני סטטוס

לפניכם פיד של פעולות אצווה שיכול להישלח לשרת. הפיד הזה מבקש מהשרת למחוק שתי רשומות ולהוסיף שתי רשומות חדשות. לתשומת ליבך, הרכיב <feed> חייב לכלול שילוב של מרחב שמות עבור אצווה, כפי שמוצג בדוגמה הבאה.

POST : http://www.google.com/base/feeds/items/batch
<?xml version="1.0" encoding="UTF-8"?>
<feed
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
  xmlns:g="http://base.google.com/ns/1.0"
  xmlns:batch="http://schemas.google.com/gdata/batch">
  <title type="text">My Batch Feed</title>
  <entry>
    <id>http://www.google.com/base/feeds/items/13308004346459454600</id>
    <batch:operation type="delete"/>
  </entry>
  <entry>
    <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
    <batch:operation type="delete"/>
  </entry>
  <entry>
    <title type="text">...</title>
    <content type="html">...</content>
    <batch:id>itemA</batch:id>
    <batch:operation type="insert"/>
    <g:item_type>recipes</g:item_type>
  </entry>
  <entry>
    <title type="text">...</title>
    <content type="html">...</content>
    <batch:id>itemB</batch:id>
    <batch:operation type="insert"/>
    <g:item_type>recipes</g:item_type>
  </entry>
</feed>

נניח ששתי ההטמעות פעלו, אבל אחת משתי המחיקות נכשלה. במקרה כזה, פיד סטטוס האצווה עשוי להיראות כך. יש לשים לב שהרשומות שונו מחדש בהשוואה לפיד פעולות האצווה.

<?xml version="1.0" encoding="UTF-8"?>
<feed
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
  xmlns:g="http://base.google.com/ns/1.0"
  xmlns:batch="http://schemas.google.com/gdata/batch">
  <id>http://www.google.com/base/feeds/items</id>
  <updated>2006-07-11T14:51:42.894Z</updated>
  <title type="text">My Batch</title>
  <link rel="http://schemas.google.com/g/2005#feed"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items"/>
  <link rel="http://schemas.google.com/g/2005#post"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items"/>
  <link rel=" http://schemas.google.com/g/2005#batch"
    type="application/atom+xml"
    href="http://www.google.com/base/feeds/items/batch"/>
  <entry>
    <id>http://www.google.com/base/feeds/items/2173859253842813008</id>
    <published>2006-07-11T14:51:43.560Z</published>
    <updated>2006-07-11T14:51: 43.560Z</updated>
    <title type="text">...</title>
    <content type="html">...</content>
    <link rel="self"
      type="application/atom+xml"
      href="http://www.google.com/base/feeds/items/2173859253842813008"/>
    <link rel="edit"
      type="application/atom+xml"
      href="http://www.google.com/base/feeds/items/2173859253842813008"/>
    <g:item_type>recipes</g:item_type>
    <batch:operation type="insert"/>
    <batch:id>itemB</batch:id>
    <batch:status code="201" reason="Created"/>
  </entry>
  <entry>
    <id>http://www.google.com/base/feeds/items/11974645606383737963</id>
    <published>2006-07-11T14:51:43.247Z</published>
    <updated>2006-07-11T14:51: 43.247Z</updated>
    <title type="text">...</title>
    <content type="html">...</content>
    <link rel="self"
      type="application/atom+xml"
      href="http://www.google.com/base/feeds/items/11974645606383737963"/>
    <link rel="edit"
      type="application/atom+xml"
      href="http://www.google.com/base/feeds/items/11974645606383737963"/>
    <g:item_type>recipes</g:item_type>
    <batch:operation type="insert"/>
    <batch:id>itemA</batch:id>
    <batch:status code="201" reason="Created"/>
  </entry>
  <entry>
    <id>http://www.google.com/base/feeds/items/13308004346459454600</id>
    <updated>2006-07-11T14:51:42.894Z</updated>
    <title type="text">Error</title>
    <content type="text">Bad request</content>
    <batch:status code="404"
      reason="Bad request"
      content-type="application/xml">
      <errors>
        <error type="request" reason="Cannot find item"/>
      </errors>
    </batch:status>
  </entry>
  <entry>
    <id>http://www.google.com/base/feeds/items/17437536661927313949</id>
    <updated>2006-07-11T14:51:43.246Z</updated>
    <content type="text">Deleted</content>
    <batch:operation type="delete"/>
    <batch:status code="200" reason="Success"/>
  </entry>
</feed>

שימוש בפונקציונליות האצווה של ספריית הלקוח GData Java

בקטע הזה מוסבר איך להשתמש בפונקציונליות האצווה של ספריית הלקוח GData Java כדי לשלוח קבוצה של בקשות הוספה, עדכון ו/או מחיקה.

הדוגמאות בקטע הזה משתמשות בממשקי ה-API של Google Base.

תחילה עליך לייבא את הכיתות שדרושות לך, בנוסף לכיתות GData ו-Google Base הרגילות:

import com.google.gdata.data.batch.*;
import com.google.api.gbase.client.*;

כדי לשלוח בקשת אצווה, עליך להשיג את כתובת ה-URL באצווה מפיד. קטע הקוד הבא מדגים איך לעשות זאת, בהנחה ש-feed הוא אובייקט GoogleBaseFeed שמכיל מידע על פיד:

Link batchLink = feed.getLink(Link.Rel.FEED_BATCH, Link.Type.ATOM);
if (batchLink != null) {
  URL batchUrl = new URL(batchLink.getHref());
  ... // batch handling
} else {
  // batching is not supported for this feed
}

קטע הקוד הבא מכין פיד שיכניס שני ערכים בפעולה אחת:

GoogleBaseEntry entry1 = new GoogleBaseEntry();
...   // initialize entry 1 content
BatchUtils.setBatchId(entry1, "A"); // A is the local batch ID for this entry
feed.addEntry(entry1);
GoogleBaseEntry entry2 = new GoogleBaseEntry();
... // initialize entry 2 content
BatchUtils.setBatchId(entry2, "B"); // B is the local batch ID for this entry
feed.addEntry(entry2);

הקוד בדוגמה זו לעולם אינו מציין באופן מפורש שהפעולה לביצוע עבור ערכים אלה היא insert. אין צורך לציין זאת באופן מפורש, כי הוספה היא פעולת ברירת המחדל.

כדי לשלוח את פיד האצווה ולקבל את התוצאות, יש לקרוא למתודה Service.batch.

כמו Service.insert, Service.batch מחזיר את הערכים שנוספו עם ערכי <atom:id> חדשים. הערכים שהוחזרו נכללים באובייקט GoogleBaseFeed.

אם ברצונך למחוק רשומה שלישית (שכבר אוחזרת ואחסנת ב-entry3) במקביל להכנסת שתי הרשומות האחרות, ניתן להשתמש בקוד הבא:

GoogleBaseEntry toDelete = new GoogleBaseEntry();


toDelete.setId(entry3.getId());
BatchUtils.setBatchOperationType(toDelete, BatchOperationType.DELETE);

feed.addEntry(toDelete);


GoogleBaseFeed result = service.batch(batchUrl, feed);

כאן service הוא מופע של com.google.gdata.client.Service.

אם ברצונך לעדכן רשומה, יש לציין OperationType.UPDATE ולהפעיל את הרשומה עם השינויים הרצויים במקום להשאיר אותה ריקה ברובה.

הדוגמאות האלה משתמשות ב-API של Google Base data. אם בחרת להשתמש ב-service.batch עם סוג אחר של שירות GData, יש להחליף את המחלקות GoogleBaseFeed, GoogleBaseEntry ו-GoogleBaseService בפידים, ברשומה ובמחלקות השירות המתאימים.

התוצאות של פעולת אצווה לא תמיד מוחזרות בסדר שבו הן התבקשו. בדוגמה שלמעלה, יכול להיות שפיד התוצאות מכיל entry2 ואחריו entry1. לעולם אין להניח שערכים מוחזרים בסדר כלשהו.

פיד פעולות האצווה צריך להקצות מזהה אצווה ייחודי לכל פעולת הוספה, כפי שמוסבר בפעולות מעקב. בדוגמאות שלמעלה, מזהי האצווה הם A ו-B. לכן, כדי למצוא את הסטטוס של הפעולות המבוקשות, עליך לחזור על הערכים בעדכון האצווה שמוחזר ולהשוות את מזהה האצווה או מזהה הערך שלהם, באופן הבא:

for (GoogleBaseEntry entry : result.getEntries()) {
  String batchId = BatchUtils.getBatchId(entry);      
  if (BatchUtils.isSuccess(entry)) {     
    if ("A".equals(batchId)) {       
      entry1 = entry;     } 
    else if ("B".equals(batchId)) {       
      entry2 = entry;     } 
    else if (BatchUtils.getBatchOperationType(entry) 
      == BatchOperationType.DELETE) {       
      System.out.println("Entry " + entry.getId() +
      " has been deleted successfully.");     
    }      
  } else {     
    BatchStatus status = BatchUtils.getBatchStatus(entry);     
    System.err.println(batchId + " failed (" +                
      status.getReason() + ") " +  status.getContent());      
    }    
  } 

לכל רשומה שתמצאו בפיד המוחזר יהיה אובייקט BatchStatus משויך. האובייקט BatchStatus מכיל קוד החזרה של HTTP ותגובה המתארת את הבעיה שאירעה במהלך העיבוד של הערך. עליך לבדוק את קוד ההחזרה של ה-HTTP של כל ערך כדי לדעת אם הפעולה הצליחה.

הבדיקה מתבצעת בדוגמה שלמעלה באמצעות שיטת הנוחות BatchUtils.isSuccess. במקרה הזה, שווה הערך: BatchUtils.getBatchStatus(entry) < 300.

קודי התגובה והתשובות מוסברים עוד במאמר טיפול בקודי סטטוס.

חזרה למעלה