Join us for an upcoming Shopify Partner webinar on February 27, 2024. Discover the latest Checkout Extensibility features, and deep dive on improvements to Shopify Functions and Web Pixels. Register now for either the 10am EST or 2pm EST sessions.
Solved

Save PriceRule does not return created object

sancuscommerce
Shopify Partner
15 1 2
I am attempting to create a price rule using admin.rest.resource. the documentation states that the response will contain the created price rule. however, when I attempt to retrieve the response, it is returning undefined. 
 
 
const price_rule = new admin.rest.resources.PriceRule({session: session});
price_rule.title = "TEST";
price_rule.target_type = "line_item";
price_rule.target_selection = "all";
price_rule.allocation_method = "across";
price_rule.value_type = "fixed_amount";
price_rule.value = "-10.0";
price_rule.customer_selection = "all";
price_rule.starts_at = "2018-03-22T00:00:00-00:00";

const priceResponse = await price_rule.save({
update: true,
});
console.log('priceResponse:'+JSON.stringify(priceResponse));
 
I have also tried just logging the response without using a variable:
console.log('save:'+JSON.stringify(await price_rule.save({
update: true,
})));
 
it also returns undefined.
 
Both of these will create the price rule and I can retrieve it if i list all the price rules:
console.log('price rule list:'+JSON.stringify(await admin.rest.resources.PriceRule.all({
session: session,
})));
 
How do I get the id of the created price rule so I can use it in creating a discount code? I don't want to query the price rules every time i want to create a discount and loop over those trying to find my newly created price rule.
 
Thanks
Accepted Solution (1)

sancuscommerce
Shopify Partner
15 1 2

This is an accepted solution.

I found the solution. I don't need to assign the await to a new variable. the update:true will update the price_rule variable with the newly created id.

 

This works and returns an id i can pass into the create discount code:

const price_rule = new admin.rest.resources.PriceRule({session: session});
price_rule.title = "Price Rule Title";
price_rule.target_type = "line_item";
price_rule.target_selection = "all";
price_rule.allocation_method = "across";
price_rule.value_type = "fixed_amount";
price_rule.value = "-10.0";
price_rule.customer_selection = "all";
price_rule.starts_at = "2018-03-22T00:00:00-00:00";

await price_rule.save({
update: true,
});
console.log('price_rule:'+JSON.stringify(price_rule));

View solution in original post

Replies 2 (2)

sancuscommerce
Shopify Partner
15 1 2

This is an accepted solution.

I found the solution. I don't need to assign the await to a new variable. the update:true will update the price_rule variable with the newly created id.

 

This works and returns an id i can pass into the create discount code:

const price_rule = new admin.rest.resources.PriceRule({session: session});
price_rule.title = "Price Rule Title";
price_rule.target_type = "line_item";
price_rule.target_selection = "all";
price_rule.allocation_method = "across";
price_rule.value_type = "fixed_amount";
price_rule.value = "-10.0";
price_rule.customer_selection = "all";
price_rule.starts_at = "2018-03-22T00:00:00-00:00";

await price_rule.save({
update: true,
});
console.log('price_rule:'+JSON.stringify(price_rule));
Liam
Shopify Staff
2677 288 734

Glad you figured this out and thanks for coming back to post your solution!

Liam | Developer Advocate @ Shopify 
 - Was my reply helpful? Click Like to let me know! 
 - Was your question answered? Mark it as an Accepted Solution
 - To learn more visit Shopify.dev or the Shopify Web Design and Development Blog