Amazon MWS: Submit Prices and Quantity with ASIN - amazon-mws

I would like to update my products with the Amazon MWS API. The problem: I only have the products ASIN's to identify them. Not the SellerSKU.
As far as I have seen until now, the Feed to update the products Data does only accept the SKU as an unique identifier for my product. Is there a way to get around this? Have I just missed the possibility to update with ASIN?

You can use the GetReport operation with the _GET_MERCHANT_LISTINGS_DATA ReportType to retrieve a document that will associate the ASINs with SKUs.

The SKU can be set by the Seller. In this case, the SKU was simply the Article No. Now I have the SKU and can simply use it.

Related

Solr Schema advice in multitenant ecommerce site

I have a multitenant site, whose products are indexed in Solr, so visitors can search by product name, or any other product property.
Now, I would like to filter by product price.
There are two problems:
Not all tentants have the same products on their website.
The product price can differ from one customer to another, as each tenant can change the price of each of the product it uses.
So given a tenantId, I'd like to search for all products that tenant has, which are in a given price range.
I don't think I can store a Map<CustomerId, Price> for each product and somehow query that, so I'm a bit stuck on how to design the schema. At the moment, I just have, for each product, a multivalued property called customer, so I can just filter by all products of a given tentant.
Any help appreciated, thanks!

GetMatchingProductForId() only returns a result if there's an active offer

As per subject, GetMatchingProductForId() returns results, eg. when querying by EAN and trying to get an ASIN back, only if active offers exist for that ASIN.
Essentially, if noone (else) is selling this product while we query, we can't get an ASIN for our EANs.
This behaviour is consistent with MWS's documentation.
The same behaviour applies to ListMatchingProducts() it does /not/ return results for non-buyable products.
As an example, using GetMatchingProductForId() for EAN 8301029074792 on the UK marketplace returns nothing whereas if you perform the same search using Seller Central you see that a listing does exist for that product.
Since Amazon wants developers not to create products if they already exist in their database, I wonder how we're supposed to query by EAN in order to get an ASIN.
There is no easy solution for this kind of problem. Both the affiliate's itemLookup and mws GetMatchingProductForId don't return asins if there's no current seller.
One solution I came up is to create a bot/crawler to programmatically run through all your (no matched) EAN/UPC list to the seller central's add-a-product page, search the EAN/UPC in the search bar and get the data result.
It returns the ASIN for the specific UPC/EAN query even though there's no current seller for the item.

Woocommerce products in different database

is it possible to load Woocommerce products from different database?
Normally products are stored with wordpress posts, images etc in wp_posts and wp_postmeta, I'd like to separate products to another database.
Thank you for any hint!
Well, this is possible? Yes it is...
For that you will need to create an database for products with many columns like: name, price, variation, description...
When you do that, you need to change the woocommerce files for once the system process a new purchase, modify the stock, name of product, description, also modify the other table, and that's not an easy task.
Now if you only want to get extract the time when products for other tables you could use the REST API woo commerce, it is returned with several keys and values of their products in JSON format, from there you can process them and insert one by one in your new table.

Salesforce SOQL Queries and Tags

I'm just getting started with the Salesforce Web Services API and I'm surprised that there isn't an obvious way to do a query for all e.g. Account objects that contain certain tags.
What would you say is the best way to find all objects that contain certain tags?
I imagine it involves a join on Account.id and AccountTag.id or something similar, but despite some real research, I'm not sure how best to solve this problem.
Thanks in advance!
Update: I guess I could do a select from AccountTag and then get the account objects based on ItemId, but the ideal would be to do a query on Account, with Tags being only one part of the criteria.
You can use the SOQL-R style queries to do this, e.g. this will fetch the account Id and account Name for all the accounts with the internet tag.
select item.id, item.name from accountTag where name='internet'
in this case the item relationship is to the account that was tagged, so you can select any field from the account object through the item relationship path.
See the SOQL-R docs for more info

Database design for a small CRM/invoicing system

I'm currently developing a small customer relationship and invoice management system for my client. And I have run into some small issues which I would like do discuss.
What is the best practice around orders, customers and products. Should my client be able to delete orders, customers and products?
Currently I have designed my database around the principle of relationships between order, customer and product like this:
Customer
ID
Name
...
Product
ID
Name
Price
...
Order
ID
CustomerID
OrderDate
...
Order Line
ID
OrderID
ProductID
Like this I can connect all the different tables. But what if my client delete a product, what happens when he later open a order he created months ago which had that item in it. It would be gone, since it has been deleted. Same goes for customer.
Should I just disable the products and customers when the delete button is clicked or what is the best practice?
If I lets say diable a product whenever my client decides to delete it, what happens then if he later tries to add a new product with the same product ID as a disabled product, should I just enable that item again?
Please share your wisdom :D
"If I lets say diable a product whenever my client decides to delete it, what happens then if he later tries to add a new product with the same product ID as a disabled product, should I just enable that item again?"
Depends entirely on your business scenario - what is unique in the way customers maintain it currently? (say manually?) How do they handle when an old product which was earlier discontinued suddenly reappears? (Do they treat it as a new product or start referring to the old product?) I guess there are no right or wrong answers to these questions, it depends on the functionality - it is always advisable to understand the existing processes (minus the software) already followed by the customers and then map them to the software functionality.
For eg. you could always add a 'A product with this code already exists - do you want to use that instead of creating a new one?' kind of a message. Also, the product ids that you use in your tables as foreign keys, and the ones that you use to show the customer, better be different - you dont want to get them mixed up.
Why would you want to be able to delete orders? I would think that such a system would lock orders so that you know you have a good history. Same goes for customers, why delete them? Perhaps a way to "archive" them, having to set some flag, that way they don't show up on customer lists or something.
As for disabling and then entering a new item with the same product ID - I'm not sure why you'd do that either, each product ID is unique for a reason, even if you discontinue a product, it should keep it's product ID so you have a record. But if you must, then you could put a constraint in the business rules, something to the effect of "If there is no product that is active with this product ID then allow it. If we have a product that is active and it has the same product ID, then throw an error." Thus, you only allow for one active product with that product ID - but honestly, I think this would be confusing, and on the back end you'll want to use a unique id that is unchanging for each product to link between tables.
Instead of "deleting" I would add a boolean column for IsActive. That way you won't loose historical data. For instance, if they are able to delete a customer then they won't be able to look at history regarding that customer and it may make looking at statistical data hard or impossible. For the order table you could have a column that represents something like "current", "canceled", "filled" to accomplish the same thing. That column should be a code to a lookup/codetable.

Resources