CftClub.ru
Клуб специалистов ЦФТ-Банк

Расширение с исполнением клиент-скрипта
На страницу 1, 2  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
IXaNI
Участник со стажем
Неподтвержденный


Вступление в Клуб: 27.08.2012
СообщениеСр Фев 15, 2017 11:22   Расширение с исполнением клиент-скрипта Ответить с цитатой
Полезность: Нет оценки
Коллеги, добрый день!

Стоит задача повесить на операцию расширение, которое будет по нажатию на "ОК" на ЭФ вызывать и исполнять в клиент-скрипте код:

Код:
'if MsgBox("'||err_msg||'. Продолжить?", vbQuestion + vbYesNo) <> vbYes Then
   Main = null
end if'


Подскажите, как это можно сделать? И возможно ли в принципе?
vtar
Эксперт
Неподтвержденный


Вступление в Клуб: 20.03.2009
СообщениеСр Фев 15, 2017 13:34    Ответить с цитатой
Полезность: Нет оценки
Можно. У меня даже сработало с невалидируемым OK.

В расширении

Код:

Public Function Main(LastControl)
   Execute V_DEST_EXT.TEXT
   V_DEST_EXT.TEXT = ""


   If LastControl Is Nothing Then
      ' Действия при загрузке формы
   Else
      ' Действия при потере фокуса валидируемого контрола LastControl

   End If
   Main = True ' Результирующее значение валидатора (True или False)   
End Function


Private Sub OK_OnClick
   MsgBox "!"
end sub


В расширении Дополнительные свойства - проверки
Сервер, Клиент
Сервер, Клиент

надо выставить и проверить, у меня ругался Администратор несколько раз (16.5) потом выставилось как то

V_DEST_EXT завести в переменных строка 32к, положить в редакторе на форму расширения
_________________
Нельзя всем дать всё: всех много, а всего мало
Alkov
Профи
Неподтвержденный


Вступление в Клуб: 23.09.2010
СообщениеЧт Фев 16, 2017 03:44    Ответить с цитатой
Полезность: Нет оценки
Только
Main = True ' Результирующее значение валидатора (True или False)
должно быть до
Execute V_DEST_EXT.TEXT
а не после,
а то переопределит Main
и в err_msg не должно быть двойных кавычек...
IXaNI
Участник со стажем
Неподтвержденный


Вступление в Клуб: 27.08.2012
СообщениеЧт Фев 16, 2017 16:19    Ответить с цитатой
Полезность: Нет оценки
Спасибо за ответы)
Уже сам справился.
KhrushchevAV
Участник со стажем
<Банки (менее 3 участников)>


Вступление в Клуб: 17.10.2014
СообщениеПн Фев 20, 2017 09:02   Расширение и клиент скрипт Ответить с цитатой
Полезность: Нет оценки
Похожая задача. Может подскажите, пока не забылась проблема Smile.

Надо сделать дополнительную проверку, и предупредить пользователя.

Делаем расширение. Пишем в секции "проверка":
Код:
if (p_message = 'DEFAULT') then
  [CSMD].init_form(V_DEST_STR, &METHOD$CLASS, &METHOD$SNAME);
   
  -- наша проверка
  if (..) then
    [CSMD].MessageBox(V_DEST_STR,'Внимание!','Наше сообщение');
    debug_pipe('V_DEST_STR='||V_DEST_STR);   
  end if;

end if;

В клиент скрипте, как в писании сказано:
Код:
Public Function Main(LastControl)
   Execute V_DEST_STR.TEXT
   Main = true
End Function

Переменная V_DEST_STR уже есть и на форме и в переменных (в дистрибутивной операции которую мы расширяем).
Проверки в свойствах операции стоят правильные "Сервер, клиент".

Ну и ... Не работает. (Зачем бы иначе писать?).
debug_pipe выводит правильную V_DEST_STR , но пользователь никакого сообщения не получает.

Ну... Думаю я. Забыл какой-то пируэт из шаманского танца с [CSMD].
Перечитал. Нет вроде все ок.
Создал новую операшку, повторил все в ней - работает с первого запуска. (Да, все программисты знают, что это подозрительно. Но для операции из 5 строк в принципе допустимоSmile ).

Вывод.
Какая-то хитрость именно с расширением.
Задача вроде относительно стандартная. Так что, кто-то наверняка сталкивался. Поделитесь, плз.
IXaNI
Участник со стажем
Неподтвержденный


Вступление в Клуб: 27.08.2012
СообщениеПн Фев 20, 2017 09:27    Ответить с цитатой
Полезность: Нет оценки
KhrushchevAV, похоже у меня как раз такая же ситуация была. Вы проверку куда в расширении ставите?
До или после исполнения
Код:
&BASE$SETVARS;
&BASE$VALIDATE;
&BASE$GETVARS;

??

В моем случае я строку для валидатора (V_VB) так же использовал уже имеющуюся в дистрибутивной операции. И если заполнять ее после строки &BASE$SETVARS;, то V_VB обнулялась до выполнения клиент-скрипта (т.к. по сути не передавалась в базовую операцию).
Соответственно, попробуйте написать в таком виде:
Код:

begin
   if (p_message = 'DEFAULT') then
     [CSMD].init_form(V_DEST_STR, &METHOD$CLASS, &METHOD$SNAME);
      
     -- наша проверка
     if <...> then
       [CSMD].MessageBox(V_DEST_STR,'Внимание!','Наше сообщение');
       debug_pipe('V_DEST_STR='||V_DEST_STR);   
     end if;
   
   end if;
   
   &BASE$SETVARS;
   
   <...>
end;


А лучше создать свою переменную, и использовать ее)

Еще, проверка должна работать по нажатию на "ОК" на ЭФ? Если так, проверьте, валидируется ли кнопа "ОК". А лучше исполнение V_DEST_STR поставить отдельно:

Код:
Private Sub OK_OnClick
   Execute V_DEST_STR.Text
   V_DEST_STR.Text = ""
end sub


Последний раз редактировалось: IXaNI (Пн Фев 20, 2017 09:30), всего редактировалось 1 раз
vtar
Эксперт
Неподтвержденный


Вступление в Клуб: 20.03.2009
СообщениеПн Фев 20, 2017 09:28   Re: Расширение и клиент скрипт Ответить с цитатой
Полезность: Нет оценки
KhrushchevAV пишет:
Переменная V_DEST_STR уже есть и на форме и в переменных (в дистрибутивной операции которую мы расширяем).
Проверки в свойствах операции стоят правильные "Сервер, клиент".


Я заводил в расширении отдельную переменную для исполнения кода VBA в клиент-скрипте ( V_DEST_EXT например, и не забыть после положения на форму в "элементе" поменять валидируемое имя что то типа text1 на V_DEST_EXT).

Отдельную переменную, Карл Smile
_________________
Нельзя всем дать всё: всех много, а всего мало
KhrushchevAV
Участник со стажем
<Банки (менее 3 участников)>


Вступление в Клуб: 17.10.2014
СообщениеПн Фев 20, 2017 09:40    Ответить с цитатой