Доступ К Сетевому Диску, Библиотека И Права

Тема в разделе "Lotus - Программирование", создана пользователем savl, 23 авг 2013.

  1. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Ситуация...
    Крепит человек файлик с сетевого диска, выбирает через FileOpenDialog, при вставке его в RT-поле вылезает сообщение "File Not Found"
    Сначала думал путь к файлу длинный, потом начало такое происходить уже с короткими именами.
    Последний файл был общей длинной 194 символа, не 255 же.
    Доступ, чаще всего, в папки на сетевых дисках разграничены: одни отделы их видят, другие нет.
    И вот тут задумался, права при прикреплении программно в RT поле чьи используются?
    Библиотека, в которой прописан весь год был подписана мной, и сервером была тоже, ошибка все равно есть.
    Получается что выбирая файл пользователь имеет к нему доступ, а дальнейший код этот файл в упор не видит?
    Нашел вот такое сообщение: http://codeby.net/ipb.html?s=&sh...ost&p=52990
    Прочел всю ветку, это ад...
    Всегда считал, что код в лотусе, почти всегда используется от прав пользователя, а по ходу нет. Или я не прав?
    Прошу помощи, в упор не понимаю.

    P.S. Я конечно могу сделать на лету простой батник с одной строкой: {copy %1 %2 /Y}, а потом запускать его через Shell, но что-то меня привлекает такое решение, да и пользователи на Mac у нас есть.
     
  2. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Наверное ты что-то не то делаешь или не договариваешь. Если все локально - то права локального пользователя.
    Если через агент на сервере - соответственно права серверного пользователя
    Еще есть смысл узнать о правах доступа к файлу у пользователя. Встречал такое, что было запрещено копирование с сетевого диска.

    Набросал на скорую руку Action
    Код (Text):
    Sub Click(Source As Button)
    Dim ws As New NotesUIWorkspace
    Dim doc As NotesDocument   

    Dim rtitem As NotesRichTextItem
    Dim object As NotesEmbeddedObject

    Dim files As Variant


    Set doc = ws.CurrentDocument.Document

    files = ws.OpenFileDialog(True, "File List", "", "c:")

    Set rtitem = New NotesRichTextItem( doc, "Body" )

    Forall filelist In files
    Set object = rtitem.EmbedObject ( EMBED_ATTACHMENT, "", filelist)  
    End Forall

    Call doc.Save( True, False, True )
    End Sub
    Атачил файл с сетевого диска. Работает нормально. Файл цепляется.
     
  3. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    вот на этой строке и ошибка:
    Код (LotusScript):
    Set object = rtitem.EmbedObject ( EMBED_ATTACHMENT, "", filelist)
    Нет файла и все, выполняется из кнопки на представлении.
    Права к сетевому диску разграничны через Active Directory, думаю проблема тут.
     
  4. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    795
    Симпатии:
    78
    Если файл можно из проводника куда-скопировать, то будет цеплятся. Иначе такое когда только права list на каталог\файл.
     
  5. duchan

    duchan Well-Known Member

    Регистрация:
    20 сен 2006
    Сообщения:
    105
    Симпатии:
    2
    А папки небось по русски обзываются, если ДА, то дели 256 на два - русские буквы 2 байта занимают....
    Так что если на "шарах" всё по русски, то и в 194 символа может не влезть
     
  6. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    DuChan
    Мне казалось 256 это именно символов.
    Попробую в unicode перевести при прикреплении, там точно в байтах расчет.
     
  7. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Ну в целом да, права были ни при чем. Проблема в 260 символов WinAPI, хотя я всегда думал что русские символы только в Unicode кодируются 2-мя знаками.
    Метод преобразования {\\?\} не работает, ровно до первого пробела сработать может, но не нормализует путь.

    Теперь копирую файл в локальный темп и тяну оттуда в Lotus, естественно только для win.
    Создаю bat-файл filesCopy.bat со строкой: {copy %1 %2 /Y}
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Для тех кто не понял что такое %1, %2 и /Y</div></div><div class="sp-body"><div class="sp-content">
    /Y - флаг перезаписи, %i - это параметры, которые указываются при запуске bat
    Парметров может быть от %1 - %9, есть еще параметр %0 - имя bat-файла.
    При вызове параметры должны разделяться пробелом.
    Подробнее тут: http://www.windowsfaq.ru/content/view/264/57/

    Затем через WShell.Run запускаю и дожидаюсь окончания.
    Код (LotusScript):
    ReturnCode = WShell.Run({filesCopy.bat} & { "} & FilePath & {" } & newFilePath, 0, True)
    кавычки для FilePath нужны если там есть пробелы, без них не копирует.
    0 - не отображать окно, True - дождаться окончания.
    Может кому пригодится, хотя..
     
  8. duchan

    duchan Well-Known Member

    Регистрация:
    20 сен 2006
    Сообщения:
    105
    Симпатии:
    2
    ну уж если Вы используете WSH, может попробывать путь перобразовать к формату "8.3"?
    например через "Scripting.FileSystemObject"->ShortPath., правда для сетевых безбуквенных не знаю, заработает или нет - попробуйте... :rolleyes:

    Да и скопировать файл можно:
    Код (Text):
    Set FSO = CreateObject("Scripting.FileSystemObject")
    FSO.CopyFile "C:\*.bat", "A:\", 0

    CopyFile(<Source>,<Destination>,<Overwrite>)
    Назначение: копирует один или несколько файлов.
    Параметры:
    <Source> - строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы "*" и "?".
    <Destination> - строка, путь назначения (куда копировать).
    <Overwrite> - необязательный, булево (число). Перезаписывать существующие файлы, или нет. По умолчанию - True (перезаписывать). Если файл, который нужно перезаписать, имеет атрибут read-only, возникнет ошибка (независимо от установки этого параметра).
     
  9. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Кстати да, FSO.CopyFile прекрасно работает. А ожидание конца работы будет?
     
  10. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    юникод бывает разный, в винде, русские символы - 2-а знака - это описано (ссылки гуглятся)...
    здесь можно сделать исторические отступления ;), но в контексте задачи нет необходимости
     
  11. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
Загрузка...

Поделиться этой страницей