Возникла непонятная проблема. Некоторые записи метод getAllDocumentsByKey() не хочет находить
Вот что есть во View:
Вот что в логе:
SAP_log: 09.04.2013 15:21:26: CALL method findByTabNum1
SAP_log: 09.04.2013 15:21:26: findByTabNum1: tabNum = 00004226
SAP_log: 09.04.2013 15:21:26: findByTabNum1 doc = null
SAP_log: 09.04.2013 15:21:26: findByTabNum dc is empty !
SAP_log: 09.04.2013 15:21:26: findByTabNum1 return doc1 = null
SAP_log: 09.04.2013 15:21:26: COMPLETE method findByTabNum1 0 msec(total time).
Дальше по аналогии, view лог:
SAP_log: 09.04.2013 15:21:26: CALL method findByTabNum1
SAP_log: 09.04.2013 15:21:26: findByTabNum1: tabNum = 00005489
SAP_log: 09.04.2013 15:21:26: findByTabNum1 doc = null
SAP_log: 09.04.2013 15:21:26: findByTabNum dc is empty !
SAP_log: 09.04.2013 15:21:26: findByTabNum1 return doc1 = null
SAP_log: 09.04.2013 15:21:26: COMPLETE method findByTabNum1 16 msec(total time).
START - CALL method findByDepID1 in parseContent
SAP_log: 09.04.2013 15:21:26: findByDepID1: depID = 10000234
SAP_log: 09.04.2013 15:21:26: findByDepID1: Collection <dc> by key depID is empty !
SAP_log: 09.04.2013 15:21:26: docLotus1 = null
SAP_log: 09.04.2013 15:21:26: FINISH - COMPLETE method findByDepID1 in parseContent 0 msec(total time).
А вот эти нормально находит:
START - CALL method findByDepID1 in parseContent
SAP_log: 09.04.2013 15:21:26: findByDepID1: depID = 10000235
SAP_log: 09.04.2013 15:21:26: docLotus1 = 32EB97C8B5A1D37F442579FF007065B3
SAP_log: 09.04.2013 15:21:26: FINISH - COMPLETE method findByDepID1 in parseContent 16 msec(total time).
SAP_log: 09.04.2013 15:21:26: CALL method findByTabNum1
SAP_log: 09.04.2013 15:21:26: findByTabNum1: tabNum = 00001724
SAP_log: 09.04.2013 15:21:26: findByTabNum1 doc = A5D019278A8440B4C325786F005FC8C9
SAP_log: 09.04.2013 15:21:26: findByTabNum1 return doc1 = A5D019278A8440B4C325786F005FC8C9
SAP_log: 09.04.2013 15:21:26: COMPLETE method findByTabNum1 31 msec(total time).
SAP_log: 09.04.2013 15:21:26: CALL method findByTabNum1
SAP_log: 09.04.2013 15:21:26: findByTabNum1: tabNum = 00001725
SAP_log: 09.04.2013 15:21:26: findByTabNum1 doc = E93482DCB267D962C32572B90042FE41
SAP_log: 09.04.2013 15:21:26: findByTabNum1 return doc1 = E93482DCB267D962C32572B90042FE41
SAP_log: 09.04.2013 15:21:26: COMPLETE method findByTabNum1 31 msec(total time).
Прилагаю сами методы:
C++:
private lotus.domino.Document findByTabNum1(String tabNum) throws NotesException, IOException {
if(tabNum==null || tabNum.equals("")){
log("findByTabNum1: tabNum is Nothing or Empty");
return null;
}
if(view3==null){
log("findByTabNum1: view3 is Nothing");
return null;
}
log("findByTabNum1: tabNum = " + tabNum);
DocumentCollection dc = view3.getAllDocumentsByKey(tabNum);
lotus.domino.Document tmpdoc = null;
lotus.domino.Document doc = dc.getFirstDocument();
log("findByTabNum1 doc = "+doc);
if(dc.getCount() == 0) {
log("findByTabNum dc is empty !");
return null;
}
boolean isMoreThanOne = false;
while (doc!=null) {
if (!doc.isDeleted()) {
if (tmpdoc==null){
tmpdoc = doc;
}else{
isMoreThanOne = false;
break;
}
}
doc = dc.getNextDocument(doc);
}
if (isMoreThanOne) {
if (tmpdoc!=null) tmpdoc.recycle();
if (doc!=null) doc.recycle();
if (dc!=null) dc.recycle();
log("findByTabNum1: There are more than one emploees in DB with id = " + tabNum);
throw new RuntimeException("Error. There are more than one emploees in DB with id = " + tabNum);
}else{
if (tmpdoc==null){
if (doc!=null) doc.recycle();
if (dc!=null) dc.recycle();
log("findByTabNum1: There is no available(not conflict) doc with id = " + tabNum);
return null;
}else{
if (dc!=null) dc.recycle();
return tmpdoc;
}
}
}
C++:
private lotus.domino.Document findByDepID1(String depID) throws NotesException, IOException {
if(depID==null || depID.equals("")){
log("findByDepID1: depID is Nothing or Empty");
return null;
}
if(view1==null){
log("findByDepID1: view1 is Nothing");
return null;
}
log("findByDepID1: depID = " + depID);
DocumentCollection dc = view1.getAllDocumentsByKey(depID);
if(dc.getCount()==0) {
log("findByDepID1: Collection <dc> by key depID is empty !");
dc.recycle();
return null;
}
boolean isMoreThanOne = false;
lotus.domino.Document tmpdoc = null;
lotus.domino.Document doc = dc.getFirstDocument();
while (doc!=null) {
if (!doc.isDeleted()) {
if (tmpdoc==null){
tmpdoc = doc;
}else{
isMoreThanOne = false;
break;
}
}
doc = dc.getNextDocument(doc);
}
if (isMoreThanOne) {
if (tmpdoc!=null) tmpdoc.recycle();
if (doc!=null) doc.recycle();
if (dc!=null) dc.recycle();
log("findByDepID1: There are more than one departament in DB with id = " + depID);
throw new RuntimeException("Error. There are more than one departament in DB with id = " + depID);
}else{
if (tmpdoc==null){
if (doc!=null) doc.recycle();
if (dc!=null) dc.recycle();
log("findByDepID1: There is no available(not conflict) doc with id = " + depID);
return null;
}else{
if (dc!=null) dc.recycle();
return tmpdoc;
}
}
}
Мне еще интересно почему на каждый id во вью получается как бы по 2 записи минимум. И получается если находит такой вариант, то возвращает нормально 1 документ, если находит больше, то возвращает null и похоже создает новую такую же запись, т.е. добавляет к уже существующим.
Вообще сейчас обновление справочника проходит очень быстро(раньше это было часов 10-12, сейчас 5 минут! ), но возникла эта проблема с дублированием записей, помогите плиз, какие есть варианты ? Если что то нужно(код, скрины, вью) запрашивайте, предоставлю