W tym dokumencie znajdziesz ważne pola pojazdów, które możesz aktualizować podczas tworzenia pojazdów i zarządzania nimi.
|
Pełną listę pól dotyczących pojazdów znajdziesz w tych artykułach: |
Pole atrybutów pojazdu
Użyj pola attributes
pojazd, aby utworzyć niestandardowe kryteria, które umożliwią konsumentom lub operatorom flot znajdowanie pojazdów we flocie na podstawie szerszego zakresu kryteriów wyszukiwania. Zwiększa to możliwości aplikacji w zakresie lepszego dopasowywania pojazdów niż w przypadku kryteriów wyszukiwania opartych wyłącznie na innych polach pojazdu. Każdy pojazd może mieć maksymalnie 100 atrybutów, a każdy z nich musi mieć unikalny klucz. Wartości mogą być ciągami tekstowymi, wartościami logicznymi lub liczbami.
Możesz na przykład zadeklarować atrybut niestandardowy o nazwie zone, aby odróżnić strefę miasta, w której działają Twoje pojazdy dostawcze. Aby przedstawić różne strefy, możesz użyć wartości ciągu tekstowego, takich jak 1B
, 2C
i 3A
. Następnie możesz użyć filtra w śledzeniu floty, aby wyświetlać operatorowi odpowiedzialnemu za daną strefę tylko pojazdy pracujące w tej strefie.
Wartości atrybutów niestandardowych nie muszą się jednak wykluczać. Możesz użyć kryteriów takich jak available-at-night i has-refrigeration. Każdy z nich może być osobnym atrybutem niestandardowym, który używa wartości logicznych. Do danego pojazdu można przypisać wszystkie 3 atrybuty niestandardowe wraz z atrybutem niestandardowym zone ustawionym na odpowiednią wartość ciągu znaków.
Aktualizowanie atrybutów pojazdu
Każdy klucz attributes
może mieć tylko jedną wartość na pojazd. Atrybuty niestandardowe pojazdu deklarujesz za pomocą attributes
w masce pola, a następnie podajesz wartości zgodnie z poniższą metodą.
Ten interfejs API UpdateDeliveryVehicle
nie umożliwia aktualizowania tylko jednego atrybutu. Jeśli używasz tej metody, każde użycie pola attributes
w masce pola powoduje ponowne zadeklarowanie całego zestawu atrybutów pojazdu. Spowoduje to zastąpienie każdego wcześniej istniejącego atrybutu, który nie został wyraźnie uwzględniony w masce pola. Jeśli używasz tej metody do deklarowania nowego atrybutu niestandardowego, musisz ponownie zadeklarować każdy atrybut niestandardowy, który ma być zachowany w przypadku pojazdu. Jeśli w masce pola wykluczysz attributes
, ta metoda pozostawi istniejące atrybuty niestandardowe zdefiniowane wcześniej dla pojazdu.
Jeśli w masce pola użyjesz wartości attributes
, ale nie ustawisz wartości, będzie to równoznaczne z usunięciem z pojazdu wszystkich atrybutów niestandardowych.
Przykład aktualizacji pól pojazdu
W tej sekcji dowiesz się, jak aktualizować pola pojazdu za pomocą elementu UpdateDeliveryVehicleRequest
, który zawiera element update_mask
wskazujący pola do zaktualizowania. Szczegółowe informacje znajdziesz w dokumentacji dotyczącej buforów protokołu w sekcji maski pól.
Aktualizacje pól innych niż last_location
wymagają uprawnień administratora Fleet Engine Delivery.
Przykład: ustawianie atrybutu niestandardowego
W tym przykładzie określono nowy atrybut: zone
. Jak wspomnieliśmy wcześniej w sekcji Aktualizowanie atrybutów pojazdu, aktualizacja pola attributes
za pomocą tej metody wymaga wskazania wszystkich atrybutów niestandardowych, które chcesz zachować.
Dlatego w przykładzie zapisano wartość available-at-night
, aby zapobiec jej zastąpieniu podczas operacji aktualizacji, która określa pole attributes
.
Zapoznaj się z dokumentacją providers.deliveryVehicles.patch.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle myDeliveryVehicle = DeliveryVehicle.newBuilder()
.addAllAttributes(ImmutableList.of(
DeliveryVehicleAttribute.newBuilder().setKey("zone").setValue("1B").build(),
DeliveryVehicleAttribute.newBuilder().setKey("available-at-night").setValue("true").build()))
.build();
// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
UpdateDeliveryVehicleRequest.newBuilder() // No need for the header
.setName(vehicleName)
.setDeliveryVehicle(myDeliveryVehicle)
.setUpdateMask(FieldMask.newBuilder()
.addPaths("attributes"))
.build();
try {
DeliveryVehicle updatedDeliveryVehicle =
deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=attributes" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"attributes": [
{"key": "zone", "value": "1B"},
{"key": "available-at-night", "value": "true"}
]
}
EOM