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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.04.2009, 17:50   #1  
Dima_Dima is offline
Dima_Dima
Участник
 
144 / 11 (1) +
Регистрация: 09.10.2008
Принадлежность АОТ объекта к лицензированному модулю. (Программно)
Всем здравствуйте,

если кто-нибудь сталкивался с задачей: как можно программно определить имеется-ли лицензия на опрделенный объект в AOT (принадлежность к модулю, на который имеется лицензия).

Буду очень признателен за совет.
Старый 02.04.2009, 18:10   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,323 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Модуль - понятие - больше интерфейсное, нежели программное. Откройте форму Подотчетные лица из модуля Расчеты с Поставщиками. Откройте форму Сотрудник из модуля CRM. Откройте форму Сотрудник из модуля Управление персоналом.
Все это - одна и таже таблица EmplTable. Вопрос - у Вас есть есть лицензия на модуль Расчеты с поставщиками, но нет лицензии на CRM - у Вас есть лицензия на таблицу EmplTable? И к какому модулю она принадлежит?

Тем не менее - существует следующая информация:
Есть лицензия (License Code), к ней привязаны конфигурационные ключи (Configuration Keys). К таблицам (в т.ч. к полям) и пунктам меню обычно привязываются конфигурационные ключи. Соответственно - если он включен - доступ к функциональности есть (в частности - есть физически таблица и поле в БД).
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: mazzy (2), Dima_Dima (1).
Старый 02.04.2009, 18:18   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Dima_Dima Посмотреть сообщение
если кто-нибудь сталкивался с задачей: как можно программно определить имеется-ли лицензия на опрделенный объект в AOT (принадлежность к модулю, на который имеется лицензия).
Да, сталкивался.
Да можно, но не ко всем объектам.

Есть объекты, у которые в свойствах есть ссылка на конфигурационный ключ.
Для таких объектов все просто - надо посмотреть в свойство.
Это все объекты внутри ветки Data Dictionary, это menuItems, menu и т.п.

Но есть объекты, которые не зависят от конфигурации/лицензии.
Это классы, формы(!), отчеты(!), query и т.п.
для таких объектов можно попытаться найти какую-то закономерность по перекрестным ссылкам. У меня получалось привязать классы/формы/отчеты к лицензии в 70% случаев по перекерестным ссылкам в ax4.0

Но в общем случае это не решаемая задача.
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: Dima_Dima (1).
Старый 02.04.2009, 18:19   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Тем не менее - существует следующая информация:
Есть лицензия (License Code), к ней привязаны конфигурационные ключи (Configuration Keys). К таблицам (в т.ч. к полям) и пунктам меню обычно привязываются конфигурационные ключи. Соответственно - если он включен - доступ к функциональности есть (в частности - есть физически таблица и поле в БД).
Что-то я долго отвечал. Именно так.
__________________
полезное на axForum, github, vk, coub.
Старый 02.04.2009, 18:56   #5  
Dima_Dima is offline
Dima_Dima
Участник
 
144 / 11 (1) +
Регистрация: 09.10.2008
Спасибо за быструю реакцию.

Значит, если у объекта есть запись в Properties --> Configuration Key, это значит что он лицензирован?
Старый 02.04.2009, 18:59   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Dima_Dima Посмотреть сообщение
Значит, если у объекта есть запись в Properties --> Configuration Key, это значит что он лицензирован?
Нет, это значит, он управляется конфигурационными ключами и лицензиями.
Дальше надо смотреть какой лицензии принадлежит конфигурационный ключ и включена ли лицензия.
__________________
полезное на axForum, github, vk, coub.
Старый 03.04.2009, 08:37   #7  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
как можно программно определить имеется-ли лицензия на опрделенный объект в AOT (принадлежность к модулю, на который имеется лицензия).
Почти каждый объект имеет конфигурационный ключ. Если не имеет, то считается, что лицензия есть.
Если конфигурационный ключ не имеет лиц. кода, то считается, что лицензия есть.
Таким образом, чтобы посмотреть имеет ли лицензия на объект, надо рекурсивно пробежаться по конф. ключам, и у родительского посмотреть, есть ли лицензия. Пример для таблиц (для другого типа, просто меняем первую строку на нужный тип объекта):
X++:
    DictTable               dictObject = new DictTable(tablenum(SmmBusRelTable));
    SysDictLicenseCode      SysDictLicenseCode;

    ConfigurationKeyId getParentCKId(ConfigurationKeyId _keyid)
    {
        ConfigurationKeyId      ret;
        DictConfigurationKey    key;
        ;

        key = new DictConfigurationKey(_keyId);
           
        if (key.parentConfigurationKeyId())
            ret = getParentCKId(key.parentConfigurationKeyId());
        else
            ret = _keyId;

        return ret;
    }
    ;

    if (dictObject.configurationKeyId())
    {
        sysdictLicenseCode = new SysDictLicenseCode( new DictConfigurationKey(getParentCKId(dictObject.configurationKeyId())).licenseCode());
        info(strfmt("%1", sysDictLicenseCode.isEntered()));
    }
    else
        info("true");
Простой способ (но не достоверный):
смотрим включен ли конфигурационный ключ. Для конфигурационных ключей с выключенными лицензионнами кодами конф. ключ будет выключен, причем независимо от соответствующего свойства, выставленного для него в АОТе.

Последний раз редактировалось Eldar9x; 03.04.2009 в 09:33.
За это сообщение автора поблагодарили: Dima_Dima (1).
Старый 03.04.2009, 12:01   #8  
Dima_Dima is offline
Dima_Dima
Участник
 
144 / 11 (1) +
Регистрация: 09.10.2008
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Почти каждый объект имеет конфигурационный ключ. Если не имеет, то считается, что лицензия есть.
Если конфигурационный ключ не имеет лиц. кода, то считается, что лицензия есть.
Таким образом, чтобы посмотреть имеет ли лицензия на объект, надо рекурсивно пробежаться по конф. ключам, и у родительского посмотреть, есть ли лицензия. Пример для таблиц (для другого типа, просто меняем первую строку на нужный тип объекта):
X++:
    DictTable               dictObject = new DictTable(tablenum(SmmBusRelTable));
    SysDictLicenseCode      SysDictLicenseCode;

    ConfigurationKeyId getParentCKId(ConfigurationKeyId _keyid)
    {
        ConfigurationKeyId      ret;
        DictConfigurationKey    key;
        ;

        key = new DictConfigurationKey(_keyId);
           
        if (key.parentConfigurationKeyId())
            ret = getParentCKId(key.parentConfigurationKeyId());
        else
            ret = _keyId;

        return ret;
    }
    ;

    if (dictObject.configurationKeyId())
    {
        sysdictLicenseCode = new SysDictLicenseCode( new DictConfigurationKey(getParentCKId(dictObject.configurationKeyId())).licenseCode());
        info(strfmt("%1", sysDictLicenseCode.isEntered()));
    }
    else
        info("true");
Простой способ (но не достоверный):
смотрим включен ли конфигурационный ключ. Для конфигурационных ключей с выключенными лицензионнами кодами конф. ключ будет выключен, причем независимо от соответствующего свойства, выставленного для него в АОТе.

Просто класс !!!

Спасибо за помощь.
Старый 07.04.2009, 11:17   #9  
Dima_Dima is offline
Dima_Dima
Участник
 
144 / 11 (1) +
Регистрация: 09.10.2008
Добрый день.

У меня ещё вопрос:

если я хочу узнать лицензираван ли какой-либо MenuItem, как мне узнать ConfigurationKeyId этого MenuItem. У класса MenuItem такой методы нет.


Спасибо.
Старый 07.04.2009, 11:36   #10  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,323 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Из кода?
X++:
static void showConfigurationKey(Args _args)
{
    ;
    info(configurationkeyId2Name(new MenuFunction(menuitemdisplaystr(LedgerTable), MenuItemType::Display).configurationKey()));
    info(configurationkeyId2PName(new MenuFunction(menuitemdisplaystr(LedgerTable), MenuItemType::Display).configurationKey()));
}
Из окна свойств - там есть свойство ConfigurationKey
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: Dima_Dima (1).
Старый 07.04.2009, 11:59   #11  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Еще вариант
X++:
    XInfo                   xInfo = new XInfo();
    Object                  obj;
    SysDictLicenseCode      SysDictLicenseCode;
    DictConfigurationKey    dictConfigKey;

    ConfigurationKeyId getParentCKId(ConfigurationKeyId _keyid)
    {
        ConfigurationKeyId      ret;
        DictConfigurationKey    key;
        ;

        key = new DictConfigurationKey(_keyId);
           
        if (key.parentConfigurationKeyId())
            ret = getParentCKId(key.parentConfigurationKeyId());
        else
            ret = _keyId;

        return ret;
    }
    ;

    obj =  xInfo.rootNode();

    obj = obj.AOTfindChild('Menu Items');
    obj = obj.AOTfindChild('Display');
    obj = obj.AOTfindChild('smmActivities');


    if (obj.ConfigurationKey())
    {
        dictConfigKey = new DictConfigurationKey( getParentCKId(obj.ConfigurationKey()) );
        
        if (dictConfigKey.licenseCode())
        {
            sysdictLicenseCode = new SysDictLicenseCode(dictConfigKey.licenseCode());

            if (sysDictLicenseCode)
                info(strfmt("%1", sysDictLicenseCode.isEntered()));
        }
        else
            info("true");
    }
    else
        info("true");
За это сообщение автора поблагодарили: Dima_Dima (1).
Теги
aot, faq, лицензия

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как проверить существование метода у объекта Lucky13 DAX: Программирование 22 16.08.2024 20:32
Вопрос про свойства объекта АОТ Paul_ST DAX: Программирование 6 27.09.2005 15:54
Есть ли таблица соответствий ID -объекта - Имя объекта в Аксапта? coja DAX: Администрирование 5 26.04.2005 15:25
Можно ли программно заблокировать объект в АОТ? MaratRZ DAX: Программирование 1 16.03.2005 09:19
Изменение элемента в АОТ anf DAX: Программирование 0 25.11.2004 10:18
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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