App reviews, troubleshooting, and recommendations
How do I execute some graphql when the app is installed to create metafield definitions?
I have managed to get the query correct using the GraphiQL but it doesn't seem to run in the hooks.
This is my shopify.server.js
import { restResources } from "@shopify/shopify-api/rest/admin/2023-07"; hooks: { afterAuth: async ({ session }) => { shopify.registerWebhooks({ session }); // Add a metafield definition called tier to the customer object. // This is used to store the tier of the customer. const response = await restResources.client.graphql({ query: ` mutation CreateMetafieldDefinition($definition: MetafieldDefinitionInput!) { metafieldDefinitionCreate(definition: $definition) { createdDefinition { id name } userErrors { field message code } } } `, variables: { definition: { // Provide the necessary input values for the mutation "name": "Tier", "namespace": "$app:loyalty-discount", "key": "loyalty_tier", "description": "Loyalty Tier", "type": "single_line_text_field", "ownerType": "CUSTOMER", "validations": [ { "name": "choices", "value": "[\"Tier 1\", \"Tier 2\", \"Tier 3\, \"Tier 4\, \"Tier 5\"]" } ], }, }, }); }, },
Any pointers appreciated.
Thanks Dan
Hello, Is there other way to execute custom code after user accept the app installation ? or only in the "afterAuth" hook ?
You could directly access the admin from the arguments and execute graphl. Same as below, just make sure access scope for metafields and customer are permitted.
hooks: {
afterAuth: async ({ session, admin }) => {
shopify.registerWebhooks({ session });
const response: Response = await admin.graphql(
`#graphql
mutation CreateMetafieldDefinition($definition: MetafieldDefinitionInput!) {
metafieldDefinitionCreate(definition: $definition) {
createdDefinition {
id
name
}
userErrors {
field
message
code
}
}
}`,
{
variables: {
definition: {
// Provide the necessary input values for the mutation
"name": "Tier",
"namespace": "$app:loyalty-discount",
"key": "loyalty_tier",
"description": "Loyalty Tier",
"type": "single_line_text_field",
"ownerType": "CUSTOMER",
"validations": [
{
"name": "choices",
"value": "[\"Tier 1\", \"Tier 2\", \"Tier 3\, \"Tier 4\, \"Tier 5\"]"
}
],
},
}
}
);
const responseJson = await response.json();
console.log("responseJson", responseJson)
},
},
2m ago Learn the essential skills to navigate the Shopify admin with confidence. T...
By Shopify Feb 12, 2025Learn how to expand your operations internationally with Shopify Academy’s learning path...
By Shopify Feb 4, 2025Hey Community, happy February! Looking back to January, we kicked off the year with 8....
By JasonH Feb 3, 2025