New metafields.type Property

I am able to create a product/variant with metafields in the GraphQl Playground:

===============================================================

mutation CreateShopifyVirtualProduct($productInput: ProductInput!) {

productCreate(input: $productInput) {

product {

id

}

userErrors {

field

message

}

}

}

=== Query Variables ===========

{

“productInput”:

{

“title”: “NIKE - 449788022”,

“descriptionHtml”: “MEN’S SHOES 42-MENS L/S TEES”,

“productType”: “”,

“vendor”: “NIKE”,

“options”: [“size”, “width”],

“metafields”: [

{

“namespace”: “smp_product_attr”,

“key”: “smp_product_key_1”,

“value”: “smp_product_key_1_value”,

“type”: “single_line_text_field”

}

],

“variants”: [

{

“price”: “39.99”,

“sku”: “38536314-0acb-4d3f-b8ff-a0f2014d2c75”,

“weight”: 1,

“weightUnit”: “OUNCES”,

“options”: [“42”, “L/S”],

“metafields”: [

{

“namespace”: “smp_variant_attr”,

“key”: “smp_variant_key_1”,

“value”: “smp_variant_key_1_value”,

“type”: “single_line_text_field”

},

{

“namespace”: “smp_variant_attr”,

“key”: “smp_variant_key_2”,

“value”: “smp_variant_key_2_value”,

“type”: “single_line_text_field”

}

]

}

]

}

}

When I try to duplicate this action in my code, I receive the following Graphql error:

Error: GraphQL error: Variable $productInput of type ProductInput! was provided invalid value for metafields.0.type (Field is not defined on MetafieldInput), variants.0.metafields.0.type (Field is not defined on MetafieldInput), variants.0.metafields.1.type (Field is not defined on MetafieldInput)

I believe I am pointing to the correct endpoint ==>

My getSubscriptionUrl.js file:

const response = await fetch(https://${shop}/admin/api/2021-07/graphql.json, {

method: ‘POST’,

headers: {

‘Content-Type’: ‘application/json’,

“X-Shopify-Access-Token”: accessToken,

},

body: query

})

I can create products in my code if I remove the metafield object. It feels as though I am reaching an older version of the Graphql server. Any thoughts of what I may be doing wrong? Thanks, Tom

My first guess was going to be an API version mismatch. The type field was only added in 2021-07, and GraphQL Playground likely defaults to the latest stable API version so it would work there.

However, your example code did show you using https://${shop}/admin/api/2021-07/graphql.json which is correct. I looked in our logs for requests matching yours and saw a few failing ones where you used version 2020-07 (2020, not 2021) which would explain the failures. However, I also saw successful requests made once you switched to 2021-07 so it looks like you figured this problem out?

swalkinshaw - thanks for your reply.

Unfortunately, I am still stuck.
What you saw in the logs is that I performed many tests using 2021-04,
2021-07, and even the unreleased 2021-10 endpoints .
I did see your change from valueType to type in 2021-07.

Unfortunately, in using either 2021-07 and 2021-10, my product and variant
are only created if I eliminate the metafield objects.
Thanks for your help, again. If you are truly stumped at your end, please
let me know and I will close out this ticket.

Oh sorry, the successful requests I was seeing were from the Shopify GraphiQL App.

However, every single request I’m seeing from your own app has 2020-07 as the version in the URL. There must be some disconnect between the code snippet you posted here and the actual code used to make the request. I’m sorry I can’t really offer more help, but type will definitely work if you’re using version 2021-07 and newer.

Thank you – a version mismatch FEELS like the root cause of my problem.
I will use your valuable “2020-07” information and scour my code.
Thanks again; I will close this one out.
Regards,
Tom

Note:

Solved.

Though my SubscriptionURL had been updated to “2021-10”,

I missed a separate Graphql Proxy. It had a value of “July20” & not (2020-07), thus I had difficulty locating it.

I updated the @Shopify_77 /koa-shopify-graphql-proxy": “^6.0.1”, from the earlier “4.1.0”,

then changed the version:

server.use(graphQLProxy({ version: "2021-01" }));

… and all was resolved. Thanks for your help !

1 Like