+ Antworten
Ergebnis 1 bis 3 von 3

Thema: Redmine Java Api

  1. #1
    User Kilobyte Themenstarter

    Registriert seit
    01.08.2013
    Ort
    Mitten in Deutschland
    Fachbeiträge
    122
    Genannt
    2 Post(s)
    Blog-Einträge
    1
    Hallo, ich arbeite momentan mit der Redmine Java Api. Das funktioniert soweit auch ganz gut, allerdings habe ich bei einer Sache Probleme, bei Abfragen über Rest müssen im Fall von gefillterten Abfragen Parameter übergeben werden.
    Beispiel:
    Java Code:
    1.  
    2. ...
    3. final ConcurrentMap<String, String> parameters = new ConcurrentHashMap<>();
    4.             parameters.put("f[]", "status_id");
    5.             parameters.put("op[status_id]", "o");
    6.             parameters.put("op[subject]", "~");
    7.             parameters.put("set_filter", "1");
    8.             issues = mainController.getIssueManager().getIssues(parameters);
    9. ...

    Die Vorgabe des Frameworks sieht eine Map vor allerdings müssen manche Parameter scheinbar mehrfach übergeben werden(Siehe f[]).
    Redmine Java Api-firebug.png
    Vielleicht kann mir ein Web- oder Rubyprogrammierer sogar einen Typ dazu geben wie dies mit einer Map zu bewerkstelligen ist. Redmine ist in Rails umgesetzt. Vielleicht lassen sich die Parameter auch mit einem Namen aber in einem Container übergeben. Meine Versuche waren bisher erfolglos. Freue mich auf eure Vorschläge!
    Geändert von spellsleeper (21.08.2015 um 10:30 Uhr)

  2. #2
    Global Moderator Viertel Gigabyte Avatar von SlaterB
    Registriert seit
    06.08.2008
    Fachbeiträge
    2.701
    Genannt
    277 Post(s)
    habe als sportliche Aufgabe ohne Kenntnis/ Verwendung der API ein wenig danach gesucht und das hier gefunden:
    https://github.com/taskadapter/redmi...-api/issues/12

    wobei der angesprochende zu ändernde API-Code für die erste Variante nicht mehr in RedmineManager steht (in der Github-Version), sondern in
    https://github.com/taskadapter/redmi...Converter.java

    immerhin eine passende kleine klare Klasse, die man austauschen könnte, falls Quellcode verfügbar und zu verwenden
    oder neue Jar zu bauen akzeptabel und machbar,

    ------

    aber erstaunlich dass so ein anscheinend überschaubares und zentrales Konzept noch nicht direkt gelöst ist,
    braucht denn niemand bei Verwendung dieser Java-API 2x f[] ?..

    oder die zweite Variante aus dem Link funktioniert, mehrere Parameter mit | verbinden
    Hansa wird Meister

  3. #3
    User Kilobyte Themenstarter

    Registriert seit
    01.08.2013
    Ort
    Mitten in Deutschland
    Fachbeiträge
    122
    Genannt
    2 Post(s)
    Blog-Einträge
    1
    Ich habe eine Löung gefunden, musste mich allerdings im Ordner internal bedienen. Allerdings habe ich das Framework nur erweitert nicht umgeändert wie manche es vorgeschlagen haben.
    Die Lösung ist auch auf Github.

    Hier noch einmal auf deutsch:

    Als erstes erzeuge ich eine Instanz von der Klasse Transport in meinem Controller:


    Java Code:
    1. ...
    2. private void createTransport(){
    3. transport=new Transport(new URIConfigurator(config.getRedmineUri(),
    4. config.getRedmineApiAccessKey()),new DefaultHttpClient());
    5. }
    6. ...


    Dann benutze ich ein Set mit NameValuePairs um die Abfrage Parameter zu setzen:

    Java Code:
    1. ...
    2. Set\<NameValuePair> params =new HashSet<>();
    3. params.add(new BasicNameValuePair("f[]", "assigned_to_id"));
    4. params.add(new BasicNameValuePair("f[]", "status_id"));
    5. params.add(new BasicNameValuePair("op[status_id]", "o"));
    6. params.add(new BasicNameValuePair("op[subject]", "~"));
    7. params.add(new BasicNameValuePair("op[assigned_to_id]", "="));
    8. params.add(new BasicNameValuePair("v[assigned_to_id][]","me"));
    9. params.add(new BasicNameValuePair("set_filter", "1"));
    10. List issues = null;
    11. try {
    12. // final MultiValueMap parameters = new MultiValueMap();
    13. // parameters.put("f[]", "assigned_to_id|status_id");
    14. // parameters.put("op[status_id]", "o");
    15. // parameters.put("op[subject]", "~");
    16. // parameters.put("op[assigned_to_id]", "=");
    17. // parameters.put("v[assigned_to_id][]","me");
    18. // parameters.put("set_filter", "1");
    19. // issues = mainController.getIssueManager().getIssues(parameters);
    20. issues=mainController.getTransport().getObjectsList(Issue.class, params);
    21. } catch (RedmineException ex) {
    22. ...
    Es funktioniert, ist zwar ein wenig dirty weil ich auf die Klassen aus internal zugreifen muss, ist aber meiner Meinung nach deutlich sauberer als den Code des Frameworks zu ändern. Die meisten im obigen Link aufgeführten Lösungsansätze habe ich ausprobiert und Sie funktionieren leider nicht.

+ Antworten Thema als "offen" markieren

Direkt antworten Direkt antworten

Nenne die Wurzel aus Einhundertvierundvierzig (Zahl eingeben) !

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. RedMine Plugin erzeugen
    Von spellsleeper im Forum Software
    Antworten: 3
    Letzter Beitrag: 18.02.2015, 04:02
  2. RedMine Plugin erzeugen -Links
    Von spellsleeper im Forum Scriptsprachen
    Antworten: 0
    Letzter Beitrag: 23.10.2014, 11:54

Stichworte

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •