Podio API — обновление ссылки на контакт

#java #podio

#java #podio

Вопрос:

У меня есть приложение Podio, которое обрабатывает учетные записи клиентов, где у каждого клиента есть менеджер (контакт podio). Все эти данные находятся в другой системе, и мы находимся в процессе написания программного обеспечения для их синхронизации. Программное обеспечение написано на Java и использует podio api

В настоящее время я могу читать и устанавливать все типы полей, за исключением поля менеджера (контакт).

Это то, что получается из API при загрузке клиента:

Полученное поле

Но как вы собираетесь обновлять ссылку менеджера на что-то другое?

Я пробовал что-то вроде:

 List<Map<String, Object>> list = new ArrayList<>();
HashMap<String, Object> values = new HashMap<>();
list.add(values);

HashMap<String, Object> value = new HashMap<>();
values.put("value", value);

value.put("mail", "employee@email.com");
//also tried user_id and profile_id
  

а затем с помощью

 ItemAPI.updateItemFieldValues(int itemId, int fieldId,
        List<Map<String, Object>> values, boolean silent, boolean hook)
  

чтобы обновить поле. Где я ошибаюсь?

Ответ №1:

Настройка:
приложение Podio с полем «Контакт», настроенное на «Участники рабочей области / общий доступ при добавлении нового адреса» (например, этот снимок экрана)
Настройки общего доступа к контактам

Рабочий пример на Ruby

   item_id = <some_item_id>
  field_id = <contact_field_numeric_id>
  field_external_id = <contact_field_external_id>

  # set to empty value by field_id
  empty_value = []
  Podio::ItemField.update(item_id, field_id, single_value)

  # set to single value by field_id
  single_value = [{'value' => {'type' => 'user', 'id' => <Podio user id>}}]
  Podio::ItemField.update(item_id, field_id, single_value)

  # set to multiple values by external field id
  multi_values = [{'value' => {'type' => 'user', 'id' => <Podio user id>}}, 
                  {'value' => {'type' => 'user', 'id' => <another Podio user id>}}]
  Podio::ItemField.update(item_id, field_external_id, multi_values)
  

Установит для этого поля контакта новое значение single_value или список новых значений multiple_value . Кроме того, я бы настоятельно рекомендовал еще раз подумать о вашей архитектуре данных. Возможно, было бы намного более масштабируемо работать с типом приложения Podio Contact и использовать Reference field вместо использования Contact field .

Пример Java:

 HashMap<String, Object> pair = new HashMap<>();
HashMap<String, Object> value = new HashMap<>();
List<Map<String, Object>> list = new ArrayList<>();

// set to empty value
list = new ArrayList<>();
ItemAPI.updateItemFieldValues(<itemId>, <fieldId>, list, <silent>, <hook>)

// set to real value
value = new HashMap<>();
list = new ArrayList<>();
pair.put("id", <user_id>);
pair.put("type", "user");
value.put("value", pair);
list.add(value);
ItemAPI.updateItemFieldValues(<itemId>, <fieldId>, list, <silent>, <hook>)
  

Комментарии:

1. Я реализовал ваш пример Java, и он работает с типом: пользователь и набором идентификаторов. В нашем случае настройка не требуется, поскольку все менеджеры являются членами рабочей области. В качестве дополнительной информации. Можете ли вы добавить, как установить manager=null?

2. использование пустой карты пар не работает (по крайней мере, в java): APIException [status= Неверный запрос, error= invalid_value, description= Недопустимое значение {} (объект): должно быть целым или должно быть целым или отсутствуют обязательные свойства: [‘type’, ‘id’], параметры= null]. И добавление типа и нулевого идентификатора тоже.