#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]. И добавление типа и нулевого идентификатора тоже.