2015-02-04 5 views
1

Я пытаюсь получить типа полей для каждого атрибута моих объектов. Запрос Orion и получение объектов - это не проблема (я делаю это через виджет источника NGSI), но способ получения этих параметров.Запрос OCB из JavaScript (WireCloud)

От NGSI Источник (обычно suscription к примеру Orion):

var doInitialSubscription = function doInitialSubscription() { 

    this.subscriptionId = null; 

    this.ngsi_server = MashupPlatform.prefs.get('ngsi_server'); 
    this.ngsi_proxy = MashupPlatform.prefs.get('ngsi_proxy'); 
    this.connection = new NGSI.Connection(this.ngsi_server, { 
     ngsi_proxy_url: this.ngsi_proxy 
    }); 

    var types = MashupPlatform.prefs.get('ngsi_entities').split(new RegExp(',\\s*')); 
    var entityIdList = []; 
    var entityId; 
    for (var i = 0; i < types.length; i++) { 
     entityId = { 
      id: '.*', 
      type: types[i], 
      isPattern: true 
     }; 
     entityIdList.push(entityId); 
    } 
    var attributeList = null; 
    var duration = 'PT3H'; 
    var throttling = null; 
    var notifyConditions = [{ 
     'type': 'ONCHANGE', 
     'condValues': MashupPlatform.prefs.get('ngsi_update_attributes').split(new RegExp(',\\s*')) 
    }]; 
    var options = { 
     flat: true, 
     onNotify: handlerReceiveEntity.bind(this), 
     onSuccess: function (data) { 
      this.subscriptionId = data.subscriptionId; 
      this.refresh_interval = setInterval(refreshNGSISubscription.bind(this), 1000 * 60 * 60 * 2); // each 2 hours 
      window.addEventListener("beforeunload", function() { 
       this.connection.cancelSubscription(this.subscriptionId); 
      }.bind(this)); 
     }.bind(this) 
    }; 
    this.connection.createSubscription(entityIdList, attributeList, duration, throttling, notifyConditions, options); 
}; 
var handlerReceiveEntity = function handlerReceiveEntity(data) { 
    for (var entityId in data.elements) { 
     MashupPlatform.wiring.pushEvent("entityOutput", JSON.stringify(data.elements[entityId])); 
    } 
}; 

Для MyWidget:

MashupPlatform.wiring.registerCallback("entityInput", function (entityString) { 
    var entity; 
    entity = JSON.parse(entityString); 
    id = entity.id; 
    type = entity.type; 
    for(var attr in entity){ 
     attribute = entity[attr]; 
    } 

Я пытаюсь кодировать что-то подобное, чтобы получить значение типа полей. Как я могу это сделать? (Я уверен, что это довольно просто ...)

+0

Не могли бы вы изменить свой вопрос, чтобы добавить содержимое переменной 'entityString', чтобы лучше разобраться в этом случае? – fgalan

+0

@fgalan Я нашел причину, это содержание: '{" id ":" 387243781 "," type ":" MyApp "," BAT ":" 65 "," value1 ":" 351 "," value2 " : «0.033», «value3»: «0.039», «value4»: «37.375476», «value5»: «- 5.989363», «date»: «23/11/2014 13:26:27», «address», : «Parque de María Luisa 41013 Sevilla»} '. Я получаю только поля имен и значений объектов. Я также присоединился к тому, как я склоняюсь к изменениям через Орион. Я делаю что-то неправильно? –

ответ

2

Вы не можете использовать текущую реализацию исходного источника NGSI (не менее v3.0.2), если хотите получить метаданные типа атрибутов по мере использования источника NGSI опции flat (отбрасывая эту информацию).

Мы изучаем обновление этого оператора, чтобы разрешить создание подписки без использования опции flat. Основная проблема заключается в том, что другие компоненты ожидают, что данные, предоставленные этим оператором, будут предоставлены в формате, возвращенном при использовании опции flat. Я уточню этот ответ, проанализировав проблему.

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

  • Нет связанных вопросов^_^