|
In diesem Dokument werden wichtige Fahrzeugfelder beschrieben, die Sie beim Erstellen und Verwalten von Fahrzeugen aktualisieren können.
|
Eine vollständige Liste der Fahrzeugfelder finden Sie hier: |
Feld für Fahrzeugattribute
Mit dem Fahrzeugfeld attributes können Sie benutzerdefinierte Kriterien erstellen, damit Ihre Nutzer oder Flottenbetreiber Fahrzeuge in Ihrer Flotte anhand einer größeren Auswahl an Suchkriterien finden können. Dadurch werden die Funktionen Ihrer Apps verbessert, um bessere Fahrzeugübereinstimmungen zu erzielen, als wenn Sie Suchkriterien verwenden würden, die nur auf anderen Fahrzeugfeldern basieren. Jedes Fahrzeug kann maximal 100 Attribute haben, und jedes muss einen eindeutigen Schlüssel haben. Werte können Strings, boolesche Werte oder Zahlen sein.
Sie können beispielsweise ein benutzerdefiniertes Attribut namens zone deklarieren, um zu unterscheiden, in welcher Zone der Stadt Ihre Lieferfahrzeuge unterwegs sind. Sie würden Stringwerte wie die folgenden verwenden, um verschiedene Zonen darzustellen: 1B, 2C und 3A. Anschließend können Sie in der Flottenverfolgung einen Filter verwenden, um dem für diese Zone zuständigen Betreiber nur Fahrzeuge anzuzeigen, die in einer bestimmten Zone im Einsatz sind.
Benutzerdefinierte Attributwerte müssen sich jedoch nicht gegenseitig ausschließen. Sie können Kriterien wie available-at-night und has-refrigeration verwenden. Jedes dieser Attribute könnte ein separates benutzerdefiniertes Attribut sein, das boolesche Werte verwendet. Einem bestimmten Fahrzeug können alle drei benutzerdefinierten Attribute zugewiesen werden, wobei das benutzerdefinierte Attribut zone auf den entsprechenden Stringwert festgelegt ist.
Fahrzeugattribute aktualisieren
Jeder attributes-Schlüssel kann nur einen Wert pro Fahrzeug haben. Sie deklarieren benutzerdefinierte Fahrzeugattribute mit attributes in der Feldmaske und geben dann Werte basierend auf der folgenden Methode an.
Diese UpdateDeliveryVehicle API lässt nicht zu, dass nur ein einzelnes Attribut aktualisiert wird. Wenn Sie diese Methode verwenden, führt jede Verwendung des Felds attributes in der Feldmaske dazu, dass der gesamte Satz von Fahrzeugattributen für das Fahrzeug neu deklariert wird. Dadurch werden alle bereits vorhandenen Attribute überschrieben, die nicht explizit in der Feldmaske enthalten sind. Wenn Sie mit dieser Methode ein neues benutzerdefiniertes Attribut deklarieren, müssen Sie auch jedes benutzerdefinierte Attribut, das das Fahrzeug beibehalten soll, noch einmal deklarieren. Wenn Sie attributes in der Feldmaske ausschließen, bleiben die vorhandenen benutzerdefinierten Attribute für das Fahrzeug unverändert.
Wenn Sie attributes in der Feldmaske verwenden, aber keine Werte festlegen, entspricht dies dem Entfernen aller benutzerdefinierten Attribute aus dem Fahrzeug.
Beispiel für das Aktualisieren von Fahrzeugfeldern
In diesem Abschnitt wird beschrieben, wie Sie Fahrzeugfelder mit UpdateDeliveryVehicleRequest aktualisieren. Dazu gehört auch eine update_mask, die angibt, welche Felder aktualisiert werden sollen. Weitere Informationen finden Sie in der Dokumentation zu Protokollzwischenspeichern unter Feldmasken.
Für Aktualisierungen anderer Felder als last_location sind Fleet Engine Delivery Admin-Berechtigungen erforderlich.
Beispiel: Benutzerdefiniertes Attribut festlegen
In diesem Beispiel wird ein neues Attribut angegeben: zone. Wie bereits unter Fahrzeugattribute aktualisieren erwähnt, müssen Sie beim Aktualisieren des Felds attributes mit diesem Ansatz alle benutzerdefinierten Attribute angeben, die Sie beibehalten möchten.
Daher wird im Beispiel ein available-at-night-Wert geschrieben, um zu verhindern, dass er während eines Aktualisierungsvorgangs, bei dem das Feld attributes angegeben wird, überschrieben wird.
Weitere Informationen finden Sie in der Referenz zu 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