26.06.2003, 14:30 | #21 |
Участник
|
Цитата:
Изначально опубликовано Rungart
По ходу обсуждения, у меня возник вопрос: а что делать с паролем пользователя? Хранить его в открытом виде в js файле? Вводить нового пользователя с правами на запуск конкретного датапорта? Можете завести спец. пользователя, для которого оставить минимальные права только на выполнение определенной функции без доступа к формам, кодеюнитам и т.д. Кстати, эти функции можно запускать автоматически при логине этого пользователя и выбрасывать его сразу по завершении их выполнения. Я отдаю себе отчет, что это не самое красивое решение, но по-моему единственное. Все остальные решения будут работать, если NA уже запущен. Цитата:
Кстати, как поведет себя OCX при запросе пароля?
[/B] |
|
26.06.2003, 14:42 | #22 |
Участник
|
Меня просто действительно заинтересовала возможность запуска Navision не пребегая к скриптовым эмуляторам.
В свое время для решения подобной задачи мне пришлось использовать планировщик nnCron (с эмуляцией нажатий клавиш, контролем всплывающих окон и проч.). А пользователь таки да был с правом на запуск 1 формы и модификацией 2-х таблиц. Кстати, после завершения всех необходимых операций программу было бы не плохо закрыть. Как сделать это средствами Navision для меня загадка до сих пор. (В упомянутой задаче я просто убил процесс .) |
|
26.06.2003, 15:28 | #23 |
Участник
|
------Вы вероятно, плохо представляете себе что такое bat-файл.
В bat-файл можно вставить что угодно - например программу производящую запуск клиента NA. --------Если же предположить что NA у меня постоянно запущен, то, естественно, и вопросов бы не было. Так не обязательно его держать открытым. За это отвечает отдельная программ. с.м. П4. Она открывает, стартует, закрывает. Для упрощения, можно на стартовую страницу в Navision установить запуск OCX. --------Lexi, откуда вы взяли, что интересует УДАЛЕННЫЙ запуск? Какая разница, удаленный или нет. Если нет то еще проще. Запускается программа стартующая attain, проверяющая запуск OCX, далее производиться подключение к OCX, запуск датапорта, при закрытии рограммы на OnClose - производиться отключение от порта и закрытие программы. ---------P.S. Уважаемая Marina, усли вы до сих пор читаете эту чушь, не сочтите за труд внести ясность относительно вашей задачи. [/B][/QUOTE] Да....... Marina.......... |
|
26.06.2003, 15:36 | #24 |
Участник
|
Цитата:
Изначально опубликовано Lexi
Какая разница, удаленный или нет. Если нет то еще проще. Запускается программа стартующая attain, проверяющая запуск OCX, далее производиться подключение к OCX, запуск датапорта, при закрытии рограммы на OnClose - производиться отключение от порта и закрытие программы. |
|
26.06.2003, 16:57 | #25 |
Участник
|
Для того, что бы быть уверенным, что функция отработала, и получениея подтверждения на запускаемой программе.
------- не проще ли написать что-то типа Dataport.RUN? Этот RUN нужно же в дальнейшем кудато вешать. Напр. на кнопку. Правильно. Вы ведь не сможете запустить из вне Datatport.RUN. |
|
26.06.2003, 17:57 | #26 |
Участник
|
Цитата:
Изначально опубликовано Lexi
Для того, что бы быть уверенным, что функция отработала, и получениея подтверждения на запускаемой программе. ------- не проще ли написать что-то типа Dataport.RUN? Этот RUN нужно же в дальнейшем кудато вешать. Напр. на кнопку. Правильно. Вы ведь не сможете запустить из вне Datatport.RUN. Что же касается уверенности в корректной отработке задания, то возможно есть смысл попробовать получить флаг успешного выполнения при помощи функции, объявленной в датапорте и вызываемой сразу после его выполнения. |
|
26.06.2003, 19:26 | #27 |
Участник
|
Что касается LogInStart согласен.
Цитата:
Изначально опубликовано Rungart
Что же касается уверенности в корректной отработке задания, то возможно есть смысл попробовать получить флаг успешного выполнения при помощи функции, объявленной в датапорте и вызываемой сразу после его выполнения. |
|
27.06.2003, 08:02 | #28 |
Участник
|
2Lexi.
Для того, чтобы узнать результат выполнения функции существует масса способов. Или вы всерьез считаете, что до появления OCX все программы работали как попало. Открою секрет - существует большое количество операционных систем, которые вообще не знают что такое OCX и очень хорошо себя чуствуют. Как самый простой пример - достаточно написать функцию (датапорт) так, чтобы она выводила результат своей работы в файл. P.S. Похоже вы совсем недавно узнали, что такое OCX и спешите поделиться этой радостью со всем остальным миром. Что ж, я очень рад за вас. Но использовать даже самую замечательную технологию нужно там где это уместно. |
|
27.06.2003, 10:28 | #29 |
Участник
|
Цитата:
Изначально опубликовано Lexi
А куда вы собираетесь получать флаг успешного выполнения и как ? [/B] http://www.mibuso.com/howtoinfo.asp?FileID=7 |
|
27.06.2003, 13:04 | #30 |
Участник
|
Цитата:
Изначально опубликовано Grizzly
Для того, чтобы узнать результат выполнения функции существует масса способов. Или вы всерьез считаете, что до появления OCX все программы работали как попало. Цитата:
Изначально опубликовано Grizzly
Открою секрет - существует большое количество операционных систем, которые вообще не знают что такое OCX и очень хорошо себя чуствуют. Эта тема зашла в тупик. Предлагаю ее закрыть ее. Не хочется опускаться до уровня сказок, прочих операционных систем и т.д.. Для Rungart Я запустил формы. Но что получается, что данные возвращаются в форму attain. |
|
27.06.2003, 14:06 | #31 |
Участник
|
2 Lexi
Что касается передачи параметров, то я обычно делаю так: Пусть у нас есть объект (форма,таблица, отчет или датапорт) задача: запустить его с определенными знчениями переменных, а затем просмотреть переменные, измененные в этом объекте. Основной принцип: в главном объекте (форме,кодюните, etc.) объявить в Globals этот объект как переменную Obj. При этом по F5 у этой переменной мы можем увидеть все ее функции. Т.е. написав функцию для нашего объекта типа RetVal() : Integer exit(Глобальная_Переменная_Объекта) мы сможем получить значение переменной "Глобальная_Переменная_Объекта" в главном объекте так clear(Obj); Obj.Run; //==================== // объект отработал, где-то внутри его присвоилось значение переменной // "Глобальная_Переменная_Объекта" //==================== Перем:=Obj.RetVal При этом следует помнить, что оператор CLEAR очистит объект. Кстати, этот вопрос уже обсуждался здесь |
|
27.06.2003, 14:18 | #32 |
Участник
|
Rungard.
Да но вы ведь не передаете параметр во внешнюю программу. Все в этоге заканчивается в рамках attaina. А та, прога, которая запустила attain не знает, нормально ли запустился датапорт. То есть в дальнейшем вам необходимо "Перем:=Obj.RetVal" передать каким либо образом наружу. Речь идет о меж программном взаимоотношении. |
|
27.06.2003, 14:27 | #33 |
Участник
|
2 Lexi
Согласен. Был не прав. Исправлюсь. :-\ |
|
11.02.2004, 03:21 | #34 |
Участник
|
Прошло полгода...
Уважаемый Grizzly,
В свое время решила эту задачу путем изменения ее условия, т.е. убедила начальство, что можно запускать и при работающем клиенте. Вчера, однако, необходимость запуска извне возникла вновь (на сей раз формы, но не суть) и тут я вспомнила про свой прошлогодний постинг... открыла, нашла предложенное Вами решение, воспроизвела и снискала бурные овации всего отдела. Вся эта лирика лишь для того, чтобы поблагодарить и сказать, что Вы совершенно верно интерпретировали мой вопрос и очень сильно помогли. С уважением, Марина |
|
12.02.2004, 17:45 | #35 |
Участник
|
Други!
А подскажите и опишите поподробнее,, как запустить датапорт в определенное время?! Скачал, установил и настоил Crones с www.mibuso.com все равно он неработает!!! ;( |
|
12.02.2004, 18:13 | #36 |
NavAx
|
В определенное время...
По таймеру, наверное. Берете, например, Главное меню =) Выставляете ему в свойствах TimerInterval (сколько - сами ориентируйтесь). Соответственно, в триггере OnTimer() пишете что-нибудь вроде IF (TIME > (Время Ч - дельта)) AND (TIME < (Время Ч + дельта)) THEN DATAPORT.RUN(DATAPORT::<YourDataport>, параметры...) |
|
13.02.2004, 09:52 | #37 |
Участник
|
а зачем использовать дельту?!
|
|
13.02.2004, 10:49 | #38 |
NavAx
|
А на всякий случай...
Поставите Вы, скажем, интервал в 5 секунд. А форма будет запущенна в 09 часов 03 минуты 12 секунд. В таком случае условие (IF TIME = 120000T THEN...) никогда не отработается т.к. таймер сработает в 11:59:57 и в 12:00:02. |
|
13.02.2004, 10:59 | #39 |
Участник
|
да все верно, это я уже догадался. стормозил малость.
Возник другой вопрос, как передать параметры репорту?! |
|
13.02.2004, 11:30 | #40 |
NavAx
|
В смысле не репорту, а датапорту, наверное? =)
Какие именно параметры? Если имеются в виду параметры, которые задаются через реквест форму, то придется изменить датапорт. Т.е. задавать ему параметры не через реквест форму, а, например, считывать их в OnPreDataport из какой-нибудь специальнообученной таблички. |
|