public interface IInventoryService extends IInterface
Intent serviceIntent = new Intent(InventoryIntent.ACTION_INVENTORY_SERVICE_V3);
serviceIntent.putExtra(Intents.EXTRA_ACCOUNT, CloverAccount.getAccount(context));
serviceIntent.putExtra(Intents.EXTRA_VERSION, 3);
context.bindService(serviceIntent);
For more information about bound services, refer to
the Android documentation:
Bound Services
.
You may also interact with this service through the
InventoryConnector
class, which handles binding and
asynchronous invocation of service methods.
Prefer the InventoryContract
over the getter methods in this class, the contract offers
better performance and is not subject to large inventory limitations that can cause the getter
methods here to fail.
This service is backed by a local database which is synced to cloud. Thus changes made by calling methods here will be reflected on all of a merchant's devices and on the web.
Typically a merchant customizes their inventory either by importing data from a spreadsheet or manually entering their inventory data on the web or through the Clover Inventory app.
Invoking methods through this service generally requires INVENTORY_R and/or INVENTORY_W permission. See Clover app permissions
The basic unit of a merchant's inventory is the Item
. Items could be goods such as shoes
and socks, or services such as a haircut. Merchants that simply take payments on their devices
may have no inventory items at all.
A Discount
may be associated with an entire Order subtotal or an individual Item.
Discounts are named and given either a percentage value or fixed amount. Discounts appear as
choices in Clover Register and are printed on bills.
A TaxRate
is used to add taxes to an Order when computing the total. Default tax rates
are applied to all items that do not override the defaults. An Item may override the default tax
rates and be associated with specific (or no) tax rates.
Categories alter the user interface of the Clover Register app. Items appear in the Clover Register app within categories they are members of. Items may be associated with no, one or many categories. Items are displayed in Clover Register in the order in which they are added to a category. Categories are displayed in Register using the sort order value for each category. Categories are designed only to be use for anything other modifying the user experience of Register, for a more generic organization mechanism see the section on Tags.
Modifiers are used by Clover Register to make adjustments to associated items. A modifier may or may not increase the price of an item. For example a Burger item may be associated with the Condiment modifier group which contains mayo (no charge) and avocado (additional $2.00). A modifier group may specify that an exact number of modifiers be selected when an item is selected in Clover Register. Modifiers are printed on bills and order receipts.
Item Groups help merchants create and manage large groups of related items. This is described to merchants as an 'Item with variants'. For example a merchants may sell a t-shirt that is available in numerous various sizes and colors. Each of the t-shirt variations is an item and belongs to the t-shirt item group. Once an item group is created it appears in Register as a single button and tapping it brings up a choice of which variation is to be sold. Before adding items to an item group you first need to create the item group, then create attributes ('size', 'color') and then options for each attribute ('small', 'blue'), then associate options with an item and then associate items with an item group. The name of an item which is a member of an item group is automatically generated by the Clover server as a combination of the item group name and the name of all the options associated with that item. It cannot be changed. If the item group name is changed, or if an option name is changed, then the item names will be automatically regenerated. An item can only be a member of a single item group and once it is part of an item group it can never be removed or moved to another item group, it can only be deleted.
Similarly to how they are described by wikipedia, tags are an informal way of establishing a relationship. Tags currently may be associated with items and printers. When an tag is associated with both an item and a printer that establishes a special relationship that results in those items being printed out on the associated printer when printing an order. Other than that special case there is no effect when an item is associated with a tag. Developers may use tags to establish a relationship meaningful for their needs.
InventoryConnector
Modifier and Type | Interface and Description |
---|---|
static class |
IInventoryService.Default
Default implementation for IInventoryService.
|
static class |
IInventoryService.Stub
Local-side IPC implementation stub class.
|
Modifier and Type | Method and Description |
---|---|
void |
addItemToCategory(String itemId,
String categoryId,
ResultStatus resultStatus)
Adds an item to a category.
|
void |
assignCategoriesToItem(String itemId,
List<String> categoryIds,
ResultStatus resultStatus)
Associates categories with an item.
|
void |
assignItemsToTag(String tagId,
List<String> items,
ResultStatus resultStatus)
Assign a list of items (identified by their unique ID) to a tag.
|
void |
assignModifierGroupToItem(String modifierGroupId,
String itemId,
ResultStatus resultStatus)
Associates a modifier group with an item.
|
void |
assignOptionsToItem(String itemId,
List<String> optionIds,
ResultStatus resultStatus)
Associate the given options with an item.
|
void |
assignTagsToItem(String itemId,
List<String> tags,
ResultStatus resultStatus)
Assign a list of tags (identified by their unique ID) to an item.
|
void |
assignTagsToPrinter(String printerUid,
List<String> tags,
ResultStatus resultStatus)
Assign a list of tags (identified by their unique ID) to a printer.
|
void |
assignTaxRatesToItem(String itemId,
List<String> taxRates,
ResultStatus resultStatus)
Assign a list of tax rates (identified by their unique ID) to an item.
|
void |
bulkAssignColorToItems(List<String> itemIds,
String colorHexCode,
ResultStatus resultStatus)
Assign given color to list of items.
|
Attribute |
createAttribute(Attribute attribute,
ResultStatus resultStatus)
Creates a new attribute.
|
Category |
createCategory(Category category,
ResultStatus resultStatus)
Adds a new category.
|
Discount |
createDiscount(Discount discount,
ResultStatus resultStatus)
Adds a new discount.
|
Item |
createItem(Item item,
ResultStatus resultStatus)
Inserts a new item into the database.
|
ItemGroup |
createItemGroup(ItemGroup itemGroup,
ResultStatus resultStatus)
Creates a new item group.
|
Modifier |
createModifier(String modifierGroupId,
Modifier modifier,
ResultStatus resultStatus)
Adds a new modifier.
|
ModifierGroup |
createModifierGroup(ModifierGroup group,
ResultStatus resultStatus)
Adds a new modifier group.
|
Option |
createOption(Option option,
ResultStatus resultStatus)
Creates a new option.
|
Tag |
createTag(Tag tag,
ResultStatus resultStatus)
Creates a new tag.
|
TaxRate |
createTaxRate(TaxRate taxRate,
ResultStatus resultStatus)
Creates a new tax rate.
|
void |
deleteAttribute(String attributeId,
ResultStatus resultStatus)
Deletes an attribute, deletes all the options in that attribute and removes all the associations between those options and items.
|
void |
deleteCategories(List<String> categoryIds,
ResultStatus resultStatus)
Bulk delete categories.
|
void |
deleteCategory(String categoryId,
ResultStatus resultStatus)
Deletes an existing category.
|
void |
deleteDiscount(String discountId,
ResultStatus resultStatus)
Deletes a discount.
|
void |
deleteItem(String itemId,
ResultStatus resultStatus)
Deletes an existing item.
|
void |
deleteItemGroup(String itemGroupId,
ResultStatus resultStatus)
Deletes an item group, but does not delete the items in a group, they become items without an item group.
|
void |
deleteItems(List<String> itemIds,
ResultStatus resultStatus)
Bulk delete items.
|
void |
deleteModifier(String modifierId,
ResultStatus resultStatus)
Deletes an existing modifier.
|
void |
deleteModifierGroup(String groupId,
ResultStatus resultStatus)
Deletes an existing modifier group.
|
void |
deleteModifierGroups(List<String> groupIds,
ResultStatus resultStatus)
Bulk delete modifier groups.
|
void |
deleteOption(String optionId,
ResultStatus resultStatus)
Deletes an option and removes all the associations between that option and items.
|
void |
deleteTag(String tagId,
ResultStatus resultStatus)
Deletes a tag.
|
void |
deleteTags(List<String> tagIds,
ResultStatus resultStatus)
Bulk delete tags.
|
void |
deleteTaxRate(String taxRateId,
ResultStatus resultStatus)
Deletes a tax rate.
|
Attribute |
getAttribute(String attributeId,
ResultStatus resultStatus)
Gets a single attribute identified by its unique ID.
|
List<Attribute> |
getAttributes(ResultStatus resultStatus)
Gets all defined attributes for the merchant.
|
List<Category> |
getCategories(ResultStatus resultStatus)
Retrieve the list of categories.
|
Discount |
getDiscount(String discountId,
ResultStatus resultStatus)
Gets a single discount identified by its unique ID.
|
List<Discount> |
getDiscounts(ResultStatus resultStatus)
Retrieve the list of discounts.
|
Item |
getItem(String itemId,
ResultStatus resultStatus)
Retrieve an individual item using the item ID.
|
ItemGroup |
getItemGroup(String itemGroupId,
ResultStatus resultStatus)
Gets a single item group identified by its unique ID.
|
List<String> |
getItemIds(ResultStatus resultStatus)
Deprecated.
See note on {@link #getItems(ResultStatus).
|
List<Item> |
getItems(ResultStatus resultStatus)
Deprecated.
Many merchants have a large inventory of items that cannot be retrieved in a
single shot due to binder and memory limits. As a precaution always use the
InventoryContract to retrieve the entire set of inventory
items.
This method will return a maximum of 500 items before returning a fault. |
List<Item> |
getItemsForModifierGroup(String modifierGroupId,
ResultStatus resultStatus)
Retrieve list of items that use the specified Modifier Group
|
List<Item> |
getItemsWithCategories(ResultStatus resultStatus)
Deprecated.
See note on {@link #getItems(ResultStatus).
|
Item |
getItemWithCategories(String itemId,
ResultStatus resultStatus)
Same as
getItem(String, ResultStatus) but also includes the list of categories to
which the item belongs. |
List<ModifierGroup> |
getModifierGroups(ResultStatus resultStatus)
Retrieve the list of all modifier groups.
|
List<ModifierGroup> |
getModifierGroupsForItem(String itemId,
ResultStatus resultStatus)
Retrieve the list of modifier groups for a particular item.
|
List<Modifier> |
getModifiers(String modifierGroupId,
ResultStatus resultStatus)
Retrieve the list of modifiers belonging to a modifier group.
|
Option |
getOption(String optionId,
ResultStatus resultStatus)
Gets a single option identified by its unique ID.
|
List<Option> |
getOptions(ResultStatus resultStatus)
Gets all defined options for the merchant.
|
List<Option> |
getOptionsForItem(String itemId,
ResultStatus resultStatus)
Retrieve the list of options for an item.
|
Tag |
getTag(String tagId,
ResultStatus resultStatus)
Gets a single tag identified by its unique ID.
|
List<Tag> |
getTags(ResultStatus resultStatus)
Gets all defined tags for the merchant.
|
List<Tag> |
getTagsForItem(String itemId,
ResultStatus resultStatus)
Retrieve the list of tags for an item.
|
List<Tag> |
getTagsForPrinter(String printerMac,
ResultStatus resultStatus)
Retrieve the list of tags for a printer.
|
TaxRate |
getTaxRate(String taxRateId,
ResultStatus resultStatus)
Gets a single tax rate identified by its unique ID.
|
List<TaxRate> |
getTaxRates(ResultStatus resultStatus)
Gets all defined tax rates for the merchant.
|
List<TaxRate> |
getTaxRatesExcludedForItem(String orderTypeId,
String itemId,
ResultStatus resultStatus)
Retrieve the list of tax rates excluded for an item, given the order-type-id
|
List<TaxRate> |
getTaxRatesForItem(String itemId,
ResultStatus resultStatus)
Retrieve the list of tax rates for an item.
|
void |
moveItemInCategoryLayout(String itemId,
String categoryId,
int direction,
ResultStatus resultStatus)
Moves an item's position within an existing category.
|
void |
removeCategoriesFromItem(String itemId,
List<String> categoryIds,
ResultStatus resultStatus)
Removes categories association from an item.
|
void |
removeItemFromCategory(String itemId,
String categoryId,
ResultStatus resultStatus)
Removes an item from a category.
|
void |
removeItemsFromTag(String tagId,
List<String> items,
ResultStatus resultStatus)
Remove a list of items (identified by their unique ID) from a tag.
|
void |
removeItemStock(String itemId,
ResultStatus resultStatus)
Remove stock count for an item.
|
void |
removeModifierGroupFromItem(String modifierGroupId,
String itemId,
ResultStatus resultStatus)
Removes a modifier group association from an item.
|
void |
removeOptionsFromItem(String itemId,
List<String> optionIds,
ResultStatus resultStatus)
Remove the association between the given options and an item.
|
void |
removeTagsFromItem(String itemId,
List<String> tags,
ResultStatus resultStatus)
Remove a list of tags (identified by their unique ID) from an item.
|
void |
removeTagsFromPrinter(String printerUid,
List<String> tags,
ResultStatus resultStatus)
Remove a list of tags (identified by their unique ID) from a printer.
|
void |
removeTaxRatesFromItem(String itemId,
List<String> taxRates,
ResultStatus resultStatus)
Remove a list of tax rates (identified by their unique ID) from an item.
|
void |
updateAttribute(Attribute attribute,
ResultStatus resultStatus)
Updates an existing attribute.
|
void |
updateCategory(Category category,
ResultStatus resultStatus)
Updates an existing category.
|
void |
updateCategoryItems(String categoryId,
List<String> itemIds,
ResultStatus resultStatus)
Updates all items of a category.
|
void |
updateCategorySortOrders(List<Category> categories,
ResultStatus resultStatus)
Update category sort orders.
|
void |
updateDiscount(Discount discount,
ResultStatus resultStatus)
Updates an existing discount.
|
void |
updateItem(Item item,
ResultStatus resultStatus)
Updates an existing item.
|
void |
updateItemGroup(ItemGroup itemGroup,
ResultStatus resultStatus)
Updates an existing item group.
|
void |
updateItemStock(String itemId,
long stockCount,
ResultStatus resultStatus)
Update stock count for an item.
|
void |
updateItemStockQuantity(String itemId,
double quantity,
ResultStatus resultStatus)
Update stock for an item.
|
void |
updateModifier(Modifier modifier,
ResultStatus resultStatus)
Updates an existing modifier.
|
void |
updateModifierGroup(ModifierGroup group,
ResultStatus resultStatus)
Updates an existing modifier group.
|
void |
updateModifierGroupSortOrders(List<ModifierGroup> groups,
ResultStatus resultStatus)
Updates the sort orders for a list of modifier groups.
|
void |
updateModifierSortOrder(String modifierGroupId,
List<String> modifierIds,
ResultStatus resultStatus)
Update modifier sort order for a modifier group.
|
void |
updateOption(Option option,
ResultStatus resultStatus)
Updates an existing option.
|
void |
updateTag(Tag tag,
ResultStatus resultStatus)
Updates an existing tag.
|
void |
updateTaxRate(TaxRate taxRate,
ResultStatus resultStatus)
Updates an existing tax rate.
|
asBinder
List<Item> getItems(ResultStatus resultStatus) throws RemoteException
InventoryContract
to retrieve the entire set of inventory
items.
This method will return a maximum of 500 items before returning a fault.RemoteException
List<Item> getItemsWithCategories(ResultStatus resultStatus) throws RemoteException
RemoteException
List<String> getItemIds(ResultStatus resultStatus) throws RemoteException
RemoteException
Item getItem(String itemId, ResultStatus resultStatus) throws RemoteException
RemoteException
Item getItemWithCategories(String itemId, ResultStatus resultStatus) throws RemoteException
getItem(String, ResultStatus)
but also includes the list of categories to
which the item belongs.RemoteException
Item createItem(Item item, ResultStatus resultStatus) throws RemoteException
RemoteException
void updateItem(Item item, ResultStatus resultStatus) throws RemoteException
RemoteException
void deleteItem(String itemId, ResultStatus resultStatus) throws RemoteException
RemoteException
List<Category> getCategories(ResultStatus resultStatus) throws RemoteException
Prefer to use the InventoryContract
over this method since this method will fail for
large result sets that exceed binder limitations.
RemoteException
Category createCategory(Category category, ResultStatus resultStatus) throws RemoteException
RemoteException
void updateCategory(Category category, ResultStatus resultStatus) throws RemoteException
RemoteException
void deleteCategory(String categoryId, ResultStatus resultStatus) throws RemoteException
RemoteException
void addItemToCategory(String itemId, String categoryId, ResultStatus resultStatus) throws RemoteException
RemoteException
void removeItemFromCategory(String itemId, String categoryId, ResultStatus resultStatus) throws RemoteException
RemoteException
void moveItemInCategoryLayout(String itemId, String categoryId, int direction, ResultStatus resultStatus) throws RemoteException
RemoteException
List<ModifierGroup> getModifierGroups(ResultStatus resultStatus) throws RemoteException
Prefer to use the InventoryContract
over this method since this method will fail for
very large result sets that exceed binder limitations.
Note that the returned ModifierGroup instances will not contain all the individual modifiers,
invoke #getModifiers(String)
to retrieve the individual modifiers for each particular
ModifierGroup.
RemoteException
ModifierGroup createModifierGroup(ModifierGroup group, ResultStatus resultStatus) throws RemoteException
RemoteException
void updateModifierGroup(ModifierGroup group, ResultStatus resultStatus) throws RemoteException
RemoteException
void deleteModifierGroup(String groupId, ResultStatus resultStatus) throws RemoteException
RemoteException
void assignModifierGroupToItem(String modifierGroupId, String itemId, ResultStatus resultStatus) throws RemoteException
RemoteException
void removeModifierGroupFromItem(String modifierGroupId, String itemId, ResultStatus resultStatus) throws RemoteException
RemoteException
List<Modifier> getModifiers(String modifierGroupId, ResultStatus resultStatus) throws RemoteException
RemoteException
Modifier createModifier(String modifierGroupId, Modifier modifier, ResultStatus resultStatus) throws RemoteException
RemoteException
void updateModifier(Modifier modifier, ResultStatus resultStatus) throws RemoteException
RemoteException
void deleteModifier(String modifierId, ResultStatus resultStatus) throws RemoteException
RemoteException
List<TaxRate> getTaxRatesForItem(String itemId, ResultStatus resultStatus) throws RemoteException
RemoteException
void assignTaxRatesToItem(String itemId, List<String> taxRates, ResultStatus resultStatus) throws RemoteException
RemoteException
void removeTaxRatesFromItem(String itemId, List<String> taxRates, ResultStatus resultStatus) throws RemoteException
RemoteException
List<TaxRate> getTaxRates(ResultStatus resultStatus) throws RemoteException
RemoteException
TaxRate getTaxRate(String taxRateId, ResultStatus resultStatus) throws RemoteException
RemoteException
TaxRate createTaxRate(TaxRate taxRate, ResultStatus resultStatus) throws RemoteException
RemoteException
void updateTaxRate(TaxRate taxRate, ResultStatus resultStatus) throws RemoteException
RemoteException
void deleteTaxRate(String taxRateId, ResultStatus resultStatus) throws RemoteException
RemoteException
List<Discount> getDiscounts(ResultStatus resultStatus) throws RemoteException
RemoteException
Discount getDiscount(String discountId, ResultStatus resultStatus) throws RemoteException
RemoteException
Discount createDiscount(Discount discount, ResultStatus resultStatus) throws RemoteException
RemoteException
void updateDiscount(Discount discount, ResultStatus resultStatus) throws RemoteException
RemoteException
void deleteDiscount(String discountId, ResultStatus resultStatus) throws RemoteException
RemoteException
List<ModifierGroup> getModifierGroupsForItem(String itemId, ResultStatus resultStatus) throws RemoteException
RemoteException
List<Tag> getTags(ResultStatus resultStatus) throws RemoteException
RemoteException
Tag getTag(String tagId, ResultStatus resultStatus) throws RemoteException
RemoteException
Tag createTag(Tag tag, ResultStatus resultStatus) throws RemoteException
RemoteException
void updateTag(Tag tag, ResultStatus resultStatus) throws RemoteException
RemoteException
void deleteTag(String tagId, ResultStatus resultStatus) throws RemoteException
RemoteException
List<Tag> getTagsForItem(String itemId, ResultStatus resultStatus) throws RemoteException
RemoteException
void assignTagsToItem(String itemId, List<String> tags, ResultStatus resultStatus) throws RemoteException
RemoteException
void removeTagsFromItem(String itemId, List<String> tags, ResultStatus resultStatus) throws RemoteException
RemoteException
List<Tag> getTagsForPrinter(String printerMac, ResultStatus resultStatus) throws RemoteException
RemoteException
void assignTagsToPrinter(String printerUid, List<String> tags, ResultStatus resultStatus) throws RemoteException
RemoteException
void removeTagsFromPrinter(String printerUid, List<String> tags, ResultStatus resultStatus) throws RemoteException
RemoteException
void assignItemsToTag(String tagId, List<String> items, ResultStatus resultStatus) throws RemoteException
RemoteException
void removeItemsFromTag(String tagId, List<String> items, ResultStatus resultStatus) throws RemoteException
RemoteException
void updateModifierSortOrder(String modifierGroupId, List<String> modifierIds, ResultStatus resultStatus) throws RemoteException
RemoteException
void updateItemStock(String itemId, long stockCount, ResultStatus resultStatus) throws RemoteException
RemoteException
void removeItemStock(String itemId, ResultStatus resultStatus) throws RemoteException
RemoteException
List<Attribute> getAttributes(ResultStatus resultStatus) throws RemoteException
Prefer to use the InventoryContract
over this method.
This method will return a maximum of 500 values before returning a fault.
Note that the returned Attribute instances will not contain all the individual options. To obtain the options for a particular attribute use the contract, for example:
try (Cursor c = getContentResolver()
.query(InventoryContract.Option.contentForItemsUriWithAccount(acct),
null, InventoryContract.Option.ATTRIBUTE_UUID + " = ?",
new String[] { attribute.getId() }, null)) {
// each row in the cursor is an option for the given attribute
}
RemoteException
Attribute getAttribute(String attributeId, ResultStatus resultStatus) throws RemoteException
RemoteException
Attribute createAttribute(Attribute attribute, ResultStatus resultStatus) throws RemoteException
RemoteException
void updateAttribute(Attribute attribute, ResultStatus resultStatus) throws RemoteException
RemoteException
void deleteAttribute(String attributeId, ResultStatus resultStatus) throws RemoteException
RemoteException
List<Option> getOptions(ResultStatus resultStatus) throws RemoteException
Prefer to use the InventoryContract
over this method.
This method will return a maximum of 500 values before returning a fault.
RemoteException
Option getOption(String optionId, ResultStatus resultStatus) throws RemoteException
RemoteException
Option createOption(Option option, ResultStatus resultStatus) throws RemoteException
RemoteException
void updateOption(Option option, ResultStatus resultStatus) throws RemoteException
RemoteException
void deleteOption(String optionId, ResultStatus resultStatus) throws RemoteException
RemoteException
List<Option> getOptionsForItem(String itemId, ResultStatus resultStatus) throws RemoteException
RemoteException
void assignOptionsToItem(String itemId, List<String> optionIds, ResultStatus resultStatus) throws RemoteException
RemoteException
void removeOptionsFromItem(String itemId, List<String> optionIds, ResultStatus resultStatus) throws RemoteException
RemoteException
ItemGroup getItemGroup(String itemGroupId, ResultStatus resultStatus) throws RemoteException
RemoteException
ItemGroup createItemGroup(ItemGroup itemGroup, ResultStatus resultStatus) throws RemoteException
RemoteException
void updateItemGroup(ItemGroup itemGroup, ResultStatus resultStatus) throws RemoteException
RemoteException
void deleteItemGroup(String itemGroupId, ResultStatus resultStatus) throws RemoteException
RemoteException
void updateItemStockQuantity(String itemId, double quantity, ResultStatus resultStatus) throws RemoteException
RemoteException
void updateModifierGroupSortOrders(List<ModifierGroup> groups, ResultStatus resultStatus) throws RemoteException
RemoteException
List<TaxRate> getTaxRatesExcludedForItem(String orderTypeId, String itemId, ResultStatus resultStatus) throws RemoteException
RemoteException
void bulkAssignColorToItems(List<String> itemIds, String colorHexCode, ResultStatus resultStatus) throws RemoteException
RemoteException
void updateCategorySortOrders(List<Category> categories, ResultStatus resultStatus) throws RemoteException
RemoteException
void updateCategoryItems(String categoryId, List<String> itemIds, ResultStatus resultStatus) throws RemoteException
RemoteException
void deleteItems(List<String> itemIds, ResultStatus resultStatus) throws RemoteException
RemoteException
void deleteCategories(List<String> categoryIds, ResultStatus resultStatus) throws RemoteException
RemoteException
void deleteModifierGroups(List<String> groupIds, ResultStatus resultStatus) throws RemoteException
RemoteException
void deleteTags(List<String> tagIds, ResultStatus resultStatus) throws RemoteException
RemoteException
List<Item> getItemsForModifierGroup(String modifierGroupId, ResultStatus resultStatus) throws RemoteException
RemoteException
void assignCategoriesToItem(String itemId, List<String> categoryIds, ResultStatus resultStatus) throws RemoteException
RemoteException
void removeCategoriesFromItem(String itemId, List<String> categoryIds, ResultStatus resultStatus) throws RemoteException
RemoteException