This is the early access documentation preview for Custom Views. This documentation might not be in sync with our official documentation.
SDK code examples
Try our example SDK code.
Example SDK code on this page assumes you have set up your SDK as described in the get started guide of your respective SDK. You may need to modify some code if your environment differs.
Overview
The following SDK code examples demonstrate how to carry out basic commerce tasks such as creating, updating, and querying Customers and Products with commercetools SDKs. These code examples can be easily adapted and built upon to help you integrate commercetools Composable Commerce into your code base.
Manage Customers
Create a Customer
A CustomerDraft must be created and posted to the Customers endpoint to create a Customer.
CustomerDrafts have two required fields: email
and password
.
After posting the CustomerDraft, the API returns a CustomerSignInResult. This contains the new Customer and an optional Cart (which is null in these examples). These code examples get the Customer then output its id
.
// Create a CustomerDraft with the required fields (email address and password)CustomerDraft newCustomerDetails = CustomerDraft.builder().email("sdk@example.com").password("password").build();// Post the CustomerDraft and get the new CustomerCustomer customer = apiRoot.customers().post(newCustomerDetails).executeBlocking().getBody().getCustomer();// Output the Customer IDString customerID = customer.getId();System.out.println(customerID);
{customerID}
is used as a placeholder in following examples.
Query a Customer
Your new Customer can be queried by including its id
after the Customers endpoint. This example code outputs the Customer's email address, but every field within the Customer can be accessed.
// Query a Customer by their IDCustomer queryCustomer = apiRoot.customers().withId("{customerID}").get().executeBlocking().getBody();// Output the Customer's email addressString customerEmail = queryCustomer.getEmail();System.out.println(customerEmail);
If you query a resource with an id
or key
that does not exist, the API returns a 404 Not Found error. This may cause your program to crash.
Add a Customer name
A CustomerUpdate
, which contains the current version of the Customer and an array/collection of update actions, must be posted to the specified Customer to update its values.
The required update actions for changing a Customer's first and second names are Set First Name and Set Last Name.
// Create the CustomerUpdate with the current version of the Customer and add the actionsCustomerUpdate customerUpdate = CustomerUpdate.builder()// The version of a new Customer is 1. This value is incremented every time an update action is applied to the Customer. If the specified version does not match the current version, the request returns an error..version(1l).plusActions(actionBuilder ->actionBuilder.setFirstNameBuilder().firstName("John")).plusActions(actionBuilder ->actionBuilder.setLastNameBuilder().lastName("Smith")).build();// Post the CustomerUpdate and return the updated CustomerCustomer updatedCustomer = apiRoot.customers().withId("{customerID}").post(customerUpdate).executeBlocking().getBody();// Output the updated Customer's full nameString updatedCustomerName =updatedCustomer.getFirstName() + " " + updatedCustomer.getLastName();System.out.println(updatedCustomerName);
Find a Customer by their email address
As the email
of a Customer is unique, it is a dependable way to find a Customer.
Customers can be found by their email address by querying the Customers endpoint with a where
parameter and a Query Predicate.
This example code returns a CustomerPagedQueryResponse that contains a results
array. If a Customer exists with the email, results
will contain one entry and this Customer's id
is output to the console.
// Search for Customers whose email address matches the predicate variableCustomerPagedQueryResponse customerToFind = apiRoot.customers().get().withWhere("email = :customerEmail", "customerEmail", "sdk@example.com").executeBlocking().getBody();// As email addresses must be unique, either 0 or 1 Customers will be returned.// If 0, then no Customer exists with this email address.if (customerToFind.getCount() == 0) {System.out.println("This email address has not been registered.");} else {// Since there can be only one Customer resource in the result, it must be the first entry of the results array. This outputs the Customer's id.String customerID = customerToFind.getResults().get(0).getId();System.out.println(customerID);}
Manage Products
Creating Products requires more steps than creating Customers. This is due to how Products are modeled in Composable Commerce.
Before a Product can be created, you must first create a ProductType.
Create a ProductType
A ProductTypeDraft must be created and posted to the ProductTypes endpoint to create a ProductType.
ProductTypeDrafts have two required fields: name
and description
.
After posting the ProductTypeDraft, the API returns the new ProductType. These code examples output the new ProductType's id
.
// Create a ProductTypeDraft with the required fields (name and description)ProductTypeDraft newProductTypeDetails = ProductTypeDraft.builder().name("The name of your ProductType").description("The description of your ProductType").build();// Post the ProductTypeDraft and get the new ProductTypeProductType productType = apiRoot.productTypes().post(newProductTypeDetails).executeBlocking().getBody();// Output the ProductType IDString productTypeID = productType.getId();System.out.println(productTypeID);
{productTypeID}
is used as a placeholder in following examples.
Create a Product
A ProductDraft must be created and posted to the Products endpoint to create a Product.
ProductDrafts have three required fields: name
, productType
, and slug
.
After posting the ProductDraft, the API returns the new Product. These code examples output the new Product's id
.
// Create a ProductDraft with the required fields (name, productType, and slug)ProductDraft newProductDetails = ProductDraft.builder().name(stringBuilder ->stringBuilder.addValue("en", "English name for your Product").addValue("de", "German name for your Product")).productType(typeBuilder -> typeBuilder.id({productTypeID})).slug(stringBuilder ->stringBuilder.addValue("en", "human-readable-url-for-english-product").addValue("de", "human-readable-url-for-german-product")).build();// Post the ProductDraft and get the new ProductProduct product = apiRoot.products().post(newProductDetails).executeBlocking().getBody();// Output the Product IDString productID = product.getId();System.out.println(productID);
{productID}
is used as a placeholder in following examples.
Query your Product
Your new Product can be queried by including its id
after the Product endpoint. This example code outputs the Product's version, but every field within the Product can be accessed.
// Query a Product by its IDProduct queryProduct = apiRoot.products().withId("{productID}").get().executeBlocking().getBody();// Output the Product's versionSystem.out.println(queryProduct.getVersion());
Add a Product key
Keys are user-defined unique identifiers that make it easier to manage various resources in your Project. By assigning keys to Products, you can query and update Products using a human-friendly identifier instead of a randomly generated ID. You can also potentially use keys to sync your Products with their identifiers in external databases.
A ProductUpdate
, which contains the current version of the Product and an array/collection of update actions must be posted to the specified Product to update its values.
Adding a key
to a Product requires the Set Key update action.
// Create the ProductUpdate with the current version of the Product and the update actionsProductUpdate productUpdate = ProductUpdate.builder()// The version of a new Product is 1. This value is incremented every time an update action is applied to the Product. If the specified version does not match the current version, the request returns an error..version(1l).plusActions(actionBuilder ->actionBuilder.setKeyBuilder().key("new-product-key")).build();// Post the ProductUpdate and return the updated ProductProduct updatedProduct = apiRoot.products().withId("{productID}").post(productUpdate).executeBlocking().getBody();// Output the updated Product's keyString updatedProductKey = updatedProduct.getKey();System.out.println(updatedProductKey);
Return a Product by its Key
Your Product can now be queried by including its key after the Products endpoint. This example code outputs the Product's current English name.
Product findProductByKey = apiRoot.products().withKey("{productKey}").get().executeBlocking().getBody();// Output the Product's current English nameString productName = findProductByKey.getMasterData().getCurrent().getName().get("en");System.out.println(productName);