I don't do these that often because I don't usually have that much to add. When I do, its because I think something may really help.
I've been driven crazy recently by a couple of type-ahead names in my 8.5 client. You see, someone I communicate for business with all the time sent me an email from an alternate account. Like a Gmail account only even more of a problem -- its an address at one of her clients. Ever since, whenever I type her name the wrong one comes up and if I'm not careful I send the message out. I've deleted the "recent contacts" entry a few times -- but it keeps coming back because that address does get used sometimes.
I wrote a really quick agent to run in my personal address book (my contacts database). It checks each "common name" in the recent contacts view against the ($Users) view in my personal address book and the NAMES.NSF file on my current mail server. If it finds an entry -- and that entry is from a "Person" document (so it filters out the recent contacts documents) then it deletes the recent contact on the assumption that for the same common name, I only want to use the entry that's actually in my address books. The agent runs on new or updated documents.
Warning: There's a reason why the client doesn't do this by default. Its not for everyone. Many people in different situations would find this less than desirable behavior -- especially in a corporate "internally focused" environment. For those of us in this little community, however, I think this may be of some use.
SELECT @All;
----------------------- This part creates a local variable "SNAME"
----------------------- which is the name to search for.
----------------------- I stole this bit of code from the sorted name
----------------------- column in the "Recent Contacts" view.
FN_LN := FirstName + " " + LastName;
LN_FN := @Trim(@Subset(LastName;1)) + ", " + @Trim(@Subset(FirstName;1));
varContactName := @If(Firstname = "" & LastName = "" & CompanyName != ""; CompanyName;
FirstName = "" & LastName != ""; LastName;
Lastname = "" & FirstName != ""; FirstName;
@IsUnavailable(NameDisplayPref) & FN != ""; LN_FN;
NameDisplayPref = "1" | NameDisplayPref = 1; FN_LN;
LN_FN);
SNAME := @If(@LowerCase(type) = @LowerCase("GrOuP"); ListName; @If(@Trim(AltFullNameSort)!="";AltFullNameSort;varContactName ));
----------------------- This part does the lookup to the local names
----------------------- file (which is where the agent is running) and pulls the form field
----------------------- we check for an error state on the lookup, because there
----------------------- will often be no match found.
N1 := @DbLookup("":"NoCache" ; "":"" ; "($Users)" ; SNAME ; "form" );
N1 := @If(@IsError(n1) ; "" ; n1) ;
----------------------- Now do the same thing against the domino
----------------------- directory on the server (which I've hardcoded
----------------------- as Names.nsf in this agent)
N2 := @DbLookup("":"NoCache" ; @Subset(@MailDbName; 1) : "Names.nsf" ; "($Users)" ; SNAME ; "form" );
N2 := @If(@IsError(n2) ; "" ; n2) ;
----------------------- Clean up and concatenate the two lookups, which
----------------------- will give us either the name of the FORM
----------------------- of any found documents, or an empty string if no
----------------------- records were found. Then we can check
----------------------- for any existing person documents. If we find them,
----------------------- delete the "recent contact" entry.
n1 := @Trim(@Unique(@Explode(n1; ",") : @Explode(n3; ",")));
@If( @IsMember("Person" ; n1) ; @DeleteDocument ; "")