Google Veri Protokolü'nde Toplu İşleme

Toplu işlem, her işlemi tek tek göndermek yerine tek bir istekte birden fazla işlem yürütebilmenizi sağlar.

Not: Toplu işlemler gerçekleştirmek için Google Data API istemci kitaplığınızın yeni bir sürümünü kullanıyor olmanız gerekir. Toplu işlemler, JavaScript istemci kitaplığı tarafından desteklenmez.

Kitle

Bu belge, toplu işlem kullanarak tek bir istekte birden fazla işlem göndermek isteyen programcılar için hazırlanmıştır.

Bu dokümanda, GData Java İstemci Kitaplığı'nı kullanmayı bildiğiniz varsayılmaktadır. Bu belgedeki örneklerde, toplu işlemleri çalıştırmak için Java istemci kitaplığının nasıl kullanılacağı gösterilmektedir.

Bu belgedeki örnekler, Google Base Data API'ye özeldir. Bununla birlikte, diğer hizmetlerde toplu özellikler de sunulabilir.

Not: Protokol ve genel prosedürler diğer istemci kitaplıkları için aynı olur ancak toplu istekler gerçekleştirmenin belirli yöntemleri değişiklik gösterebilir. Lütfen istemci kitaplığına özel belgelere bakın.

Giriş

Bir GData toplu feed'ini kullanarak birden çok ekleme, güncelleme, silme ve sorgu işlemi toplayabilir, ardından bunların tümünü aynı anda gönderip yürütebilirsiniz.

Örneğin, aşağıdaki feed dört işlem içerir:

<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>

Hizmet, istenen değişikliklerin mümkün olduğunca fazlasını gerçekleştirir ve her işlemin başarısını veya başarısızlığını değerlendirmek için kullanabileceğiniz durum bilgilerini döndürür.

Hizmet, bazı toplu işlemlerde başarısız olsa bile işlemlerin her birini toplu halde yürütmeye çalışır.

Toplu istek gönderme

Toplu istek, bir HTTP URL'si olarak grup URL'sine gönderilmelidir. Farklı feed'ler, farklı toplu işlemleri destekler. Salt okunur feed'ler yalnızca sorguları destekler.

Belirli bir feed'in toplu işlemleri destekleyip desteklemediğini öğrenmek için feed'i sorgulayabilirsiniz. Feed, feed düzeyinde bir "toplu bağlantı" ilişkisi içeriyorsa bu, feed'in toplu işlemleri desteklediğini gösterir.

"Toplu" bağlantı ilişkisi, rel="http://schemas.google.com/g/2005#batch" içeren bir <link> öğesidir. Bağlantı ilişkisinin href özelliği, toplu işlemler için feed dokümanlarının yayınlanabileceği URL'yi tanımlar.

Örneğin, GET http://www.google.com/base/feeds/items (normal Google Base "öğeler" feed'i) yürüttüğünüzde aşağıdaki yanıtı alabilirsiniz:

<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> 

Bu örnekte, toplu URL şu şekildedir: http://www.google.com/base/feeds/items/batch.

Toplu işlemler feed'i yazma

İşlem feed'i; ekleme, güncelleme, silme veya sorgulama amaçlı girişlerin listesini içerir. Her işlem bir <batch:operation type="insert|update|delete|query"/> öğesi tarafından tanımlanır.

Bu öğe, <feed> öğesinin doğrudan alt öğesi, feed'deki girişlerin doğrudan alt öğesi veya her ikisi de olabilir. Bir girişe dahil edildiğinde, söz konusu giriş için yürütülecek işlemi belirtir. Bu öğe, feed'e eklendiğinde bir <batch:operation/> öğesine sahip olmayan girişlerde yürütülecek varsayılan işlemi belirtir.

Giriş veya feed bir işlem belirtmediğinde varsayılan işlem insert olur.

Uygulamalar, tek bir toplu özet akışında aynı girişe birden çok işlem uygulamamalıdır. Aynı giriş için birden fazla işlem belirtirseniz sonuçlar belirsiz olur.

Performansı artırmak için işlemler, istendiği sırada işlenmeyebilir. Ancak nihai sonuç her zaman girişlerin sırayla işlenmesiyle aynı olur.

Sunucuya gönderdiğiniz XML'deki bayt sayısı 1 MB'ı (1.048.576 bayt) aşamaz. Toplam bayt boyutu 1 MB'ı aşmadığı sürece, isteyebileceğiniz işlem sayısında genel bir sınırlama yoktur. Ancak, bazı hizmetler ek kısıtlamalar uygulayabilir.

Toplu işlemleri kullanmak için toplu ad alanı beyanını <feed> öğesine özellik olarak eklemeniz gerekir:

<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">

İşlem ekle

Ekleme işlemi aşağıdaki gibi belirtilir:

<batch:operation type="insert">

Ekleme işlemi, girişi GÖNDER ile eşdeğerdir. İşlem başarılı olduğunda, güncellenmiş bir <id> öğesi ve bir <batch:status code="201"/> öğesi olacak şekilde giriş içeriğinin tamamı döndürülür.

Aşağıda, başarılı bir ekleme isteği örneği verilmiştir:

<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>

Aşağıda, başarılı bir ekleme isteğine verilen yanıta bir örnek verilmiştir:

<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>

Güncelleme işlemleri

<batch:operation type="update">

Güncelleme işlemi, girişin <id> öğesi tarafından başvurulan URL'de PUT yürütmeye eşdeğerdir. İşlem başarılı olduğunda giriş içeriğinin tamamı bir <batch:status code="200"/> öğesiyle döndürülür.

Not: Belirli feed'lerde, toplu güncelleme istekleriyle birlikte girişin rel="edit" bağlantısını da belirtmeniz gerekir. Buna, Google Veri Protokolü'nün optimum eşzamanlılık v1 stilini destekleyen feed'ler ve URL'si olmayan feed'ler dahildir.

Aşağıda güncelleme isteği örneği verilmiştir:

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

Aşağıda, başarılı bir yanıt örneği verilmiştir:

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

Not: Bazı feed'ler, başka birinin değişikliklerini istemeden değiştirmenizi engellemek için güçlü EEtiketler kullanır. Bu feed'lerden birinde bir giriş için toplu güncelleme isteğinde bulunurken girişin gd:etag özelliğinde ETag değerini sağlamanız gerekir. Örneğin, <entry gd:etag="'F08NQAxFdip7IWA6WhVR'">...<batch:operation type="update"/>...

Kısmi güncelleme işlemleri

Kısmi güncellemeleri destekleyen feed'ler için bunları toplu isteklerde de kullanabilirsiniz. Kısmi güncelleme işlemi, girişin <id> öğesi tarafından referans verilen URL'de PATCH yürütmeye eşdeğerdir. İşlem başarılı olduğunda giriş içeriğinin tamamı bir <batch:status code="200"/> öğesiyle döndürülür.

Not: Belirli feed'lerde, toplu güncelleme istekleriyle birlikte girişin rel="edit" bağlantısını da belirtmeniz gerekir. Buna, Google Veri Protokolü'nün optimum eşzamanlılık v1 stilini destekleyen feed'ler ve URL'si olmayan feed'ler dahildir.

<batch:operation type="patch"/>

Kısmi güncelleme isteğiyle ilgili bir örnek:

<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>

Aşağıda, başarılı bir yanıt örneği verilmiştir:

<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>

İşlemleri silme

<batch:operation type="delete">

Silme işlemi, girişin <id> öğesi tarafından referans verilen URL'de bir DELETE yürütmeye eşdeğerdir. Silme işlemi için girişi silmek üzere yalnızca bir <id> öğesi göndermeniz gerekir. batch: ad alanında olmayan öğelerde sağladığınız diğer bilgiler yok sayılır. İşlem başarılı olduğunda, aynı kimliğe sahip bir giriş <batch:status code="200"/> öğesiyle döndürülür.

Not: Belirli feed'lerde, girişin rel="edit" bağlantısını da toplu silme istekleriyle belirtmeniz gerekir. Buna, Google Veri Protokolü'nün optimum eşzamanlılık v1 stilini destekleyen feed'ler ve URL'si olmayan feed'ler dahildir.

Örnek bir silme isteği:

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

Aşağıda, başarılı bir yanıt örneği verilmiştir:

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

Not: Bazı feed'ler, başka birinin değişikliklerini istemeden değiştirmenizi engellemek için güçlü EEtiketler kullanır. Bu feed'lerden birinde bir giriş için toplu silme isteğinde bulunurken girişin gd:etag özelliğinde ETag değerini sağlamanız gerekir. Örneğin, <entry gd:etag="'F08NQAxFdip7IWA6WhVR'">...<batch:operation type="delete"/>...

Sorgu işlemleri

<batch:operation type="query">

Sorgu işlemi, girişin <id> öğesi tarafından başvurulan URL'de GET yürütmeye eşdeğerdir. İşlem başarılı olduğunda giriş içeriğinin tamamı döndürülür.

Not: Belirli feed'lerde toplu sorgu isteklerinde girişin rel="self" bağlantısını da belirtmeniz gerekir. Buna, URL kimliği olmayan feed'ler de dahildir.

Aşağıda sorgu isteğine bir örnek verilmiştir:

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

Aşağıda, başarılı bir yanıt örneği verilmiştir:

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

İzleme işlemleri

GData giriş sonuçlarının her zaman istekle aynı sırayla döndürülmemesi gerekir. Bir tanımlayıcıyı kullanarak işlemi kullanım ömrü boyunca izleyebilirsiniz.

Güncelleme, silme ve sorgu işlemleri için işlemi izlemek üzere girişin kimliğini kullanabilirsiniz.

Henüz işlem kimliği olmadığından ekleme işlemleri için işlem tanımlayıcısı aktarabilirsiniz. Bu tanımlayıcı, sonuç girişlerini istek girişlerine bağlamak için kullanılabilir. İşlem tanımlayıcısı <batch:id> öğesinde iletilir.

Her işlem için GData, işlemin başarılı veya başarısız olduğunu belirten bir yanıt döndürür. Her yanıt ilgili girişi tanımlar. Bir güncelleme, silme veya sorgu işlemi ya da başarılı bir ekleme işlemi için giriş kimliği her zaman döndürülür. Bir grup kimliği belirttiyseniz bu değer de döndürülür. Başarısız ekleme işlemlerinin ilişkili giriş kimliği olmadığından, yalnızca toplu kimlik döndürülür.

Her işlemin tanımlayıcısını kullanarak tüm işlem grubunu yeniden göndermek yerine yalnızca başarısız işlemleri yeniden deneyebilirsiniz.

<batch:id> içeriği, istemci tanımlı ve ilgili yanıt girişinde tekrarlanacak bir dize değeridir.İstemcinin yanıtı orijinal istekteki girişle ilişkilendirmesine yardımcı olacak herhangi bir değeri belirtebilirsiniz. İşlem başarısız olsa bile bu öğe ilgili girişte olduğu gibi yankılanır. GData, bu grup kimliğinin içeriğini hiçbir zaman depolamaz veya yorumlamaz.

Aşağıdaki örnekte toplu işlemler feed'i gösterilmektedir. <batch:id> öğesinin bu işlemi itemB olarak etiketlediğine dikkat edin.

<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>

Aşağıdaki örnekte, bu işleme yanıt olarak döndürülen toplu durum girişi gösterilmektedir.

<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>

Durum kodlarını işleme

Durum kodları aşağıdaki öğeyle ifade edilir:

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

Yanıt feed'indeki her giriş bir <batch:status> öğesi içerir. Bu öğe, işlem yürütülürken ne olduğunu açıklar. İşlem, bir toplu feed'in parçası olarak değil, tek tek gönderildiyse gönderilecek HTTP yanıtını taklit eder.

İlgili işlemin başarıyla işlenip işlenmediğini öğrenmek için yanıttaki her girişin <batch:status> öğesini kontrol etmeniz gerekir. code="n" özelliği, bir GData durum kodu içerir.

Durum açıklamaları

<batch:status> öğesinin reason="reason" özelliği, işlemin durumuyla ilgili daha ayrıntılı bir açıklama içerir.

İçerik türü

<batch:status> öğesinin content-type="type" özelliği, <batch:status> öğesinde yer alan verilerin MIME türünü içerir. Bu, HTTP durum yanıtının Content-Type başlığına karşılık gelir. Bu özellik isteğe bağlıdır.

İçerik türü ayarlandığında, <batch:status> öğesinin gövdesi, girişi işlemede olanları açıklar.

Kesintili işlemleri tanımlama

Aşağıdaki öğe, kesintiye neden olan bir işlemin yanıtına dahil edilir:

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

Bu öğe, toplu işlemin kesintiye uğradığı ve kesintinin nedenini kurtarma girişimlerinin başarısız olduğu anlamına gelir. Bazı girişler zaten başarılı bir şekilde işlenmiş olabilir. Bu noktadan önce başarısız olduğu bildirilmeyen tüm girişler.

Bu öğe çok olağan dışıdır ve genellikle isteğin gövde metninde gönderilen özet akışının doğru XML biçiminde olmadığını gösterir.

<batch:status> öğesinde olduğu gibi, reason özelliğinde kısa bir durum kodu bulunabilir. Öğenin içinde daha uzun bir yanıt da bulunabilir.

Örnek toplu işlemler ve durum feed'leri

Burada, sunucuya gönderilebilecek bir toplu işlemler feed'i bulunmaktadır. Bu feed, sunucunun iki girişi silmesini ve iki yeni giriş eklemesini ister. Aşağıdaki örnekte vurgulandığı gibi, <feed> öğesinin toplu e-tablo için ad alanı sorgusu içermesi gerektiğini unutmayın.

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>

Bu iki eklemenin çalıştığını ancak silmelerden birinin başarısız olduğunu varsayalım. Bu durumda toplu durum feed'i aşağıdaki gibi görünebilir. Girişlerin, toplu işlemler feed'ine kıyasla yeniden sıralandığına dikkat edin.

<?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 istemci kitaplığının toplu işlevlerini kullanma

Bu bölümde, bir grup ekleme, güncelleme ve/veya silme isteği göndermek için GData Java istemci kitaplığının toplu işlevlerinin nasıl kullanılacağı açıklanmaktadır.

Bu bölümde verilen örneklerde Google Base API'leri kullanılmaktadır.

Öncelikle, standart GData ve Google Base sınıflarına ek olarak ihtiyaç duyacağınız sınıfları içe aktarın:

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

Toplu istek göndermek için feed'den Toplu URL'yi almanız gerekir. Aşağıdaki kod snippet'i, feed özelliğinin feed hakkında bilgi içeren bir GoogleBaseFeed nesnesi olduğunu varsayarak bunun nasıl yapılacağını gösterir:

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
}

Aşağıdaki kod snippet'i, bir işleme iki giriş ekleyecek bir feed hazırlar:

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);

Bu örnekteki kod, bu girişler için gerçekleştirilecek işlemin insert olduğunu hiçbir zaman açıkça belirtmez. Varsayılan işlem olduğu için bunu açıkça belirtmeniz gerekmez.

Toplu feed'i göndermek ve sonuçları almak için Service.batch yöntemini çağırın.

Service.insert gibi Service.batch, eklenen yeni <atom:id> değerlerini ayarlayarak eklenen girişleri döndürür. Döndürülen girişler GoogleBaseFeed nesnesine dahil edilir.

Üçüncü bir girişi (getirip entry3 uygulamasında depoladığınız) diğer iki girişi eklerken aynı anda silmek isterseniz aşağıdaki kodu kullanabilirsiniz:

GoogleBaseEntry toDelete = new GoogleBaseEntry();


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

feed.addEntry(toDelete);


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

Burada service, com.google.gdata.client.Service örneğidir.

Bir girişi güncellemek istiyorsanız OperationType.UPDATE özelliğini belirtin ve çoğunlukla boş bırakmak yerine girişi istediğiniz değişikliklerle başlatın.

Bu örnekler Google Base data API'yi kullanır. service.batch öğesini başka bir GData hizmeti türüyle kullanıyorsanız GoogleBaseFeed, GoogleBaseEntry ve GoogleBaseService sınıflarını uygun feed, giriş ve hizmet sınıflarıyla değiştirin.

Bir toplu işlemin sonuçları, istendiği sırada mutlaka döndürülmez. Yukarıdaki örnekte, sonuç feed'i çok iyi bir entry2 ve ardından entry1 içerebilir. Girişlerin belirli bir sırada döndürüldüğünü varsaymamalısınız.

Toplu işlemler feed'iniz, İzleme işlemleri'nde açıklandığı gibi her ekleme işlemine benzersiz bir toplu kimlik atamalıdır. Yukarıdaki örneklerde, grup kimlikleri A ve B'dir. Bu nedenle, istenen işlemlerin durumunu bulmak için, döndürülen toplu feed'deki girişleri tekrarlamanız ve bunların toplu kimliğini veya giriş kimliğini aşağıdaki gibi karşılaştırmanız gerekir:

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());      
    }    
  } 

Döndürülen feed'de bulacağınız her girişle, ilişkili bir BatchStatus nesnesi bulunur. BatchStatus nesnesi, bir HTTP dönüş kodu ve giriş işlenirken karşılaşılan sorunu açıklayan bir yanıt içerir. İşlemin başarılı olup olmadığını anlamak için her girişin HTTP döndürme kodunu kontrol etmeniz gerekir.

Kontrol, yukarıdaki örnekte BatchUtils.isSuccess rahatlık yöntemi ile yapılmıştır. Bu durumda, eşdeğeri BatchUtils.getBatchStatus(entry) < 300.

Durum kodları ve yanıtları Durum kodlarını kullanma bölümünde daha ayrıntılı olarak açıklanmıştır.

Başa dön