AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.04.2007, 15:54   #1  
xgmann is offline
xgmann
Участник
 
15 / 10 (1) +
Регистрация: 04.04.2007
Ком- коннектор, активные пользователи
Доброе всем время,
хотелось бы посредством com- интерфейса получить список активных пользователей,
подключаюсь через двухзвенку прекрасно и даже на класс не ругается, но дальше затык, говорит метода getAllOnlineUserInfo нет...
Чувствую, что пишу неправильно, подскажите, пожалуйста.

Set ax = CreateObject("AxaptaCOMConnector.Axapta2")
ax.Logon2 "pupkin", "qwerty", "", "", "", "", "конф-ия"
Set Class = ax.CreateObject("SysUsersOnline")
Class.Call "getAllOnlineUserInfo"
WScript.Sleep 60000
ax.Logoff
Set ax = Nothing


На выходе:
AxaptaCOMConnector.Axapta.1: 15:39:26 Ошибка времени выполнения: SysUsersOnline Объект не имеет метода getAllOnlineUserInfo'.

Трассировка стека
\Classes\SysUsersOnline\getAllOnlineUserInfo


Прошу не судить строго, взялся за это в первый раз.
Старый 04.04.2007, 16:03   #2  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
getAllOnlineUserInfo - это статический метод.
Используйте IAxapta::CallStaticClassMethod

HRESULT CallStaticClassMethodEx(
[in] BSTR bstrClass,
[in] BSTR bstrMethod,
[in] IAxaptaParameterList *pParamList,
[out, retval] VARIANT *pResult
);
Старый 04.04.2007, 16:23   #3  
xgmann is offline
xgmann
Участник
 
15 / 10 (1) +
Регистрация: 04.04.2007
Set ax = CreateObject("AxaptaCOMConnector.Axapta2")
ax.Logon2 "pupkin", "qwerty", "", "", "", "", "кон-ия"
WScript.Echo ax.CallStaticClassMethod("SysUsersOnline", "getAllOnlineUserInfo")
WScript.Sleep 60000
ax.Logoff
Set ax = Nothing

Несовпадение типов... Беда.
Старый 04.04.2007, 16:50   #4  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Вы уверены, что WScript.Echo умеет показывать аксаптовские контейнеры?
Старый 04.04.2007, 16:56   #5  
xgmann is offline
xgmann
Участник
 
15 / 10 (1) +
Регистрация: 04.04.2007
Конечно же нет, это так, глупость.
Но что с этим делать, с контейнером то?

Set ax = CreateObject("AxaptaCOMConnector.Axapta2")
ax.Logon2 "pupkin", "qwerty", "", "", "", "", "кон-ия"
Call ax.CallStaticClassMethod("SysUsersOnline", "getAllOnlineUserInfo")
WScript.Sleep 60000
ax.Logoff
Set ax = Nothing
Старый 04.04.2007, 16:59   #6  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Напишите свой собственный стат. метод в Аксапте, который будет возвращать обычную строку, взяв за основу getAllOnlineUserInfo. 10 минут - и проблема решена.
Старый 04.04.2007, 17:16   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Не знаю, как WSScript, но под Axapta'ой это будет выглядеть так
X++:
{
    Com ax = new Com("AxaptaCOMConnector.Axapta2");
    Com cont;
    Com cont1;
    int i;
    int cnt;
    ComVariant var;
    str s;
    ;
    ax.Logon2("user", "password", "", "", "Server", "Instance", "Configuration");
    var = ax.CallStaticClassMethod("SysUsersOnline", "getAllOnlineUserInfo");
    if (var)
    {
        cont = Com::createFromVariant(var);
        var = cont.peek(2);
        cnt = var.int();
        if (cnt > 0)
        {
            var = cont.peek(1);
            cont = Com::createFromVariant(var);
            if (cont)
            {
                for (i=1;i<=cont.length();i++)
                {
                    var = cont.peek(i);
                    cont1 = Com::createFromVariant(var);
                    if (cont1)
                    {
                        if (cont1.length()>1)
                        {
                            var = cont1.peek(2);
                            s = "UserId=" + var.bStr()+ ";";
                            var = cont1.peek(8);
                            s += "UserName=" + var.bStr();
                            info(s);
                        }
                    }
                }
            }
        }
    }
    ax.Logoff();
    ax = null;
}
В принципе, для вызывающей стороны контейнеры будут выглядеть как интерфейсы IAxaptaContainer - с возможностью вызова соответствующих методов для них
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 04.04.2007 в 20:30. Причина: стоны->стороны
Старый 04.04.2007, 17:20   #8  
xgmann is offline
xgmann
Участник
 
15 / 10 (1) +
Регистрация: 04.04.2007
Ага, посмотрю.
Спасибо
Старый 04.04.2007, 17:35   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А вот так для VBA
X++:
Dim cont As Object
Dim cont1 As Object
Dim cont2 As Object
Dim ax As Object
Dim i As Integer

Set ax = CreateObject("AxaptaCOMConnector.Axapta2")

ax.Logon2 "user", "password", "", "", "", "", "config"

Set cont = ax.CallStaticClassMethod("SysUsersOnline", "getAllOnlineUserInfo")
Debug.Print "Кол-во пользователей:"; cont.peek(2)
Set cont1 = cont.peek(1)
For i = 1 To cont1.Length()
    Set cont2 = cont1.peek(i)
    Debug.Print "UserID="; cont2.peek(2)
    Debug.Print "UserName="; cont2.peek(8)
Next i

ax.Logoff
Set ax = Nothing
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: kashperuk (3).
Старый 04.04.2007, 18:11   #10  
xgmann is offline
xgmann
Участник
 
15 / 10 (1) +
Регистрация: 04.04.2007
Я так и думал, уже почти так и сам сделал. Смотрел в HTML Help коннектора.
Большущее спасибо!
Старый 04.04.2007, 18:18   #11  
xgmann is offline
xgmann
Участник
 
15 / 10 (1) +
Регистрация: 04.04.2007
Ещё раз моя благодарность!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Активные пользователи в Аксапта tolstjak DAX: Администрирование 2 04.10.2007 11:00
Активные пользователи и номер сессии KiselevSA DAX: Администрирование 4 14.08.2006 14:32
Активные пользователи Vitali_i DAX: База знаний и проекты 8 14.02.2006 06:35
Активные пользователи listener DAX: Администрирование 10 08.12.2004 16:46
Активные пользователи: 1 юзер - 3 сессии? МасЯня DAX: Администрирование 3 19.08.2003 13:13
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:15.