2016-06-24 6 views
1

В нашей компании мы создали пользовательское приложение Issues. Помимо использования этого приложения в веб-интерфейсе, мы также хотим иметь возможность автоматически изменять состояние проблемы (новое, подтвержденное, тестовое, разрешенное ...) с помощью git commit hooks. Основы работают нормально (т.е. изменяют состояние, добавляют заметки, ...), но мы также хотим изменить ответственность за текущий элемент конкретному пользователю. В этом специальном случае это создатель, если этот элемент.Получение профиля для пользователя

Моя первая попытка была следующая:

var appid = 1234; var itemid = 1; 
var item = podio.ItemService.GetItemByAppItemId(appid, itemid); 
var update = new Item {ItemId = item.ItemId}; 

var creator = item.CreatedBy.Id; 
var resp = update.Field<ContactItemField>("responsibility"); 
resp.ContactIds = new List<int>{creator.Value}; 

//change some other fields as well 

podio.ItemService.UpdateItem(update); 

Это бросает «Объект не найден» исключение, потому что в resp.ContactIds один не должен установить UserId но ProfileId.

Затем я попытался получить ProfileId из пункта-творца через

podio.ContactService.GetUserContactField(creator.Value, "profile_id"); 

, но это также бросает исключение «(Аутентификация в приложении не допускается для данного метода»).

Как я могу получить соответствующий идентификатор профиля для пользователя, когда я использую аутентификацию в качестве приложения?

+0

Я знаю, что человек нашел решение. Но на всякий случай, если кто-либо получит исключение «Аутентификация, поскольку приложение не разрешено для этого метода» при доступе к 'podio.ContactService.GetUserContactField (creator.Value,« profile_id »);' будет потому, что мы не сможем использовать проверенный приложением клиент для получения контакта информации, поскольку это не приложение специфично, вместо этого мы должны будем использовать клиент, прошедший аутентификацию, для работы над этим кодом. –

+0

Ну, это именно то, что говорит исключение. Так в чем смысл вашего комментария? Использование аутентификации в моем случае было невозможно в моем случае, потому что вызов был частью автоматизированного рабочего процесса. – derpirscher

ответ

1

ОК, я нашел обходное решение для этого, не уверен, если это возможно для других сценариев, но оно работает для текущего случая.

Вместо использования интерфейса C# для установки ContactIds для ContactItemField, я устанавливаю значения json напрямую.

var appid = 1234; var itemid = 1; 
var item = podio.ItemService.GetItemByAppItemId(appid, itemid); 
var update = new Item {ItemId = item.ItemId}; 

var creator = item.CreatedBy.Id; 
var resp = update.Field<ContactItemField>("responsibility"); 
resp.ContactIds = new List<int>(); // set to an empty list, so that resp.Values is initialized to an empty JArray 

var u = new JObject { {"value", new JObject { {"type" , "user" }, {"id", creator } } } }; 
responsibleField.Values.Add(u); //add the new user to the Values of the field 

//change some other fields as well 
podio.ItemService.UpdateItem(update); 

И если я установил value с типом user я могу использовать известную userid и API-интерфейс на сервере заботится о поиске.

Смежные вопросы