Outlook Folder Index Class Prototype:
Job Description:
A memory resident index class is needed, to be used to retrieve items from an Outlook folder. The class is to be built on [login to view URL]*, which is similar to the Outlook Object Model but does not interfere with the Outlook Security Guard. Redemption also provides store events which can be used for indexing. If you would prefer to implement the same functionality on a different technology than Redemption, I am open to discuss this issue.
* [login to view URL]
Background:
Outlook searches are extremely slow. The fast table search is only available on Outlook 2007 and doesn’t allow searching certain fields. The index class prototype will later be implemented into an Add-In to speed up searches. Searches must be performed locally, because they must work in Outlook Online and Offline modes. Therefore WebDAV is NOT an appropriate technology.
## Deliverables
Performance:
It is expected, that indexing doesn’t have a major performance impact and searches are fast. This first version is a prototype only, which will be further optimized at a later point. (You might receive follow-up projects if the prototype is used.) I’ve been running tests on a 1.8 GHz Centrino machine, and I was able to locate any search string within a collection of 10 MB size within two seconds. I imagine, by using a hash table or dataset instead of a collection, performance will be even better, but again, I am open to discuss anything if you have a better idea.** The index will later run on folder with approx. 60000 items, approx. 10 fields will be indexed, resulting in an index size of approx. 10 MB.
** I can imagine a Dataset would be very performing and has the advantage of being able to specify an XML file with fields and indexes as data source, where data is persisted to while the indexer is not running. Data can then be retrieved by using SQL. A hash table might be faster while searching, though.
Functionality:
Build two classes [login to view URL] and IndexEntry.vb. IndexEntry represents the class which holds a single entry referring to an item. Index implements the hash table or dataset and methods to retrieve IndexEntries. If you are using a dataset, you might not need the IndexEntry class.
Implementation:
Please use a task folder for your first prototype. Create a custom item type with user properties and test your search on regular fields, as well as user properties. Implement methods, which allow searching the exact contents of a specific field (Field=’xxx’), and which allow searching all fields for a specific string (Record like ‘*xxx*’). The search return should always be a List(Of String), which contains EntryID fields of the found IndexEntries.
EntryID will also be the primary key field, which helps indexing. So an existing IndexEntry can be recognized. There must be various passes implemented to properly maintain the Index:
1. An initial pass after startup must add all items which have been inserted or updated in the underlying Outlook folder since the index has been persisted. (Background priority.)
2. An event driven method must add items immediately during runtime. The Redemption store object offers an event for that. (High priority.)
3. A regular clean-up event must remove items from the index which have been removed from the underlying Outlook folder. (Lower priority.)
I recommend using the LastModificationTime for tasks 1 and 3.
Platform:
The development should be performed by using VB.net***. You will receive a customized commercial version of [login to view URL] for your development, which is free from pop-up messages. You will need Outlook 2003 and Exchange Server 2003 for your development.
*** I am open to C#, but you must declare you will be using C# when you bid on the job. I prefer VB.net, because most of our code is VB.net. In this case speed is an argument, and I know C# is offering slightly enhanced performance here.
Notes:
If you believe you can get close to the performance provided by an index by writing native MAPI searches, instead. I am also open to this.
Your bid:
I am looking for an Outlook/Exchange coder, who is having a certain amount of experience in this field. I am repeatedly having jobs in this area of expertise and I am looking for someone to work with on an ongoing basis. I am looking for someone, who is able to produce clean, easily extendable code. Please show proof of expertise (past projects, code fragments, etc.) when you bid and explain in detail, which technologies (libraries, classes, etc.) you would possibly use to solve the current problem.
1) Complete and fully-functional working program(s) in executable form as well as complete source code of all work done.
2) Deliverables must be in ready-to-run condition, as follows (depending on the nature of the deliverables):
a) For web sites or other server-side deliverables intended to only ever exist in one place in the Buyer's environment--Deliverables must be installed by the Seller in ready-to-run condition in the Buyer's environment.
b) For all others including desktop software or software the buyer intends to distribute: A software installation package that will install the software in ready-to-run condition on the platform(s) specified in this bid request.
3) All deliverables will be considered "work made for hire" under U.S. Copyright law. Buyer will receive exclusive and complete copyrights to all work purchased. (No GPL, GNU, 3rd party components, etc. unless all copyright ramifications are explained AND AGREED TO by the buyer on the site per the coder's Seller Legal Agreement).
## Platform
VB.net/C#
Outlook 2003/Exchange Server 2003