DWORD CLotusNote::Close() { STATUS sr; if (m_hnote == NULL) return ERR_OK; if (!m_closeondestroy) return ERR_OK; sr = NSFNoteClose(m_hnote); m_hnote = NULL; // se mantine el identificador de nota return ERR_OK; }
HANDLE NotesHelper::CreateNotesMessage(const std::tstring& toRecipients, const std::tstring& ccRecipients, const std::tstring& bccRecipients, const std::tstring& subject, const std::tstring& body, const std::tstring& from) { InitialiseSession(); NOTEHANDLE hMemo = 0; if(NOERROR != NSFNoteCreate(m_hMailBox, &hMemo)) throw CppUnitException(_T("Failed to create a note"), __LINE__, _T(__FILE__)); try { SetMemoText(hMemo, FIELD_FORM, MAIL_MEMO_FORM); SetMemoText(hMemo, MAIL_ENTERSENDTO_ITEM, Workshare::Conversions::T22A(toRecipients.c_str())); SetMemoText(hMemo, MAIL_ENTERCOPYTO_ITEM, Workshare::Conversions::T22A(ccRecipients.c_str())); SetMemoText(hMemo, MAIL_ENTERBLINDCOPYTO_ITEM, Workshare::Conversions::T22A(bccRecipients.c_str())); SetMemoText(hMemo, MAIL_FROM_ITEM, Workshare::Conversions::T22A(from.c_str())); SetMemoText(hMemo, MAIL_SUBJECT_ITEM, Workshare::Conversions::T22A(subject.c_str())); SetMemoText(hMemo, MAIL_BODY_ITEM, Workshare::Conversions::T22A(body.c_str())); SetMemoText(hMemo, MAIL_DELIVERYPRIORITY_ITEM, "Normal"); SetMemoText(hMemo, MAIL_DELIVERYREPORT_ITEM, "Basic"); SetMemoText(hMemo, MAIL_RETURNRECEIPT_ITEM, "No"); TIMEDATE tdCurrent; OSCurrentTIMEDATE(&tdCurrent); SetMemoDate(hMemo, MAIL_COMPOSEDDATE_ITEM, tdCurrent); SetMemoDate(hMemo, MAIL_POSTEDDATE_ITEM, tdCurrent); STATUS status = NSFNoteUpdate(hMemo, UPDATE_FORCE); if(NOERROR != status) throw CppUnitException(_T("Failed to update the note"), __LINE__, _T(__FILE__)); return hMemo; } catch(...) { NSFNoteClose(hMemo); return 0; } }
_declspec ( dllexport ) STATUS ATOM_NSFNoteClose(HANDLE hNote) { return NSFNoteClose(hNote); }
/** eus_ReplaceDesignNote( *** Replaces the specified design-element note in a target database with its given counterpart in a source database. Any "Do Not Replace/Refresh" property on the design note in the target database is ignored. Upon replacement, any specified design-class property is set and the "Do Not Replace/Refresh" property is set to false. --- parameters & return ----- h_DB_TARGET: handle to the target database us_NOTE_CLASS: the class of the note to be removed from the target database and, if the class is a unique-note class and the source NoteID was not provided (nid_SRC), the class of the replacement note in the source database pc_NOTENM: Optional. Pointer to the name of the design-element note to be removed from the target database. Required if the note class (us_NOTE_CLASS) is not of the unique-note type. If the note class is of the unique-note type, the parameter is ignored. h_DB_SRC: handle to the source database nid_SRC: Optional. NoteID of the replacement design-element. Required if the note class is not of the unique-note type. If of the unique-note type and not provided, procedure will look up the counterpart replacement note using the note-class parameter. pc_CLASSTITLE: Optional. For design element of non-unique type, pointer to the design-class name to use if the caller wishes to set the design-class property on the replacement design element. For icon notes, parameter serves instead as a flag to indicate whether the $TITLE item on the icon note to be replaced should replace the $TITLE item on the replacement note. (The $TITLE item contains the database title, class name, design-class name and database categories associated with the database.) Parameter is ignored if the class specified in us_NOTE_CLASS is of a different unique type. Pass NULL or the null-string if no design-class name should be set. pnid: Optional Output. Address of the variable in which to store the NoteID of the replacement note in the target database after replacement has been accomplished. If NULL on pass, output is suppressed. RETURN: eus_SUCCESS if no error occured ERR_MEMORY if insufficient-memory condition is encountered the Notes API error code otherwise --- suggested enhancement --- 9/12/99 PR: incorporate flag input for whether to honor the "Do Not Replace/Refresh" property before carrying out the replacement --- revision history -------- 2/22/00 PR + minor documentation adjustment + to prevent "corrupted note" error message in Notes 4.5.1 client, added OPEN_EXPAND flag when opening notes to be signed 9/12/99 PR + recast to accommodate replacement of any design element + completed standard documentation + moved into standard library 1/22/99 PR: created */ STATUS eus_ReplaceDesignNote( DBHANDLE h_DB_TARGET, const WORD us_NOTE_CLASS, char pc_NOTENM[], DBHANDLE h_DB_SRC, const NOTEID nid_SRC, char pc_CLASSTITLE[], NOTEID *const pnid) { const BOOL f_SPECIAL_DESIGN_NOTE = !!(us_NOTE_CLASS & NOTE_CLASS_SINGLE_INSTANCE); NOTEID nid, nid_src; NOTEHANDLE h; STATUS us_err; if (! ( h_DB_TARGET && us_NOTE_CLASS && (!pc_NOTENM ? f_SPECIAL_DESIGN_NOTE : TRUE) && h_DB_SRC && h_DB_TARGET != h_DB_SRC && (!f_SPECIAL_DESIGN_NOTE ? nid_SRC : TRUE))) return !eus_SUCCESS; if (pnid) *pnid = NULL; //if this is a unique design note we're replacing and we don't yet // have the NoteID of the replacement note, get that NoteID if (!(nid_src = nid_SRC) && f_SPECIAL_DESIGN_NOTE) if (us_err = NSFDbGetSpecialNoteID( h_DB_SRC, (WORD) (SPECIAL_ID_NOTE | us_NOTE_CLASS), &nid_src)) return us_err; //if we're replacing an icon note but the caller wishes to preserve the // current set of database information (e.g. its title)... if (NOTE_CLASS_ICON == us_NOTE_CLASS && pc_CLASSTITLE) { const WORD US = (WORD) strlen( FIELD_TITLE); BLOCKID bid; //open the icon note to be replaced if (us_err = NSFDbGetSpecialNoteID( h_DB_TARGET, (WORD) (SPECIAL_ID_NOTE | NOTE_CLASS_ICON), &nid)) { if (ERR_SPECIAL_ID != us_err) return us_err; }else { if (us_err = NSFNoteOpen( h_DB_TARGET, nid, NULL, &h)) return us_err; //if the $TITLE item for some reason isn't present... if (us_err = NSFItemInfo( h, FIELD_TITLE, US, &bid, NULL, NULL, NULL)) { if (ERR_ITEM_NOT_FOUND != us_err) goto errJump; //delete the icon note from the target database in // preparation for ensuing replacement NSFNoteClose( h); if (us_err = NSFNoteDelete( h_DB_TARGET, nid, NULL)) return us_err; //else undertake preservation of the original $TITLE item... }else { NOTEHANDLE h_mem; //create a holder note in memory and place a copy of the item // in it if (us_err = NSFNoteCreate( h_DB_TARGET, &h_mem)) goto errJump; if (us_err = NSFItemCopy( h_mem, bid)) { NSFNoteClose( h_mem); goto errJump; } //close the icon note to be replaced, then carry out the // replacement NSFNoteClose( h); if (us_err = NSFNoteDelete( h_DB_TARGET, nid, NULL)) { NSFNoteClose( h_mem); return us_err; } if (us_err = NSFDbCopyNote( h_DB_SRC, NULL, NULL, nid_src, h_DB_TARGET, NULL, NULL, &nid, NULL)) { NSFNoteClose( h_mem); return us_err; } //open the new icon note in the target database and remove // its $TITLE item if (us_err = NSFNoteOpen( h_DB_TARGET, nid, OPEN_EXPAND, &h)) { NSFNoteClose( h_mem); return us_err; } if (us_err = eus_RemoveItem( h, FIELD_TITLE, ebid_NULLBLOCKID)) { NSFNoteClose( h_mem); goto errJump; } //copy the in-memory note's $TITLE item to the icon note, // then close the in-memory note if (us_err = NSFItemInfo( h_mem, FIELD_TITLE, US, &bid, NULL, NULL, NULL)) { NSFNoteClose( h_mem); goto errJump; } us_err = NSFItemCopy( h, bid); NSFNoteClose( h_mem); if (us_err) goto errJump; //sign & save the new icon note if (us_err = NSFNoteSign( h)) goto errJump; if (us_err = NSFNoteUpdate( h, NULL)) goto errJump; } //if (us_err = NSFItemInfo( h, FIELD_TITLE, } //if (us_err = NSFDbGetSpecialNoteID( h_DB_TARGET, //if $TITLE preservation failed because the icon note or the item // itself wasn't present... if (us_err) { //open, sign, save & close the icon note in the source database if (us_err = NSFNoteOpen( h_DB_SRC, nid_src, OPEN_EXPAND, &h)) return us_err; if (us_err = NSFNoteSign( h)) goto errJump; if (us_err = NSFNoteUpdate( h, NULL)) goto errJump; NSFNoteClose( h); //copy the replacement note over to the target database if (us_err = NSFDbCopyNote( h_DB_SRC, NULL, NULL, nid_src, h_DB_TARGET, NULL, NULL, &nid, NULL)) return us_err; } //if (us_err) //else follow a regular replacement process... }else { //delete the design note from the target database if (us_err = eus_RemoveDesignNote( h_DB_TARGET, us_NOTE_CLASS, pc_NOTENM)) return us_err; //copy the note in the template to the target database if (us_err = NSFDbCopyNote( h_DB_SRC, NULL, NULL, nid_src, h_DB_TARGET, NULL, NULL, &nid, NULL)) return us_err; //if requested, change the inheritance name on the form to the class // name provided and ensure that the flag "Do not allow // Replace/Refresh to modify" is not set if (pc_CLASSTITLE && *pc_CLASSTITLE && !f_SPECIAL_DESIGN_NOTE) { char * pc_flags; if (us_err = NSFNoteOpen( h_DB_TARGET, nid, NULL, &h)) return us_err; if (us_err = eus_RemoveItem( h, DESIGN_CLASS, ebid_NULLBLOCKID)) goto errJump; if (us_err = NSFItemSetText( h, DESIGN_CLASS, pc_CLASSTITLE, (WORD) strlen( pc_CLASSTITLE))) goto errJump; if (us_err = eus_AttemptCopyTextItemContent( h, DESIGN_FLAGS, NULL, &pc_flags, NULL)) goto errJump; if (pc_flags) { char * pc = strrchr( pc_flags, DESIGN_FLAG_PRESERVE); if (pc) { if (us_err = eus_RemoveItem( h, DESIGN_FLAGS, ebid_NULLBLOCKID)) { free( pc_flags); goto errJump; } memmove( pc, pc + 1, pc_flags + strlen( pc_flags) - pc + 1); if (us_err = NSFItemSetText( h, DESIGN_FLAGS, pc_flags, (WORD) strlen( pc_flags))) { free( pc_flags); goto errJump; } } //if (pc) free( pc_flags); } //if (pc_flags) if (us_err = NSFNoteSign( h)) goto errJump; us_err = NSFNoteUpdate( h, NULL); errJump: NSFNoteClose( h); } //if (pc_CLASSTITLE && *pc_CLASSTITLE) } //if (NOTE_CLASS_ICON == us_NOTE_CLASS && if (pnid && !us_err) *pnid = nid; return us_err; } //eus_ReplaceDesignNote(
_declspec ( dllexport ) WORD GetServerNamesEx(char retServerNames[MAX_SERVERS][MAXPATH]) { BOOL status = NOERROR; char szLocation[MAXENVVALUE]; char szPAB[MAXENVVALUE]; HANDLE db; char full_netpath[MAXPATH-1]; NOTEID view_id; HCOLLECTION hCollection; COLLECTIONPOSITION pCollPosition; HANDLE hBuffer; DWORD NumberReturned = 0; NOTEID *IdList; NOTEHANDLE note; char szFieldName[80] = { 0 }; char szFieldType[80] = { 0 }; WORD retServerCount = 0; bool bUseLocal = false; // first, get the name of the current location status = OSGetEnvironmentString("Location", szLocation, MAXENVVALUE); if (status == TRUE) { char *pb = strchr(szLocation, ','); if (pb != NULL) *pb = 0 ; } status = OSGetEnvironmentString("MAILSERVER", szPAB, MAXENVVALUE); if (status == TRUE) { char *pb = strchr(szPAB, ','); if (pb != NULL) *pb = 0 ; } if (status = OSPathNetConstruct(NULL, szPAB, _T("names.nsf"), full_netpath)) { printf("unable to open the public NAB %s!!names.nsf\n", szFieldName); return 0; } if (status = NSFDbOpen (full_netpath, &db)) return 0; if (bUseLocal) { // choose local PAB view if (status = NIFFindView(db, _T("Connections"), &view_id)) { NSFDbClose(db); return 0; } } else { // choose server list from server Directory if (status = NIFFindView(db, _T("Servers"), &view_id)) { NSFDbClose(db); return 0; } } if (status = NIFOpenCollection( db, db, view_id, 0, NULLHANDLE, &hCollection, NULL, NULL, NULL, NULL )) { NSFDbClose(db); return 0; } pCollPosition.Level = 0; pCollPosition.Tumbler[0] = 1; if (status = NIFReadEntries(hCollection, &pCollPosition, NAVIGATE_CURRENT, 1L, NAVIGATE_NEXT, 0xFFFFFFFF, READ_MASK_NOTEID, &hBuffer, NULL, NULL, &NumberReturned, NULL)) { NIFCloseCollection(hCollection); NSFDbClose(db); return 0; } strcpy_s(retServerNames[retServerCount++], MAXPATH, _T("Local")); if (NumberReturned != 0) { if (hBuffer != NULLHANDLE) { IdList = (NOTEID far *)OSLockObject(hBuffer); for (DWORD i=0; i<(DWORD)NumberReturned; i++) { if (status = NSFNoteOpen( db, IdList[i], 0, ¬e)) { // skip categories } else { // scan documents WORD lenFieldName = NSFItemGetText(note, (bUseLocal) ? _T("Destination") : _T("ServerName"), szFieldName, sizeof(szFieldName)); strcpy_s(retServerNames[retServerCount++], MAXPATH, szFieldName); status = NSFNoteClose(note); } } OSUnlockObject(hBuffer); OSMemFree(hBuffer); } } if (status) { NIFCloseCollection(hCollection); NSFDbClose(db); return 0; } if (status = NIFCloseCollection(hCollection)) { NSFDbClose(db); return 0; } if (status = NSFDbClose(db)) return 0; return retServerCount; }