NGSI обновляет атрибуты сложных объектов в Wirecloud

Можно ли обновить дочерний атрибут с помощью функции updateAttributes () из Wirecloud NGSI API?

Например, координата (entity.location.coords.coordinates [0] = - 2.000000) в этой части объекта.

   "attrNames": [ "A1", "A2", "position" ],
   "creDate": 1389376081,
   "modDate": 1389376244,
   "location": {
       "attrName": "position",
       "coords": {
           "type": "Point",
           "coordinates": [ -3.691944, 40.418889 ]
       }

ИЗМЕНЕНО

Мой собственный ответ: это возможно, если передать объект как значение атрибута.

ngsi.updateAttributes([
                    {
                        'entity': {'id': "entity-id"},
                        'attributes':[{ 
                          "name":"location","contextValue": {
                               "attrName": "position",
                               "coords": {
                                     "type": "Point",
                                     "coordinates": [ -2.000000, 40.418889 ]
                               }
                          } 
                        }]  
                    }
                ], {
                    onSuccess: onUpdateAttributesSuccess,
                    onFailure: onUpdateAttributesFail
                }
            );

Однако Wirecloud использует NGSI API v1, поэтому все атрибуты обрабатываются как строки, когда они отправляются / принимаются в / из Orion.

Дополнительная информация: http://fiware-orion.readthedocs.io/en/master/user/structured_attribute_valued/


person Daniel Rodriguez    schedule 25.01.2017    source источник


Ответы (1)


В настоящее время невозможно внести частичные изменения в атрибут структуры с помощью API NGSI WireCloud. Более того, насколько мне известно, API NGSI не предоставляет прямого способа частичного обновления структурированных атрибутов (ни v1, ни v2).

Однако v1 API NGSI поддерживает значения структурированных атрибутов. Таким образом, вы можете использовать метод updateContext для обновления только одного атрибута (например, атрибута coordinates). Единственное, что следует учитывать, это то, что вам нужно будет указать полное значение, поэтому, если вы хотите внести частичное изменение, вы должны прочитать значение, внести частичное изменение и обновить его.

Фактически, у вас это почти работает. Вам нужно только исправить способ передачи атрибутов для обновления, вы должны заключить их в массив:

ngsi.updateAttributes([{
        "entity": {"id": "entity-id"},
        "attributes": [
            {
                "name": "location",
                "contextValue": {
                    "attrName": "position",
                    "coords": {
                        "type": "Point",
                        "coordinates": [-2.000000, 40.418889]
                    }
                }
            }
        ]
    }],
    {
        onSuccess: onUpdateAttributesSuccess,
        onFailure: onUpdateAttributesFail
    }
);
person Álvaro Arranz    schedule 07.02.2017