Показать сообщение отдельно
Старый 25.06.2014, 16:43   #32  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,971 / 3268 (116) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от userax2009 Посмотреть сообщение
Обьясните пожалуйста более подробней как это сделать
Например, так

X++:
public boolean selectControl(FormControl _control)
{
    #GRD_sysDataBaseLogFixStack4Button // GRD_sysDataBaseLogfixStack_pkoz // pkoz 19.05.2011
    boolean ret;
    ;
    // GRD_sysDataBaseLogfixStack_pkoz // pkoz 19.05.2011 -->
//    if (GRD_isPkoz())
    {
        //mes = strFMT("%1 : %2", Element.name(),  _control.name());
        //info::messageWinAddLine(mes);
      //  info::messageWinAddLine( strFMT("%1 : %2 : %3", Element.name(),  _control.name(), ret));
        /*
         info::messageWinAddLine( strFMT("%1 : %2 : %3 : %4",
            this ? this.name() : "",
            _control ? _control.name() : "",
            ret,
            classid2Name(_control ? _control.handle() : 0)
            ));
        */
        if (_control)
        {
            switch (_control.handle())
            {
            case classNum(FormButtonControl)         :    // button
            case classNum(FormCommandButtonControl)  :   // commandButton
            case classNum(FormFunctionButtonControl) :  // menuItem
            case classNum(FormMenuButtonControl)     : // MenuButton
                    if (infolog)
                    {
                        infolog.globalCache().set(#GRD_FixStack4Button, #GRD_FixStack4ButtonMainKey, [
                            this ? this.name() : "",
                            _control ? _control.name() : "",
                            _control ? _control.id() : 0,
                            ret
                        ]);
                    }
                    break;
            }
        }

    }
    // GRD_sysDataBaseLogfixStack_pkoz // pkoz 19.05.2011 <--

    ret = super(_control);

    return ret;
}
Это цитата из нашего кода. Он проверяет, что тип выбранного контрола - кнопка, запоминаем информацию о нем в глобальном кеше. А затем хитрым образом прокидывает её на сервер в начале транзакции (и при наличии еще ряда оптимизаций, минимизирующих клиент серверный трафик) и там уже использует при записи в SysDatabaseLog - ставит в стек вызовов имя кнопки и формы с которого он начинался. Естественно мы сохраняем стек вызовов в SysDataBaseLog ( в отличие от стандартного приложения)
За это сообщение автора поблагодарили: S.Kuskov (5).