19498

How to develop MS CRM kind of application

I have worked with MS CRM. There we can design our custom entity graphically and then we can also build a visual form to perform CRUD operations on that entity.

This feels so simple from end user's perspective. However I am interested to know how can I develop the similar kind of application where I design my table on the fly and the design UI on the fly.

What I want to know is like how do they achieve all of this dynamically? If I have to create CRUD on one simple table, I need to write good amount of code. How MS achieves everything on the fly? Any pointers, any document would be of great help.

Answer1:

I have no idea how they actually do it, but if it were me I'd use attributes and reflection.

Here's how I think it'd probably work / or rougthly how you could do it...

<strong>Components</strong>

The system would need a bunch of components or sub-systems; they coudl be stuff you write yourself or existing libraries (use existing libraries if you can):

    <li>A CMS of somekind, unless you want to build this into a system you already have.</li> <li>A UI component / control that lets users make their "objects". To be done well this would require a fairly advanced UI (SilverLight? HTML5?) - although I guess you could use something really basic.</li> <li>Some way of storing the users "objects" - this is bascially data, and you'd want to keep it stored in a "neutral" repository of some kind.</li> <li>Something that does the actual CRUD - I'm thinking some sort of ORM tool like Entity Framework, Lightspeed, NHibernate. You'll also need a datasource target for the CRUD operations themselves.</li> </ul>

    The trick is in points 2 and 3; this is where I'd define a set of Attributes that could be used to define the user created objects. These attributes are what logically joins the process together. Because Attributes can be read at runtime:

      <li>They'll be able to drive the UI that allows users to compose their "objects".</li> <li>When ready, you could generate actual classes that physically implement the user defined objects - and then decorate those objects with the appropriate attributes.</li> <li>Somehow have the ORM tool know how to map the properties of those objects (based on the attributes) to the datastore, or, write the DAL yourself - maybe you're DAL would wrap an ORM?</li> </ul>

      Another approach I've used is based pretty much on this but it also makes use of interfaces, and the data is stored as a "blob" of XML - not specific discrete metadata.

Recommend

  • ASP.NET 5: Error with Nuget package in Class library Package
  • MVC - Dynamically loading Partial Views
  • CSS Grid, position absolute an element in a css grid item: IMPOSSIBLE
  • insert a picture into database(sqlite) with java code. what should i do?
  • TSQL Rolling Average of Time Groupings
  • Draw half infinite lines?
  • how to get data attributes of dynamically generated element
  • Better Indy for Dephi 2007
  • Translating C# to PowerShell in InterIMAP
  • Sesame : how to remove the inference during queries?
  • Compare struct to a constant in C
  • ApplePay PKPaymentAuthorizationViewController always shows processing
  • Detecting null parameter in preprocessor macro
  • WPF version of .ScaleControl?
  • Javascript, Regex - I need to grab each section of a string contained in brackets
  • How to make JSON.NET deserialize to Microsoft Date Time?
  • Differences in dis-assembled C code of GCC and Borland?
  • ListItem.Attributes.Add not working
  • Marklogic : Query response time is very high
  • Caching attributes in superclass
  • How to change the font size of a single index for UISegmentedControl?
  • print() is showing quotation marks in results
  • Read text file and split every line in MSBuild
  • Different response to non-authenticated users and AJAX calls
  • C# - Serializing and deserializing static member
  • angularjs unit test when to use $rootScope.$new()
  • Java applet as stand-alone Windows application?
  • Incrementing object id automatically JS constructor (static method and variable)
  • Timeout for blocking function call, i.e., how to stop waiting for user input after X seconds?
  • Do create extension work in single-user mode in postgres?
  • R: gsub and capture
  • jqPlot EnhancedLegendRenderer plugin does not toggle series for Pie charts
  • Comma separated Values
  • Windows forms listbox.selecteditem displaying “System.Data.DataRowView” instead of actual value
  • Proper folder structure for lots of source files
  • Error creating VM instance in Google Compute Engine
  • How does Linux kernel interrupt the application?
  • How can I remove ASP.NET Designer.cs files?
  • java string with new operator and a literal
  • How to load view controller without button in storyboard?