2016-06-24 5 views
1

In unserer Firma haben wir eine benutzerdefinierte Issues App erstellt. Zusätzlich zur Verwendung dieser App in der Weboberfläche möchten wir auch den Status eines Problems (neu, bestätigt, getestet, aufgelöst, ...) automatisch über Git-Commit-Hooks ändern können. Die Grundlagen funktionieren gut (dh Status ändern, Notizen hinzufügen ...), aber wir möchten auch die Verantwortung für das aktuelle Element auf einen bestimmten Benutzer ändern. In diesem speziellen Fall ist es der Ersteller dieses Elements.Abrufen der Profilid für eine Benutzer-ID

Mein erster Versuch war die folgende:

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); 

Dies löst eine Ausnahme „Objekt nicht gefunden“, denn in der resp.ContactIds darf man nicht die UserId gesetzt, aber die ProfileId.

Ich habe dann versucht über

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

die ProfileId der item-Schöpfer zu erhalten, aber dies führt auch eine Ausnahme „(Authentifizierung als App für diese Methode nicht erlaubt“).

Wie kann ich eine geeignete Profil-ID für den Benutzer erhalten, wenn ich die Authentifizierung als App verwende?

+0

Ich weiß, dass die Person die Lösung gefunden hat. Aber nur für den Fall, dass jemand die Ausnahme "Authentifizierung als App ist für diese Methode nicht erlaubt" beim Zugriff auf "podio.ContactService.GetUserContactField (creator.Value," profile_id ");" ist, weil wir den App-authentifizierten Client nicht verwenden können, um Kontakt zu erhalten Informationen, da es nicht App-spezifisch ist. Stattdessen müssen wir den authentifizierten Client des Benutzers verwenden, damit der obige Code funktioniert. –

+0

Nun, genau das sagt die Ausnahme. Also, was ist der Sinn Ihres Kommentars? Die Verwendung von Benutzerauthentifizierung war in meinem Fall nicht möglich, da der Aufruf Teil eines automatisierten Workflows war. – derpirscher

Antwort

1

OK, ich habe eine Abhilfe dafür gefunden, nicht sicher, ob dies für andere Szenarien möglich ist, aber es funktioniert für den aktuellen Fall.

Anstatt die C# -Schnittstelle für die ContactIds für die ContactItemField zu verwenden, setze ich die JSON-Werte direkt.

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); 

Und wenn ich die value mit Typ user einstellen kann ich den bekannten userid und die API auf dem Server verwenden, kümmert sich um den Nachschlag.