2016-10-28 4 views
0

В одном из моих правил Esper мне нужно получить конкретное (настраиваемое) свойство управляемого объекта или значение по умолчанию, если оно не существует. Поэтому я решил сделать это в выражении js. Я начал так:Свойства объекта доступа Cumulocity и функции Cumulocity

create expression Number js:getTripId(deviceId) [ 
    function getTripIdorOrDefault(managedObject) { 
     // ... 
    } 

    getTripIdorOrDefault(findManagedObjectById(deviceId)); 
]; 

При тестировании, однако, вывод говорит мне, что «findManagedObjectById не определен». Так и быть, я переписать мою функцию так, что она принимает managedObject прямо и продолжать, как это:

create expression Number js:getTripId(managedObject) [ 
    function getTripIdorOrDefault(managedObject) { 
     // treatments for nulls... 
     return managedObject.tripId; 
    } 

    getTripIdorOrDefault(managedObject); 
]; 

То, что я называю с:

getTripId(findManagedObjectById(getString(e.source, "value"))) 

Однако я получаю нулевое значение. Когда я вывожу управляемый объект, я вижу, что это не так. Затем я попытался получить доступ к другим свойствам по умолчанию, таким как текст, время и тип, а также получить нуль.

Поэтому я попытался использовать скобку нотации myObject['myProperty'], но Cumulocity не позволит мне сохранить мой модуль (неправильный синтаксис). Я попытался использовать Object.keys(managedObject), чтобы проверить доступные свойства моего объекта, но, похоже, версия javascript старше 1.8.5. А функции Cumulocity getString, getNumber и т. Д. Недоступны в javascript, насколько я понимаю.

Итак, как я могу манипулировать объектами своего устройства в выражениях javascript?

ответ

0

Вы не можете использовать такие функции, как findManagedObjectById, изнутри выражения, потому что в основном вы покидаете контекст esper для выполнения выражения, а затем функция больше не известна.

Если вы хотите изменить объект в выражении, я бы запросил его раньше, а затем передал ему выражение в параметрах.

Это может быть, что при переходе его в выражение становится карты (не уверен, о том, что необходимость испытать себя)

GetString (e.Source, «значение») не выглядит правильно. Что такое e. Если e - EventCreated, то вы должны использовать e.event.source.value без какой-либо функции

+0

getTripId (findManagedObjectById (getString (e.source, «value»))) работает правильно, я могу отображать мой управляемый объект в своей функции и Я вижу поля, к которым я хочу получить доступ, но я не могу получить к ним доступ. –

Смежные вопросы