////////////////////////////////////////////////////// // InitNotes:初始化Notes环境,打开数据库 // szServerName:服务器名 // szDBName:数据库名 // szDirectory:Notes系统目录 // 返回值:1 - 成功 // 0 - 失败 int CNotes::InitNotes(char *szServerName,char *szDBName,char *szDirectory) { STATUS status; char szPathName[MAX_PATH]; char szpInitPara[1][260]; // 数据库路径名=服务器名+“!!”+数据库名 if (strlen(szServerName)==0) strcpy(szPathName,szDBName); else { strcpy(szPathName,szServerName); strcat(szPathName,"!!"); strcat(szPathName,szDBName); } strcpy(szpInitPara[0],szDirectory); if (!m_bOpened) NotesInitExtended(1,(char**)szpInitPara); // 初始化Notes环境 status=NSFDbOpen(szPathName,&hDb); // 打开数据库 if (status!=NOERROR) { m_bOpened=false; return 0; } m_bOpened=true; return 1; } /////////////////////////////////////////////////// // GetUnread:取得指定视图或文件夹中的未读文档数 // szViewName:视图或文件夹名 // 返回值:-1 - 失败 // 其他 - 未读文档数 int CNotes::GetUnread(char *szViewName) { STATUS status; char szUserName[MAX_PATH]; status=SECKFMGetUserName(szUserName); // 得到当前用户名 if (status!=NOERROR) { m_bGetUnread=false; return -1; } status=NSFDbGetUnreadNoteTable(hDb,szUserName,_ strlen(szUserName),true,&hTable); // 取得数据库的未读文档列表 if (status!=NOERROR) { m_bGetUnread=false; return -1; } if (hTable==NULL) { m_bGetUnread=false; return -1; } status=NSFDbUpdateUnread(hDb,hTable); // 更新未读文档列表 if (status!=NOERROR) { OSMemFree(hTable); m_bGetUnread=false; return -1; } status = NIFFindView(hDb, szViewName, &ViewID); file://得到数据库的某视图或文件夹 if (status!=NOERROR) { OSMemFree(hTable); m_bGetUnread=false; return -1; } status=NIFOpenCollection(hDb,hDb,ViewID,0,hTable,_ &hCollection,NULL,NULL,NULL,NULL); if (status!=NOERROR) { OSMemFree(hTable); m_bGetUnread=false; return -1; } status =NIFUpdateCollection(hCollection); if (status!=NOERROR) { NIFCloseCollection(hCollection); OSMemFree(hTable); m_bGetUnread=false; return -1; } COLLECTIONPOSITION CollPosition; CollPosition.Level = 0; CollPosition.Tumbler[0] = 0; HANDLE hBuffer; DWORD NotesFound; WORD SignalFlags; Status=NIFReadEntries(hCollection,&CollPosition,_ NAVIGATE_NEXT,1L,NAVIGATE_NEXT,0xFFFF,READ_MASK_NOTEID,_ &hBuffer,NULL,NULL,&NotesFound,&SignalFlags); if (status!=NOERROR) { NIFCloseCollection(hCollection); OSMemFree(hTable); m_bGetUnread=false; return -1; } int iViewUnread=0; NOTEID NoteID; BOOL fFirst=TRUE; unsigned int i; NOTEID* IdList; if (hBuffer != NULLHANDLE) { IdList = (NOTEID far *)OSLockObject(hBuffer); while(IDScan(hTable, fFirst, &NoteID)) // 依次取得hTable表中的文档号 { fFirst = FALSE; for (i=0; i if (NoteID==IdList[i]) { iViewUnread++; break; } } OSUnlockObject(hBuffer); OSMemFree(hBuffer); } NIFCloseCollection(hCollection); OSMemFree(hTable); m_bGetUnread=true; return iViewUnread; } ////////////////////////////////////////// // CloseNotes:关闭Notes数据库 void CNotes::CloseNotes() { if (m_bOpened) NSFDbClose(hDb); m_bOpened=false; m_bGetUnread=false; } |