Sign up to receive free email alerts when patent applications with chosen keywords are publishedSIGN UP

Abstract:

Disclosed are systems, apparatus, and methods for identifying and
processing duplicative records in one or more database systems. In
various implementations, a first data object may be created and stored in
a first database system, where the first data object includes a plurality
of data fields capable of storing a plurality of data values. A trigger
function may be executed in response to creating the first data object,
where the trigger function causes one or more servers to determine if one
or more existing data objects stored in the second database system match
the first data object, and where the trigger function further causes one
or more servers in the first database system to retrieve one or more data
values from the one or more existing data objects. The retrieved one or
more data values may be stored in one or more data fields of the first
data object.

Claims:

1. A method comprising: creating a first data object stored in a first
database system, wherein the first data object includes a plurality of
data fields capable of storing a plurality of data values; executing a
trigger function in response to creating the first data object, wherein
the trigger function causes one or more servers in a second database
system to determine if one or more existing data objects stored in the
second database system include one or more data values that match data
values included in the first data object, and wherein the trigger
function further causes one or more servers in the first database system
to retrieve one or more data values from the one or more existing data
objects; and storing the retrieved one or more data values in one or more
data fields of the first data object.

2. The method of claim 1, wherein the executing and storing are part of
an automated process executed by one or more servers of the first
database system.

3. The method of claim 1, wherein the plurality of data fields are
capable of being displayed as display fields in a user interface of a
computer system.

4. The method of claim 3, wherein the retrieved one or more data values
are displayed to a user of the computer system via the user interface.

5. The method of claim 4, wherein the plurality of data fields store data
for a form capable of receiving information from a user, and wherein the
retrieved one or more data values are displayed to the user in one or
more display fields of the form prior to the user completing the form.

6. The method of claim 1 further comprising creating a link between the
first data object and the one or more existing data objects, wherein the
link automatically applies a change from one data object to another.

7. The method of claim 1, wherein the first data object is a record
stored in a multi-tenant database system and is capable of storing one or
more data values contributed by a user of the multi-tenant database
system.

8. The method of claim 7, wherein the record is a type of record selected
from the group consisting of an account, contact, lead, and opportunity.

9. The method of claim 8, wherein the determining is based on one or more
data values selected from the group consisting of a phone number, a name,
an address, a company name, a professional organization name, an employee
identifier, and an email address.

10. The method of claim 8, wherein the first data object and the one or
more existing data objects are different types of records.

11. The method of claim 1, wherein the retrieved one or more data values
include information aggregated from a distributed group of users and
entities.

12. The method of claim 1, wherein the first database system and the
second database system are operated by the same entity.

13. A non-transitory machine-readable medium carrying one or more
sequences of instructions which, when executed by one or more processors,
cause the one or more processors to carry out the steps of: creating a
first data object stored in a first database system, wherein the first
data object includes a plurality of data fields capable of storing a
plurality of data values; executing a trigger function in response to
creating the first data object, wherein the trigger function causes one
or more servers in a second database system to determine if one or more
existing data objects stored in the second database system include one or
more data values that match data values included in the first data
object, and wherein the trigger function further causes one or more
servers in the first database system to retrieve one or more data values
from the one or more existing data objects; and storing the retrieved one
or more data values in one or more data fields of the first data object.

14. The machine-readable medium of claim 13, wherein the plurality of
data fields store data for a form capable of receiving information from a
user, and wherein the retrieved one or more data values are displayed to
the user in one or more display fields of the form prior to the user
completing the form.

15. The machine-readable medium of claim 13 further comprising creating a
link between the first data object and the one or more existing data
objects, wherein the link automatically applies a change from one data
object to another.

16. The machine-readable medium of claim 13, wherein the first data
object is a record stored in a multi-tenant data base system, and wherein
the record is a type of record selected from the group consisting of an
account, contact, lead, and opportunity.

17. The machine-readable medium of claim 16, wherein the determining is
based on one or more data values selected from the group consisting of a
phone number, a name, an address, a company name, a professional
organization name, an employee identifier, and an email address.

18. An apparatus comprising: a processor; and one or more stored
sequences of instructions which, when executed by the processor, cause
the processor to carry out the steps of: creating a first data object
stored in a first database system, wherein the first data object includes
a plurality of data fields capable of storing a plurality of data values;
executing a trigger function in response to creating the first data
object, wherein the trigger function causes one or more servers in a
second database system to determine if one or more existing data objects
stored in the second database system include one or more data values that
match data values included in the first data object, and wherein the
trigger function further causes one or more servers in the first database
system to retrieve one or more data values from the one or more existing
data objects; and storing the retrieved one or more data values in one or
more data fields of the first data object.

19. The apparatus of claim 18, wherein the plurality of data fields store
data for a form capable of receiving information from a user, and wherein
the retrieved one or more data values are displayed to the user in one or
more display fields of the form prior to the user completing the form.

20. The apparatus of claim 18 further comprising creating a link between
the first data object and the one or more existing data objects, wherein
the link automatically applies a change from one data object to another.

21. The apparatus of claim 18, wherein the first data object is a record
stored in a multi-tenant data base system, and wherein the record is a
type of record selected from the group consisting of an account, contact,
lead, and opportunity.

22. The apparatus of claim 21, wherein the determining is based on one or
more data values selected from the group consisting of a phone number, a
name, an address, a company name, a professional organization name, an
employee identifier, and an email address.

Description:

CLAIM OF PRIORITY

[0001] This application claims the benefit of U.S. Provisional Patent
Application 61/545,259 entitled SYSTEMS AND METHODS FOR REAL-TIME
DE-DUPLICATION, by Christopher Kemp, filed Oct. 10, 2011, (Attorney
Docket No. 781PROV), the entire contents of which are incorporated herein
by reference.

COPYRIGHT NOTICE

[0002] A portion of the disclosure of this patent document contains
material which is subject to copyright protection. The copyright owner
has no objection to the facsimile reproduction by anyone of the patent
document or the patent disclosure, as it appears in the Patent and
Trademark Office patent file or records, but otherwise reserves all
copyright rights whatsoever.

FIELD OF THE INVENTION

[0003] One or more implementations relate generally to computer systems
and software, and, more particularly, to comparing data objects and
providing information feed alerts.

BACKGROUND

[0004] The subject matter discussed in the background section should not
be assumed to be prior art merely as a result of its mention in the
background section. Similarly, a problem mentioned in the background
section or associated with the subject matter of the background section
should not be assumed to have been previously recognized in the prior
art. The subject matter in the background section merely represents
different approaches, which in and of themselves may also be inventions.

[0005] Organizations and enterprises typically employ many different types
of software and computing technologies to meet their computing needs.
However, installing and maintaining software on an organization's own
computer systems may involve one or more drawbacks. For example, when
software must be installed on computer systems within the organization,
the installation process often requires significant time commitments,
since organization personnel may need to separately access each computer.
Once installed, the maintenance of such software typically requires
significant additional resources. Each installation of the software may
need to be separately monitored, upgraded, and/or maintained. Further,
organization personnel may need to protect each installed piece of
software against viruses and other malevolent code. Given the
difficulties in updating and maintaining software installed on many
different computer systems, it is common for software to become outdated.
Also, the organization will likely need to ensure that the various
software programs installed on each computer system are compatible.
Compatibility problems are compounded by frequent upgrading, which may
result in different versions of the same software being used at different
computer systems in the same organization.

[0006] Accordingly, organizations and enterprises increasingly prefer to
use on-demand services accessible via the Internet rather than software
installed on in-house computer systems. On-demand services, often termed
"cloud computing" services, take advantage of increased network speeds
and decreased network latency to provide shared resources, software, and
information to computers and other devices upon request. Cloud computing
typically involves over-the-Internet provision of dynamically scalable
and often virtualized resources. Technological details can be abstracted
from the users, who no longer have need for expertise in, or control
over, the technology infrastructure "in the cloud" that supports them.

BRIEF SUMMARY

[0007] Disclosed are systems, methods, and apparatus for identifying and
processing duplicate records in database systems. In some
implementations, a method is provided in which a first data object may be
created and stored in a first database system, where the first data
object includes a plurality of data fields capable of storing a plurality
of data values. In various implementations, a trigger function may be
executed in response to creating the first data object, where the trigger
function causes one or more servers in a second database system to
determine if one or more existing data objects stored in the second
database system include one or more data values that match data values
included in the first data object, and where the trigger function further
causes one or more servers in the first database system to retrieve one
or more data values from the one or more existing data objects. In some
implementations, the retrieved one or more data values may be stored in
one or more data fields of the first data object.

[0008] In various implementations, the executing and storing are part of
an automated process executed by one or more servers of the first
database system. In some implementations, the plurality of data fields
are capable of being displayed as display fields in a user interface of a
computer system. According to various implementations, the retrieved one
or more data values are displayed to a user of the computer system via
the user interface. In some implementations, the plurality of data fields
store data for a form capable of receiving information from a user, and
wherein the retrieved one or more data values are displayed to the user
in one or more display fields of the form prior to the user completing
the form. In particular implementations, a link may be created between
the first data object and the one or more existing data objects, where
the link automatically applies a change from one data object to another.

[0009] In various implementations, the first data object is a record
stored in a multi-tenant database system and is capable of storing one or
more data values contributed by a user of the multi-tenant database
system. In some implementations, the record is a type of record selected
from the group consisting of an account, contact, lead, and opportunity.
In particular implementations, the determining is based on one or more
data values selected from the group consisting of a phone number, a name,
an address, a company name, a professional organization name, an employee
identifier, and an email address. In some implementations, the first data
object and the one or more existing data objects are different types of
records. In various implementations, the retrieved one or more data
values include information aggregated from a distributed group of users
and entities. In some implementations, the first database system and the
second database system are operated by the same entity.

[0010] In various implementations, a machine-readable medium is provided
that carries one or more sequences of instructions which, when executed
by one or more processors, cause the one or more processors to create a
first data object stored in a first database system, where the first data
object includes a plurality of data fields capable of storing a plurality
of data values. In some implementations, the instructions may further
cause the one or more processors to execute a trigger function in
response to creating the first data object, where the trigger function
causes one or more servers in a second database system to determine if
one or more existing data objects stored in the second database system
include one or more data values that match data values included in the
first data object, and where the trigger function further causes one or
more servers in the first database system to retrieve one or more data
values from the one or more existing data objects. In various
implementations, the instructions may further cause the one or more
processors to store the retrieved one or more data values in one or more
data fields of the first data object.

[0011] In some implementations, an apparatus is provided that comprises a
processor and one or more stored sequences of instructions which, when
executed by the processor, cause the processor to create a first data
object stored in a first database system, where the first data object
includes a plurality of data fields capable of storing a plurality of
data values. In some implementations, the instructions may further cause
the processor to execute a trigger function in response to creating the
first data object, where the trigger function causes one or more servers
in a second database system to determine if one or more existing data
objects stored in the second database system include one or more data
values that match data values included in the first data object, and
where the trigger function further causes one or more servers in the
first database system to retrieve one or more data values from the one or
more existing data objects. In various implementations, the instructions
may further cause the processor to store the retrieved one or more data
values in one or more data fields of the first data object.

[0012] In various implementations, a user of an on-demand service or
enterprise application may store and manage information in a database
system operated by the on-demand service or enterprise application. In
some implementations the information may be information related to the
user's business, such as contact information that includes biographical
and personal information about the user's business contacts. The
information may also be related to other entities, such as potential
sales leads, sales accounts, and companies. In various implementations,
the user may store information locally, or in a first database system.
However, additional information may often be available from other
sources, such as data tracking services or data repositories. These other
sources may store information in a cloud-based storage system which may
utilize a second database system.

[0013] Conventional methods do not provide an efficient way of reconciling
information that may be stored in the two different locations. For
example, if a user wants to import information from a different source,
such as a database system operated by a data tracking service such as
Data.com® provided by salesforce.com, inc., the user must manually
initiate a process to query the database. If any relevant records are
found, the user may have to manually perform a field by field comparison
to determine which information should be imported.

[0014] Various implementations of the present disclosure provide methods
and systems by which information may be automatically identified and
retrieved in real-time. For example, a trigger function may be executed
in response to an action taken by the user, such as creating a new
contact record. The trigger function may initiate an automatic query of
the data tracking service's database system. If any relevant data objects
are identified, they may be automatically imported and stored in the new
record that was created by the user. Furthermore, this may be performed
in real-time as the user is entering the information. In various
implementations, if the user is filling out a form, fields of the form
may be automatically completed in real-time.

[0015] In a specific implementation, a social network incorporates a
"newsfeed" for each user, in which a first user can post or publish text
describing his or her status, files, or may address or call attention to
a second user on the social network, e.g., through the use of "at
mentions" ("@mentions"). In addition, if the first user and the second
user are "connected" and/or are "following" each other, then the first
user can post to the second user's newsfeed, also known as "posting to
the second user's wall." A third user who is following both the first and
second user will be able to view ongoing online "conversations" between
the first and second user, and may even have those conversations echoed
on his or her respective newsfeed.

[0016] If those conversations include files or other objects, then the
third user may be able to access and view those posted objects as well.
Chatter® is an example of a social network, and is offered by
salesforce.com, inc. While Chatter is referenced in this disclosure, a
person having ordinary skill in the art will appreciate that other social
networks may incorporate the features described herein.

[0017] An online social network is a digitized representation of human
interaction made public for a wider audience. Whereas the audience for a
conventional conversation between two people may be limited to those in
close audible proximity between those two people, a conversation that
takes place on an online social network is not bound by such physical
constraints. Any other person or user who is interested in following an
online conversation may do so.

[0018] In various implementations, an online social network, such as
Chatter® provided by salesforce.com, inc., may provide one or more
users with notifications regarding a de-duplication process. As
previously discussed, information from several data sources may be
compared automatically and in real-time to determine whether or not
duplicative information exists in any of the data sources. In various
implementations, the on-demand service provider may gather information
about the duplicative information, such as the identity of possible
matching records and which information matches, and include the
information in a feed item that is provided to several users via an
information feed of the online social network. In this way, the several
users may be provided with visibility of the de-duplication process.

[0019] For example, a first user may be a sales representative working in
a call center. The sales representative may get a cold call from a
potential customer. While taking the call, the sales representative may
enter contact information, such as a name and email address, into a form
as a lead record. A second user may already know the potential customer
and already have contact information stored for that particular customer
as a contact record. In this instance, the on-demand service provider may
determine that possible duplicate records exist. This might be determined
based on matching information, such as a matching name or a matching
phone number associated with the potential customer. The on-demand
service provider may then provide the first user and the second user with
notifications via an online social network. Because the second user has
been provided with the notification, he or she now knows that the first
user has made contact with his or her customer.

[0020] While one or more implementations and techniques are described with
reference to an embodiment in which a de-duplication process is
implemented in a system having an application server providing a front
end for an on-demand database service capable of supporting multiple
tenants, the one or more implementations and techniques are not limited
to multi-tenant databases nor deployment on application servers.
Embodiments may be practiced using other database architectures, i.e.,
ORACLE®, DB2® by IBM and the like without departing from the
scope of the embodiments claimed.

[0021] Any of the above embodiments may be used alone or together with one
another in any combination. The one or more implementations encompassed
within this specification may also include embodiments that are only
partially mentioned or alluded to or are not mentioned or alluded to at
all in this brief summary or in the abstract. Although various
embodiments may have been motivated by various deficiencies with the
prior art, which may be discussed or alluded to in one or more places in
the specification, the embodiments do not necessarily address any of
these deficiencies. In other words, different embodiments may address
different deficiencies that may be discussed in the specification. Some
embodiments may only partially address some deficiencies or just one
deficiency that may be discussed in the specification, and some
embodiments may not address any of these deficiencies.

BRIEF DESCRIPTION OF THE DRAWINGS

[0022] In the following drawings like reference numbers are used to refer
to like elements. Although the following figures depict various examples,
the one or more implementations are not limited to the examples depicted
in the figures.

[0023]FIG. 1 shows a block diagram of an example of an environment 10 in
which an on-demand database service can be used in accordance with some
implementations.

[0024]FIG. 2 shows a flowchart of an example of a method 1500 for
integrating and de-duplicating data objects, performed in accordance with
some implementations.

[0025]FIG. 3 shows a flowchart of an example of a method 1600 for
integrating and de-duplicating records, performed in accordance with some
implementations.

[0026]FIG. 4 shows a flowchart of an example of a method 400 for
de-duplicating and visualizing data objects via a social network,
performed in accordance with some implementations.

[0027]FIG. 5 shows a flowchart of an example of a method 500 for
de-duplicating and visualizing records via a social network, performed in
accordance with some implementations.

[0028]FIG. 6 shows an exemplary image 600 of a graphical user interface
presented in a web browser at a client machine, in accordance with one or
more embodiments.

[0029]FIG. 7 shows an exemplary image 2000 of a graphical user interface
presented in a web browser at a client machine, in accordance with one or
more embodiments.

[0030]FIG. 8 shows an exemplary image 800 of a graphical user interface
presented in a web browser at a client machine, in accordance with one or
more embodiments.

[0031] FIG. 9 shows an exemplary image 900 of a graphical user interface
presented in a web browser at a client machine, in accordance with one or
more embodiments.

[0032]FIG. 10 shows an exemplary image 1000 of a graphical user interface
presented in a web browser at a client machine, in accordance with one or
more embodiments.

DETAILED DESCRIPTION

[0033] Systems and methods are provided for fragmenting a newsfeed by
promoting an item in the newsfeed to another newsfeed. Examples of
systems, apparatus, and methods according to the disclosed
implementations are described in this section. These examples are being
provided solely to add context and aid in the understanding of the
disclosed implementations. It will thus be apparent to one skilled in the
art that implementations may be practiced without some or all of these
specific details. In other instances, certain process/method operations,
also referred to herein as "blocks," have not been described in detail in
order to avoid unnecessarily obscuring implementations. Other
applications are possible, such that the following examples should not be
taken as definitive or limiting either in scope or setting.

[0034] In the following detailed description, references are made to the
accompanying drawings, which form a part of the description and in which
are shown, by way of illustration, specific implementations. Although
these implementations are described in sufficient detail to enable one
skilled in the art to practice the disclosed implementations, it is
understood that these examples are not limiting, such that other
implementations may be used and changes may be made without departing
from their spirit and scope. For example, the blocks of methods shown and
described herein are not necessarily performed in the order indicated. It
should also be understood that the methods may include more or fewer
blocks than are indicated. In some implementations, blocks described
herein as separate blocks may be combined. Conversely, what may be
described herein as a single block may be implemented in multiple blocks.

[0035] Various implementations described or referenced herein are directed
to different methods, apparatus, systems, and computer program products
for fragmenting an information feed showing feed items on a display
device in an online social network, also referred to herein as a social
networking system or an enterprise social network. The feed items in the
information feed may include information updates stored in an on-demand
database service environment. In some implementations, the disclosed
methods, apparatus, systems, and computer program products may be
configured or designed for use in a multi-tenant database environment.

[0036] In some implementations, an online social network may allow a user
to follow data objects in the form of records such as cases, accounts, or
opportunities, in addition to following individual users and groups of
users. One example of such an online social network is Chatter®,
provided by salesforce.com of San Francisco, Calif. Such online social
networks can be implemented in various settings, including enterprises
such as business organizations or groups within such an organization. For
instance, Chatter® can be used by employee users of a business
organization to communicate and collaborate with each other for various
purposes.

[0037] The "following" of a record stored in a database, as described in
greater detail below, allows a user to track the progress of that record.
Updates to the record, also referred to herein as changes to the record,
can occur and be noted on an information feed such as the record feed or
the news feed of a user subscribed to the record. With the disclosed
implementations, such record updates are often presented as an item or
entry in the feed. Such a feed item can include a single update or a
collection of individual updates. Information updates presented as feed
items in an information feed can include updates to a record, as well as
other types of updates such as user actions and events, as described
herein.

[0038] Examples of record updates include field changes in the record, as
well as the creation of the record itself. Examples of other types of
information updates, which may or may not be linked with a particular
record depending on the specific use of the information update, include
messages as described herein. Examples of such messages include posts
such as explicit text or characters submitted by a user, multimedia data
sent between or among users (for instance, included in a post), status
updates such as updates to a user's status or updates to the status of a
record, uploaded files, indications of a user's personal preferences such
as "likes" and "dislikes," and links to other data or records.

[0039] Information updates can also be group-related, e.g., a change to
group status information for a group of which the user is one of possibly
additional members. A user following, e.g., subscribed to, a record is
capable of viewing record updates on the user's news feed, which can also
include the other various types of information updates described above.
Any number of users can follow a record and thus view record updates in
this fashion. Some records are publicly accessible, such that any user
can follow the record, while other records are private, for which
appropriate security clearance/permissions are a prerequisite to a user
following the record.

[0040] Online social networks are increasingly becoming a common way to
facilitate communication between individuals and groups of individuals,
any of whom can be recognized as "users" of a social networking system.
In many social networks, individuals may establish connections with one
other, which may be referred to as "friending" one another. By
establishing such a connection, one user may be able to see information
generated by or associated with another user. For instance, a first user
may be able to see information posted by a second user to the first
user's personal social network page. One implementation of such a
personal social network page is a user's profile page, for example, in
the form of a web page representing the user's profile. For example, a
post submitted by the second user about the first user can be presented
on the first user's profile feed, also referred to herein as the user's
"wall," which can be displayed on the first user's profile page.

[0041] In some implementations, an information feed in the context of a
social network may be a collection of information selected from the
social network for presentation in a user interface. The information
presented in the information feed may include posts to a user's wall or
any other type of information accessible within the social network. A
feed item can include various types of data including character-based
data, audio data, video data, or combinations of these. For instance, a
post can include text in combination with a JPEG image or animated image.

[0042] Feed items in information feeds such as a user's news feed may
include messages, which can take the form of: posts comprising
textual/character-based inputs such as words, phrases, statements,
questions, emotional expressions, symbols, leetspeak, or combinations of
these; responses to posts, also referred to herein as "comments", such as
words, phrases, statements, answers, questions, reactionary emotional
expressions, or combinations of these; indications of personal
preferences which can be submitted as responses to posts or comments;
status updates; and hyperlinks. In other examples, messages can be in the
form of file uploads, such as presentations, documents, multimedia files,
and the like.

[0043] In some implementations, a news feed may be specific to an
individual user, a group of users, or a data object (e.g., a file,
document, Web page, or a collection of documents, files, or Web pages).
For instance, a group of users on a social network may publish a news
feed. Members of the group and the larger social network may view and
post to the group news feed in accordance with a permissions
configuration for the news feed and the group.

[0044] In some implementations, when data such as posts or comments input
from one or more users are published to an information feed for a
particular user, group, object, or other construct within a social
network, an e-mail notification or other type of notification (e.g., text
message) may be transmitted to all users following the user, group, or
object in addition to the posting of the published data as a feed item in
one or more feeds, such as a news feed or a record feed. In some social
networks, the occurrence of such a notification is limited to the first
instance of a published input, which may form part of a larger
conversation. For instance, a notification may be transmitted for an
initial post, but neither for comments on the post nor for follow-up
posts related to the initial post. In some other implementations,
notifications are transmitted for all such published inputs.

[0045] These and other implementations described and reference herein may
be embodied in various types of hardware, software, firmware, of
combinations of these. For example, some techniques disclosed herein may
be implemented, at least in part, by machine-readable media that include
program instructions, state information, etc., for performing various
services and operations described herein. Examples of program
instructions include both machine code, such as produced by a compiler,
and files containing higher-level code that may be executed by a
computing device such as a server or other data processing apparatus
using an interpreter. Examples of machine-readable media include, but are
not limited to, magnetic media such as hard disks, floppy disks, and
magnetic tape; optical media such as CD-ROM disks; magneto-optical media;
and hardware devices that are specially configured to store program
instructions, such as read-only memory devices ("ROM") and random access
memory ("RAM") devices. These and other features of the disclosed
implementations will be described in more detail below with reference to
the associated drawings.

[0046] The term "multi-tenant database system" can refer to those systems
in which various elements of hardware and software of a database system
may be shared by one or more customers. For example, a given application
server may simultaneously process requests for a great number of
customers, and a given database table may store rows for a potentially
much greater number of customers. The term "query plan" generally refers
to one or more operations used to access information in a database
system.

[0047] A "user profile" or "user's profile" is generally configured to
store and maintain data about the user of the database system. The data
can include general information, such as title, phone number, a photo, a
biographical summary, and a status (e.g., text describing what the user
is currently doing). As mentioned below, the data can include messages
created by other users. Where there are multiple tenants, a user is
typically associated with a particular tenant. For example, a user could
be a salesperson of a company, which is a tenant of the database system
that provides a database service.

[0048] The term "record" generally refers to a data entity, such as an
instance of a data object created by a user of the database service, for
example, about a particular (actual or potential) business relationship
or project. The data object can have a data structure defined by the
database service (a standard object) or defined by a subscriber (custom
object). For example, a record can be for a business partner or potential
business partner (e.g., a client, vendor, distributor, etc.) of the user,
and can include an entire company, subsidiaries, or contacts at the
company. As another example, a record can be a project that the user is
working on, such as an opportunity (e.g., a possible sale) with an
existing partner, or a project that the user is trying to get. In one
implementation of a multi-tenant database, each record for the tenants
has a unique identifier stored in a common table. A record has data
fields that are defined by the structure of the object (e.g., fields of
certain data types and purposes). A record can also have custom fields
defined by a user. A field can be another record or include links
thereto, thereby providing a parent-child relationship between the
records.

[0049] The terms "information feed" and "feed" are used interchangeably
herein and generally refer to a combination (e.g., a list) of feed items
or entries with various types of information and data. Such feed items
can be stored and maintained in one or more database tables, e.g., as
rows in the table(s), that can be accessed to retrieve relevant
information to be presented as part of a displayed feed. The term "feed
item" (or feed element) refers to an item of information, which can be
presented in the feed such as a post published by a user. Feed items of
information about a user can be presented in a user's profile feed of the
database, while feed items of information about a record can be presented
in a record feed in the database, by way of example. A profile feed and a
record feed are examples of different information feeds. A second user
following a first user or record can receive the feed items associated
with the first user and the record for display in the second user's news
feed, which is another type of information feed. In some implementations,
the feed items from any number of followed users and records can be
combined into a single information feed of a particular user.

[0050] As examples, a feed item can be a message, such as a user-generated
post of text data, and a feed tracked update to a record or profile, such
as a change to a field of the record. A feed can be a combination of
messages and feed tracked updates. Messages include text created by a
user, and may include other data as well. Examples of messages include
posts, user status updates, and comments. Messages can be created for a
user's profile or for a record. Posts can be created by various users,
potentially any user, although some restrictions can be applied. As an
example, posts can be made to a wall section of a user's profile page
(which can include a number of recent posts) or a section of a record
that includes multiple posts. The posts can be organized in chronological
order when displayed in a graphical user interface (GUI), for instance,
on the user's profile page, as part of the user's profile feed. In
contrast to a post, a user status update changes a status of a user and
can be made by that user or an administrator. Other similar sections of a
user's profile can also include an "About" section. A record can also
have a status, the update of which can be provided by an owner of the
record or other users having suitable write access permissions to the
record. The owner can be a single user, multiple users, or a group. In
one implementation, there is only one status for a record.

[0051] In one implementation, a comment can be made on any feed item. In
another implementation, comments are organized as a list explicitly tied
to a particular feed tracked update, post, or status update. In this
implementation, comments may not be listed in the first layer (in a
hierarchal sense) of feed items, but listed as a second layer branching
from a particular first layer feed item.

[0052] A "feed tracked update," also referred to herein as a "feed
update," is one type of information update and generally refers to data
representing an event. A feed tracked update can include text generated
by the database system in response to the event, to be provided as one or
more feed items for possible inclusion in one or more feeds. In one
implementation, the data can initially be stored, and then the database
system can later use the data to create text for describing the event.
Both the data and/or the text can be a feed tracked update, as used
herein. In various implementations, an event can be an update of a record
and/or can be triggered by a specific action by a user. Which actions
trigger an event can be configurable. Which events have feed tracked
updates created and which feed updates are sent to which users can also
be configurable. Messages and feed updates can be stored as a field or
child object of the record. For example, the feed can be stored as a
child object of the record.

[0053] A "group" is generally a collection of users. In some
implementations, the group may be defined as users with a same or similar
attribute, or by membership. In one implementation, a "group feed"
includes any feed item about any user in a group. In another
implementation, the group feed includes feed items that are about the
group as a whole. In one implementation, the feed items for a group are
only posts and comments.

[0054] An "entity feed" or "record feed" generally refers to a feed of
feed items about a particular record in the database, such as feed
tracked updates about changes to the record and posts made by users about
the record. An entity feed can be composed of any type of feed item. Such
a feed can be displayed on a page such as a web page associated with the
record, e.g., a home page of the record. As used herein, a "profile feed"
is a feed of feed items about a particular user. In one implementation,
the feed items for a profile feed are posts and comments that other users
make about or send to the particular user, and status updates made by the
particular user. Such a profile feed can be displayed on a page
associated with the particular user. In another implementation, feed
items in a profile feed could include posts made by the particular user
and feed tracked updates initiated based on actions of the particular
user.

[0055] I. General Overview

[0056] Systems, apparatus, and methods are provided for implementing
enterprise level social and business information networking. Such
implementations can provide more efficient use of a database system. For
instance, a user of a database system may not easily know when important
information in the database has changed, e.g., about a project or client.
Implementations can provide feed tracked updates about such changes and
other events, thereby keeping users informed.

[0057] By way of example, a user can update a record (e.g., an opportunity
such as a possible sale of 1000 computers). Once the record update has
been made, a feed tracked update about the record update can then
automatically be sent (e.g., in a feed) to anyone subscribing to the
opportunity or to the user. Thus, the user does not need to contact a
manager regarding the change in the opportunity, since the feed tracked
update about the update is sent via a feed right to the manager's feed
page (or other page).

[0058] Next, mechanisms and methods for providing systems implementing
enterprise level social and business information networking will be
described with reference to example implementations. First, an overview
of an example database system is described, and then examples of tracking
events for a record, actions of a user, and messages about a user or
record are described. Various implementations about the data structure of
feeds, customizing feeds, user selection of records and users to follow,
generating feeds, and displaying feeds are also described.

[0059] II. System Overview

[0060]FIG. 1 shows a block diagram of an example of an environment 10 in
which an on-demand database service can be used in accordance with some
implementations. Environment 10 may include user systems 12, network 14,
database system 16, processor system 17, application platform 18, network
interface 20, tenant data storage 22, system data storage 24, program
code 26, and process space 28. In other implementations, environment 10
may not have all of these components and/or may have other components
instead of, or in addition to, those listed above.

[0061] Environment 10 is an environment in which an on-demand database
service exists. User system 12 may be any machine or system that is used
by a user to access a database system 16. For example, any of user
systems 12 can be a handheld computing device, a mobile phone, a laptop
computer, a work station, and/or a network of such computing devices. As
illustrated in FIG. 1 user systems 12 might interact via a network 14
with an on-demand database service, which is implemented in the example
of FIG. 1 as database system 16.

[0062] An on-demand database service, such as system 16, is a database
system that is made available to outside users, who do not need to
necessarily be concerned with building and/or maintaining the database
system. Instead, the database system may be available for their use when
the users need the database system, i.e., on the demand of the users.
Some on-demand database services may store information from one or more
tenants into tables of a common database image to form a multi-tenant
database system (MTS). A database image may include one or more database
objects. A relational database management system (RDBMS) or the
equivalent may execute storage and retrieval of information against the
database object(s). Application platform 18 may be a framework that
allows the applications of system 16 to run, such as the hardware and/or
software, e.g., the operating system. In some implementations,
application platform 18 enables creation, managing and executing one or
more applications developed by the provider of the on-demand database
service, users accessing the on-demand database service via user systems
12, or third party application developers accessing the on-demand
database service via user systems 12.

[0063] The users of user systems 12 may differ in their respective
capacities, and the capacity of a particular user system 12 might be
entirely determined by permissions (permission levels) for the current
user. For example, where a salesperson is using a particular user system
12 to interact with system 16, that user system has the capacities
allotted to that salesperson. However, while an administrator is using
that user system to interact with system 16, that user system has the
capacities allotted to that administrator. In systems with a hierarchical
role model, users at one permission level may have access to
applications, data, and database information accessible by a lower
permission level user, but may not have access to certain applications,
database information, and data accessible by a user at a higher
permission level. Thus, different users will have different capabilities
with regard to accessing and modifying application and database
information, depending on a user's security or permission level, also
called authorization.

[0064] Network 14 is any network or combination of networks of devices
that communicate with one another. For example, network 14 can be any one
or any combination of a LAN (local area network), WAN (wide area
network), telephone network, wireless network, point-to-point network,
star network, token ring network, hub network, or other appropriate
configuration. Network 14 can include a TCP/IP (Transfer Control Protocol
and Internet Protocol) network, such as the global internetwork of
networks often referred to as the "Internet" with a capital "I." The
Internet will be used in many of the examples herein. However, it should
be understood that the networks that the present implementations might
use are not so limited, although TCP/IP is a frequently implemented
protocol.

[0065] User systems 12 might communicate with system 16 using TCP/IP and,
at a higher network level, use other common Internet protocols to
communicate, such as HTTP, FTP, AFS, WAP, etc. In an example where HTTP
is used, user system 12 might include an HTTP client commonly referred to
as a "browser" for sending and receiving HTTP signals to and from an HTTP
server at system 16. Such an HTTP server might be implemented as the sole
network interface 20 between system 16 and network 14, but other
techniques might be used as well or instead. In some implementations, the
network interface 20 between system 16 and network 14 includes load
sharing functionality, such as round-robin HTTP request distributors to
balance loads and distribute incoming HTTP requests evenly over a
plurality of servers. At least for users accessing system 16, each of the
plurality of servers has access to the MTS' data; however, other
alternative configurations may be used instead.

[0066] In one implementation, system 16, shown in FIG. 1, implements a
web-based customer relationship management (CRM) system. For example, in
one implementation, system 16 includes application servers configured to
implement and execute CRM software applications as well as provide
related data, code, forms, web pages and other information to and from
user systems 12 and to store to, and retrieve from, a database system
related data, objects, and Webpage content. With a multi-tenant system,
data for multiple tenants may be stored in the same physical database
object in tenant data storage 22, however, tenant data typically is
arranged in the storage medium(s) of tenant data storage 22 so that data
of one tenant is kept logically separate from that of other tenants so
that one tenant does not have access to another tenant's data, unless
such data is expressly shared. In certain implementations, system 16
implements applications other than, or in addition to, a CRM application.
For example, system 16 may provide tenant access to multiple hosted
(standard and custom) applications, including a CRM application. User (or
third party developer) applications, which may or may not include CRM,
may be supported by the application platform 18, which manages creation,
storage of the applications into one or more database objects and
executing of the applications in a virtual machine in the process space
of the system 16.

[0067] One arrangement for elements of system 16 is shown in FIG. 1,
including a network interface 20, application platform 18, tenant data
storage 22 for tenant data 23, system data storage 24 for system data 25
accessible to system 16 and possibly multiple tenants, program code 26
for implementing various functions of system 16, and a process space 28
for executing MTS system processes and tenant-specific processes, such as
running applications as part of an application hosting service.
Additional processes that may execute on system 16 include database
indexing processes.

[0068] Several elements in the system shown in FIG. 1 include
conventional, well-known elements that are explained only briefly here.
For example, each user system 12 could include a desktop personal
computer, workstation, laptop, PDA, cell phone, or any wireless access
protocol (WAP) enabled device or any other computing device capable of
interfacing directly or indirectly to the Internet or other network
connection. User system 12 typically runs an HTTP client, e.g., a
browsing program, such as Microsoft's Internet Explorer browser,
Netscape's Navigator browser, Opera's browser, or a WAP-enabled browser
in the case of a cell phone, PDA or other wireless device, or the like,
allowing a user (e.g., subscriber of the multi-tenant database system) of
user system 12 to access, process and view information, pages and
applications available to it from system 16 over network 14. Each user
system 12 also typically includes one or more user interface devices,
such as a keyboard, a mouse, trackball, touch pad, touch screen, pen or
the like, for interacting with a graphical user interface (GUI) provided
by the browser on a display (e.g., a monitor screen, LCD display, etc.)
of the computing device in conjunction with pages, forms, applications
and other information provided by system 16 or other systems or servers.
For example, the user interface device can be used to access data and
applications hosted by system 16, and to perform searches on stored data,
and otherwise allow a user to interact with various GUI pages that may be
presented to a user. As discussed above, implementations are suitable for
use with the Internet, although other networks can be used instead of or
in addition to the Internet, such as an intranet, an extranet, a virtual
private network (VPN), a non-TCP/IP based network, any LAN or WAN or the
like.

[0069] According to one implementation, each user system 12 and all of its
components are operator configurable using applications, such as a
browser, including computer code run using a central processing unit such
as an Intel Pentium® processor or the like. Similarly, system 16 (and
additional instances of an MTS, where more than one is present) and all
of its components might be operator configurable using application(s)
including computer code to run using processor system 17, which may be
implemented to include a central processing unit, which may include an
Intel Pentium® processor or the like, and/or multiple processor
units. A computer program product implementation includes a
non-transitory machine-readable storage medium (media) having
instructions stored thereon/in, which can be used to program a computer
to perform any of the processes/methods of the implementations described
herein. Computer program code 26 for operating and configuring system 16
to intercommunicate and to process web pages, applications and other data
and media content as described herein is preferably downloadable and
stored on a hard disk, but the entire program code, or portions thereof,
may also be stored in any other volatile or non-volatile memory medium or
device as is well known, such as a ROM or RAM, or provided on any media
capable of storing program code, such as any type of rotating media
including floppy disks, optical discs, digital versatile disk (DVD),
compact disk (CD), microdrive, and magneto-optical disks, and magnetic or
optical cards, nanosystems (including molecular memory ICs), or any type
of media or device suitable for storing instructions and/or data.
Additionally, the entire program code, or portions thereof, may be
transmitted and downloaded from a software source over a transmission
medium, e.g., over the Internet, or from another server, as is well
known, or transmitted over any other conventional network connection as
is well known (e.g., extranet, VPN, LAN, etc.) using any communication
medium and protocols (e.g., TCP/IP, HTTP, HTTPS, Ethernet, etc.) as are
well known. It will also be appreciated that computer code for the
disclosed implementations can be realized in any programming language
that can be executed on a client system and/or server or server system
such as, for example, C, C++, HTML, any other markup language, Java®,
JavaScript, ActiveX, any other scripting language, such as VBScript, and
many other programming languages as are well known may be used. (Java®
is a trademark of Sun Microsystems, Inc.).

[0070] According to some implementations, each system 16 is configured to
provide web pages, forms, applications, data and media content to user
(client) systems 12 to support the access by user systems 12 as tenants
of system 16. As such, system 16 provides security mechanisms to keep
each tenant's data separate unless the data is shared. If more than one
MTS is used, they may be located in close proximity to one another (e.g.,
in a server farm located in a single building or campus), or they may be
distributed at locations remote from one another (e.g., one or more
servers located in city A and one or more servers located in city B). As
used herein, each MTS could include one or more logically and/or
physically connected servers distributed locally or across one or more
geographic locations. Additionally, the term "server" is meant to refer
to a computing device or system, including processing hardware and
process space(s), an associated storage system such as a memory device or
database, and, in some instances, a database application (e.g., OODBMS or
RDBMS) as is well known in the art. It should also be understood that
"server system" and "server" are often used interchangeably herein.
Similarly, the database objects described herein can be implemented as
single databases, a distributed database, a collection of distributed
databases, a database with redundant online or offline backups or other
redundancies, etc., and might include a distributed database or storage
network and associated processing intelligence.

[0071] XIII. De-Duplication and Social Network Visualization

[0072]FIG. 2 illustrates an example of a method 200 for integrating and
de-duplicating data objects, performed in accordance with some
implementations. In various implementations, method 200 may provide
real-time de-duplication of information based on information received
from a user. In some implementations, a user may enter information that
is subsequently stored in a data object in a first database system. In
various implementations, the information may be automatically compared
with information stored in other data objects in other database systems.
For example, contact information entered by the user may be compared with
contact information in other database systems, such as a cloud-based data
tracking database. Moreover, relevant information may be retrieved,
stored, and presented to the user in real-time to supplement the
information as it is being entered by the user. Thus, according to
various implementations, at step 202, a first data object may be created
by a user and stored in a first database system.

[0073] At step 204, a trigger function may be executed in response to
creating the first data object. In various implementations, the trigger
function may cause one or more servers in a second database system to
determine if one or more existing data objects stored in the second
database system include one or more data values that match data values
included in the first data object. In various implementations, the second
database system may make this determination automatically and in
real-time. In some implementations, the trigger function may also cause
one or more servers in the first database system to retrieve one or more
data values from the one or more existing data objects. Accordingly,
additional information may be retrieved from various data sources, such
as other database systems, in response to a user creating a data object.
Furthermore, in addition to retrieving information, duplicative
information may be deleted. Therefore, if matching information stored in
the second database system is determined to be included in a duplicate
record, one or more servers in the second database system may delete the
duplicate record.

[0074] At step 206, the retrieved one or more data values may be stored in
one or more data fields of the first data object. Thus, according to
various implementations, process 200 may retrieve various information,
including information the user might not be aware of, and automatically
store the information in one or more data fields of the first data
object. Returning to the previous example, if the user is entering
contact information into a form, additional contact information may be
identified, retrieved, and stored in the form automatically and in
real-time. Moreover, the retrieved information may be automatically
displayed to the user in real-time. Thus, if the user is entering
information into the form, retrieved information may be displayed to the
user to automatically fill various display fields of the form as the user
is entering the information.

[0075]FIG. 3 shows a flowchart of an example of a method 300 for
integrating and de-duplicating records, performed in accordance with some
implementations. In various implementations, method 300 may determine
whether or not a new record matches an existing record in one or more
database systems. In some implementations, the determining may be
performed automatically. As similarly discussed with reference to method
200, method 300 may automatically display information retrieved from the
matching records. Thus, according to some implementations, a user may be
filling out a form in a web-based application, such as a web browser,
when creating a record. In various implementations, the retrieved
information may be displayed in display fields of the form in real-time
and before the user has finished filling out the form.

[0076] At step 302, a user may create a record. In some implementations, a
record may be a data object that is stored in a multi-tenant database
system configured to provide an on-demand service that the user
subscribes to. As previously discussed, a record may generally refer to a
data object. In some implementations, the record may be a type of data
object that is configured to store a type of information and provide a
type of functionality. For example, a record may be a contact record. In
various implementations, a contact record may be configured to store
contact information associated with a business entity.

[0077] In one example, the user may create a contact record after a
particular business interaction, such as meeting a salesperson at a
networking event. In this instance, the user may provide contact
information, such as a name, email address, phone number, and employer,
which is then stored in one or more data fields of the contact record.

[0078] In various implementations, as part of the on-demand service, the
user may be presented with a user interface to manage various data
objects associated with the user's account. For example, if the user has
contact information stored for various business contacts, the contact
information may be stored in a plurality of records, in which one or more
records may be dedicated to each contact that the user has stored contact
information for. The user may be able to access and/or modify the
information via various display fields presented in a user interface.

[0079]FIG. 6 shows an exemplary image 600 of a graphical user interface
presented in a web browser at a client machine, in accordance with one or
more embodiments. In various implementations, image 600 may include data
field 602, data field 604, data field 606, data field 608, data field
610, data field 612, and data field 614. In some implementations, data
field 602 is configured to display information about a record which may
be retrieved from the record itself, or metadata associated with the
record. For example, data field 602 may display a data value that
identifies the type of record associated with image 600. In this
instance, data field 602 indicates that the record is a "New Lead." Thus,
in this example, a user has created a new record that will be used to
store information associated with a new lead.

[0080] In various implementations, data field 604 displays various data
values that may be stored within the record. In various implementations,
data field 604 includes data field 606, data field 608, data field 610,
data field 612, and data field 614. In some implementations, after
creating the record for the new lead, the user may enter the lead's first
name in data field 606, the lead's last name in data field 608, the
lead's company in data field 610, and the lead's email address in data
field 612.

[0081] Data field 614 may be configured to receive an input that saves any
information entered in the data fields to one or more records, such as
the newly created record, in the multi-tenant database system. Thus, in
some implementations, after the user is done entering information, the
user may provide an input, such as a mouse click on the "save" button,
and the entered information may be stored. As shown by image 600, many
data fields may be left blank because the user does not know the
appropriate information require to fill all data fields.

[0082] In some implementations the record may be created by the on-demand
service provider instead of the user. In various implementations, one or
more automated processes executing on one or more servers operated by the
one-demand service provider may be monitoring activities of other
entities, such as customers, or may be provided with notifications of
events, such as the completion of web-based forms by customers. For
example, a customer may enter information into a web-based form, such as
a script-based form presented in a hypertext markup language (HTML)
webpage. In this example, the customer may be providing the owner of the
website with his or her contact information so that he or she may be
notified for future sales promotions. In some implementations, the
webhoster of the webpage may send a message to the on-demand service
provider indicating that the form has been completed. Furthermore, the
message may include the information that was entered by the customer. In
some implementations, the webpage may be utilizing an on-demand
application such as Web-to-lead® provided by salesforce.com, inc. The
on-demand service provider may receive the information and create a new
record for a new lead in its multi-tenant database system based on the
information that was entered by the customer and based on any contextual
information that may be retrieved from the webhost that served the
webpage.

[0083]FIG. 7 shows an exemplary image 700 of a graphical user interface
presented in a web browser at a client machine, in accordance with one or
more embodiments. In various implementations, image 700 may be part of a
company's webpage that is displayed to potential customers to allow the
potential customers to provide the company with information, such as the
potential customer's contact information. In various implementations,
image 700 may include data field 702, data field 704, data field 706, and
data field 708.

[0084] In some implementations, a potential customer accessing a company's
website may enter a first name into data field 702, a last name into data
field 704, a company name into data field 706, and an email address into
data field 708. In this example, one or more servers operated by the
webhost may be configured to include the information entered by the
potential customer into a message that is sent to the on-demand service
provider. In response to receiving the message, the on-demand service
provider may create a record for a new lead as similarly displayed by
image 600.

[0085] Returning to FIG. 3, at step 304, a trigger function may be
executed in response to creating the new record, where the trigger
function makes a call to a second database system that causes the second
database system to search for information related to the new record. In
some implementations, a trigger function may be a function that is
executed in response a triggering event. In various implementations, an
event listener may be part of an automated process executing on one or
more servers operated by the on-demand service provider. The event
listener may listen for a particular event, such as the creation of a new
record. Upon detecting an event, the event listener may invoke the
trigger function. In this way, the trigger function may be executed by
the one or more servers operated by the on-demand service provider in
response to detecting the event, such as a user or an automated process
creating a new record. In various implementations, the trigger function
may call one or more functions that may be executed by one or more
servers in a second database system that, when executed, query the second
database system for information.

[0086] Furthermore, according to some implementations, the trigger
function may be executed in response to an event other than the creation
of a record. For example, entering one or more data values in a data
field of a record or form may cause the execution of the trigger
function. Thus, according to various implementations, as a user is
entering information into a form, such as that shown in image 700 in FIG.
7, the trigger function may be executed and a function call may be made
to one or more databases. In this way, execution of the trigger function
may occur in real-time and prior to the user completing the form.

[0087] At step 306 in FIG. 3, one or more servers in the second database
system may determine whether or not one or more existing records stored
in the second database system match the new record that was created in
the first database system.

[0088] In various implementations, the second database system may be part
of a repository of information containing additional information that may
be used to supplement or augment the information that was originally
provided by the user. For example, the second database system may be a
public database or a database used in an enterprise application that
provides a data tracking service. In one instance, the database may be a
part of a cloud based data tracking service, such as Data.com®
provided by salesforce.com, inc., or information provided by Dun &
Bradstreet®. Thus, the second database system may include
information, such as contact information, that may be aggregated and
crowd sourced from many different users and sources.

[0089] In various implementations, when the trigger function is executed,
the on-demand service provider may send a message to one or more servers
in the second database system. In some implementations, the message may
include the information that was entered by the user. The one or more
servers in the second database system may use this information as the
basis of a search for related documents. For example, information entered
by the user may be a first name, last name, and email address. In some
implementations, the message may include one or more data values that
include the text words that were entered by the user. In some
implementations, the message may also include identifiers generated based
on a data field that information was entered into. For example, a form
may have an identifier associated with a data field that is configured to
receive a first name. If a data value is entered into that field, the
identifier may be associated with the data value and identify it as a
first name.

[0090] In various implementations, the second database system may use the
information to formulate a search strategy and a query to identify and
retrieve relevant data objects. In some implementations, relevant data
objects are identified based on matching data values. For example, if a
first name provided by the user matches a first name stored in a record
in the second database system, that record may be identified as relevant,
and retrieved. Thus, a field-by-field comparison may be made based on
information entered into the new record and information stored in records
in the second database system. If one or more data values, such as a
phone number, mailing address, standard industrial classification (SIC)
number, or annual revenue, matches, then the record that stores the
matching data values may be returned as a result of the query.

[0091] It will be appreciated that various different types of searches may
be performed. In some implementations, data values from different types
of records, such as leads and contacts, may be compared. Furthermore,
data values provided by the user may be compared with account names and
metadata associated with records in addition to the contents of the
records themselves.

[0092] At step 308, one or more data values retrieved from the one or more
existing records may be returned to the first database system. Thus,
according to some implementations, once relevant data objects have been
identified and retrieved, the contents of the data objects may be parsed
and included in a message that is sent back to one or more servers
operated by the on-demand service provider. Thus, any additional
information retrieved from one or more additional database systems may be
returned to the on-demand service provider for the new record. As
similarly discussed with reference to the trigger function, in some
implementations, retrieval of the additional information may occur in
real-time and before the user has completed entering information into the
form.

[0093] At step 310, the returned one or more data values may be stored in
one or more storage volumes of the first database system. In some
implementations, the returned one or more data values may be stored
automatically in one or more data fields of the new record. For example,
a user may create a new record to store information for a contact. The
record may have a predetermined structure which includes several data
fields, each of which is associated with a specific type of information.
For example a data field may be configured to store one or more data
values that identify a contact's first name. In this example, the
returned one or more data values may be mapped to data fields of the new
record and automatically stored in the new record. In various
implementations, the storing may occur in real-time and before the user
has finished entering information into the record. Thus, the contents of
the new record may be automatically populated with information from
several different data sources in real-time.

[0094] In some implementations, the returned one or more data values may
be displayed to a user via a display device. Thus, according to various
implementations, the returned one or more data values may be displayed in
display fields of a graphical representation of the new record. For
example, if a user is filling out a form used to store information about
a contact, the form may have several different fields in which a user may
enter information, such as a first name, last name, and email address. In
various implementations, additional information retrieved from a data
source, such as Data.com® provided by salesforce.com, inc., may be
mapped to data fields of the form and displayed in the appropriate
display fields in the graphical representation of the form. In various
implementations, the additional information may be displayed in real-time
and before the user has completed the form or closed a window in a user
interface that is used to display the form.

[0095]FIG. 8 shows an exemplary image 800 of a graphical user interface
presented in a web browser at a client machine, in accordance with one or
more embodiments. In various implementations, image 800 may include data
field 802, data field 804, data field 806, and data field 808.

[0096] Data field 802 may be configured to display information about a
record which may be retrieved from the record itself, or metadata
associated with the record. In this instance, in addition to identifying
the type of record, data field 802 additionally displays the name "Sandy
Jones" to whom the record belongs. In this instance, the name may have
been retrieved from either the information provided by the user or from
information retrieved from the second database system.

[0097] Data field 804 displays various data values that may be stored
within the new record. In various implementations, data field 804
includes data field 806 and data field 808. In some implementations, data
field 806 may display a title associated with the new lead. In this
instance, the title was not provided by the user and was not known to the
user. Instead, the title may have been retrieved from a second database
system, such as a database system used by an data tracking service such
as Data.com® provided by salesforce.com, inc., in accordance with the
process described above. In this way, the user may automatically be
presented with and may store information retrieved from various data
sources external to the user's own contact information.

[0098] According to various implementations, data field 808 may display an
address associated with the new lead. As similarly discussed with
reference to data field 806, the address was not provided by the user and
was not known to the user. Instead, the address was retrieved from the
second database system. As previously discussed, the information
displayed in data field 806 and data field 808 may be retrieved and
stored automatically and in real-time.

[0099] Referring back to FIG. 3, at step 312 a link may be created that
links the new record to the matching one or more existing records. In
some implementations, a link may be an identified association between
several records. The functionality of the link may be determined by a
record that stores one or more identifiers identifying the records that
are linked, and further identifying several settings associated with the
link. For example, the settings may determine whether or not one or more
actions should be taken in response to any of the linked records being
modified, as discussed in greater detail below.

[0100] In various implementations, one or more automated processes
executed by the on-demand service provider may periodically check linked
records to determine whether or not any subsequent changes have been made
that may have resulted in any inconsistencies in data values stored among
the linked records. In various implementations, one or more servers
operated by the on-demand service provider may execute one or more
functions in response to determining that an inconsistency exists. In
some implementations, the on-demand service provider may automatically
update a first record based on information stored in the record that the
first record is linked to. For example, a new contact record may be
linked to a public record stored in a public database system. If the
public record receives a new phone number for the contact, the on-demand
service provider may automatically update the information stored in the
new contact record to reflect the most current and updated information
that is available (i.e. the new phone number stored in the public
record).

[0101] In some implementations, the on-demand service provider may
generate a message that provides one or more users with an automatic
notification that updated information is available. Returning to the
previous example, one or more servers operated by the on-demand service
provider may automatically generate and send a message in response to
determining that a phone number stored in the public record has been
updated. The message may include one or more data values identifying the
new contact record, and providing an indication that updated contact
information is available. The message may further identify the type of
information (i.e. phone number) and provide the conflicting information
(i.e. the old and new phone number). Furthermore, the message may include
an automatically generated link to the public record. In various
implementations, the message may be sent to several users including the
user that created the new contact record.

[0102] At step 314, the on-demand service provider may determine whether
or not additional records should be processed. For example, if the record
was a new lead for a user, the on-demand service provider may determine
whether or not additional iterations of method 300 should be performed
for all leads stored in that user's account, or for any other type of
record in the user's account. Thus, all of the information associated
with the user's account may be updated in response to the execution of
method 300.

[0103] In various implementations, the on-demand service provider's
determination of whether or not to perform additional iterations of
method 300 may be based on one or more data values stored in a flag or
identifier. In some implementations, the flag or identifier may be a
predetermined value set by the user as an account setting associated with
the user's account. The setting may indicate that the user's leads and/or
other types of records, such as contacts and accounts, should be
automatically and periodically updated in accordance with method 300. If
it is determined that additional records should be checked, method 300
may be repeated for each additional record.

[0104]FIG. 4 shows a flowchart of an example of a method 400 for
de-duplicating and visualizing data objects via a social network,
performed in accordance with some implementations. In various
implementations, method 400 may provide real-time de-duplication of
information based on information provided by a user, and further provide
social-network based visibility of the de-duplication process. In some
implementations, a user may enter information that is subsequently stored
in a data object in a first database system. In various implementations,
the information may be automatically compared with information stored in
other data objects in other database systems. The result of the
comparison, among other information, may be provided to multiple users
via a social network, such as Chatter® provided by salesforce.com,
inc. Thus, the users may be provided with visibility of the entire
de-duplication process automatically and in real-time. Accordingly, at
step 402 a first data object may be created and stored in a first
database system.

[0105] At step 404, a trigger function may be executed in response to
creating the first data object. In various implementations, the trigger
function may cause one or more servers in a second database system to
determine if one or more existing data objects stored in the second
database system include one or more data values that match one or more
data values included in the first data object. In various
implementations, the second database system may make this determination
automatically and in real-time. Thus, according to various
implementations, additional information may be retrieved from various
data sources, such as different database systems, in response to a user
creating a data object.

[0106] At step 406, one or more feed items may be generated in response to
determining that a match exists. In various implementations, the one or
more feed items provide one or more users with an indication of the
determined match. In some implementations, the feed items provide various
information about the matched data objects, such as identifiers that
identify the data objects, automatically generated text that describes
the match, and a link that allows a user to directly access and/or modify
a data object. Furthermore, this information is provided automatically
and via an information feed to multiple users and entities that may be
associated with the first data object and the one or more existing data
objects.

[0107]FIG. 5 shows a flowchart of an example of a method 500 for
de-duplicating and visualizing records via a social network, performed in
accordance with some implementations. In various implementations, method
500 may determine whether or not a new record matches an existing record
in one or more database systems. In some implementations, the determining
may be performed automatically. Furthermore, method 500 may generate one
or more feed items which may be used to notify several users of the
potential match.

[0108] At step 502, a new record may be created. In some implementations,
at step 504, a trigger function may be executed in response to creating
the new record. The trigger may make a function call to a second database
system that causes the second database system to search for information
related to the new record. In various implementations, at step 506, one
or more servers in the second database system may determine whether or
not one or more existing records stored in the second database system
match the new record that was created in the first database system.

[0109] At step 508, one or more servers operated by the on-demand service
provider may have a requisite access level that allows the on-demand
service provider to modify attributes associated with records stored in
the second database system. For example, the first database system and
the second database system may both be operated by the on-demand service
provider, but used to provide different services. In one example, the
first database system may be used to provide an on-demand service capable
of managing contact information, such as Salesforce® provided by
salesforce.com, inc., and the second database system may be used to
provide a data tracking service capable of aggregating data from multiple
users and entities, such as Data.com® which is also provided by
salesforce.com, inc.

[0110] In some implementations, the on-demand service provider may modify
a data field associated with an existing record that was determined to
match the new record. In various implementations, the data field may be a
custom checkbox field that stores one or more data values indicating
whether the existing record matches the new record. For example, the
custom checkbox field may store a flag that indicates either the existing
record is a possible duplicate record, or the existing record is not a
duplicate record. In various implementations, this flag may be set for
each matching existing record stored in the second database system.

[0111] In various implementations, one or more other workflow's or
triggers may be executed in response to setting the flag. For example,
one or more automated processes running in the second database system may
periodically check custom checkbox fields of records stored in the second
database system. In response to determining that a flag has been set for
a particular record, the one or more automated processes may execute a
function that performs an action, such as automatically deleting the
duplicate record or generating an email message that notifies a user or
other entity of the existence of a possible duplicate record. In some
implementations, the action may be to generate a message that notifies
the first database system that the flag has been set. In this instance,
an automated process in the first database system may then execute a
function. For example, one or more servers in the first database system
may instruct one or more servers in the second database system to take a
specified action, such as delete the matching existing record.

[0112] At step 510, settings associated with each of the records may be
modified so that one or more users follow the records. In various
implementations, one or more servers operated by on-demand service
provider may configure accounts of users to follow one or more records.
Automatically configuring the accounts in this way automatically provides
one or more users with visibility of changes and modifications made to
one or more records. In some implementations, the on-demand service
provider may configure the accounts by configuring filters associated
with each account's newsfeed to automatically receive feed items for
tracked updates for one or more records. Thus, according to some
implementations, the on-demand service provider may automatically
configure the newsfeeds of various users to follow a record in response
to a determination that the record has a duplicate record stored
elsewhere, or may be a duplicate record itself.

[0113] For example, one or more servers operated by an on-demand service
provider may automatically configure accounts belonging to owners of a
newly created record to follow the record. In this example, a user who
created the new record may automatically be identified as the owner of
the record. In various implementations, in response to determining that
one or more existing records may match the new record, one or more
servers operated by the on-demand service provider may configure the
user's account to automatically follow the new record. Similarly,
accounts associated with owners of the one or more existing records may
be configured so that those owners follow the one or more existing
records. Thus, accounts associated with owners of records that may be
duplicates, or have duplicates stored elsewhere, may be automatically
configured to follow the records that they own.

[0114] Furthermore, additional entities, such as other users or any other
relevant entity, may have accounts which are also automatically
configured. In some implementations, an owner of the new record may be
part of a group of users of an on-demand service. In this instance, the
accounts associated with each user of the entire group of users may be
configured to follow the new record. For example, the user may be part of
a sales team using Salesforce®. In this instance, one or more
settings in the owner's account may indicate that he or she is part of a
sales team and may point to a record storing identifiers that identify
other members of the sales team. In some implementations, one or more
servers operated by the on-demand service provider may retrieve the
record, identify the other users, and configure their accounts to follow
the new record. Similarly, this process may be performed for any of the
identified records, including the matching one or more existing records
and their respective owners.

[0115] At step 512, the followers of the new record may be notified that
one or more matching records exist. In some implementations, one or more
servers operated by the on-demand service provider may provide the
notification by generating a feed item that is displayed in each of the
followers' respective newsfeeds. For example, the feed item may be a
message posted to the new record using an on-demand service, such as
Chatter® provided by salesforce.com, inc. In various implementations,
the feed item includes one or more data values that may identify one or
more of the matching records. The feed item may further include
information that was used as the basis for determining that a match
exists. For example, if the new record includes a first name that matches
a first name stored in an existing record of another database, the
matching first name may form the basis for determining that these two
records match. In this example, the matching first name may be included
in the feed item and displayed in one or more newsfeeds. Furthermore,
additional text strings may be automatically generated to provide
contextual information for the matching information. For example, a text
string stating "This name matches a name stored in an existing record"
may be generated and displayed along with the matching name in each of
the newsfeeds.

[0116] In various implementations, the feed item may include other types
of information and other data objects related to either the new record or
the matching existing record. For example, in addition to providing
information about which data fields match, the feed item may include a
link to the matching existing record. Thus, when presented with the feed
item in a newsfeed, a follower of the new record may select the link and
access the matching record. Accordingly, the automatic notification and
information provided by the feed item may allow a user to manually verify
whether or not the records actually match and whether or not one of the
records is duplicative. Moreover, in some implementations, when accessing
the matching record, the user may determine which record should be kept
and which record should be deleted and/or modified.

[0117] FIG. 9 shows an exemplary image 900 of a graphical user interface
presented in a web browser at a client machine, in accordance with one or
more embodiments. In this example, image 900 displays an information feed
for a newly created record. In some implementations, a user may view the
feed items depicted in image 900 by accessing the new record itself
instead of viewing the feed items via the user's newsfeed. In various
implementations, image 900 may include data field 902, data field 904,
data field 906, and data field 908. In some implementations, data field
902 is configured to display information about a record which may be
retrieved from the record itself, or metadata associated with the record.
For example, data field 902 may display a data value that identifies the
type of record and an entity, such as a user or business contact,
associated with image 900. In this instance, data field 902 indicates
that the record is a lead that stores information associated with "Sandy
Jones."

[0118] In various implementations, data field 904 displays an information
feed for the record. According to some implementations, various feed
items generated based on changes and tracked updates associated with the
record are displayed in data field 904. In various implementations, data
field 904 includes data field 906 and data field 908.

[0119] In some implementations, data field 908 may display a feed item
that is a message indicating that a new record was created. In this
instance, the feed item identifies when the record for "Sandy Jones" was
created and who the creator is.

[0120] In various implementations, data field 906 may display a feed item
that is a message indicating that a matching record may exist for the
lead "Sandy Jones." Furthermore, the feed item displayed in data field
906 may display at least some of the information that formed the basis of
the determination of a match. In some implementations, data field 906 may
also display automatically generated text that provides contextual
information for data values or fields that formed the basis of the
determination of a match. In this instance, data field 906 displays text
indicating that an existing contact record already exists, and an email
addresses stored in each of the two records that match. In various
implementations, data field 906 may display the type of record that may
be a matching record. In this instance, the matching record is a contact
record and thus a different type of record than the new record which is a
lead record.

[0121] Returning to FIG. 5, at step 514, a feed item may be created for
the matching one or more records, where the feed item notifies followers
of the matching one or more records that the new record exists.

[0122] As similarly discussed above with reference to step 512, the
followers of the matching one or more records may be notified via each of
their respective newsfeeds that a new record has been created that may be
a duplicate. Thus, according to some implementations, one or more servers
operated by the on-demand service provider may provide the notification
by generating a feed item that is displayed in each of the followers'
respective newsfeeds. In various implementations, the feed item includes
one or more data values that may identify the new record. The feed item
may further include information that was used as the basis for
determining that a match exists. Furthermore, additional text strings may
be automatically generated to provide contextual information for the
matching information. In various implementations, the feed item may
include other types of information and other data objects related to
either the new record or the matching existing record. For example, in
addition to providing information about which data fields match, the feed
item may include a link to the matching existing record.

[0123]FIG. 10 shows an exemplary image 1000 of a graphical user interface
presented in a web browser at a client machine, in accordance with one or
more embodiments. As similarly discussed with reference to image 900 in
FIG. 9, image 1000 displays an information feed for a record. While image
900 described an information feed that may be generated for a new record,
image 1000 displays an information feed that may be generated for the
matching record.

[0124] In various implementations, image 1000 may include data field 1002,
data field 1004, data field, 1006, and data field 1008. As similarly
discussed with reference to data field 902 in FIG. 9, data field 1002 is
configured to display information about a record which may be retrieved
from the record itself, or metadata associated with the record. For
example, data field 1002 may display a data value that identifies the
type of record associated with image 1000. In this instance, data field
1002 indicates that the record is a contact record for "Sandy Jones."

[0125] In various implementations, data field 1004 displays various feed
items generated based on changes and tracked updates associated with the
contact record for "Sandy Jones." In various implementations, data field
1004 includes data field 1006 and data field 1008.

[0126] In some implementations, data field 1008 may display a feed item
that is a message including historical data, such as when the contact
record for "Sandy Jones" was created and by whom. In various
implementations, data field 1006 may display a feed item that is a
message indicating that a new record has been created and might be a
duplication of the contact record associated with image 1000. In this
instance, the feed item identifies when the new record was created and
who created it. In various implementations, the feed item may display
information that formed the basis of the determination of a match. In
some implementations, data field 1006 may also display automatically
generated text that provides contextual information for data values or
fields that formed the basis of the determination of a match. In this
instance, data field 1006 displays text indicating that a new lead has
been added, and an email addresses stored in each of the two records
matches. Furthermore, data field 1006 may display the type of record that
the new record is and provide a link to it. In this instance, the new
record is a lead record.

[0127] While one or more implementations have been described by way of
example and in terms of the specific embodiments, it is to be understood
that one or more implementations are not limited to the disclosed
embodiments. To the contrary, it is intended to cover various
modifications and similar arrangements as would be apparent to those
skilled in the art. Therefore, the scope of the appended claims should be
accorded the broadest interpretation so as to encompass all such
modifications and similar arrangements.