Skip to content

Commit

Permalink
Implement utility class and helper classes for CustomObjectSync (#561)
Browse files Browse the repository at this point in the history
* Implement utility class and helper classes for CustomObjectSync

* Enhance the CustomObjectSyncUtilsTest to check JsonNode in different datatypes.

* Remove non-null annotation in CustomObjectSyncUtils

* Fix incorrect javadoc in CustomObjectSyncStatistics

* Remove unused variable in CustomObjectSyncUtilsTest

* Refactor CustomObjectSyncUtilsTest

* Revert "Refactor CustomObjectSyncUtilsTest"

This reverts commit 1e6b7b4.

* Remove blank line

* Refactor CustomObjectSyncUtilsTest

* Remove batchElements from CustomObjectSyncUtils

* Remove unused import and change the class variables to be local variables

* Remove spaces in CustomObjectSyncUtilsTest

* Add customobjects sync (#569)

* Implement CustomObjectSync

* Enhance the CustomObjectSyncUtilsTest to check JsonNode in different datatypes.

* Inherit CustomObjetSync from BaseSync

* Remove batchElements from CustomObjectSyncUtils

* Remove non-null annotation in CustomObjectSyncUtils

* Fix import problem in CustomObjectSync

* Add override methods for equals and hashCode

* Add assertion for CustomObjectSyncStatistics

* Create CustomObjectSyncStatisticsAssert class

* Add first unit test scenario to CustomObjectSyncTest

* Add unit test scenario

* Implement unit test for custom object update in CustomObjectSyncTest

* Change the deprecated method

* Fix checkstyle problem

* Fix unit case problem in mocking composite identifier

* Remove unused import in CustomObjectCompositeIdentifier

* Remove unused import in CustomObjectSyncTest

* Revert the change on CustomObjectSyncUtilsTest

* Revert the change in CustomObjectSyncUtilsTest

* Refactor sync class to increase coverage

* Remove unused import in CustomObjectSyncTest

* Apply correct style formatting

* Fix checkstyleMain issues

* Fix checkStyle issue

* Add public constructor in CustomObjectSync

* Remove blank line after javadoc

* Apply method reference in lambda in CustomObjectSync

* Update error message

* Change javadoc for method CustomObjectSync.validateDraft()

* Change error messages

* Avoid calling CTP when two custom objects are identical.

* Fix unit test expected error message

* Correct the javadoc for updateCustomObject()

* Add unit test cases and fix bugs

* Rename unit test method

* Add unit test case to cover update retry failure

* Fix expected result in unit test

* Remove blank lines

* Refactor CustomObjectSyncTest

* Fix findbugs problem

* Rename Response to be ResponseEntry

* Remove blank lines and fix indentation

* Fix indentation in CustomObjectServiceImpl

* Remove blank lines

* Add equals() and hashCode() in CustomObjectCompositeIdentifier

* Add unit test cases

* Fix indentation in CustomObjectSyncTest

* Add CustomObjectCompositeIdentifierTest

Co-authored-by: ninalindl <[email protected]>

* CustomObject sync finalization (#573)

* Add integration tests in CustomObjectSyncIT

* Fix integration test case for update custom object

* Fix CustomObjectSync for ConcurrentModificationException handling

* Fix refactoring problem in BaseService

* Delete newly created custom object between every test case

* Update README.md

* Update README.md

* Add CUSTOM_OBJECT_SYNC.md

* Add release note for v2.1.0

* Update release notes

* Update version number to v2.1.0

* Fix documentation

* Remove redundant java comment

* Fix javadoc and java comments

* Remove empty line in BaseService

* Remove empty lines in CustomObjectSyncIT

* Add javadoc for CustomObjectServiceImpl.executeCreateCommand()

* Revert "Add javadoc for CustomObjectServiceImpl.executeCreateCommand()"

This reverts commit 390680b.

* Add javadoc to describe CustomObjectServiceImpl.executeCreateCommand()

* Modify test case method naming in CustomObjectSyncIT

* Update RELEASE_NOTES.md

* Update CUSTOM_OBJECT_SYNC.md

* Remove unused import

* Modify javadoc for CustomObjectServiceImpl.executeCreateCommand()

* Revert "Modify javadoc for CustomObjectServiceImpl.executeCreateCommand()"

This reverts commit 9ad46a0.

* Modify javadoc for CustomObjectSerivceImpl.executeCreateCommand()

Co-authored-by: ninalindl <[email protected]>

* Add unit test case for CustomObjectServiceImpl to increase coverage rate

* Fix indentation

* Add link in mkdocs.yml

* Add private constructor to increase coverage

* Revert "Add private constructor to increase coverage"

This reverts commit 6e71275.

* Update RELEASE_NOTES

Co-authored-by: ninalindl <[email protected]>
  • Loading branch information
leungkinghin-ct and ninalindl authored Sep 22, 2020
1 parent fc5a9a9 commit 4c5234c
Show file tree
Hide file tree
Showing 36 changed files with 2,255 additions and 188 deletions.
15 changes: 8 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
# commercetools sync
[![Build Status](https://travis-ci.org/commercetools/commercetools-sync-java.svg?branch=master)](https://travis-ci.org/commercetools/commercetools-sync-java)
[![codecov](https://codecov.io/gh/commercetools/commercetools-sync-java/branch/master/graph/badge.svg)](https://codecov.io/gh/commercetools/commercetools-sync-java)
[![Benchmarks 2.0.0](https://img.shields.io/badge/Benchmarks-2.0.0-orange.svg)](https://commercetools.github.io/commercetools-sync-java/benchmarks/)
[![Benchmarks 2.1.0](https://img.shields.io/badge/Benchmarks-2.1.0-orange.svg)](https://commercetools.github.io/commercetools-sync-java/benchmarks/)
[![Download](https://api.bintray.com/packages/commercetools/maven/commercetools-sync-java/images/download.svg) ](https://bintray.com/commercetools/maven/commercetools-sync-java/_latestVersion)
[![Javadoc](http://javadoc-badge.appspot.com/com.commercetools/commercetools-sync-java.svg?label=Javadoc)](https://commercetools.github.io/commercetools-sync-java/v/2.0.0/)
[![Javadoc](http://javadoc-badge.appspot.com/com.commercetools/commercetools-sync-java.svg?label=Javadoc)](https://commercetools.github.io/commercetools-sync-java/v/2.1.0/)
[![Known Vulnerabilities](https://snyk.io/test/github/commercetools/commercetools-sync-java/4b2e26113d591bda158217c5dc1cf80a88665646/badge.svg)](https://snyk.io/test/github/commercetools/commercetools-sync-java/4b2e26113d591bda158217c5dc1cf80a88665646)

More at https://commercetools.github.io/commercetools-sync-java
Expand All @@ -21,6 +21,7 @@ The library supports synchronising the following entities in commercetools
- [CartDiscounts](/docs/usage/CART_DISCOUNT_SYNC.md)
- [States](/docs/usage/STATE_SYNC.md)
- [TaxCategories](/docs/usage/TAX_CATEGORY_SYNC.md)
- [CustomObjects](/docs/usage/CUSTOM_OBJECT_SYNC.md)

![commercetools-java-sync-final 001](https://user-images.githubusercontent.com/9512131/31230702-0f2255a6-a9e5-11e7-9412-04ed52641dde.png)
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
Expand All @@ -36,7 +37,7 @@ The library supports synchronising the following entities in commercetools
- [Ivy](#ivy)
- [Roadmap](#roadmap)
- [Release Notes](/docs/RELEASE_NOTES.md)
- [Javadoc](https://commercetools.github.io/commercetools-sync-java/v/2.0.0/)
- [Javadoc](https://commercetools.github.io/commercetools-sync-java/v/2.1.0/)
- [Benchmarks](https://commercetools.github.io/commercetools-sync-java/benchmarks/)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->
Expand Down Expand Up @@ -78,26 +79,26 @@ Here are the most popular ones:
<dependency>
<groupId>com.commercetools</groupId>
<artifactId>commercetools-sync-java</artifactId>
<version>2.0.0</version>
<version>2.1.0</version>
</dependency>
````

#### Gradle

````groovy
implementation 'com.commercetools:commercetools-sync-java:2.0.0'
implementation 'com.commercetools:commercetools-sync-java:2.1.0'
````

#### SBT

````
libraryDependencies += "com.commercetools" % "commercetools-sync-java" % "2.0.0"
libraryDependencies += "com.commercetools" % "commercetools-sync-java" % "2.1.0"
````

#### Ivy

````xml
<dependency org="com.commercetools" name="commercetools-sync-java" rev="2.0.0"/>
<dependency org="com.commercetools" name="commercetools-sync-java" rev="2.1.0"/>
````


Expand Down
13 changes: 7 additions & 6 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
# commercetools sync
[![Build Status](https://travis-ci.org/commercetools/commercetools-sync-java.svg?branch=master)](https://travis-ci.org/commercetools/commercetools-sync-java)
[![codecov](https://codecov.io/gh/commercetools/commercetools-sync-java/branch/master/graph/badge.svg)](https://codecov.io/gh/commercetools/commercetools-sync-java)
[![Benchmarks 2.0.0](https://img.shields.io/badge/Benchmarks-2.0.0-orange.svg)](https://commercetools.github.io/commercetools-sync-java/benchmarks/)
[![Benchmarks 2.1.0](https://img.shields.io/badge/Benchmarks-2.1.0-orange.svg)](https://commercetools.github.io/commercetools-sync-java/benchmarks/)
[![Download](https://api.bintray.com/packages/commercetools/maven/commercetools-sync-java/images/download.svg) ](https://bintray.com/commercetools/maven/commercetools-sync-java/_latestVersion)
[![Javadoc](http://javadoc-badge.appspot.com/com.commercetools/commercetools-sync-java.svg?label=Javadoc)](https://commercetools.github.io/commercetools-sync-java/v/2.0.0/)
[![Javadoc](http://javadoc-badge.appspot.com/com.commercetools/commercetools-sync-java.svg?label=Javadoc)](https://commercetools.github.io/commercetools-sync-java/v/2.1.0/)
[![Known Vulnerabilities](https://snyk.io/test/github/commercetools/commercetools-sync-java/4b2e26113d591bda158217c5dc1cf80a88665646/badge.svg)](https://snyk.io/test/github/commercetools/commercetools-sync-java/4b2e26113d591bda158217c5dc1cf80a88665646)


Expand Down Expand Up @@ -35,6 +35,7 @@ The library supports synchronising the following entities in commercetools
- [CartDiscounts](usage/CART_DISCOUNT_SYNC.md)
- [States](usage/STATE_SYNC.md)
- [TaxCategories](/docs/usage/TAX_CATEGORY_SYNC.md)
- [CustomObjects](/docs/usage/CUSTOM_OBJECT_SYNC.md)

![commercetools-java-sync-final 001](https://user-images.githubusercontent.com/9512131/31230702-0f2255a6-a9e5-11e7-9412-04ed52641dde.png)

Expand All @@ -55,18 +56,18 @@ Here are the most popular ones:
<dependency>
<groupId>com.commercetools</groupId>
<artifactId>commercetools-sync-java</artifactId>
<version>2.0.0</version>
<version>2.1.0</version>
</dependency>
````
#### Gradle
````groovy
implementation 'com.commercetools:commercetools-sync-java:2.0.0'
implementation 'com.commercetools:commercetools-sync-java:2.1.0'
````
#### SBT
````
libraryDependencies += "com.commercetools" % "commercetools-sync-java" % "2.0.0"
libraryDependencies += "com.commercetools" % "commercetools-sync-java" % "2.1.0"
````
#### Ivy
````xml
<dependency org="com.commercetools" name="commercetools-sync-java" rev="2.0.0"/>
<dependency org="com.commercetools" name="commercetools-sync-java" rev="2.1.0"/>
````
18 changes: 15 additions & 3 deletions docs/RELEASE_NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,20 @@
[Commits](https://github.com/commercetools/commercetools-sync-java/compare/2.0.0...2.0.1) |
[Javadoc](https://commercetools.github.io/commercetools-sync-java/v/2.0.1/) |
[Jar](https://bintray.com/commercetools/maven/commercetools-sync-java/2.0.1)
-->
-->

### 2.1.0 - Sep 21, 2020
[Commits](https://github.com/commercetools/commercetools-sync-java/compare/2.0.0...2.1.0) |
[Javadoc](https://commercetools.github.io/commercetools-sync-java/v/2.1.0/) |
[Jar](https://bintray.com/commercetools/maven/commercetools-sync-java/2.1.0)
- 🎉 **New Features** (2)
- **CustomObject Sync** - Added support for syncing custom objects between ctp projects. [#565](https://github.com/commercetools/commercetools-sync-java/issues/565) For more info how to use it please refer to [CustomObject usage doc](/docs/usage/CUSTOM_OBJECT_SYNC.md).
- **CustomObject Sync** - Exposed `CustomObjectSyncUtils#hasIdenticalValue` which determines whether update process is required after comparing a `CustomObject` and a `CustomObjectDraft`. [#565](https://github.com/commercetools/commercetools-sync-java/issues/565)

- 🛠️ **Dependency Updates** (3)
- `org.ajoberstar.git-publish` `2.1.3` -> [`3.0.0`](https://github.com/ajoberstar/gradle-git-publish/releases/tag/3.0.0)
- `org.ajoberstar.grgit` `4.0.2` -> [`4.1.0`](https://github.com/ajoberstar/grgit/releases/tag/4.1.0)
- `mockito-junit-jupiter` `3.5.10` -> [`3.5.11`](https://github.com/mockito/mockito/releases/tag/v3.5.11)

### 2.0.0 - Sept 14, 2020
[Commits](https://github.com/commercetools/commercetools-sync-java/compare/1.9.1...2.0.0) |
Expand Down Expand Up @@ -65,7 +77,7 @@
- `junit.jupiterApiVersion` `5.6.2` -> [`5.7.0`](https://github.com/junit-team/junit5/releases/tag/r5.7.0)
- `mockito-junit-jupiter` `3.4.4` -> [`3.5.10`](https://github.com/mockito/mockito/releases/tag/v3.5.10)
- `com.github.ben-manes.versions` `0.29.0` -> [`0.33.0`](https://github.com/ben-manes/gradle-versions-plugin/releases/tag/v0.33.0)

### 1.9.1 - Aug 5, 2020
[Commits](https://github.com/commercetools/commercetools-sync-java/compare/1.9.0...1.9.1) |
[Javadoc](https://commercetools.github.io/commercetools-sync-java/v/1.9.1/) |
Expand Down
3 changes: 2 additions & 1 deletion docs/usage/CART_DISCOUNT_SYNC.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,9 @@ fields set, otherwise they won't be matched.
Types are matched by their `key`s. Therefore, in order for the sync to resolve the
actual ids of the type reference, the `key` of the `Type` has to be supplied.

- When syncing from a source commercetools project, you can use [`mapToCartDiscountDrafts`](https://commercetools.github.io/commercetools-sync-java/v/2.0.0/com/commercetools/sync/cartdiscounts/utils/CartDiscountReferenceResolutionUtils.html#mapToCartDiscountDrafts-java.util.List-)
- When syncing from a source commercetools project, you can use [`mapToCartDiscountDrafts`](https://commercetools.github.io/commercetools-sync-java/v/2.1.0/com/commercetools/sync/cartdiscounts/utils/CartDiscountReferenceResolutionUtils.html#mapToCartDiscountDrafts-java.util.List-)
method that maps from a `CartDiscount` to `CartDiscountDraft` in order to make them ready for reference resolution by the sync:

````java
final List<CartDiscountDraft> cartDiscountDrafts = CartDiscountReferenceResolutionUtils.mapToCartDiscountDrafts(cartDiscounts);
````
Expand Down
6 changes: 3 additions & 3 deletions docs/usage/CATEGORY_SYNC.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@ otherwise they won't be matched.
These references are matched by their `key`s. Therefore, in order for the sync to resolve the
actual ids of the references, their `key`s has to be supplied.

- When syncing from a source commercetools project, you can use [`mapToCategoryDrafts`](https://commercetools.github.io/commercetools-sync-java/v/2.0.0/com/commercetools/sync/categories/utils/CategoryReferenceResolutionUtils.html#mapToCategoryDrafts-java.util.List-)
- When syncing from a source commercetools project, you can use [`mapToCategoryDrafts`](https://commercetools.github.io/commercetools-sync-java/v/2.1.0/com/commercetools/sync/categories/utils/CategoryReferenceResolutionUtils.html#mapToCategoryDrafts-java.util.List-)
method that maps from a `Category` to `CategoryDraft` in order to make them ready for reference resolution by the sync:
````java
final List<CategoryDraft> categoryDrafts = CategoryReferenceResolutionUtils.mapToCategoryDrafts(categories);
````
````

3. Create a `sphereClient` [as described here](IMPORTANT_USAGE_TIPS.md#sphereclient-creation).

4. After the `sphereClient` is set up, a `CategorySyncOptions` should be built as follows:
Expand Down
70 changes: 70 additions & 0 deletions docs/usage/CUSTOM_OBJECT_SYNC.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Custom Object Sync

Module used for importing/syncing CustomObject into a commercetools project.
It also provides utilities for correlating a custom object to a given custom object draft based on the
comparison of a [CustomObject](https://docs.commercetools.com/http-api-projects-custom-objects#customobject)
against a [CustomObjectDraft](https://docs.commercetools.com/http-api-projects-custom-objects#customobjectdraft).

<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->


- [Usage](#usage)
- [Sync list of CustomObjectDrafts](#sync-list-of-customobjectdrafts)
- [Prerequisites](#prerequisites)
- [Running the sync](#running-the-sync)
- [More examples of how to use the sync](#more-examples-of-how-to-use-the-sync)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

## Usage
### Sync list of CustomObjectDrafts

#### Prerequisites
1. The sync expects a list of `CustomObjectDraft`s that have their `key` and `container` fields set to be matched with
custom objects in the target CTP project. Therefore, the custom objects in the target project are expected to have the
same `key` and `container` fields set, otherwise they won't be matched.

2. Create a `sphereClient` [as described here](IMPORTANT_USAGE_TIPS.md#sphereclient-creation).

3. After the `sphereClient` is set up, a `CustomObjectSyncOptions` should be be built as follows:
````java
// instantiating a CustomObjectSyncOptions
final CustomObjectSyncOptions customObjectSyncOptions = CustomObjectSyncOptionsBuilder.of(sphereClient).build();
````

[More information about Sync Options](SYNC_OPTIONS.md).

#### Running the sync
After all the aforementioned points in the previous section have been fulfilled, to run the sync:
````java
// instantiating a CustomObjectSync
final CustomObjectSync customObjectSync = new CustomObjectSync(customObjectSyncOptions);

// execute the sync on your list of custom object drafts
CompletionStage<CustomObjectSyncStatistics> syncStatisticsStage = customObjectSync.sync(customObjectDrafts);
````
The result of the completing the `syncStatisticsStage` in the previous code snippet contains a `CustomObjectSyncStatistics`
which contains all the stats of the sync process; which includes a report message, the total number of updated, created,
failed, processed custom objects and the processing time of the last sync batch in different time units and in a
human-readable format.

````java
final CustomObjectSyncStatistics stats = syncStatisticsStage.toCompletebleFuture().join();
stats.getReportMessage();
/*"Summary: 2000 custom objects were processed in total (1000 created, 995 updated, 5 failed to sync)."*/
````

__Note__ The statistics object contains the processing time of the last batch only. This is due to two reasons:

1. The sync processing time should not take into account the time between supplying batches to the sync.
2. It is not known by the sync which batch is going to be the last one supplied.

#### More examples of how to use the sync

- [Sync from an external source](https://github.com/commercetools/commercetools-sync-java/tree/master/src/integration-test/java/com/commercetools/sync/integration/externalsource/customobjects/CustomObjectSyncIT.java).

*Make sure to read the [Important Usage Tips](IMPORTANT_USAGE_TIPS.md) for optimal performance.*

More examples of those utils for different custom objects can be found [here](https://github.com/commercetools/commercetools-sync-java/tree/master/src/test/java/com/commercetools/sync/customobjects/utils/CustomObjectSyncUtilsTest.java).
2 changes: 1 addition & 1 deletion docs/usage/IMPORTANT_USAGE_TIPS.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ productSync.sync(batch1)
By design, scaling the sync process should **not** be done by executing the batches themselves in parallel. However, it can be done either by:

- Changing the number of [max parallel requests](https://github.com/commercetools/commercetools-sync-java/tree/master/src/main/java/com/commercetools/sync/commons/utils/ClientConfigurationUtils.java#L116) within the `sphereClient` configuration. It defines how many requests the client can execute in parallel.
- or changing the draft [batch size](https://commercetools.github.io/commercetools-sync-java/v/2.0.0/com/commercetools/sync/commons/BaseSyncOptionsBuilder.html#batchSize-int-). It defines how many drafts can one batch contain.
- or changing the draft [batch size](https://commercetools.github.io/commercetools-sync-java/v/2.1.0/com/commercetools/sync/commons/BaseSyncOptionsBuilder.html#batchSize-int-). It defines how many drafts can one batch contain.

The current overridable default [configuration](https://github.com/commercetools/commercetools-sync-java/tree/master/src/main/java/com/commercetools/sync/commons/utils/ClientConfigurationUtils.java#L45) of the `sphereClient`
is the recommended good balance for stability and performance for the sync process.
Expand Down
2 changes: 1 addition & 1 deletion docs/usage/INVENTORY_SYNC.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ against a [InventoryEntryDraft](https://docs.commercetools.com/http-api-projects
references are matched by their `key`s. Therefore, in order for the sync to resolve the actual ids of those references,
their `key`s has to be supplied.

- When syncing from a source commercetools project, you can use [`mapToInventoryEntryDrafts`](https://commercetools.github.io/commercetools-sync-java/v/2.0.0/com/commercetools/sync/inventories/utils/InventoryReferenceResolutionUtils.html#mapToInventoryEntryDrafts-java.util.List-)
- When syncing from a source commercetools project, you can use [`mapToInventoryEntryDrafts`](https://commercetools.github.io/commercetools-sync-java/v/2.1.0/com/commercetools/sync/inventories/utils/InventoryReferenceResolutionUtils.html#mapToInventoryEntryDrafts-java.util.List-)
method that that maps from a `InventoryEntry` to `InventoryEntryDraft` in order to make them ready for reference resolution by the sync:
````java
final List<InventoryEntryDraft> inventoryEntryDrafts = InventoryReferenceResolutionUtils.mapToInventoryEntryDrafts(inventoryEntries);
Expand Down
5 changes: 2 additions & 3 deletions docs/usage/PRODUCT_SYNC.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,15 @@ all the variants in the target project are expected to have the `sku` fields set
of the product also have prices, where each price also has some references including a reference to the `Type` of its
custom fields and a reference to a `channel`. All these referenced resources are matched by their `key`s. Therefore, in
order for the sync to resolve the actual ids of those references, those `key`s have to be supplied in the following way:

- When syncing from a source commercetools project, you can use [`mapToProductDrafts`](https://commercetools.github.io/commercetools-sync-java/v/2.0.0/com/commercetools/sync/products/utils/ProductReferenceResolutionUtils.html#mapToProductDrafts-java.util.List-)
- When syncing from a source commercetools project, you can use [`mapToProductDrafts`](https://commercetools.github.io/commercetools-sync-java/v/2.1.0/com/commercetools/sync/products/utils/ProductReferenceResolutionUtils.html#mapToProductDrafts-java.util.List-)
method that maps from a `Product` to `ProductDraft` in order to make them ready for reference resolution by the sync:
````java
final List<ProductDraft> productDrafts = ProductReferenceResolutionUtils.mapToProductDrafts(products);
````
> Note: Some references in the product like `state`, `customerGroup` of prices, and variant attributes with type `reference` do not support the `ResourceIdentifier` yet,
for those references you need to provide the `key` value on the `id` field of the reference. This means that calling `getId()` on the
reference would return its `key`.
>

4. Create a `sphereClient` [as described here](IMPORTANT_USAGE_TIPS.md#sphereclient-creation).

5. After the `sphereClient` is set up, a `ProductSyncOptions` should be built as follows:
Expand Down
Loading

0 comments on commit 4c5234c

Please sign in to comment.