As part of the Geotab system settings, you can define a list of properties that could be applied to Assets (additional metadata fields that is stored with the Asset). How can I get these Asset Property fields and values using the SDK?

As part of the Geotab system settings, you can define a list of properties that could be applied to Assets (additional metadata fields that is stored with the Asset). How can I get these Asset Property fields and values using the SDK?

You need to be logged in to reply to this post and participate in the Geotab Community discussions.
編集済み DarenPorter-1148による
In the C# NuGet SDK, any Entity that can have custom properties will implement the `ICustomizable<T>` generic interface, which exposes a `CustomProperties` property:
// Device is one of the Entities that implements ICustomizable<T>
// Assuming you've retrieved your populated device...
List<PropertyValue<Device>> customProperties = device.CustomProperties;
// Accessing keys (names) and values
var firstProp = customProperties[0];
var propName = firstProp.Property.Name;
var propValue = firstProp.Value;
編集済み DarenPorter-1148による
In the C# NuGet SDK, any Entity that can have custom properties will implement the `ICustomizable<T>` generic interface, which exposes a `CustomProperties` property:
// Device is one of the Entities that implements ICustomizable<T>
// Assuming you've retrieved your populated device...
List<PropertyValue<Device>> customProperties = device.CustomProperties;
// Accessing keys (names) and values
var firstProp = customProperties[0];
var propName = firstProp.Property.Name;
var propValue = firstProp.Value;
Hey @DarenPorter-1148
Thanks for your feedback. Using your input I was able to get to the Asset Custom Properties. For anyone seeing this post in the future, here is a sample that you can run in the API Runner | MyGeotab | Geotab Developers:
var desiredDevices = ['b1'];
api.call("Get",{
"typeName":"Device",
}, function(devices) {
devices.forEach(function(device){
if(desiredDevices.indexOf(device.id) > -1){
console.log(`Custom Properties for device ${device.serialNumber}`);
device.customProperties.forEach(function(customProp){
//console.log(JSON.stringify(customProp));
var propName = String(customProp.property.name);
var propValue = customProp.value
console.log(`${propName}: ${propValue}`);
});
}
});
}, function(e) {
console.error("Failed:", e);
});
PC
No problem, I'm glad it helped!
Not directly related to your question, but for potential future readers - if you know you're only interested in one device (like in the example above), it's much more efficient to include a search in the Get call so only that Device gets returned:
api.call("Get", {
"typeName": "Device",
"search": {
"id": "b1"
}
}, function(devices) {
let device = devices[0];
console.log(`Custom Properties for device ${device.serialNumber}`);
device.customProperties.forEach(customProp => {
let propName = String(customProp.property.name);
let propValue = customProp.value;
console.log('${propName}: ${propValue}');
});
}, function(e) {
console.error("Failed:", e);
});
PS - There is no way of getting these fields in a standard Geotab report (the Excel version)??
You could do it with a customized report. You can view this document to find the headers for these custom properties you would need to add to the report: [PUB] MyGeotab Reports Columns/Headers