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

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

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

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

Запрос Для Ftsearch

  • Автор темы ezhov
  • Дата начала
E

ezhov

а в этой формуле точно все правильно ?

@Trim(@If(Form="Department"| Form ="Subdivision"; ID; Form = "Person";tabNum;""))

Так надо что бы в конце пустые кавычки были
Код:
tabNum;""))
?

И если так надо можете пояснить почему так ?
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
38
Такова конструкция @-функции @If
Я бы @trim - убрал, коли это ИД то не должно там быть пробелов)

Код:
@if(
Form="Department":"Subdivision"; ID; 
Form = "Person"; tabNum;
"")
 
E

ezhov

А в Lotus Designer не показывает подсказки по Ctrl+пробел, как в Eclipse ?
 
H

hosm

там, где используется editor эклипсовый - подсказывает. В формах/подформах и вьюхах, например, его нет.
 
E

ezhov

там, где используется editor эклипсовый - подсказывает. В формах/подформах и вьюхах, например, его нет.

Я просто хочу изменить код java агента, а по ctrl+пробел он просто пробел делает, что я не так делаю ?может не там редактирую ?
 

Вложения

  • lotus1.jpg
    lotus1.jpg
    215,2 КБ · Просмотры: 648
H

hosm

Попробуйте в Domino Designer выбрать Preferences: Domino Designer\Java Editor\Use Eclipse-based java editor
 
E

ezhov

У меня возник такой вопрос, сейчас в коде агента идет подключение к базе:
<!--shcode--><pre><code class='java'>session = getSession();
loadProperties();
DbDirectory dir = session.getDbDirectory(properties.getProperty("db_directory"));
database = dir.openDatabase( properties.getProperty("db_adr") );[/CODE]

Потом при поиске с помощью search мы указываем формы,в каких надо искать:

<!--shcode--><pre><code class='java'>DocumentCollection dc = database.search("(Form =\"Department\" | Form =\"Subdivision\") & @IsUnavailable($Conflict) & met!=\"1\"& ID= \"" + depID + "\"");[/CODE]

А при поиске по view как указать по какой именно view надо искать ? Там ведь будет указываться только 1 параметр? значение по которому искать надо:

DocumentCollection dc = view.GetAllDocumentbyKey(depID);

Так ведь ?
 
E

ezhov

Товарищи, возникла проблема с предложенным ранее вариантом создания одной view для всех запросов поиска:

Создана view:
View Selection = SELECT (Form="Department" | Form="Subdivision" | Form = "Person") & met != "1" & @IsUnavailable($Conflict)
Column Value = @If(Form="Department":"Subdivision"; ID; Form = "Person"; tabNum;"")

в коде делаю 2 запроса поиска:

1 - с помощью getAllDocumentsByKey:
<!--shcode--><pre><code class='java'>DocumentCollection dc = view.getAllDocumentsByKey(parentId);
lotus.domino.Document doc = dc.getFirstDocument();
log("DocumentCollection doc in getDocIDByParentID1 = "+doc);[/CODE]

В логе:
<!--shcode--><pre><code class='java'>DocumentCollection doc in getDocIDByParentID1 = null[/CODE]

2 - старым способом
<!--shcode--><pre><code class='java'>DocumentCollection dc = database.search ("(Form =\"Department\" | Form = \"Subdivision\" )& ID=\""+parentId+"\" & met!=\"1\"");
lotus.domino.Document doc = dc.getFirstDocument();
log("DocumentCollection doc in getDocIDByParentID = "+doc);[/CODE]

В логе:
<!--shcode--><pre><code class='java'>DocumentCollection doc in getDocIDByParentID = 2F58CF0254668107442579F50023EF5E[/CODE]

В остальных методах поиска такая же ситуация, поиск по вьюхе возвращает null
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
180
колонка точно отсортирована?
Вручную в этом виде можно по значению parentId найти документ?
тип переменной parentId какой?

Добавлено: и вот так еще можно попробовать:
<!--shcode--><pre><code class='java'>DocumentCollection dc = view.getAllDocumentsByKey(parentId.toString());[/CODE]
 
E

ezhov

Да, скорее всего не была отсортирована:



Сделал 2 варианта:

1. поиск по одной общей вьюхе (отсортировал):


2. Сделал для каждого запроса поиска свою вьюху:
1 - SELECT Form = "Department" | Form = "Subdivision" & met!="1" & @IsUnavailable($Conflict), сортировка по ID
2 - SELECT Form="Department" | Form="Subdivision" & met!="1", сортировка по ID
3 - SELECT (Form = "Person") & @IsUnavailable($Conflict) & met!="1", сортировка по TabNum
Тоже сделал каждую вьюху с такими параметрами:


Ждем результатов обновления
 
E

ezhov

Товарищи, возникло несколько вопросов:
1. Пробовал создавать вьюхи с разными формулами отбора:
SELECT Form = "Department" | Form = "Subdivision" & met!="1" & @IsUnavailable($Conflict) & ID="10000233"
SELECT Form = "Department" | Form = "Subdivision" & met!="1" & ID="10000233"
SELECT Form = "Department" | Form = "Subdivision" & ID="10000233"
Находит всегда одно и тоже, в чем смысл met!="1" и @IsUnavailable($Conflict) ?

2. Делал поиск новым и старым способом, с getAllDocumentsByKey(parentId) и database.search ("(Form =\"Department\" | Form = \"Subdivision\" )& ID=\""+parentId+"\" & met!=\"1\""):
Поиск шел одинаково,когда в базе был 1 документ с id по которому искали, но на одной записи произошли отличия, старый метод нашел 11 записей(и их на самом деле 11) и это было видно:
SAP_log: 03.04.2013 17:45:19: parentId in getDocIDByParentID = 10000234
SAP_log: 03.04.2013 17:45:23: DocumentCollection doc in getDocIDByParentID = E58AE9846C4431D3442579FF00706581
SAP_log: 03.04.2013 17:45:23: dc.getCount()int = 11
а getAllDocumentsByKey(parentId) вернул null:
SAP_log: 03.04.2013 14:23:48: parentId in getDocIDByParentID1 = 10000234
SAP_log: 03.04.2013 14:23:48: DocumentCollection doc in getDocIDByParentID1 = null
SAP_log: 03.04.2013 14:23:48: dc.getCount()int = 0

Если делать во вьюхе SAPParentID отбор SELECT Form = "Department" | Form = "Subdivision" & ID="10000234", колонка ID сортирована находит все 11 записей:



3. В чем отличия getAllDocumentsByKey и getDocumentByKey и что вернет getDocumentByKey если найдет больше 1й записи в базе ? Может попробовать поиск с помощью getDocumentByKey , т.к. сейчас идет проверка на количество найденных записей в базе, и если их дольше 1 то кидается exeption
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
180
1. Значит у тебя всегда met!=1. @IsUnavailable($Conflict) - Защита от конфликтов, они могут быть, а может и не быть. Лучше чтобы была защита.
2. Вот это для меня мистика:
а getAllDocumentsByKey(parentId) вернул null:
SAP_log: 03.04.2013 14:23:48: parentId in getDocIDByParentID1 = 10000234
SAP_log: 03.04.2013 14:23:48: DocumentCollection doc in getDocIDByParentID1 = null
SAP_log: 03.04.2013 14:23:48: dc.getCount()int = 0
Можешь выложить 2 строки кода? Присваивание значения parentId = ... и присваивание dc = ...getAllDocumentsByKey...

3. getAllDocumentsByKey вернет коллекцию записей, то есть все, которые найдены по ключу. getDocumentByKey вернет первую найденную запись по этому ключу.


Добавлено: еще... первая колонка категоризована? а следующие две маленькие?
 
E

ezhov

2. Вот это для меня мистика:

Можешь выложить 2 строки кода? Присваивание значения parentId = ... и присваивание dc = ...getAllDocumentsByKey...

Присваивание и поиск нах-ся в разных методах:

C++:
String parentIDValue = lotusDoc.getItemValueString("Parent_id");
String parentDocIDValue = getDocIDByParentID1(parentIDValue);
...
C++:
private String getDocIDByParentID1(String parentId) throws NotesException, IOException{
log("parentId in getDocIDByParentID1 = "+parentId);
if (parentId == null || parentId.equals("") || parentId.equals("0")){
return null;
}
DocumentCollection dc = view2.getAllDocumentsByKey(parentId);
lotus.domino.Document doc = dc.getFirstDocument();
log("DocumentCollection doc in getDocIDByParentID1 = "+doc);

еще... первая колонка категоризована? а следующие две маленькие?
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
180
Нет, что-то тут не так с ключом поиска: parentId
Либо там пробел есть, а в документе нет, либо что-то еще не совпадает...
сделал в своей базенке, аналогичную ситуацию, код:
<!--shcode--><pre><code class='java'>import lotus.domino.*;

public class JavaAgent extends AgentBase {

public void NotesMain() {

try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();

// (Your code goes here)
Database db = agentContext.getCurrentDatabase();
View view = db.getView("DepartmentByDepID");
DocumentCollection dc = view.getAllDocumentsByKey("1111", true);
// и пробовал еще DocumentCollection dc = view.getAllDocumentsByKey("1111");
Document doc = dc.getFirstDocument();
System.out.println(doc.getUniversalID());
System.out.println(dc.getCount());
} catch(Exception e) {
e.printStackTrace();
}
}
}[/CODE]
Вернул:
5665F236CE054ABB44257B4400499E0D
2

Так что смотрите ключ поиска.
Я использую строку-константу для поиска. У вас это переменная String, по сути объект.
может действительно стоит так сделать:
<!--shcode--><pre><code class='java'>DocumentCollection dc = view.getAllDocumentsByKey(parentId.toString());[/CODE]
 
E

ezhov

Создал такой же тест, работаю в Lotus Designer когда нажимаю Run или Debug в консоли показывается
No arguments supplied
Usage: java AgentRunner <agent> [<database> [<server>]]
 
E

ezhov

Установил Target = None


Тоже самое
No arguments supplied
Usage: java AgentRunner <agent> [<database> [<server>]]
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
180
тогда сделайте кнопку в базе, в какой-нибудь форме.
@Command([ToolsRunMacro];<имя агента>) и смотрите результаты Java Debug consol клиента
 
E

ezhov

Во кусок лога, на котором всегда валится ошибка:
Хоть ты тресни непонятно почему она в этом месте валится. Сначала я думал изза того что находит больше одного документа, но потом удалили вообще запись, и все равно на ней валится ошибка

SAP_log: 05.04.2013 21:24:13: START - CALL method findByDepID1 in parseContent
SAP_log: 05.04.2013 21:24:13: findByDepID1 depID = 10000233
SAP_log: 05.04.2013 21:24:13: findByDepID1 return doc=04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:13: findByDepID1 doc=04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:13: docLotus1 = 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:13: FINISH - COMPLETE method findByDepID1 in parseContent 16 msec(total time).
SAP_log: 05.04.2013 21:24:13: *Before operation* For department [ID] = 10000233. [Parent_ID]: 10000232. [docIDValue]: 04CE48E05B8BACA2442579FF0070655F. [catDocIDValue]: EDCBC511A913B443442579FF0070653C
SAP_log: 05.04.2013 21:24:13: CALL method getDocIDByParentID1
SAP_log: 05.04.2013 21:24:13: parentId in getDocIDByParentID1 = 10000232
SAP_log: 05.04.2013 21:24:13: DocumentCollection doc in getDocIDByParentID1 = EDCBC511A913B443442579FF0070653C
SAP_log: 05.04.2013 21:24:13: dc.getCount()long = 1 dc.getCount()int = 1
SAP_log: 05.04.2013 21:24:13: docID1 in getDocIDByParentID1(dc.getCount() == 1) = EDCBC511A913B443442579FF0070653C
SAP_log: 05.04.2013 21:24:13: parentDocIDValue1 = EDCBC511A913B443442579FF0070653C
SAP_log: 05.04.2013 21:24:13: COMPLETE method getDocIDByParentID1 0 msec(total time).
SAP_log: 05.04.2013 21:24:13: *After operation* For department [ID] = 10000233. [Parent_ID]: 10000232. [docIDValue]: 04CE48E05B8BACA2442579FF0070655F. [catDocIDValue]: EDCBC511A913B443442579FF0070653C
SAP_log: 05.04.2013 21:24:13: CALL method findByTabNum1
SAP_log: 05.04.2013 21:24:13: findByTabNum1 tabNum = 00001722
SAP_log: 05.04.2013 21:24:13: findByTabNum1 doc = 59667F8F96AAC447C32572B900431F87
SAP_log: 05.04.2013 21:24:13: findByTabNum1 doc=59667F8F96AAC447C32572B900431F87
SAP_log: 05.04.2013 21:24:13: findByTabNum1 return doc1 = 59667F8F96AAC447C32572B900431F87
SAP_log: 05.04.2013 21:24:13: COMPLETE method findByTabNum1 47 msec(total time).
SAP_log: 05.04.2013 21:24:13: parentId in getDocIDByParentID = 10000233
SAP_log: 05.04.2013 21:24:17: DocumentCollection doc in getDocIDByParentID = 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:17: dc.getCount()long = 1 dc.getCount()int = 1
SAP_log: 05.04.2013 21:24:17: docID in getDocIDByParentID(dc.getCount() == 1) = 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:17: DocIDValue in bindingByCatDocID = 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:17: parentId in getDocIDByParentID1 = 10000233
SAP_log: 05.04.2013 21:24:17: DocumentCollection doc in getDocIDByParentID1 = 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:17: dc.getCount()long = 1 dc.getCount()int = 1
SAP_log: 05.04.2013 21:24:17: docID1 in getDocIDByParentID1(dc.getCount() == 1) = 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:17: DocIDValue1 in bindingByCatDocID = 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:17: *Before start*For employee [TabNum]: 00001722. [divIDValue]: 10000233. [catDocIDValue]: 04CE48E05B8BACA2442579FF0070655F[DocIDValue]: 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:17: *After start* For employee [TabNum]: 00001722. [divIDValue]: 10000233. [catDocIDValue]: 04CE48E05B8BACA2442579FF0070655F[DocIDValue]: 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:17: CALL method findByTabNum1
SAP_log: 05.04.2013 21:24:17: findByTabNum1 tabNum = 00005992
SAP_log: 05.04.2013 21:24:17: findByTabNum1 doc = 6D55C509175B7A7D44257AA90081F6B7
SAP_log: 05.04.2013 21:24:17: findByTabNum1 doc=6D55C509175B7A7D44257AA90081F6B7
SAP_log: 05.04.2013 21:24:17: findByTabNum1 return doc1 = 6D55C509175B7A7D44257AA90081F6B7
SAP_log: 05.04.2013 21:24:17: COMPLETE method findByTabNum1 46 msec(total time).
SAP_log: 05.04.2013 21:24:17: parentId in getDocIDByParentID = 10000233
SAP_log: 05.04.2013 21:24:21: DocumentCollection doc in getDocIDByParentID = 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:21: dc.getCount()long = 1 dc.getCount()int = 1
SAP_log: 05.04.2013 21:24:21: docID in getDocIDByParentID(dc.getCount() == 1) = 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:21: DocIDValue in bindingByCatDocID = 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:21: parentId in getDocIDByParentID1 = 10000233
SAP_log: 05.04.2013 21:24:21: DocumentCollection doc in getDocIDByParentID1 = 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:21: dc.getCount()long = 1 dc.getCount()int = 1
SAP_log: 05.04.2013 21:24:21: docID1 in getDocIDByParentID1(dc.getCount() == 1) = 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:21: DocIDValue1 in bindingByCatDocID = 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:21: *Before start*For employee [TabNum]: 00005992. [divIDValue]: 10000233. [catDocIDValue]: 04CE48E05B8BACA2442579FF0070655F[DocIDValue]: 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:21: *After start* For employee [TabNum]: 00005992. [divIDValue]: 10000233. [catDocIDValue]: 04CE48E05B8BACA2442579FF0070655F[DocIDValue]: 04CE48E05B8BACA2442579FF0070655F
SAP_log: 05.04.2013 21:24:21: START - CALL method findByDepID1 in parseContent
SAP_log: 05.04.2013 21:24:21: findByDepID1 depID = 10000234
SAP_log: 05.04.2013 21:24:21: Error process file D:\Lotus\ExportMail\SAPtoLotus_2013-04-05_2510.xml
SAP_log: 05.04.2013 21:24:21: java.lang.NullPointerException
at SAPToLotus.findByDepID1(Unknown Source)
at SAPToLotus.parseContent(Unknown Source)
at SAPToLotus.parseXMLFile(Unknown Source)
at SAPToLotus.NotesMain(Unknown Source)
at lotus.domino.AgentBase.runNotes(Unknown Sou
SAP_log: 05.04.2013 21:24:21: java.lang.NullPointerException
at SAPToLotus.findByDepID1(Unknown Source)
at SAPToLotus.parseContent(Unknown Source)
at SAPToLotus.parseXMLFile(Unknown Source)
at SAPToLotus.NotesMain(Unknown Source)
at lotus.domino.AgentBase.runNotes(Unknown Sou lotus.domino.NotesThread.run(Unknown Source)
 
Мы в соцсетях:

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