User interface for polymorphic lookup

System, method, and computer product embodiments for proving a graphical user interface (GUI) for a GUI object are described. A computing device provides, within the GUI, a polymorphic lookup interface for retrieving a plurality of entity instances to relate to the GUI object. The computing device provides a plurality of types of entities within the polymorphic lookup interface. A type of entity selected from the plurality of types limits the possible entity instances that may be returned. Through the polymorphic lookup interface, the computing device enables a user to select two or more entity instances to relate to the GUI object. Each of the selected entity instances may be selected from a plurality of possible entity instances that are returned, where each possible entity instance is a same type of entity.

BACKGROUND

A user interface is commonly implemented within a software application to enable users to communicate with database systems. Particularly, a user interface may include lookup functions to enable users to quickly query information from the database. But, current database systems include vast amounts of data of diverse types, which may delay how efficiently the user interface can provide a result to the user through the lookup functions. Additionally, current user interfaces are limited in scope and are inflexible, which further reduces the usefulness provided by the lookup functions.

DETAILED DESCRIPTION

I. Example System Overview

FIG. 1shows an example database system1000used in accordance with some implementations. Database system1000may include different application servers1002and databases1004connected together by networking equipment. Different combinations of application servers1002and data servers may execute different application software1008and access data1006stored in databases1004.

User systems1014connect to application servers1002and databases1004through a network1012. Network1012and the networks connecting together application servers1002and databases1004may include any combination of local area networks (LANs), wide area networks (WANs), telephone networks, wireless networks (Wi-Fi), cellular networks, or the like, or any combination thereof. Database system1000and user systems1014may operate within a private enterprise network and/or may operate within a publically accessible web-based network.

User systems1014may include desktop computers, personal computers (PCs), work stations, laptop computers, tablet computers, handheld computing devices, mobile cellular phones, smartphones, terminals, or any other device capable of accessing network1012and database system1000. User systems1014use different protocols to communicate with database system1000over network1012, such as transfer control protocol and Internet protocol (TCP/IP), hypertext transfer protocol (HTTP), and/or file transfer protocol (FTP). In one example, user systems1014may operate a web browser or operate applications for sending and receiving HTTP signals to and from an HTTP server operating in database system1000.

Database system1000in conjunction with application software1008may provide an almost limitless variety of different services, such as providing software as a service (SaS), customer relationship management (CRM), enterprise resource planning (ERP), file sharing, web-based commerce, social networking, cloud-based computing and/or storage, or the like, or any combination thereof. Database system1000and/or network1012are alternatively referred to as the Internet, the cloud, and/or a cloud based computing system.

In one example, database system1000and application software1008may operate as a multi-tenant system (MTS). A multi-tenant system refers to a database system where different hardware and software are shared by one or more organizations represented as tenants1010. For example, database system1000may associate a first tenant1010A with an organization that sells airline services, associate a second tenant1010B with an organization that sells widgets, and associate a third tenant1008C with an organization that sells medical administration services. The multi-tenant system effectively operates as multiple virtual databases each associated with one of tenants1010.

A pod1016may include groups of application servers1002and databases1004that share an instance of the multi-tenant system. Different pods1016may operate independently but may share some processing equipment, such as routers and storage area networks (SANs). For example, tenants1010B and1010C may operate within pod1016and a user associated with tenant1010C may use user system1014A to access the multi-tenant system operating in pod1016. User system1014A sends requests from the user to a load balancer in pod1016and the load balancer forwards the requests to one of application servers1002within pod1016. Application server1002services the requests by executing application software1008within pod1016and/or accessing data1006from databases1004within pod1016.

Database system1000may include hundreds of pods1016and a database administrator may assign thousands of tenants1010to the same pod1016. The database administrator may add new pods1016for servicing additional tenants1010or may reassign tenants1010to different pods1016. For example, one of tenants1010may use a relatively large amount of processing bandwidth and/or use a relatively large amount of storage space. The database administrator may reassign that tenant1010to a different pod1016with more processing and/or storage bandwidth. Thus, the multi-tenant system may scale for almost any number of tenants and users.

FIG. 2shows a platform for a multi-tenant system (MTS)1020that may operate within database system1000ofFIG. 1. Multi-tenant system1020may comprise a collection of objects. The objects may refer to entities such as users, tenants, accounts, contacts, leads, opportunities, reports, cases, files, documents, orders, price books, products, solutions, forecasts, or any other definable category. Objects also may refer to instances of the entities such as the data for the individual users, tenants, accounts, contacts, leads, opportunities, reports, cases, etc.

Objects also may refer to tables1024that include fields or a schema describing the entities. For example, table1024A may define fields for customer contacts such as name, address, phone number, fax number, etc. The same or another table1024B may define fields for purchase orders such as customer, product, sale price, date, etc. Objects also may refer to records1026that contain data or instances for the entities and fields. For example, record1026A may contain the specific name, address, phone number, fax number, etc. for a particular customer contact and record1026C may contain the specific customer, product, sale price and date for a particular purchase order.

Multi-tenant system1020may use identifiers to maintain relationships between different objects. For example, application software1008may assign unique organization identifiers (org ids)1018A,1018B, and1018C to tenants1010A,1010B, and1010C, respectively. Application software1008then associates other objects with org ids1018.

For example, a user may log into multi-tenant system1020via user system1014. Application software1008accesses one of tables1024that associates a password for the user with tenant1010B. Application software1008then identifies different records1026B,1026D, and1026F associated with org id1018B and displays data from records1026B,1026D, and1026F to the user via user system1014. Application programmer interfaces (APIs) also may access data in multi-tenant system1020via user system1014in a same manner as users to maintain similar security protocols and access privileges.

In one example, application software1008may display a toolbar1030identifying different entities1028associated with tenant1010B. The user may select tabs in toolbar1030to view, edit, and/or create instances (data) of entities1028. For example, the user may select a tab associated with accounts entity1028A and select options for creating a new account1034. The user enters data for new account1034into fields1036and application software1008creates a record1026E containing the data. Application software1008assigns record1026E org id1018B for tenant B, an account identifier (acct id), and a record identifier (recd id) before storing record1026E in one of tables1024.

Multi-tenant system1020may establish relationships between different entities1028. For example, the user may associate different contacts1028B with account1034. The user may select a tab in toolbar1030associated with contacts1028B and enter contact information for a customer. Application software1008creates another record1026containing the contact information that includes the record id for account1034. Users accessing account1034can then also view associated contacts1028B.

Multi-tenant system1020enable users to create custom metadata1022B for tenant specific functions, objects, entities, categories, and/or data. For example, an administrator for tenant1010B, or a third party vendor, may create a custom entity1028C with a unique combination of fields1036and1038. Application software1008creates metadata1022B defining custom entity1028C and then accesses metadata1022B enabling users for tenant1010B to view, edit, and create custom records1026F for custom entity1028C.

Multi-tenant system1020also enable users to create and execute custom application software1022A and1022C. For example, the organization associated with tenant1010C may provide medical administration services. The administrator for tenant1010C, or a third party vendor, may create custom application software1022C that generates medical reports and/or manages medical records. Application software1008associates custom application software with org id1018C allowing users for tenant1010C to access custom application software1022C and generate and/or manage the medical reports and records.

In some implementations, multi-tenant system1020may associate users with user profiles and assign the users unique user identifiers (user ids). The user profiles may include a collection of data about a user, such as a name, a title, a phone number, a photo, a biographical summary, or a status. Multi-tenant system1020also may associate the users with permission profiles that determine which records1026and application software1008and1022the users may access. For example, a permission profile for a first user may allow access to data and software for a salesperson and a permission profile for a second user may allow access to data and software for an administrator.

A group may refer to a collection of users within an organization. In some implementations, a group may include users with a similar attribute or a similar membership or subscription. Multi-tenant system1020may assign groups of users unique group identifiers (group ids) and provide the groups various visibilities. For example, some groups may be private while others may be public. To become a member within a private group, users may request subscription to the group and acceptance by an administrator or group owner.

Social Networks

Multi-tenant system1020may associate social media with different records1026. For example, a user may select an icon1040to post a message1032relating to account1034. Application software1008generates social media data1042that includes message1032, org id1018B for tenant1010B, the record identifier for account1034, and a unique message identifier (msg id). Users associated with tenant1010B then may access account1034, view associated message1032, and create other related messages. For example, another user may access account1034and post a comment to message1032. Application software1008creates additional social media data that includes the comment, org id1018B for tenant1010B, and the msg id for message1032. Thus, users accessing account1034may not only view, edit, and/or create account1034, but also may view and/or post social media, such as message1032, associated account1034.

Message1032is alternatively referred to as a feed item and may include any type of information viewable in a feed, such as user-generated textual posts or comments, documents, audio data, image data, video data, or any other type of data. Feed items1032may include links or attach to other documents or files. Feed items1032may be associated via identifiers with one or more objects, entities, users, groups, records, or other feeds. Multi-tenant system1020also may transmit email notifications or other types of network communications to users associated with any object, entity, group, record, or feed.

More details regarding database system1000, multi-tenant system1020, and social networks are described in U.S. Pat. No. 7,730,478, titled METHOD AND SYSTEM FOR ALLOWING ACCESS TO DEVELOPED APPLICATIONS VIA A MULTI-TENANT ON-DEMAND DATABASE SERVICE, by Craig Weissman, issued on Jun. 1, 2010; U.S. Pat. No. 7,779,039, titled CUSTOM ENTITIES AND FIELDS IN A MULTI-TENANT DATABASE SYSTEM, by Weissman et al., issued on Aug. 17, 2010; and U.S. Pat. No. 8,478,722, titled ENTERPRISE LEVEL BUSINESS INFORMATION NETWORKING FOR CHANGES IN A DATABASE, by Peter Lee et al., issued on Jul. 2, 2013 which are all hereby incorporated by reference in its entirety and for all purposes.

FIG. 3shows an application server300for providing a polymorphic lookup interface according to some implementations. In an embodiment, application server300may be an implementation of application server1002ofFIG. 1. In an embodiment, application software1008may implement some or all of the functionalities of application server300. As shown, application server300includes user interface component314, inverted index engine316, inverted index database312, database management system (DBMS)302, and records database310. For ease of reference, descriptions ofFIG. 3may refer toFIG. 4, which depicts an example graphical user interface (GUI)400including polymorphic lookup interface401.

In an embodiment, application server300may provide GUI400for a GUI object, for example, “Create Event,” to a user via, for example, user system1014ofFIG. 1. As shown in GUI400ofFIG. 4, application server300may provide user field410, polymorphic lookup interface401, and save option414. In an embodiment, polymorphic lookup interface401may include visual icons for selectable entity types406, selected entity type404, and selected entity instances408. Polymorphic lookup interface401may also include search field402for receiving, from the user, a series of characters used in looking up possible entity instances.

Returning toFIG. 3, user interface component314may interface lookup functions and results provided by application server300with lookup results provided to user within polymorphic lookup interface401. In an embodiment, user interface component314receives selected entity type404from polymorphic lookup interface401of GUI400. Selected entity type404, represented as an “Accounts” icon in GUI400, may be selected by the user from selectable entity types406. In an embodiment, in a business management context, selectable entity types406may include “Accounts,” “Contacts,” “Leads,” and “Opportunities.” Upon receiving selected entity type404, user interface component314may forward selected entity type404to inverted index engine316to condition the types of results provided to polymorphic lookup interface401.

In an embodiment, user interface component314receives a series of characters from search field402. As a user inputs or updates the series of characters in search field402, user interface component314may receive the updated one or more characters and perform lookup functions based on the updated one or more characters. User interface component314may send the series of characters to inverted index engine316that performs efficient lookup of relevant search results.

In an embodiment, user interface component314provides visual icons for selected entity instances408within polymorphic lookup interface401. Selected entity instances408may represent a plurality of entity instances selected by a user to relate to a GUI object, such as “Create Event.” When GUI400is terminated, for example, when the user selects save option414, user interface component314may forward selected entity instances408to DBMS302or inverted index engine316. DBMS302may associate, within records database310, a plurality of selected entity instances408with a database object representing the GUI object of GUI400. Similarly, inverted index engine316may update inverted index database312to include the associations between selected entity instances408and the GUI object.

Inverted index engine316may perform efficient and fast lookup of possible entity instances desired by a user based on an input from search field402conditioned on selected entity type404. In an embodiment, inverted index engine316may access inverted index database312to speed up the processing of lookup functions. In an embodiment, inverted index engine316may be based on an improved implementation of an open source enterprise search platform such as, for example, the SOLR platform. These improvements may be described with respect to the functionality provided by the components of inverted index engine316.

Inverted index database312may be designed to store associations between words and record identifiers (IDs) such that each word may be associated with a plurality of record IDs. These associations may be stored in a dictionary format mapping words to respect lists of record IDs. In an embodiment, each of the record IDs may be associated with a corresponding entity instance containing the associated or mapped word. For example, a word “Gene” may be associated with a list of record IDs corresponding to the following entity instances: “GenePoint,” “Gene Tech,” and “Gene Institute.” By storing the lists of record IDs, inverted index engine316may look up the word directly for possible record IDs instead of requiring DMBS302to scan each record from records database310for any record containing that word.

In an embodiment, inverted index database312may include separate indexes for each type of selectable entity types406. By providing separate indexes, inverted index engine316may condition the returned entity instances based on selected entity type404. To implement the fast lookup functions, inverted index engine316may include index query component318, optimizer320, and record retrieval component322.

In contrast, a conventional Structured Query Language (SQL) based database, which does not maintain indexes based on words, implements searching scheme that are slow and inefficient. For example, when a user queries a specific word, the SQL-based database may need to fully scan all the content of the database because the SQL database cannot ensure that an inner portion of the record does not contain the queried word. By maintaining inverted index database312, inverted index316may perform a fast lookup of a plurality of record IDs corresponding to the queried word.

Index query component318queries inverted index database312for relevant record IDs based on an inputted series of characters received by user interface component314. In an embodiment, in addition to maintaining an index of words, inverted index database312may include indexes for a series of one or more characters. For example, inverted index database312may include separate indexes for one character, two characters, three characters, or four characters. In an embodiment, inverted index database312include a hierarchy of indexes such that matching a series of one or more characters may direct inverted index engine316to query a separate index containing the matching series of one or more characters.

For example, inverted index database312may include an index for two characters. User interface component314may receive two characters “Ge” before a user completely inputs the complete word such as, for example, “Gene.” Index query component318may query inverted index database312based on “Ge,” which may match the index for two character sequences. The “Ge” entry of the two character index may be further associated with a word index having words starting with “Ge.” By implementing the hierarchy of indexes, inverted index database312may be more efficiently maintained and more efficiently return relevant search results. Therefore, although the user has not completed typing a complete word, inverted index database312may return a plurality of record IDs from the word index having record IDs that corresponds to words starting with or containing “Ge.”

Optimizer component320may implement rules for prioritizing which entity instances are returned to the user enabling the user to more efficiently select a desired entity instance. When the user selects one of the returned entity instances, the selected entity instances may be saved in selected entity instances408field of polymorphic lookup interface. In an embodiment, a rule may apply to an input from search field402including two or more words. In this scenario, inverted index database312may additionally include indexes for a sequence of two more words. Optimizer component320may prioritize entity instance results provided by the multi-word index over entity instance results provided by the default one word index. For example, when a user inputs “John Smith” into search field402, optimizer component320may implement this rule to return “John Smith” first before returning other results, such as “Smith John.”

In an embodiment, instead of utilizing multi-word indexes, optimizer component320may implement relevancy scores for possible matching entity instances to prioritize the entity instances returned to the user in polymorphic lookup interface401. For example, for multi-word inputs, such as “John Smith,” optimizer component320may add higher scores to matching entity instances having an exact match or in the same order. Therefore, a matching entity instance having “John” appear before “Smith” may receive a higher score than another matching instance having “John” appear after “Smith.”

In an embodiment, optimizer component320may also assign or update relevancy scores based on other attributes of the matching entity instances returned to inverted index engine316. For example, each matching entity instance may have an associated page view popularity metric or the number of “hits” within a period of time. Additionally, matching entity instances associated with user field410may also have a higher relevancy score.

Record retrieval component322may retrieve, from records database310, the records corresponding to the record IDs returned to inverted index engine316. In an embodiment, record retrieval component322issues a query to DBMS302to query the records corresponding to the record IDs. Then, inverted index engine316may receive a plurality of records from DBMS302. In an embodiment, when record retrieval component322receives the plurality of records from DBMS302, optimizer component320may prioritize the records, each representing an entity instance, returned to the user.

DBMS302may implement functions for retrieving records from records database310. DBMS may also manage the associations, metadata, and record data stored in records database310. To provide the lookup functionality of polymorphic lookup interface401, DBMS302may include access rules component304, data retrieval component306, constraints component308, and linking component309.

In an embodiment, DBMS302may receive a query issued by record retrieval component322of inverted index engine316. The query may include a plurality of record IDs, each of which may identify a record from records database310. Data retrieval component304may retrieve, from records database310, the data records corresponding to the plurality of record IDs. Data retrieval component304may also retrieve metadata associated with each record ID. For example, metadata may include a popularity metric such as a number of “hits,” associated users, access permissions, creation dates, among other types of attributes of the record data.

Access rules component306may filter the queried record data based on access permissions to determine which records to return in the returned plurality of entity instances. For example, access rules component306may filter out queried record data having an associated access permission that indicate a user of user field410or the user operating GUI400does not have permission to access that record data.

Similarly, constraints component308may filter the queried record data based on other constraints applied to the queried record data or constraints stored within DBMS302. For example, a constraint may be to return the top most popular record data, e.g., record data having the most “hits.”

Linking component309may update the associations stored in records database310between the object represented by GUI400and selected entity instances408. In an embodiment, when GUI400is terminated, user interface314may receive selected entity instances408to associate with the GUI object, e.g., “Create Event,” or GUI400. For example, GUI400may be terminated when the user selects save option414to save the edits made to GUI400. The selected entity instances408may be forwarded to DBMS302where linking component309adds the associations to the GUI object within records database310. Therefore, application server300provides to user system1014ofFIG. 2polymorphic lookup interface401enabling a user to efficiently select a plurality of entity instances to relate to the GUI object represented by GUI400.

FIGS. 4-6illustrate example GUIs implementing polymorphic lookup interfaces according to some implementations. As described above,FIG. 4illustrates GUI400including polymorphic lookup interface401provided by, for example, application server300ofFIG. 3. When a user operating GUI400selects selected entity type404, represented as the “Accounts” visual icon, from selectable entity types406, GUI400may send selected entity type404to user interface component314of application server300. As shown, user cursor412indicates that the user may select the “Opportunity” entity type from selectable entity types406.

FIG. 500illustrates an example GUI500including polymorphic lookup interface501. As shown, the user has selected an “Accounts” entity type as represented by the “Accounts” icon of selected entity type504. GUI500may send selected entity type504of “Accounts” to application server300. Upon receiving selected entity type504, application server300may condition the returned entity instances to have that selected entity type504, e.g., to be an “Accounts” instance. The user may have typed “Gene” into search field502. Application server300may receive the type input characters and inverted index engine316may query inverted index database312for record IDs associated with the word “Gene.” Inverted index engine316may query DBMS302for a plurality of record data corresponding to record IDs returned by inverted index database312. Each of inverted index engine316and DBMS302may filter or prioritize the entity instances returned to user system1014. For example, as shown in GUI500, returned entity instances506depicts the five most likely entity instances corresponding to the input “Gene” of search field502. Upon selection of “Gene Tech” via cursor508, the user may associate the entity instance, “Gene Tech,” with the GUI object “Create Event.”

FIG. 600illustrates an example GUI600including polymorphic lookup interface601. When the user selects “Gene Tech” as a desired entity instance, GUI600may save the selected entity instance “Gene Tech” as one of selected entity instances606, each represented by a corresponding visual icon and associated entity type. For example, GUI600may save two entity instances, “Gene Tech” and “Acuity-1,000 Widgets,” to be related to the event to be created. The “Gene Tech” entity instance may be of an “Accounts” entity type as indicated by the file visual icon. Similarly, the “Acuity-1,000 Widgets” entity instance may be of an “Opportunity” entity type as indicated by the crown icon. Therefore, GUI600illustrates polymorphic lookup interface601enabling a user to relate two or more entity instances with a GUI object, such as “Create Event.” Each of the two or more entity instances may be provided via dropdown lists of possible entity instance results as shown inFIG. 5, from which the user may select a relevant entity instance.

II. Example Method

FIG. 7illustrates an example method700for providing a polymorphic lookup interface according to some implementations. Method700may be performed by processing logic that may comprise hardware (e.g., circuitry, dedicated logic, programmable logic, microcode, etc.), software (e.g., instructions running on a processing device), or a combination thereof. In an embodiment, steps of method700may be performed by components of application server300fromFIG. 3. For ease of reference and without limitation, descriptions of method700may refer to GUI500and polymorphic lookup interface401described with respect toFIGS. 3-4. Method700may apply to other GUIs, such as those described with respect toFIGS. 5-6.

In step702, application server300provides to a user, via user system1014ofFIGS. 1-2, polymorphic lookup interface401within GUI400for a GUI object, such as a “Create Event” object of fromFIG. 4. The provided polymorphic lookup interface401enables a user operating GUI400to relate multiple objects, specifically entity instances, with the GUI object.

In step704, application server300provides selectable entity types406options within polymorphic lookup interface401for conditioned search results. These selectable options may condition the type of entity instances to be queried by inverted index engine316or DBMS302in determining the plurality of entity instances to return to the user in GUI400. For example, in a software application for business development, selected entity types406may include “Accounts,” “Contacts,” “Leads,” and “Opportunities” among other types of search results.

In an embodiment, steps706-718describe functionalities provided by polymorphic lookup interface401that enables a user to select a plurality of entity instances to relate to the object represented by the GUI object of GUI400. Each of the selected entity instances may be assigned to a specific type of entity.

In step706, user interface component314receives a selected entity type within polymorphic lookup interface401. The selected entity type may be displayed as a visual icon corresponding to selected entity type404of GUI400. As described with respect toFIG. 3, inverted index engine316may condition the types of record IDs to query based on the selected entity type404such that a returned list of possible entity instances are all of the selected entity type404.

In step708, user interface component314receives, in real-time, one or more characters typed in search field402of polymorphic lookup interface401. Then, user interface component314forwards the updated or inputted characters to inverted index engine316.

In step710, inverted index engine316conducts an entity instance search based on the selected entity type and the one or more received characters of step708. In an embodiment, index query component318queries one or more indexes of inverted index database312to determine a list of record IDs, each of which may be related to information containing the sequence of characters. Record retrieval component322may query records database310via DBMS302to retrieve the record data corresponding to the list of record IDs. For example, data retrieval component304may query records database310for the data records. To provide the search result back to the user, data retrieval component304sends the queried data records to inverted index engine316.

In step712, application server300returns, to the user, a prioritized list of resulting entity instances of selected entity type400of step706. Particularly, access rules component306or constraints component308may filter out the matching data records from records database310and queried by data retrieval component304. In an embodiment, optimizer component320may implement scoring metrics and rules to specify an order of the returned list of possible entity instances to be selected by the user. For example, as shown by returned entity instances506, polymorphic lookup interface400may display the retrieved record data as ranked information, where most relevant or likely entity instances, such as “GenePoint” and “Gene Tech,” are provided near the top of the list.

In step714, user interface component314detects whether one or more updated characters have been typed into search field402of polymorphic lookup interface401. If one or more updated characters have been detected, method700proceeds to708.

In step716, GUI400relates selected entity instances to the GUI object of GUI400. For example, selected entity instances may be saved as selected entity instances408field of—polymorphic lookup interface401.

In step718, if an additional search is queried, method700proceeds to step706. Regardless of whether an additional search is queried, polymorphic lookup interface401displays the one or more selected entities within selected entity instances408field. If no more search is requested or when GUI400terminates, method700proceeds to step720. For example, application server300may detect the completion of the search when the user exits out of GUI400when, for example, save option414is selected by the user to save the information within GUI400for the GUI object “Create Event.”

In step720, upon completion of the search, linking component309links or associates the plurality of selected entity instances408with the database object corresponding to the GUI object of “Create Event.” In an embodiment, linking component309may save the relations within records database310.

III. Example Computer Implementation

Various embodiments, such as application servers1002or pod1016ofFIG. 1, can be implemented, for example, using one or more well-known computer systems, such as computer system800shown inFIG. 8. Computer system800can be any well-known computer capable of performing the functions described herein.

Computer system800includes one or more processors (also called central processing units, or CPUs), such as a processor804. Processor804is connected to a communication infrastructure or bus806.

Computer system800also includes a main or primary memory808, such as random access memory (RAM). Main memory808may include one or more levels of cache. Main memory808has stored therein control logic (i.e., computer software) and/or data.

Computer system800may also include one or more secondary storage devices or memory810. Secondary memory810may include, for example, a hard disk drive812and/or a removable storage device or drive814. Removable storage drive814may be a floppy disk drive, a magnetic tape drive, a compact disk drive, an optical storage device, tape backup device, and/or any other storage device/drive.

Removable storage drive814may interact with a removable storage unit818. Removable storage unit818includes a computer usable or readable storage device having stored thereon computer software (control logic) and/or data. Removable storage unit818may be a floppy disk, magnetic tape, compact disk, DVD, optical storage disk, and/any other computer data storage device. Removable storage drive814reads from and/or writes to removable storage unit818in a well-known manner.

According to an exemplary embodiment, secondary memory810may include other means, instrumentalities or other approaches for allowing computer programs and/or other instructions and/or data to be accessed by computer system800. Such means, instrumentalities or other approaches may include, for example, a removable storage unit822and an interface820. Examples of the removable storage unit822and the interface820may include a program cartridge and cartridge interface (such as that found in video game devices), a removable memory chip (such as an EPROM or PROM) and associated socket, a memory stick and USB port, a memory card and associated memory card slot, and/or any other removable storage unit and associated interface.

Computer system800may further include a communication or network interface824. Communication interface824enables computer system800to communicate and interact with any combination of remote devices, remote networks, remote entities, etc. (individually and collectively referenced by reference number828). For example, communication interface824may allow computer system800to communicate with remote devices828over communications path826, which may be wired and/or wireless, and which may include any combination of LANs, WANs, the Internet, etc. Control logic and/or data may be transmitted to and from computer system800via communication path826.

In an embodiment, a tangible apparatus or article of manufacture comprising a tangible computer useable or readable medium having control logic (software) stored thereon is also referred to herein as a computer program product or program storage device. This includes, but is not limited to, computer system800, main memory808, secondary memory810, and removable storage units818and822, as well as tangible articles of manufacture embodying any combination of the foregoing. Such control logic, when executed by one or more data processing devices (such as computer system800), causes such data processing devices to operate as described herein.