xRM – What’s That?

September 10, 2009 at 10:19 am | Posted in Uncategorized | Leave a comment

Hi folks,

You might come across the xRM in recent past several times and be confused whats the term xRM really means.Here is a little brief about xRM – Cousine of CRM

xRM (Anything Relationship Management) is the natural evolution of CRM (Customer Relationship Management). In today’s dynamic business environment companies demand the ability to manage anything (X=anything), not simply relationships with customers. Microsoft CRM sits on the .NET platform and because of that, it is much more than a traditional CRM product. Instead, a better way to think of Microsoft CRM is as a rapid development application with out of the box CRM functionality, capable of instantly leveraging the .NET platform, and a vast array of Microsoft applications.

The purpose of xRM.com is to provide you with valuable information on Microsoft CRM and the .NET platform, and to show you how they can best be leveraged in the day-to-day running of your business. At xRM.com we believe that Education, Platform selection, Strategy, and leveraging the Microsoft choice model are the keys to success.

What’s in a Name: xRM

Ever wondered what exactly makes up a name? We are all familiar with the quote from Shakespeare’s Romeo and Juliet “A Rose by any other name would smell as sweet”. I do have great respect for Shakespeare and his writings but I disagree with him on this. Names are not just meanings they have identities. In general we have an association to certain names for certain things or even people. As an individual we all have different names associated to different things eg: daughter, wife, mother, aunt. A name eventually develops meaning, character and history. So getting a dozen “odorsnouts” does not give you the same feeling as getting a dozen “Roses”.

What am I getting at you might ask? xRM.com has been around for a bit and has its own identity and we would like to share that with you so you know the meaning and the history behind it.

xRM

xRM

The box really goes well with the software/hardware industry and with the addition of the Brightness in the middle adds the “light going on” and “thinking” concept in a very subtle way. The flexibility added to the sides of the square give the notion of thinking outside the box in a sense that it’s expanding and going to explode. The idea of “flexibility” is enforced and the concept of “expanding boundaries” and “growth” are conveyed. There are a lot of logos that use a square framing, but the angle of this one gives it a unique twist along with the added notion of movement. The logo is serious, but friendly at the same time. It gives the impression that xRM is not out of reach and too intimidating to approach!

This logo is much more abstract in terms of the ideas behind it, but I think that’s a good thing. People can make their own interpretations and it’s safe enough that no negative association can be connected to it.

Advertisements

Creating a Custom Workflow in CRM 4.0

September 3, 2009 at 11:52 am | Posted in Uncategorized | 1 Comment

Hi Guys,

Cheers!! one  of my collegue intends to create a new custom workflow in Dynamics CRM and i combained with him in the activity and created a custom workflow which i summarized below.

A sample workflow

Consider the following scenario: To speed up their processing times, the order processing department wants to get information about upcoming sales in advance. Let’s say they want to get structured information in a file on the products in the sales pipeline when the close probability of an opportunity reaches a specific value.

Sending an e-mail, creating entities (activities) when the close probability of an opportunity is set to a specific value is already provided using the CRM workflows. But generating a file is not a supported step in a CRM workflow.

Developing custom workflow activities enables us to merge our own requirements with the Microsoft CRM 4.0 workflow features. To demonstrate how it works, we will develop a custom workflow activity that exports product information to a file. This custom workflow activity can be used as a workflow step within a CRM workflow for opportunities. To keep it simple we will only export the product names of all products related to an opportunity (opportunityproduct) to a text file and we will not define the complete workflow to cover the scenario described above.

The custom workflow activity will call a Web service method of Microsoft Dynamics CRM and use an input parameter that can be entered by the user as a workflow property within the CRM workflow form.

Prerequisites

These are the tools and components I used to build my own Microsoft Dynamics CRM custom workflow activity:

  • Microsoft Visual Studio 2005
  • Windows Workflow Foundation
  • Visual Studio 2005 extensions for .NET Framework 3.0 (Windows Workflow Foundation)
  • Microsoft Dynamics CRM 4.0 SDK: the following assemblies must be added to your project. They can be found in the SDK\Bin folder:
    • Microsoft.Crm.Sdk.dll
    • Microsoft.Crm.SdkTypeProxy.dll
  • The Plug-in Developer Tool to register the workflow as a plug-in: see Microsoft Dynamics CRM SDK Documentation for more information how to build and use this tool

Building a Workflow Activity Library

If the Visual Studio 2005 extensions for .NET Framework 3.0 are installed, some additional project templates for workflows are provided:

WWF

Choose the Workflow Activity Library template.

Add a reference to Microsoft.Crm.Sdk.dll and Microsoft.Crm.SdkTypeProxy.dll located in the SDK\Bin folder to the project created.

You may want to rename the generated Activity1 class. Please do not use the same name as the namespace of your project because you might get problems when publishing this workflow in CRM. In this example I use ExportProductInformationActivity as the class name and ExportProductInformation as the namespace.

Change to the code view of the generated class and you see that the generated class derives from SequenceActivity. This is an activity of the Windows Workflow Foundation base activity library which may run a set of child activities in an ordered manner. This is ok for our purpose even though we will not run any child activities.

To access the custom workflow activity from the Microsoft CRM 4.0 workflow interface you have to annotate the class with the .NET attribute CrmWorkflowActivity and override the Execute method which is called by the workflow runtime to execute an activity. Basically, that is all you have to do to implement a custom workflow activity for Microsoft CRM 4.0.

In our scenario we want to access the CRM Web service methods to get information about the opportunityproducts related to the opportunity for which the workflow is started.

Use the ActivityExecutionContext passed to the Execute method to get the workflow context, which contains information about the instance of the workflow.
Basically you will get information about the primary entity (name, id, pre- and post-image) using the workflow context, but it also contains a method CreateCrmService which returns a reference to the CrmService. Please note that this is a reference to the CrmService of the SDK assembly, we added to the project, so you do not have access to any custom fields or entities. Use CRM’s MetadataService Web service to access them. According to the CrmService there is a CreateMetadataService method to get a reference to the MetadataService.

Here is the code of ExportProductInformationActivity.cs:

using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
using System.Drawing;
using System.Workflow.ComponentModel.Compiler;
using System.Workflow.ComponentModel.Serialization;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;
using System.Workflow.Runtime;
using System.Workflow.Activities;
using System.Workflow.Activities.Rules;
using Microsoft.Crm.Sdk;
using Microsoft.Crm.SdkTypeProxy;
using Microsoft.Crm.Workflow;
using System.IO;

namespace ExportProductInformation
{
/// <summary>
/// Custom workflow activity class derived from SequenceActivity.
/// The CrmWorkflowActivity provides the information needed by the CRM workflow form
/// </summary>
[CrmWorkflowActivity(“Export Product Information”, “My Custom Workflow Activities”)]
public partial class ExportProductInformationActivity :SequenceActivity
{

/// <summary>
/// The dependency property is used to define an input parameter
/// It is annotated with attribute CrmInput to access the parameter within the CRM workflow form
/// The parameter of Attribute CrmDefault is used as the default content of the property.
/// </summary>
public static DependencyProperty filenameProperty =DependencyProperty.Register(“filename”, typeof(string),typeof(ExportProductInformationActivity));

[CrmInput(“Filename”)]
[CrmDefault(@”C:\Test\OrderForecast.txt”)]
public string filename
{
get
{
return (string)base.GetValue(filenameProperty);
}
set
{
base.SetValue(filenameProperty, value);
}
}

public ExportProductInformationActivity()
{
InitializeComponent();
}

/// <summary>
/// The Execute method is called by the workflow runtime to execute an activity.
/// </summary>
/// <param name=”executionContext”> The context for the activity</param>
/// <returns></returns>
protected override ActivityExecutionStatusExecute(ActivityExecutionContext executionContext)
{

// Get the context service.
IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService));
IWorkflowContext context = contextService.Context;

// Use the context service to create an instance of CrmService.
ICrmService crmService = context.CreateCrmService(true);
BusinessEntityCollection opportunityProducts = RetrieveOpportunityProducts(crmService, context.PrimaryEntityId);

// Use the given filename to create a new StreamWriter
TextWriter w = new StreamWriter(this.filename);
string productname;

foreach (DynamicEntity de inopportunityProducts.BusinessEntities)
{
productname = de.Properties.Contains(“productid”) ? ((Lookup)de.Properties[“productid”]).name : null;
w.WriteLine(productname);
}

w.Close();

return ActivityExecutionStatus.Closed;
}

private BusinessEntityCollectionRetrieveOpportunityProducts(ICrmService service, Guid oppId)
{
Microsoft.Crm.Sdk.Query.QueryByAttribute query = newMicrosoft.Crm.Sdk.Query.QueryByAttribute();

query.ColumnSet = new Microsoft.Crm.Sdk.Query.AllColumns();
query.EntityName = EntityName.opportunityproduct.ToString();
query.Attributes = new string[] { “opportunityid” };
query.Values = new string[] { oppId.ToString() };

RetrieveMultipleRequest retrieve = newRetrieveMultipleRequest();
retrieve.Query = query;
retrieve.ReturnDynamicEntities = true;

RetrieveMultipleResponse retrieved = (RetrieveMultipleResponse)service.Execute(retrieve);
return retrieved.BusinessEntityCollection;
}
}
}

You might have noticed that the code contains the definition of a DependencyPropertynamed filenameProperty. In Windows Workflow Foundation Properties provided on activities are used to make the activity configurable by the user respectively the consumer of the activity. In our case the CRM user should be able to decide the location where the generated export file will be saved. The property is annotated with the CRMInputattribute to be able to access it as a workflow property on the CRM workflow form as an input parameter. The CrmDefault attribute is used to set a default value.

All plug-in assemblies used with Microsoft CRM 4.0 have to be signed. So we have to sign the workflow assembly, too, as it will be registered as a plug-in. To sign the assembly with a strong name, go to the project properties of the Visual Studio project, tab ‘Signing‘, check ‘Sign the assembly‘. Under ‘Choose a strong name key file‘ choose <New> and provide a name for the key file.

Registering the Workflow Activity as a Plug-in

After your custom workflow activity has been compiled, you have to register this assembly as a plug-in. Your activity will then appear in the workflow form in the Microsoft Dynamics CRM Web application.

I used the SDK’s Plug-in Developer Tool to register the workflow activity using the following register.xml:

<?xml version=”1.0″ encoding=”utf-8″ ?>
<Register
LogFile = “Plug-in Registration Log.txt”
Server = “http://[your CRM server:port]
Org = “[your organization name]”
Domain = “[your domain]”
UserName= “[your user name]” >

<Solution SourceType=”0″ Assembly=”[location of the assembly dll]”>
<WorkflowTypes>
<WorkflowType
TypeName=”ExportProductInformation.ExportProductInformationActivity”
FriendlyName=”Export Product Information”/>
</WorkflowTypes>
</Solution>
</Register>

If you run the Plug-in Developer Tool multiple times to register the assemblies after you changed something you might have to restart IIS.

Testing the Custom Workflow Activity

The Custom Workflow Activity is now registered and if you open the Workflows and create a new one for opportunities, you can add your activity as a workflow step:

WF1

WF2

Make sure you have created an appropriate directory at CRM Server to save the output file to as there is no error handling implemented. Saving the file to C:\ is not the best option.

To keep it simple we choose the workflow to be available to run On Demand. Please do not forget to uncheck the option Record is created under Start when.
After publishing the workflow you can start it by selecting an opportunity and using button Run Workflow.

Debugging the Custom Workflow Activity

To Debug the custom workflow activity you have to copy the pdb file of you assembly to%installdir%\server\bin\assembly on your CRM server, set a breakpoint in your Execute method and attach your Visual Studio project to Microsoft Dynamics CRM asynchronous service (process CrmAsyncService.exe) on your CRM Server.

If you have difficulties to update the file in the assembly directory on the server because there is already another copy of the file run iisreset in a command window and / or restart the Microsoft Dynamics CRM asynchronous service.

=============================================

New Social Networking site for Adobe Flex – OpenSource

August 26, 2009 at 12:45 pm | Posted in Uncategorized | Leave a comment

Hi CRM Guru’s,

Hope you are busy at your work.

A new social networking site for,Adobe Flex users, has been launched by my friend Mr.Mohamed Kamil and has been named as Chennai Flex user Group.

Very informative and interactive site and if u have some time and share and gain knowledge on Open source just pay a visit to his site at http://mohamedkamil.ning.com/

Cheers!!!!!

NetStandard Presents GaleForce CRM

August 26, 2009 at 10:03 am | Posted in Uncategorized | Leave a comment

NetStandard Presents GaleForce CRM

Posted using ShareThis

CRM Solutions Made Easy for Financial Institutions

August 26, 2009 at 9:53 am | Posted in Uncategorized | Leave a comment

Hi Guys,

AS i have mentioned in my earlier posts, Dynamics CRM solutions for financial vertical is provided by Galeforce Solutions. Good news is that it is now available in SaaS mode.

Looking for an alternative to high-priced, money-down CRM software?
Consider a more flexible, on-demand approach. Software as a Service
(SaaS) is a pay-as-you go software model that many small and midsized companies are choosing for its agility and speed.

In order to give SaaS options to our clients, NetStandard has signed an agreement with GaleForce, an award-winning SaaS provider who delivers Microsoft-based CRM software. With people trained in the Galeforce and SaaS environments, NetStandard is poised to provide CRM for the financial services sector.
While we can deliver either approach—typical licensing or Software as a Service—most people aren’t yet aware of the advantages of SaaS, so here’s a quick rundown.

SaaS is delivered to your business via a VPN-type connection to our servers. In other words, the software is being pumped directly from NetStandard’s secure environment, through a customized connection, to your company. Entry level service is $110 per user per month. Contrast this with paying $10,000 up front to own the rights to a software package. With SaaS, the entry cost is low, rather than a huge up-front investment. If process engineering or customization is necessary, they’re added as hourly services.

A second consideration is the low total cost of ownership. With the SaaS approach, you’ll get just the software you’ll need, finely tuned for your environment. That means there’s no need to train your staff in multiple areas like emailing, Microsoft CRM, imaging, etc. Since SaaS is highly customizable, you’ll avoid the additional knowledge requirements that cause costs to rise.

A third factor in favor of SaaS is that it will be run for you from NetStandard’s secure environment by people who are experts with the software. As of today, we’ve had our SaaS environment up and running for over a year and three months, and have people ready to endorse its reliability and speed. Obviously, we have a vested interest in keeping your software up at all times. If we don’t, you’ll fire us!

Finally, with SaaS there’s a much lower overall risk. You don’t install it on your machines. You simply allow us to remotely integrate the software with what you’re already doing. At the same time, you’re drawing from the strengths of NetStandard’s environment. Not many businesses can afford the redundant power grids, network connections, and cooling facilities we provide to make sure your software keeps running at peak efficiency.

Are there potential challenges with SaaS?

The primary issue is whether you’re comfortable letting go of organizational control. Are you willing to let a vendor (NetStandard) run your systems for you? Of course, when you buy software licenses, you still depend on a vendor. With the SaaS model, we can deliver all the capabilities you need, but avoid the up-front expense. And while it’s true that our team will be running your software, we’ll also take care of security, troubleshooting, and integration—the usual time-consuming obstacles.

One other thing to keep in mind: NetStandard can advise you on best practices within the SaaS framework, but as with traditional software licensing, you’ll still need to define processes for your company.
SaaS is an agile, on-demand solution, but great SaaS can’t replace consistent data cleanup and processes. It’s designed to enhance and accommodate your workflow—which will need to be predefined.

That’s the big picture! At this point, you’re on your way to understanding the potential of Software as a Service. If you’re looking for an alternative to one-and-done licensing, be sure to contact us with your questions.

Ganpati Bappa Morya

August 21, 2009 at 5:13 pm | Posted in Uncategorized | Leave a comment

Chants of Ganpati Bappa Morya, Pudhchya Varshi Lavkar Ya (Praise O Lord Ganesha, visit us again early next year) will be audible throughout Maharashtra and other parts of India as Ganesh Chaturthi is fast approaching.

The festival of Ganesh Chaturthi is held annually to pay respect to Lord Ganesha and celebrate his birth. It is said that no new business venture or for that matter any prayer for Hindus can be considered complete without offering prayers to Ganesha first.

Lord Ganesha holds an important place in the hearts of all the hindus throughout the world as he is considered the vigana harta (remover of obstacles in ones path). Grand celebrations will be witnessed throughout the state of Maharashtra on the occasion ofGanesha Chaturthi which falls on the 23rd of August this year.

Let us all get together in celebrating this great festival which pays respect to one of the most revered Hindu deities – Ganesha who is a Symbol of Learning for all.

InformIT: Microsoft Dynamics CRM 4 Integration Unleashed: Silverlight Introduction

August 20, 2009 at 12:23 pm | Posted in Uncategorized | Leave a comment

InformIT: Microsoft Dynamics CRM 4 Integration Unleashed: Silverlight Introduction

Shared via AddThis

Mobile Express for Microsoft Dynamics CRM 4.0

August 20, 2009 at 10:21 am | Posted in Uncategorized | Leave a comment

Mobile Express for Microsoft Dynamics CRM 4.0.

The CRM Address Entity: There’s more to it than you think!

August 14, 2009 at 10:14 am | Posted in Uncategorized | Leave a comment

Hi Guys,

Have you ever worked a lot iinto MSCRM’s Address Entity. I never worked a lot into it. But when a situation arises due to a requirement i peeped into the Mysterious ADDRESS Entity of Dynamics CRM 4. 0 and i found the below pitfalls which is very ridiculos to my View.  Any comments and studies or any type of suggestions on this issue are Welcomed.

============================================

I’ve been working with Microsoft CRM in production environments since 1.2 was released, but apart from some minor tweaks to the form I haven’t had to work with the Address entity in too much depth. Until now. I was surprised to find that there are a lot of, er, “undocumented features” that make this built-in entity behave quite differently than I expected. The SDK has a few remarks about the Address entity, but it took me a while to put all the pieces together, and I thought I’d share what I’ve found:

1. Two blank address records are created for each Account and Contact. Out of the box, CRM Accounts and Contacts have built-in fields to capture two addresses. These fields are address1_street1, address1_city, address1_stateorprovince, etc., as well as another whole set for address2 fields.

Whenever an Account or Contact is created, the CRM platform creates two blank address records related to that parent Account or Contact.

contact_2addresses

The purpose of these two blank address records is to store synchronized data that is entered in the address fields on the Account or Contact itself. The platform handles keeping these two entities in synch. If you change the values stored in the Contact’s address fields, the associated Address record is updated automatically.

2. The first two Address records that the platform creates are hidden in the “More Addresses” associated view on the Account or Contact. I guess this is because these addresses should be maintained on the Account or Contact, not in the Address entity itself. The purpose seems to be so that addresses added on the Account or Contact form are available when you do an address lookup on a quote or order. (Note that you’ll need to enter data in the “Address Name” field on the Account or Contact if you want it to show up in the Address Lookup view as well.

BlankMoreAddresses

3. You cannot update the Address record via workflow. You can create workflows based on the Address entity, but it’s not available to update itself. Not sure why, though…

4. You can’t modify the relationship mappings between the Account entity or the Contact entity and the Address entity. And you can’t add custom relationships to the Address entity.

5. Addresses are not available on Security Roles. You want to restrict users from editing or deleting Addresses? Can’t do it, at least not with Security Roles. Go figure…

6. There’s no built-in way to add the parent Account or Contact to the Address form. Adding the “Parent” field to the Address’s Advanced Find or Lookup views only returns a blank column as well. This seems to be a shortcoming or a bug of some sort. For all other entities with a N:1 relationship, you can add the ‘1’ part of that equation to the ‘N’ form. For example, if you create an entity called “Projects” with a N:1 relationship to Accounts, you can add the Account lookup field to the Project form. The lookup field actually consists of an array that contains a GUID, a string for the record’s name, and the object type code (OTC). In the case of Addresses, the only thing stored in the Address table is a field for the GUID. Without the name of the related object and the OTC, the interface can’t present a normal, functioning lookup field.

WORKAROUNDS:

With all of these limitations, organizations that need to manage multiple addresses for their Accounts or Contacts, and that need to perform logic against these addresses regularly, may need to do some workarounds. Among the options to consider: create a plug-in that “un-hides” the first two address records so they’re visible in the “More Addresses” associated views. Another option would be to create a custom entity with a N:1 relationship to the Account or Contact. This option has the benefit of allowing you to do the full range of mappings and workflow that you can do with just about any other entity. The downside is that if you want the address fields on the Account or Contact to be used and available for mail merges and Outlook synchs, the custom entity option will require some more create workflow solutions.

====================================================

Guys eventhough this workarounds can work well but reports cant be modified to suit these modifications.

All views are welcome regarding this issue.

Cheers!!!!!!

Creating A Sub-Lookup in MSCRM 4.0

August 11, 2009 at 4:17 pm | Posted in Uncategorized | 1 Comment

Hi Guys,

One of my friend had a requirement that a picklist is to be populated depend upon a value selected by a lookup. It is a bit similar to dependent picklists. It can be acheived using FETCH Xml using MSCRM SDK. But this type of customization is not recommended by Microsoft as it affects performance of the system adversly.

This can be, rather in other way, accomblished using sub-lookup’s. I have given a brief of doing this below with sample attributes.

=====================================

Quite often there is a requirement to have the values of one picklist or lookup be determined by the value of another picklist or lookup. As most of you will know Microsoft CRM does not have the concept of sub picklists or sub lookups. I’ve often seen this requirement solved through the use of picklists and JavaScript. Yuk! This solution means that every time a new value is added to either the parent or child picklist, the JavaScript code needs to be changed. Not a great solution for system administrators who have no knowledge of JavaScript.

Here is a simple solution using lookups rather than picklists with some simple, generic (and warning: unsupported) JavaScript.

For my example today lets presume I need to add a Primary Industry lookup to the Account form. I also need add a Sub Industry lookup where the values shown are determined by what I select as the Primary Industry.

First I need to create two new entities, Primary Industry and Sub Industry. Next I need to create a 1:n relationship between the two new entities with Primary Industry as the Primary Entity. As you can see in the image below I have also set Primary Industry relationship attribute as Business Required so all Sub Industries must have a Primary Industry.

sublookup1

Next I add the Primary Industry attribute to the Sub Industry form

sub-lookup2

In order to be able to filter the Sub Industry lookup based on the selected Primary Industry value I need to add the Primary Industry attribute as a find column in the Sub Industry Lookup View. I can now publish my two new entities.

sub-lookup3

I add some values to my Primary Industries and my Sub Industries.

sub-lookup1

Now I need to add the Primary and Sub Industry lookups to my Account form. I create  a n:1 relationship between the Account entity and my Primary Industry and Sub Industry entities. In each case the Account Entity will be the Primary Entity. I can then add the created Primary Industry and Sub Industry lookup attributes to the Account form as shown below.

sub-lookup10

Now I need to add the JavaScript to filter the value of the Sub Industry lookup based on what is selected as the Primary Industry. On the change event of the Primary Industry lookup I add the following JavaScript:

var lookupItem = new Array;

lookupItem = crmForm.all.new_primaryindustryid.DataValue;
var searchVal = lookupItem[0].name;
crmForm.all.new_subindustryid.additionalparams = ‘search=’ + searchVal;

I can now publish all my changes and test the result. As you can see below because I selected Finance as the value for my Primary Industry, when I click on the lookup for the Sub Industry it is “pre-filtered” and only shows the Sub Industries that relate toFinance.

sub-lookup5

=================================================

You can use this for various scenario’s depending on your business case Guys.

Thanks RIAZ,VALLI and my collegues for coming up this solution.

CHEERS!!!!

« Previous PageNext Page »

Create a free website or blog at WordPress.com.
Entries and comments feeds.