• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Не Работает Getdocumentbykey(

  • Автор темы gwarlock
  • Дата начала
G

gwarlock

Добрый день.

Вопрос у меня абсолютно идиотский, но все книги по Лотусу ведут на ссылки, устаревшие в 2003 году, а первое место в поиске по слову Домино занимает сайт Кришнаитов.
Как просмотреть данные в базе Лотус 7? В администраторе я нашел эту базу, но при клике на нее открывается интерфейс, а мне именно содержимое таблиц нужно.

Объясняю вопрос - у нас уже лет 6 лежит Лотус на одном из серверов. Получает письма от партнеров, раз в месяц мы заходим на него и печатаем реестр по пришедшим письмам и прикреплениям.
Как он работает - мы вообще без понятия. А в январе один из партнеров прислал нам письмо с прикрепленным файлом с пробелом в имени файла. И печать по нему перестала работать. Скрипт я нашел, который печатает реестр, там все вроде очевидно

Код:
	Set db = Session.CurrentDatabase

Set View = db.GetView("(IncomingByFile)")
If View Is Nothing Then
Msgbox "Не найден вид (IncomingByFile)"
End
End If
Set Doc = View.GetDocumentByKey(Ucase(FileFromRetailArr(i).FName), True)
If Doc Is Nothing Then
Msgbox "Не найден документ с файлом " + FileFromRetailArr(i).FName

FileFromRetailArr(i).FName - это и есть наше имя файла "xxx001 002.txt"
Я даже View нашел, оно таблицу открывает, в которой есть это имя, но поправить там я, конечно, ничего не могу.

Подскажите, что еще можно сделать?
 
H

hosm

А точно именно GetDocumentByKey не находит документ? Посмотрите, может в сортированной колонке представления (IncomingByFile) стоит Multi-value separator - Space?
 
G

gwarlock

А точно именно GetDocumentByKey не находит документ? Посмотрите, может в сортированной колонке представления (IncomingByFile) стоит Multi-value separator - Space?

Еще бы знать, как это проверить.

Я зашел во Views, нашел нужный, два раза щелкнул на ViewSelection.
Там 4 колонки - Файл, От, Дата, Время. Если правой кнопкой на заголовке выбрать ColumnProperties, то у первой и четвертой колонки Multi-value separator = none.
У второй и третьей колонки = Comma.

А вообще таблица выглядит нормально и это имя файла там правильно записано.
 
K

Kee_Keekkenen

а у колонки файл (в свойствах) включена сортировка ?
 
G

gwarlock

а у колонки файл (в свойствах) включена сортировка ?

На второй закладке - Sort: Ascending. Все остальное на закладке вроде отключено.
Кстати, сама колонка, как я понимаю, так образуется - тип Формула @UpperCase(@Trim(FileName))

Обидно, блин, столько лет все работало, программист лотуса уволился в 2006м и тут такое из-за одного пробела.
 
S

susinmn

1. Попробовать заменить
Set Doc = View.GetDocumentByKey(Ucase(FileFromRetailArr(i).FName), True)
на
Set Doc = View.GetDocumentByKey(Trim(Ucase(FileFromRetailArr(i).FName)), True)
т.к. @UpperCase(@Trim(FileName)) заменяет 2 и более пробелов внутри названия на 1.

Если не поможет, то
Кстати, сама колонка, как я понимаю, так образуется - тип Формула @UpperCase(@Trim(FileName))
Это вся формула в колонке?
Set Doc = View.GetDocumentByKey(Ucase(FileFromRetailArr(i).FName), True)
Как образуется FileFromRetailArr(i)? Можно полный код, если это не секретная информация...
 
G

gwarlock

1. Попробовать заменить
Set Doc = View.GetDocumentByKey(Ucase(FileFromRetailArr(i).FName), True)
на
Set Doc = View.GetDocumentByKey(Trim(Ucase(FileFromRetailArr(i).FName)), True)
т.к. @UpperCase(@Trim(FileName)) заменяет 2 и более пробелов внутри названия на 1.

Если не поможет, то
Это вся формула в колонке?
Как образуется FileFromRetailArr(i)? Можно полный код, если это не секретная информация...
1. Пробовали, не помогает, там вообще пробел всего один - посередине.
2. Да, это вся формула в колонке. Я пробовал вообще формулу убирать - без толку, только имена файлов в таблице не все в верхнем регистре становятся.
3. FileFromRetailArr(i) читается из текстового файла, пришедшего из другой системы.
Код:
filenames = ws.OpenFileDialog( False, "Select file ...", "*.txt", LoadDirName)
If Isempty(filenames) Then
Msgbox "Вы не выбрали файл !!!"
End
End If

LoadFileName = filenames(0)

Call GetArrayFromFile (LoadFileName, FileFromRetailArr, NumInFileFromRetailArr)

i = 0

While (i < NumInFileFromRetailArr)
Set Doc = Nothing
Set Doc = View.GetDocumentByKey(Ucase(Trim(FileFromRetailArr(i).FName)), True)
If Doc Is Nothing Then
Msgbox "Не найден документ с файлом " + Ucase(Trim(FileFromRetailArr(i).FName))
строка там вида XXX^XXX002 001.TXT^31.01.2013^ООО
 
H

hosm

1) нужен код ф-ции GetArrayFromFile - похоже, в ней заполняется FileFromRetailArr , выше вы написали только диалог выбора файла и ее вызов. И уточните, ошибка именно после GetDocumentByKey, т.е. выводится именно "Не найден документ с файлом "?
2) надо так, если проблема таки в нескольких пробелах: Set Doc = View.GetDocumentByKey(FullTrim(Ucase(FileFromRetailArr(i).FName)), True)
т.к. @Trim заменяет 2 и более пробелов внутри названия на 1, а Trim убирает только пробелы в начале и конце
 
G

gwarlock

1. Ошибка именно в "Не найден документ". Функция вроде работает
Код:
Public Function DostoWin (st As String) As String
'	 Функция возвращае преобразованную строку из формата DOS 866 в формат Windows 1251
'	 строка для преобразования	 
Dim i As Long, dl As Long
Dim simvol As String, st1 As String

dl=Len(st)
For i=1 To dl
simvol=Asc(Mid$(st,i,1))
Select Case simvol
Case 193
simvol=45
Case 194
simvol=45
Case 196
simvol=45
Case 195
simvol=124
Case 197
simvol=124
Case 179
simvol=124
Case 240
simvol=168
Case 241
simvol=184
Case Else			  
If simvol>=128 And simvol<176 Then 
simvol=simvol+64
Else
If simvol>=224 And simvol<240 Then
simvol=simvol+16
End If
End If
End Select
st1=st1+Chr(simvol)
Next
DostoWin=st1	 
End Function

Public Function GetArrayFromFile (FName As String, Arr() As FileData, NumInArr As Long)

Dim filenum As Integer
Dim ILINE As String, TmpILINE As String
Dim Count As Integer
Dim FileName As String, CodCompany As String, DateDoc As String, CompanyName As String

NumInArr = 0 
Redim Arr(NumInArr)

fileNum=Freefile()
Open FName For Input As fileNum
Do While Not Eof(fileNum)
Line Input #fileNum, ILINE
If Trim(ILINE) <> "" Then

ILINE = DostoWin(ILINE)

TmpILINE = ILINE

FileName = ""
CodCompany = ""
DateDoc = ""
CompanyName = ""

Count = Instr(1, ILINE, "^" , 1) 		
If Count <> 0 Then
CodCompany = Left (ILINE, Count - 1)
ILINE = Mid (ILINE, Count + 1)
End If

Count = Instr(1, ILINE, "^" , 1) 		
If Count <> 0 Then
FileName = Left (ILINE, Count - 1)
ILINE = Mid (ILINE, Count + 1)
End If

Count = Instr(1, ILINE, "^" , 1) 		
If Count <> 0 Then
DateDoc = Left (ILINE, Count - 1)
ILINE = Mid (ILINE, Count + 1)
End If

CompanyName = ILINE

If FileName <> "" And 	CodCompany <> "" And DateDoc <> "" And CompanyName <> "" Then
Redim Preserve Arr(NumInArr) 
Arr(NumInArr).FName = FileName
Arr(NumInArr).CodCompany = CodCompany
Arr(NumInArr).DateDoc = DateDoc
Arr(NumInArr).CompanyName = CompanyName
NumInArr = NumInArr + 1
Else
Msgbox "Некорректная строка в файле из Retail " + TmpILINE
End If
End If
Loop
Close fileNum

End Function

2. Не помогло, один там пробел посередине имени файла.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!