При обновлении элемента отношение приложения должно быть целым числом - PullRequest
0 голосов
/ 01 июня 2019

Я использую dotnet Podio API для получения и обновления элементов. Всякий раз, когда я пытаюсь обновить элемент, используя функцию ItemService.UpdateItem (), которая имеет отношение к приложению, я получаю исключение в виде:

Invalid value {"files": [], "sharefile_vault_url": null, "title": "10", "app_item_id": 1, "app": {"status": "active", "sharefile_vault_url": null, ... "sharefile_vault_folder_id": null, "revision": 0} (object): must be integer

Это происходит, даже если отношение к приложению не доступно и не изменено.

Кажется, что при обновлении элемента отношением, отношение должно быть ссылочным идентификатором (или некоторым целым числом) и не может быть самим объектом, на который ссылаются, хотя это обеспечивается при получении элемента. Установка отношения к целочисленному идентификатору не помогает, и выдается то же исключение.

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

Я пытался воссоздать приложения в Podio, чтобы посмотреть, есть ли какие-то присущие им ошибки в структурах приложений.

Я пытался обновить отношение элемента к идентификатору отношения, на которое он уже ссылался перед обновлением элемента.

Я пытался использовать функцию ItemService.UpdateItemFieldValues ​​(). Здесь исключение не выдается, но элемент также не обновляется (Как поля могут быть указаны в этой функции?).

string clientId = "client";
string clientSecret = "secret";
int employeeAppId = 123456789;

var podio = new Podio(clientId, clientSecret);
podio.AuthenticateWithPassword("username", "password");

string employeeQrIdExternalId = "id";
Dictionary<string, object> filter = new Dictionary<string, object>
{
   {employeeQrIdExternalId, "1234"}
};
var filteredItems = podio.ItemService.FilterItems(appId: employeeAppId, filters: filter);
Item employee = filteredItems.Items.First();

podio.ItemService.UpdateItem(employee); // exception is thrown

1 Ответ

1 голос
/ 02 июня 2019

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

Например:

    string clientId = "client";
    string clientSecret = "secret";
    int employeeAppId = 123456789;

    var podio = new Podio(clientId, clientSecret);
    podio.AuthenticateWithPassword("username", "password");

    string employeeQrIdExternalId = "id";
    Dictionary<string, object> filter = new Dictionary<string, object>
    {
       {employeeQrIdExternalId, "1234"}
    };
    var filteredItems = podio.ItemService.FilterItems(appId: employeeAppId, filters: filter);
    Item employeeFilteredItem = filteredItems.Items.First();
    var employee= new Item();
    employee.ItemId = employeeFilteredItem.ItemId;

//Set your fields here, updating app reference field will be like below 
    var appReferenceField = employee.Field<AppItemField>("app-reference");
appReferenceField.ItemIds = new List<int>
{
    1234, 4568 // item ids of referenced app items
};
    podio.ItemService.UpdateItem(employee);

Как настроить поля можно найти здесь Как обновить поля

...