SOAP в 4.0.14

Обсуждаем TrackStudio по-русски

Re: SOAP в 4.0.14

Postby admin » Wed Sep 28, 2011 2:18 pm

Передавать так параметры - дело хитрое, попробуйте лучше getTaskListByQuery :)
Maxim Kramarenko (mailto: maximkr@trackstudio.com)
TrackStudio - Hierarchical Bug & Issue Tracking Software
http://www.trackstudio.com
admin
Site Admin
 
Posts: 7454
Joined: Thu Jan 01, 1970 3:00 am
Location: Smolensk, Russia

Re: SOAP в 4.0.14

Postby xpepex » Wed Sep 28, 2011 4:36 pm

admin wrote:Передавать так параметры - дело хитрое, попробуйте лучше getTaskListByQuery :)

Попробовал, спасибо :)
Но тут такое дело - ограниченность привязки к таску делает меня грустить, т.к. вместо того, чтобы сделать
Code: Select all
SELECT   distinct(m.id)
FROM   com.trackstudio.model.Task AS t,   com.trackstudio.model.Message AS m
WHERE  m.task = t.id and   t.submitdate > '2011-09-01 00:00:00' and   m.time > '2011-09-27 00:00:00' and  m.submitter = 'd0c4748b2f33447f012f486767681258'

(вываливается java.lang.NullPointerException. Джойны тоже пытался делать, и тоже ничего хорошего из этого не вышло), - приходится выполнять
Code: Select all
SELECT   distinct(t.id)
FROM   com.trackstudio.model.Task AS t,   com.trackstudio.model.Message AS m
WHERE  m.task = t.id and   t.submitdate > '2011-09-01 00:00:00' and   m.time > '2011-09-27 00:00:00' and  m.submitter = 'd0c4748b2f33447f012f486767681258'

а потом еще у каждого таска запрашивать месседжи отдельно. И под нагрузкой (даже с учетом кеширования, собственно) это будет ощутимо проседать - пользователей много, и все активно пишут в трекере :)

Может есть секретный способ через класс таска (или любой другой) получать именно сообщения?
А если нет - то поделитесь, как правильно выставлять через соап параметры фильтра. Можно в личку :)
xpepex
 
Posts: 8
Joined: Mon Sep 12, 2011 3:45 pm

Re: SOAP в 4.0.14

Postby admin » Thu Sep 29, 2011 3:27 pm

Не нашел разницы между 2 примерами запросов: который работает и который не работает.

В примере создания нужного фильтра ничего секретного нет, просто готового примера у нас нет и писать сейчас не хочется (очень много доделок/исправлений по 4.0.14), тем более что скрипты в стандартный саппорт не входят :)
Maxim Kramarenko (mailto: maximkr@trackstudio.com)
TrackStudio - Hierarchical Bug & Issue Tracking Software
http://www.trackstudio.com
admin
Site Admin
 
Posts: 7454
Joined: Thu Jan 01, 1970 3:00 am
Location: Smolensk, Russia

Re: SOAP в 4.0.14

Postby xpepex » Wed Nov 30, 2011 10:53 am

Всем опять привет :)

Есть ряд пользователей типа:
А1 (id='d0c4748b2f4d1d12012f5968856e0e69', managerId='d0c47cbf264624ae01264b851a07062f')
А2 (id='d0c4748b316e424e0131708dff6d0273', managerId='d0c47cbf264624ae01264b851a07062f')
B1 (id='d0c47cbf264624ae01264b851a07062f', managerId='d0c47cbf264624ae01264b64a22e0588')
C1 (id='d0c47cbf264624ae01264b64a22e0588', managerId='d0c47cbf264624ae01264b41f0a0044e')
Соответственно все юзеры А имеет менеджера B, а B - С.

Пытаемся получить всех "подчиненных" для менеджеров. В классе User есть следующие методы:
*getChildrenUsers - работает у меня.
*getUserManagerChildren (описан в онлайн-доке, но в запрашиваемом wdsl кстати его описание не отдается) - работает у меня.
*getPossibleManagerList - выдает AccessDeniedException (нехватка прав). Ок, не страшно - название метода все равно доверия не внушало :)
*getUserzAndChildrenList (тоже есть в доке, но отсутствует в wdsl) - выдает эксепшен о неподдерживаемом методе, тоже не беда.

Проблема №1: судя по доке, и для getChildrenUsers, и для getUserManagerChildren должен возвращаться массив объектов типа UserBean, мне же все время прилетает ровно 1 элемент/юзер (смотрел tcpdump-ом ответы от сервера). В чем может быть дело, как итерировать подобный результат, если нужно получить полный список?
Проблема №2: При вызове getChildrenUsers с айдишником юзера B1 получаем SoapFault exception: [S:Receiver] java.lang.NullPointerException (хотя ожидался как минимум юзер А1), а вот при вызове с айди от юзера C1 - получаем В1 (тут всё ок).
Если будет понятнее - то ловим эксепшен при передаче параметром айдишника любого менеджера, в подчинении которого нет других менеджеров со своими подчиненными, а только рядовые юзеры.

И еще вопрос, некритичный, но интересно:
Получаем SoapFault exception: [S:Receiver] java.lang.NullPointerException при попытке вызова User->findByLogin с логином того юзера, от имени которого запрос и посылается - так и задумано?
xpepex
 
Posts: 8
Joined: Mon Sep 12, 2011 3:45 pm

Re: SOAP в 4.0.14

Postby Petr » Wed Nov 30, 2011 3:39 pm

на основании java
Code: Select all
import com.trackstudio.soap.service.user.User;
import com.trackstudio.soap.service.user.UserBean;
import com.trackstudio.soap.service.user.UserService;

import javax.xml.namespace.QName;
import java.net.URL;
import java.util.List;

public class Client {
    public static void main(String[] args) {
        String url = "http://localhost:8080/services/";
        System.out.println("START");
        try {
            UserService service = new UserService(new URL(url + User.class.getSimpleName() + "?wsdl"), new QName("http://user.service.soap.trackstudio.com/", "UserService"));
            User user = service.getUserPort();
            String sessionId = user.authenticate("root", "root");
            String managerId = "4028808a192e43e801192e48f4fd0002";
            List<UserBean> users = user.getChildrenUsers(sessionId, managerId);
            printList(users, "getChildrenUsers");
            users = user.getPossibleManagerList(sessionId, managerId);
            printList(users, "getPossibleManagerList");
            users = user.getUserManagerChildren(sessionId, managerId);
            printList(users, "getUserManagerChildren");
            users = user.getUserAndChildrenList(sessionId, managerId);
            printList(users, "getUserAndChildrenList");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void printList(List<UserBean> users, String nameMethod) {
        System.out.println(nameMethod + "Total : " + users.size());
        for (UserBean userBean : users ) {
            System.out.println("User " + userBean.getLogin() + " id : " + userBean.getId());
        }
    }
}

Code: Select all
START
getChildrenUsersTotal : 1
User newuser id : 808080803373aa2f013373e9cbf3008e
getPossibleManagerListTotal : 6
User analyst id : 4028808a1934933b011934c2e27703d4
User developer id : 4028808a1934933b011934c336e003d5
User writer id : 4028808a1934933b011934c65e400486
User tester id : 4028808a1934933b011934ca3b3404af
User anonymous id : ff8080812c34f3f1012c34fbce9300ee
User root id : 1
getUserManagerChildrenTotal : 0
getUserAndChildrenListTotal : 2
User newuser id : 808080803373aa2f013373e9cbf3008e
User manager id : 4028808a192e43e801192e48f4fd0002


getPossibleManagerListTotal - это пользователи на одном уровне с пользователь по которому делают поиск.
getChildrenUsers - у меня все ок. я только для явы могу проверить.
TS Support
email: parsentev@yandex.ru
Petr
 
Posts: 1317
Joined: Wed Aug 12, 2009 4:38 pm

Previous

Return to TrackStudio Support [Russian]

Who is online

Users browsing this forum: No registered users and 0 guests

cron