2016-10-10 48 views
0

我有一个Podio应用程序,用于处理每个客户都有经理(podio联系人)的客户帐户。所有这些数据都驻留在另一个系统中,我们正在编写软件来同步这两个系统。该软件是用java编写的,使用podio apiPodio API - 更新联系人参考

我目前能够读取和设置所有类型的字段,除了管理员字段(联系人)。

这是从API收到当客户被加载:

Received field

但你如何去了解更新管理器参考别的东西吗?

我已经试过类似:

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", "[email protected]"); 
//also tried user_id and profile_id 

,然后使用

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

更新字段。我哪里错了?

回答

1

设置:
波迪奥应用与 '联系人' 字段,用于 '工作空间成员/股当新地址添加'(这样screnshot)
Contact sharing settings

工作在例如红宝石

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字段而不是使用Contact字段可能会更具可扩展性。

的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>) 
+0

我实现你的java例子,并与工作类型:用户和ID集。 由于所有管理员都是工作区成员,因此在我们的案例中设置不是必需的。 作为奖励信息。你可以添加如何设置管理=空? – lcersly

+0

使用空对映射不起作用(在java中至少):APIException [状态=错误请求,错误=无效值,描述=无效值{}(对象):必须是整数或者必须是整数或缺少必需属性:['type','id'],parameters = null]。并且不添加类型和空id。 – lcersly

+0

请尝试空列表,这适用于Ruby –