Drupal CRM's architecture - clarifications and further steps

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
jp.stacey's picture

There's a wiki page about the CRM stack, and I thought it would be valuable to move discussion and clarification here.

I've tried to construct mental maps of the existing specification, to make sure that it's not inconsistent or ambiguous. I've attached the results of a couple of these mental maps below. I don't want to re-hash existing discussions, or insert my own opinions into them in retrospect, but I do want to make sure that the spec has correctly encapsulated the original intention! That way we can develop more closely to an agreed spec and avoid developing something which works but isn't what was expected.

I'll explain how I think it's all meant to happen below. If anyone has access to a brilliant primer on D7 Field API terminology for dummies then do let me know, as I'm currently mired in D6 terminology myself.

Page 1: genera

Please tell me what's wrong with this statement, as encapsulated in the attachment:

A genus is a mixable class (D7: "bundle"?), which can be applied to an existing profile object (D7: "entity"?) and leave the object with extra field instances (D7?). It does not affect the underlying profile type bundle (D7?) The genus does not get applied across all profile objects (D7?) of a particular type, just one particular party's particular profile. Genera are additive: that is, applying two genera leads to the profile instance having the union of the field instances described by the fields on each genus.

More specifically:

  1. Should a genus apply fields to the profile "content type" (D7: "bundle"?) or just to the specific profile object (D7: "entity"?)
  2. Can a genus apply fields across several profiles or profile types, saying "I want fields X and Y on the personal information profile, but fields A and B on the membership profile"?
  3. Are some genera mutually incompatible?

Page 2: parties and users

Again, tell me what's wrong with this statement:

A party is an object (D7: "entity"?) of only one type (so not "content-typed" - D7?) which can have profiles attached to it via a standard entity-entity reference (D7?) The party behaves exactly like a user. If a user exists, the party is replaced by the user--profile core of Profile2 takes over. Users can have typed relations to parties which carry permissions, so a given user can

Again, more specifically:

  1. Party--party or party--user typed relationships - it strikes me that parties behave a lot like organic groups. You can belong to them if they're organizations, for example. This would be very similar to a low-end CRM solution we recently had to employ with a client, whereby organic groups were indeed used to represent businesses in a directory. Does it make sense to bring D7 Groups into the tech stack?
  2. Should the party be there instead of a user, or along with it? That is, should the profile_anonymous module only add parties for non-user profile collections, or when enabled should it transplant a party into every existing user--profile relationship, so that you get a nicer symmetry of (optional user)--party--profiles? That transplanting would also help with party--other-user relationships, because there'll always be a party object to treat as an organic group and assign typed relationships to. Basically, you'd always be able to find a party object in a profile collection: the user would end up along for the ride.

Other clarifications

  1. Is it worth clarifying what's in the stack - the code architecture - and what's part of the model description - the data architecture?
AttachmentSize
Drupal CRM architecture.pdf22.83 KB
Drupal CRM architecture.odg_.txt17.25 KB
Drupal CRM architecture v2.pdf33.62 KB
Drupal CRM architecture v2.odg_.txt18.56 KB

Comments

Following discussion

jp.stacey's picture

Following discussion w/Joachim on IRC, here's an updated architecture diagram. Notes to follow on wiki page.

Chucking an idea into the mix

Jeff Veit's picture

http://ostatus.org/sites/default/files/ostatus-1.0-draft-1-specification...

Looks to me like it has some resonance with work on the CRM.

It has some interesting ideas. Contacts are represented by uri's. Person is one of contact types. It also includes Atom Activities. A way way for activities to be expressed in Atom form. That's interesting because it ties in well with modelling the activities on contacts in a CRM.

It seems to me that if there's existing standards in the area that the elements in the CRM should map onto those standards, so that modules can be built that interact with the standards.

For example - if the CRM is tracking a person, and the person has a Diaspora/Facebook/Linkedin page/site then it would be useful to build a module that grabs and incorporate the info that the person is generating about themselves, their relationships and their activities, as part of the CRM entry for that person.

It's good to have a technical

jp.stacey's picture

It's good to have a technical specification to work off, although it doesn't cover the user experience or basic user "can I do?"s. We should also be careful pulling that standard off the shelf, as it includes a lot of baggage about e.g. microblogging, client APIs, publishers and subscribers that while they might have their analogues in a CRM are ultimately different real-life and potentially spec entities.

An actual CRM spec would be good - any research anyone has about actual CRMs, use cases, interviews with potential users etc would be solid gold. Anyone?

Has the discussion of the

matt2000's picture

Has the discussion of the role of Organic Groups been carried further anywhere else? I think that's an important point to consider.

For example, assuming a generic 'entity_relationships' module, how do we make the relationship between an 'party' and an 'og' useful? Or is that out of our scope?

OG was just a possible

jp.stacey's picture

OG was just a possible solution to the underlying use cases: these in turn came out of the Drupalcon Copenhagen brainstorming, which I missed most of. From what I gleaned from joachim's documentation and discussions, here's some examples of relevant use cases.

  1. Solomon the salesman is liaising with Celia, the CTO at the small widget-making company Initech. But Celia is also a member of the board at the Institute for Chartered Widgeteers. So Solomon needs to be able to represent a way in which Celia "belongs to" Initech and the ICW.
  2. Later, Celia says she wants to be able to change herself some of the details that Solomon has for Initech, as they're going through a restructuring, but the ICW wouldn't want her to change their details, even by mistake. So Solomon then needs a to represent Celia's membership of Initech as being "administrative" in the sense that she gets editing rights over Initech but not over the ICW.

Back to a solution... My personal feeling is that I see this being solved by making each party potentially an organic group. So Celia is an OG member of both Initech and the ICW, and with something like OG user roles, she can have different privileges regarding the Initech party, from the ones she has regarding the ICW party.

But if you can think of alternative ways of solving this, then I think the part that OG plays here is still up for grabs. I definitely don't want us to be led by only the solutions I personally know!

Context

Jeff Veit's picture

I was thinking about this a little more, and it strikes me that context is important.

Amy is an executive in the context of her work
She's a helper in the context of her voluntary work over the weekends
She's got one telephone number in one context, and another in the other.
She has a personal website on Facebook, but also maintains a Linked-in page in the context of her career. She also has a blog on her company site as the CEO. Without knowing the context of each of the sites, or phone numbers, or organizations that she is involved with, the relationship isn't clear.

Your problem with Solomon & Celia is the same - there's more than one context for relationships.

And Celias right to edit is also contextual.

The context could be hardcoded - e.g. a limited set - which company is an employees employer, or context could be configurable in itself, with a standard list as the basic. I'm thinking that there are some basic contexts. Maybe 'owns', 'related to', 'part of', 'subordinate to'.

To me, this just suggests

matt2000's picture

To me, this just suggests that the "thing that defines relationships between entities" should itself be a fieldable entity. Then integrators can store whatever meta-data they want about the context of relationships.

Absolutely. A relationship is

joachim's picture

Absolutely.

A relationship is itself an entity, and has all kind of data on it, including but not limited to what type of relationship it is, when it began, when it will end if at all, and who may alter its status.

I'm very interested in the

rlmumford's picture

I'm very interested in the genus idea. Any development on this?

Not that I know of. Something

joachim's picture

Not that I know of.

Something very similar has been suggested for Drupal 8: http://drupal.org/node/100925#comment-4285580

I've suggested on that issue that this could be developed in contrib on D7, but no sign of movement on that yet...

My opinion on most important features

baff's picture

I think the most important parts for a CRM are the following:

People (Organuzations, Relationships)
Invoices (opportunities, offers) - maybe with Ubercart
Contact History (emails, pn, phone calls, sms, visits, ...)
Tasks (with dates)
Files
Campaigns (newsletter,...)

I think a lot can be done with views, rules, vbo, ubercart, cck, taxonomy ...

Profile with features

steingard's picture

It's true. This group has been hmming and hawing for a solution for several years, but as Drupal has matured in 6 and 7 it has become clear that packaging it up into a good recipe using a variety of modules is the way to go.

The original intent of this group (from what I recall) was to put together a solution that would allow Drupal to reach into an existing CRM solution to expose its data to a member-based website. Maybe that's still a missing module that could more easily team up with D7's new database abstractions.

Ultimately, if you're going to use Drupal 6 or 7 to build out a web-based CRM, it would be great for us to give some case statements on what the goals were and how the solution came together... then, ideally, roll out a Profile or some Feature sets that the community can pull from for future projects. A team I'm working on at www.rhubarbmedia.ca is close to launching a great D6 CRM solution that I'll be sure to post a case study on in here (or at least link to).

CRM API

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: