# productSet ile ürünü tek seferde oluşturma ya da güncelleme

> Harici bir sistemden ürünü tek çağrıda senkronize edin: productSet, ürünü seçenekleri ve varyantlarıyla birlikte handle’a göre oluşturur ya da günceller.

Sayfa: https://lintelagency.com/tr/kaynaklar/graphql/productset-ile-urun-senkronizasyonu

## Kısaca

Bir ürünü ERP ya da PIM’den senkronize etmek için productSet’i ürünün tamamıyla çağırın: title, status, productOptions ve variants. Mevcut bir ürünü güncellemek için identifier’a handle ya da ID verin; yeni ürün için boş bırakın. Liste alanları baştan yazılır, yani göndermediğiniz varyantlar silinir. Küçük ürünlerde synchronous: true, büyüklerde asenkron modu kullanın.

## Bilgiler

- **API:** Admin GraphQL API
- **İşlem:** productSet
- **Erişim yetkisi:** write_products
- **Yerini aldığı REST çağrısı:** POST /admin/api/products.json ve PUT /admin/api/products/{id}.json
- **API sürümü:** 2026-10
- **Son kontrol:** 2 Kasım 2026

## Nasıl kullanılır

1. Kaynak kaydınızı ProductSetInput’a eşleyin: her seçenek tüm değerleriyle, ardından her kombinasyon için optionValues, sku ve price içeren bir varyant.
2. İkinci çalıştırmada kopya oluşmasın, ürün güncellensin diye identifier’a handle (ya da ID veya customId olarak benzersiz bir metafield) verin.
3. SyncProduct’ı gönderin. synchronous: true ile ürün yanıtta döner.
4. Büyük ürünlerde synchronous: false gönderin ve dönen productSetOperation ID’siyle productOperation sorgusunu takip edin.

## Kod

### product-set.graphql

```graphql
mutation SyncProduct($identifier: ProductSetIdentifiers, $input: ProductSetInput!) {
  productSet(identifier: $identifier, input: $input, synchronous: true) {
    product {
      id
      handle
      title
      status
      variants(first: 10) {
        nodes {
          id
          sku
          price
          selectedOptions {
            name
            value
          }
        }
      }
    }
    userErrors {
      code
      field
      message
    }
  }
}
```

### product-set.variables.json

```json
{
  "identifier": {
    "handle": "linen-shirt"
  },
  "input": {
    "title": "Linen shirt",
    "handle": "linen-shirt",
    "status": "ACTIVE",
    "vendor": "Your Brand",
    "productType": "Shirts",
    "tags": ["summer", "linen"],
    "productOptions": [
      {
        "name": "Size",
        "values": [{"name": "S"}, {"name": "M"}, {"name": "L"}]
      }
    ],
    "variants": [
      {"optionValues": [{"optionName": "Size", "name": "S"}], "sku": "LS-S", "price": "49.00"},
      {"optionValues": [{"optionName": "Size", "name": "M"}], "sku": "LS-M", "price": "49.00"},
      {"optionValues": [{"optionName": "Size", "name": "L"}], "sku": "LS-L", "price": "52.00"}
    ]
  }
}
```

### product-set.response.json

```json
{
  "data": {
    "productSet": {
      "product": {
        "id": "gid://shopify/Product/1234567890",
        "handle": "linen-shirt",
        "title": "Linen shirt",
        "status": "ACTIVE",
        "variants": {
          "nodes": [
            {"id": "gid://shopify/ProductVariant/1111111111", "sku": "LS-S", "price": "49.00", "selectedOptions": [{"name": "Size", "value": "S"}]},
            {"id": "gid://shopify/ProductVariant/1111111112", "sku": "LS-M", "price": "49.00", "selectedOptions": [{"name": "Size", "value": "M"}]},
            {"id": "gid://shopify/ProductVariant/1111111113", "sku": "LS-L", "price": "52.00", "selectedOptions": [{"name": "Size", "value": "L"}]}
          ]
        }
      },
      "userErrors": []
    }
  }
}
```

## Sınırlar ve özel durumlar

- Liste alanları (variants, productOptions, metafields, collections, files) baştan yazılır: göndermedikleriniz silinir. Diğer alanlar yalnızca gönderirseniz değişir.
- Mağazalarda varsayılan olarak ürün başına en fazla 2048 varyant olabilir.
- Bir bulk operation içinde productSet her zaman senkron çalışır.
- Yalnızca varyantları ya da seçenekleri değiştirecekseniz productVariantsBulkCreate, productVariantsBulkUpdate veya productOption mutation’larını kullanın.

## Sorular

### productSet ile productCreate arasındaki fark nedir?

productCreate ürünün iskeletini ve seçeneklerini oluşturur; varyantlar başka çağrılarla eklenir. productSet ise ürünü varyantlarıyla birlikte alır ve oluşturur ya da günceller; bu da harici bir kaynaktan senkronizasyon için idealdir.

### productSet varyantları siler mi?

Evet, göndermezseniz siler. variants bir liste alanıdır; sonuç tam olarak gönderdiğiniz listeyle aynı olur.

### Bir ürünü handle’a göre nasıl upsert ederim?

identifier: { handle: "urun-handle" } verin. Bu handle’a sahip bir ürün yoksa productSet yenisini oluşturur.

## Shopify belgeleri

- [productSet](https://shopify.dev/docs/api/admin-graphql/latest/mutations/productSet)
- [Sync product data from an external source](https://shopify.dev/docs/apps/build/graphql/migrate/new-product-model/sync-data)

## İlgili içerikler

- [Staged upload ve bulkOperationRunMutation ile toplu içe aktarma](https://lintelagency.com/tr/kaynaklar/graphql/staged-upload-ile-toplu-ice-aktarma)
- [Varyantları toplu oluşturma ve güncelleme](https://lintelagency.com/tr/kaynaklar/graphql/varyantlari-toplu-olusturma-ve-guncelleme)
- [Shopify stoğunu başka bir sistemle senkron tutmak](https://lintelagency.com/tr/blog/shopify-stok-senkronizasyonu)

Lisans: MIT. Kendi mağazanızda da müşteri işlerinizde de ücretsiz kullanabilirsiniz.
