![]() |
#1 |
Участник
|
![]()
Dynamics AX 3.0, Build #1951.7609/514-193 SP3/OP023-71, СУБД Oracle 9
Доброго времени, помогите пожалуйста разобраться новичку ![]() X++: class ExBase extends RunBaseBatch FilePath filePathDBF; #define.CurrentVersion(1) #define.Version1(1) #localmacro.CurrentList filePathDBF #endmacro далее на run класса ExBase передается filePathDBF параметром в другой класс X++: public void run() { DocExport docExp; ; docExp = new DocExport(this.getParam()) docExp.run(); // this.getParam() формирует Struct parmObj = new Struct(Types::String, "FilePath") } X++: final class DocExport { FilePath folderPath; #define.DBFName("1.txt") } X++: void new(Struct _parmObj) { folderPath = _parmObj.value("FilePath"); if ( substr(folderPath,strlen(folderPath),strlen(folderPath)) != '\\' ) folderPath = folderPath + '\\'; } ![]() X++: public boolean validate() { boolean ret = true; ; if ( !folderPath || !WinApi::fileExists2(folderPath + #DBFName)) ret = checkFailed(strFmt("Файл не найден по пути: %1",folderPath)); return ret; } |
|
![]() |
#2 |
Участник
|
|
|
![]() |
#3 |
Участник
|
Доступ с сервера где работает пакет обеспечен, все файлы доступны для редактирования.
|
|
![]() |
#4 |
Участник
|
Цитата:
Цитата:
|
|
![]() |
#5 |
Участник
|
Цитата:
Сообщение от gl00mie
![]() Вам нужно уточнить три вещи:
Сетевой диск к серверу никак не подмаплен. На сервере один пользователь под которым запускается пакет и права на папку есть. |
|
![]() |
#6 |
Участник
|
если запустить класс на сервере, то все отрабатывает без проблем, как только в пакете fileExisxt возвращает false.
|
|
![]() |
#7 |
Участник
|
Цитата:
Кроме того, не корректно проверять одно, а сообщать о другом. Имею в виду, что ищете-то Вы файл, а сообщаете о пути доступа. Может, проблема именно в "склеивании"? X++: public boolean validate() { boolean ret = true; ; if ( ret && !folderPath) ret = checkFailed('Не указан путь доступа!'); if ( ret && !WinApi::fileExists2(folderPath + #DBFName)) ret = checkFailed(strFmt('Не найден файл \"%1\"', folderPath + #DBFName)); return ret; } Судя по постановке вопроса Вы работаете в 3-х уровневой конфигурации: База данных - AOS - клиент AOS, как и клиент - это приложение. Физически, они могут запускаться как на одном компьютере, так и на разных. Именно AOS подразумевается под термином "сервер", когда Вас спрашивают где именно запускается тот или иной класс. Это НЕ база данных. Это отдельное приложение, работающее как сервис Windows. Так вот, как правило, запуск в пакетном режиме - это всегда запуск "на сервере". В данном случае, во-первых, на том компьютере, где у Вас установлен AOS, а, во-вторых, под учетной записью того пользователя, от имени которого запущен сервис AOS. Это значит, что, во-первых, Вам надо проверить "видимость" нужной Вам папки со стороны того компьютера, на котором установлен AOS. Например, если Вы указали путь "C:\MyFolder", то на компьютере, где установлен AOS такой папки может просто не быть! Ведь клиентский компьютер при запуске со стороны сервера оказывается физически другим компьютером и путь надо указывать как к сетевому ресурсу. А, во-вторых, имеет ли права доступа к нужной папке и файлу тот пользователь, от имени которого запущен сервис AOS? Речь идет именно о пользователе Windows, а не о пользователе Axapta. Вы же ищете ресурс вне среды Axapta, соответственно и идентификация "внешняя" (по отношению к Axapta) Свойство RunOn = "Called from" означает, что данный класс будет запущен там же, где был запущен тот класс из которого его вызвали. Если вызвавший класс запущен на клиенте, то и данный класс будет запущен на клиенте. Если вызвавший класс запущен на сервер, то и данный класс будет запущен на сервере.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: Player1 (1). |
![]() |
#8 |
Участник
|
на сервере (назовем его test) установлен и клиент и AOS, запускаются под одним пользователем, необходимые файлы лежат на другом сервере (назовем его work), у пользователя под которым стартует и клиент и AOS на сервере test полные права на доступ к нужной папке на сервере work. Так же при запуске класса на клиенте, который установлен на сервере test все работает, пакет же не хочет видеть необходимы файлы. Повторюсь путь задается так на диалоге: \\server\folder - затем пакуется. Полный путь к файлу формируется так \\server\folder + '\\' + '1.txt'. Пакет не видит ни путь к папке, ни путь к файлу.
Владимир Максимов, Спасибо за теорию. Может еще какие варианты будут? |
|
![]() |
#9 |
Участник
|
Проблемы доступа к файлам легко и просто диагностируются с помощью Process Monitor.
|
|
![]() |
#10 |
----------------
|
Поясните свою фразу, пожалуйста
Цитата:
Пакет не видит ни путь к папке, ни путь к файлу
У Вас AX3, то есть пакетник - это обычный клиент с запущенной пакетной обработкой? |
|
![]() |
#11 |
Участник
|
Цитата:
Да именно обычный клиент с запущенной пакетной обработкой. |
|
![]() |
#12 |
----------------
|
В тексте сообщения путь выводится верно?
А не пробовали вместо перменной в данном коде константой прописать путь к файлу? (исключительно в целях тестирования) |
|
![]() |
#13 |
Участник
|
Всем спасибо за помощь. Вопрос решен. Проблема была в доступности файлов, хотя админы клятвенно заверяли, что все, что требовалось настроено
![]() |
|