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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.07.2008, 11:53   #1  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Документооборот
Добрый день!
Суть проблемы:
Пользователи прикрепляют картинки к журналам, пользуясь стандартным документооборотом. На журналы наложен RLS, поэтому каждый пользователь видит только предназначенные для него журналы (подразумевается что и картинки он должен видеть только свои). При просмотре картинки (нажать кнопку "Открыть") картинка открывается стандартным просмотрщиком и далее кнопочками вправо-влево можно свободно "гулять" по каталогу файлов и смотреть все картинки (и свои и чужие). Собственно в этом и проблема. Как запретить пользователям при открытии просмотрщика картинки "гулять" по каталогу?
Скажу сразу, что файлы бывают больше 5 МБ, поэтому на SQL сервере хранить их не получиться. Или получиться? Запретить просматривать картинки вне аксапты тоже нельзя, т.к. в самой аксапте уж слишком неудобно смотреть.
Я вижу только одно решение - при нажатии кнопки "Открыть" копировать файл в какой-то временный каталог пользователя и открывать его уже там, а при закрытии просмотрщика удалять файл из временного каталога (Хотя как перехватить это событие? Это ведь закрытие окна уже вне аксапты ). Что посоветуете?
Старый 16.07.2008, 13:41   #2  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
У меня была отчасти схожая проблема. Необходимо было открывать в определенных случаях прикрепленные документы (хранимые в базе) так, что бы возможные изменения, производимые с документами, не записывались обратно в базу. Добавил новый пункт в енум DocuCode, добавил его обработку в DocuActionFile.run(), создал MenuItem с новым параметном енума DocuCode и там где было необходимо - кнопку с вызовом созданного MenuItem-а. Обработка нового пункта енума DocuCode такая же как и DocuCode::Open, только предварительно делается копия файла во временную папку.
В вашем случае можно в DocuActionFile.command() по некоторому критерию делать копию файла и изменять переменную filename. Только изменения. сделанные с этой копией все-равно подхватятся Аксаптой (файл скопируется в огигинальное хранилище), но это вас, как я понял, это не волнует.
Старый 16.07.2008, 14:01   #3  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Это понятно... А как потом удалять эту копию?
Старый 16.07.2008, 14:11   #4  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
Это понятно... А как потом удалять эту копию?
можно использовать типа такого (кстати и обновляться в хранилище файлик не будет):
X++:
DocuFileWatchDog::create();
DocuOpenFile::add(docuRef, fileName,
    false, // не обновлять файл в хранилище при освобождении
    true); // удалить файл при освобождении
DocuFileWatchDog::createDelayed();
Вот только в DocuFileWatchDog багофичи есть помоему вплоть до попыток удаления файла пользователя A созданного на компьютере B при просмотре пользователем C на компьютере D... ну или типа того

P.S. Ax3

Последний раз редактировалось vallys; 16.07.2008 в 14:56.
За это сообщение автора поблагодарили: _scorp_ (1).
Старый 16.07.2008, 14:29   #5  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Спасибо за идею, сейчас попробую. Тут еще самому идея пришла. Может допилить вставку файла так, чтобы при сохранении файл сохранялся не просто в каталог, укакзанный в настройках, а в
X++:
docuType.ArchivePath\DocuValue.FileName\strfmt("%1.%2", DocuValue.FileName, DocuValue.FileType)
Т.е. будет получаться, что каждый файл лежит в отдельной папке. Ну и при открытии проделывать те же манипуляции.
Старый 16.07.2008, 14:47   #6  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Но проблему это решит только отчасти, т.к. через просмотрщик картинок пользователь используя кнопки вправо-влево не сможет "гулять" по каталогу, а вот через эксплорер сможет. Насколько я понимаю Аксапта создает файл в каталоге от имени пользователя, запустившего аксапту. Значит у пользователя должны быть права как на запись, так и на чтение этого каталога. Получается, что если пользователь захочет, то он зайдет в этот каталог обычным проводником и посмотрит все что нужно. Тупик?
Старый 16.07.2008, 14:50   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
Тупик?
Для начала стоит определить версию аксапты, для которой ищем решение
Решения я не знаю.

Может стоит посмотреть в этом направлении: как-то надо заставить писать и читать файл от имени пользователя, который запустил AOS.
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: _scorp_ (1).
Старый 16.07.2008, 14:52   #8  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Спасибо, совсем забыл, Ax4 SP2.
Старый 16.07.2008, 15:11   #9  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от mazzy Посмотреть сообщение
Может стоит посмотреть в этом направлении: как-то надо заставить писать и читать файл от имени пользователя, который запустил AOS.
создать server method() {чтение/запись чего-либо}

Цитата:
Сообщение от _scorp_ Посмотреть сообщение
Но проблему это решит только отчасти, т.к. через просмотрщик картинок пользователь используя кнопки вправо-влево не сможет "гулять" по каталогу, а вот через эксплорер сможет. Насколько я понимаю Аксапта создает файл в каталоге от имени пользователя, запустившего аксапту. Значит у пользователя должны быть права как на запись, так и на чтение этого каталога. Получается, что если пользователь захочет, то он зайдет в этот каталог обычным проводником и посмотрит все что нужно. Тупик?
Ну тогда понеслась:
1. Дать доступ к сетевой папке только пользователю, под которым запускается AOS
2. Открывать файлы (т.е. подправить код открытия файлов в DocuActionFile.command()) с docuType.filePlace == DocuFilePlace:: Archive так же как и файлы с docuType.filePlace == DocuFilePlace:: Database, только создавать/копировать временный файл на стороне сервера (т.е. использовать приставку server).
3. Открывать файлы в режиме "ридонли" (см. выше), иначе DocuFileWatchDog потом попробует записать файлик в сетевую папку от имени локального пользователя. Ну или переделать DocuFileWatchDog
Вроде все.

P.S. Это я про тройку. Не знаю на сколько другой документооборот в четверке...
Теги
ax3.0, ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Поменяли сервер, перестал работать документооборот. wef2000 DAX: Функционал 3 18.09.2008 15:14
Word в PDF из Х++ через документооборот custtable DAX: Программирование 4 22.07.2008 18:37
Про документооборот andreynikolai DAX: Программирование 30 06.10.2006 09:34
Документооборот. Создание файла по шаблону. NJD DAX: Программирование 4 11.05.2005 10:52
Кто нибудь пытался релизовать ДОКУМЕНТООБОРОТ в Аксапта? edd DAX: Функционал 10 21.07.2003 15:48

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

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

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