# Metaobject tanımı oluşturma ve kayıtları upsert etme

> Beden tablosunu metaobject olarak kurun: tanımı metaobjectDefinitionCreate ile oluşturun, kayıtları handle’a göre metaobjectUpsert ile ekleyip güncelleyin.

Sayfa: https://lintelagency.com/tr/kaynaklar/graphql/metaobject-tanimi-ve-upsert

## Kısaca

Beden tablosu ya da SSS gibi yapılandırılmış içerikleri saklamak için metaobjectDefinitionCreate ile bir metaobject tanımı (type, alanlar, erişim, yetenekler) oluşturun, ardından kayıtları metaobjectUpsert ile yazın. Upsert, kaydı type ve handle ile bulur: varsa günceller, yoksa oluşturur; böylece aynı içe aktarımı güvenle tekrar çalıştırabilirsiniz. Kaydı göstermek için ona bir ürün metafield’ından referans verin.

## Bilgiler

- **API:** Admin GraphQL API
- **İşlemler:** metaobjectDefinitionCreate, metaobjectUpsert
- **Erişim yetkileri:** write_metaobject_definitions, write_metaobjects
- **Yerini aldığı REST çağrısı:** Yok; metaobject’ler yalnızca GraphQL ile yönetilir
- **API sürümü:** 2026-10
- **Son kontrol:** 2 Kasım 2026

## Nasıl kullanılır

1. CreateSizeChartDefinition’ı her mağaza için bir kez gönderin. displayNameKey, admin’de kaydın adı olarak gösterilecek alanı seçer.
2. Kayıtların taslak ve aktif durumu olsun istiyorsanız publishable yeteneğini açın; headless mağazalar için storefront erişimini PUBLIC_READ yapın.
3. Her tablo için UpsertSizeChart’ı type ve handle ile gönderin. Alan değerleri metindir; json alanı bir JSON metni alır.
4. Tabloyu ürünlere metaobject_reference tipinde bir metafield ile bağlayın, ardından Liquid’de ya da Storefront API ile okuyun.

## Kod

### metaobject-definition-create.graphql

```graphql
mutation CreateSizeChartDefinition($definition: MetaobjectDefinitionCreateInput!) {
  metaobjectDefinitionCreate(definition: $definition) {
    metaobjectDefinition {
      id
      type
      name
      displayNameKey
      fieldDefinitions {
        key
        name
        required
        type {
          name
        }
      }
    }
    userErrors {
      code
      field
      message
    }
  }
}
```

### metaobject-definition-create.variables.json

```json
{
  "definition": {
    "name": "Size chart",
    "type": "size_chart",
    "displayNameKey": "title",
    "access": {
      "storefront": "PUBLIC_READ"
    },
    "capabilities": {
      "publishable": {
        "enabled": true
      }
    },
    "fieldDefinitions": [
      {"key": "title", "name": "Title", "type": "single_line_text_field", "required": true},
      {
        "key": "unit",
        "name": "Unit",
        "type": "single_line_text_field",
        "validations": [{"name": "choices", "value": "[\"cm\",\"in\"]"}]
      },
      {"key": "rows", "name": "Rows", "type": "json", "required": true}
    ]
  }
}
```

### metaobject-definition-create.response.json

```json
{
  "data": {
    "metaobjectDefinitionCreate": {
      "metaobjectDefinition": {
        "id": "gid://shopify/MetaobjectDefinition/1234567890",
        "type": "size_chart",
        "name": "Size chart",
        "displayNameKey": "title",
        "fieldDefinitions": [
          {"key": "title", "name": "Title", "required": true, "type": {"name": "single_line_text_field"}},
          {"key": "unit", "name": "Unit", "required": false, "type": {"name": "single_line_text_field"}},
          {"key": "rows", "name": "Rows", "required": true, "type": {"name": "json"}}
        ]
      },
      "userErrors": []
    }
  }
}
```

### metaobject-upsert.graphql

```graphql
mutation UpsertSizeChart($handle: MetaobjectHandleInput!, $metaobject: MetaobjectUpsertInput!) {
  metaobjectUpsert(handle: $handle, metaobject: $metaobject) {
    metaobject {
      id
      handle
      displayName
      capabilities {
        publishable {
          status
        }
      }
      fields {
        key
        value
      }
    }
    userErrors {
      code
      field
      message
    }
  }
}
```

### metaobject-upsert.variables.json

```json
{
  "handle": {
    "type": "size_chart",
    "handle": "shirts"
  },
  "metaobject": {
    "fields": [
      {"key": "title", "value": "Shirts"},
      {"key": "unit", "value": "cm"},
      {"key": "rows", "value": "[{\"size\":\"S\",\"chest\":96},{\"size\":\"M\",\"chest\":102},{\"size\":\"L\",\"chest\":108}]"}
    ],
    "capabilities": {
      "publishable": {
        "status": "ACTIVE"
      }
    }
  }
}
```

### metaobject-upsert.response.json

```json
{
  "data": {
    "metaobjectUpsert": {
      "metaobject": {
        "id": "gid://shopify/Metaobject/1234567890",
        "handle": "shirts",
        "displayName": "Shirts",
        "capabilities": {
          "publishable": {
            "status": "ACTIVE"
          }
        },
        "fields": [
          {"key": "title", "value": "Shirts"},
          {"key": "unit", "value": "cm"},
          {"key": "rows", "value": "[{\"size\":\"S\",\"chest\":96},{\"size\":\"M\",\"chest\":102},{\"size\":\"L\",\"chest\":108}]"}
        ]
      },
      "userErrors": []
    }
  }
}
```

## Sınırlar ve özel durumlar

- type oluşturulduktan sonra değiştirilemez. Uygulamanıza ayırmak için başına $app: ekleyin.
- publishable açıkken bir kayıt, yalnızca durumu ACTIVE ise mağazada görünür.
- Güncellemede gönderdiğiniz değerler kayıtlı olanların üzerine yazılır.
- metaobjects/create, update ve delete webhook’ları, type:size_chart gibi tipi belirten bir filtre ister.

## Sorular

### Metafield ile metaobject arasındaki fark nedir?

Metafield, mevcut bir kayda tek bir değer ekler. Metaobject ise birden fazla alanı olan, kendi başına bir kayıttır; beden tablosu ya da SSS maddesi gibi, birçok ürün ona referans verebilir.

### ID’sini bilmeden bir metaobject’i nasıl güncellerim?

metaobjectUpsert’i type ve handle ile kullanın. Handle varsa kaydı günceller, yoksa yenisini oluşturur.

### Metaobject’im neden mağazada görünmüyor?

Tanımın storefront erişiminin PUBLIC_READ olduğunu ve publishable açıksa kaydın durumunun ACTIVE olduğunu kontrol edin.

## Shopify belgeleri

- [metaobjectDefinitionCreate](https://shopify.dev/docs/api/admin-graphql/latest/mutations/metaobjectDefinitionCreate)
- [metaobjectUpsert](https://shopify.dev/docs/api/admin-graphql/latest/mutations/metaobjectUpsert)
- [Manage metaobjects](https://shopify.dev/docs/apps/build/custom-data/metaobjects/manage-metaobjects)

## İlgili içerikler

- [Storefront API ile metafield ve metaobject okuma](https://lintelagency.com/tr/kaynaklar/graphql/storefront-metafield-ve-metaobject-okuma)
- [Metafield tanımı oluşturma](https://lintelagency.com/tr/kaynaklar/graphql/metafield-tanimi-olusturma)
- [Hydrogen mı Liquid mi: headless ne zaman kendini amorti eder?](https://lintelagency.com/tr/blog/shopify-hydrogen-mi-liquid-mi)

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