Search

A lazy port scanner written in c#

This is a legacy port scanner to scan all the open ports over an IP address written in c#

Fing system user by name in MSCRM4

This is a code sample to find and return a system user by running a query over the name:
// find system user by name
private systemuser GetUser(string name)
{
QueryByAttribute query = new QueryByAttribute();
ColumnSet column = new ColumnSet();
column.EntityName = EntityName.systemuser.ToString();
//column.Attributes = new String[] { "name", "systemuserid" };
query.EntityName = EntityName.systemuser.ToString();

systemuser sysUser = new systemuser();
return sysUser; //returns system user
}


Get all roles assigned to a user in MSCRM 4.0

Hi this is a small function to get all the roles assigned to a particular user in Dynamics CRM 4.0 using the CRM SDK.
// Get all roles  assigned to a user 
private BusinessEntityCollection CurrentUserRoles(ICrmService service, Guid userId)
{
var queryForUserRole = new QueryExpression { 
EntityName = "role", 
ColumnSet = new AllColumns()
};

// Create the link entity from role to systemuserroles.
var linkEntityRole = new LinkEntity{
LinkFromEntityName = "role",
LinkFromAttributeName = "roleid",
LinkToEntityName = "systemuserroles",
LinkToAttributeName = "roleid"
};

var linkEntityUserRoles = new LinkEntity{
LinkFromEntityName = "systemuserroles",
LinkFromAttributeName = "systemuserid",
LinkToEntityName = "systemuser",
LinkToAttributeName = "systemuserid"
};

// Create the condition to test the user ID.
var conditionForUserRole = new ConditionExpression{
AttributeName = "systemuserid",
Operator = ConditionOperator.Equal,
Values = new object[] { userId }
};

// Add the condition to the link entity.
linkEntityUserRoles.LinkCriteria = new FilterExpression();
linkEntityUserRoles.LinkCriteria.Conditions.Add(conditionForUserRole);

// Add the from and to links to the query.
linkEntityRole.LinkEntities.Add(linkEntityUserRoles);
queryForUserRole.LinkEntities.Add(linkEntityRole);

// Retrieve the roles and write each one to the console.
BusinessEntityCollection currentUserRoles = service.RetrieveMultiple(queryForUserRole);
return currentUserRoles;
}


Grant/Revoke Security principles in CRM 4

Here are some list of function that works together to share/unshare and assign security priviledges over an entity.

/* Grant/Revoke Security principles in CRM 4 */

// Get Target owner dynamic
private TargetOwnedDynamic GetTargetOwned(string entityName, Guid entityGuid)
{
return new TargetOwnedDynamic()
{
EntityId = entityGuid,
EntityName = entityName
};
}

//Retrieve shared principle access
private PrincipalAccess[] GetPrincipals(TargetOwnedDynamic target)
{
//Describe the target for entity instances that are owned by a security principal.
RetrieveSharedPrincipalsAndAccessRequest retrieve = new RetrieveSharedPrincipalsAndAccessRequest();
retrieve.Target = target;
RetrieveSharedPrincipalsAndAccessResponse retrieved = (RetrieveSharedPrincipalsAndAccessResponse)_crmService.Execute(retrieve);
return retrieved.PrincipalAccesses;
}

//Retrieve team shared principle access
private PrincipalAccess[] GetTeamPrincipals(TargetOwnedDynamic target)
{
//Describe the target for entity instances that are owned by a security principal.
RetrieveSharedPrincipalsAndAccessRequest retrieve = new RetrieveSharedPrincipalsAndAccessRequest();
retrieve.Target = target;
RetrieveSharedPrincipalsAndAccessResponse retrieved = (RetrieveSharedPrincipalsAndAccessResponse)_crmService.Execute(retrieve);
return retrieved.PrincipalAccesses.TakeWhile(tm=>tm.Principal.Type==SecurityPrincipalType.Team).ToArray();
}

// Remove principle access over target
private void RemovePrincipals(TargetOwnedDynamic target, PrincipalAccess[] principals)
{
RevokeAccessRequest request = new RevokeAccessRequest();
request.Target = target;
foreach (PrincipalAccess principal in principals)
{ 
request.Revokee = principal.Principal;
RevokeAccessResponse response = (RevokeAccessResponse)_crmService.Execute(request);
}
}

// Removes all team access over target
private bool RevokeAllTeamAccess(TargetOwnedDynamic target)
{
PrincipalAccess[] allPrinciples = GetPrincipals(target);
PrincipalAccess[] teamPrincipals =
allPrinciples.Where(tp => tp.Principal.Type.Equals(SecurityPrincipalType.Team)).Select(tp => tp).ToArray();
RemovePrincipals(target, teamPrincipals);
return true;
}

// Revoke unknown team access 
private bool RevokeUnknownTeamAccess(TargetOwnedDynamic target)
{
Guid unknownTeamGuid = GetTeamGuid(_configUnknownSalesTeam);

PrincipalAccess unknownTeamPrincipal = GetPrincipals(target).Where(
up => up.Principal.PrincipalId.Equals(unknownTeamGuid) && 
up.Principal.Type.Equals(SecurityPrincipalType.Team))
.Select(up => up).SingleOrDefault();

if (unknownTeamPrincipal != null)
{
RevokeAccessRequest request = new RevokeAccessRequest();
request.Target = target;
request.Revokee = unknownTeamPrincipal.Principal;
RevokeAccessResponse response = (RevokeAccessResponse)_crmService.Execute(request);
return true;
}
else
return false;
}

// Get Team GUID
private Guid GetTeamGuid(string teamName)
{
QueryExpression query = new QueryExpression("team")
{
ColumnSet = new AllColumns(),
Criteria = new FilterExpression {FilterOperator = LogicalOperator.And}
};

ConditionExpression condition1 = new ConditionExpression
{
AttributeName = "name",
Operator = ConditionOperator.Equal,
Values = new object[] {teamName}
};
query.Criteria.Conditions.Add(condition1);

var teamRequest = new RetrieveMultipleRequest { Query = query, ReturnDynamicEntities = true };
var teamResponse = (RetrieveMultipleResponse)_crmService.Execute(teamRequest);
if (teamResponse.BusinessEntityCollection.BusinessEntities.Count == 1)
{
DynamicEntity teamRetrived = (DynamicEntity)teamResponse.BusinessEntityCollection.BusinessEntities[0];
//Key teamKey = ((Key)teamRetrived.Properties["teamid"]).Value;
return ((Key)teamRetrived.Properties["teamid"]).Value;
}
else
{
return Guid.Empty;
}
} 

// Share with unknown team
private bool UnknownTeamShare(TargetOwnedDynamic target)
{
bool alreadySharedToUnknown = false;
Guid unknownTeamGuid = GetTeamGuid(_configUnknownSalesTeam);

//PrincipalAccess[] allPrinciples = GetPrincipals(target);
PrincipalAccess[] teamPrincipals =
GetPrincipals(target).Where(tp => tp.Principal.Type.Equals(SecurityPrincipalType.Team)).Select(tp => tp).ToArray();
alreadySharedToUnknown = teamPrincipals.Any(p => p.Principal.PrincipalId.Equals(unknownTeamGuid));

if (target != null && alreadySharedToUnknown == false)
{
SecurityPrincipal principal = new SecurityPrincipal();
principal.Type = SecurityPrincipalType.Team;
principal.PrincipalId = GetTeamGuid(_configUnknownSalesTeam);

UInt32 mask = 0;
if (_configUnknownSalesTeamPermission.Count >= 1)
mask = _configUnknownSalesTeamPermission.Aggregate(mask, (current, item) => current | UInt32.Parse(item.Value));

//Grant Access
GrantAccessRequest request = new GrantAccessRequest();
request.Target = target;

request.PrincipalAccess = new PrincipalAccess();
request.PrincipalAccess.AccessMask = (AccessRights)mask;
request.PrincipalAccess.Principal = principal;
GrantAccessResponse response = (GrantAccessResponse)_crmService.Execute(request);
Log("The "+target.EntityName + " {" + target.EntityId +"} is shared with the sales team " + _configUnknownSalesTeam,false);
return true;
}
else
{
return false;
}
}




How to reference Assemblies in the GAC

If you install assemblies in the GAC and then wonder why you don't see them enumerated in the Add Reference dialogs, or, if you are complaining that if you browse the assembly folder in the Windows directory, you can't see the assembly in order to add a reference to it, read on.

The Add Reference dialog box is path-based and does not enumerate the components from the GAC. The assembly folder under windows is a special folder view and so you cannot browse to an assembly from this folder and expect to be able to Add a reference to it in the normal way.

If you want to use an assembly from the GAC, you should drop your assemblies into a local folder, and then add a reference to the assembly from this folder. You may want to set the "Copy Local" property to False for that assembly if you do not want the assembly to be copied locally to your project folders. At runtime, the application will automatically use the assembly from the GAC.

How to make your custom assemblies appear in the Add Reference dialog:

To display your assembly in the Add Reference dialog box, you can add a registry key, such as the following, which points to the location of the assembly
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\MyAssemblies]@="C:\\MyAssemblies" 
-- where "MyAssemblies" is the name of the folder in which the assemblies reside.


NOTE: You can create the this registry entry under the HKEY_LOCAL_MACHINE hive. This will change the setting for all of the users on the system. If you create this registry entry under HKEY_CURRENT_USER, this entry will affect the setting for only the current user.

For more information about assemblies and the GAC, vist the following MSDN Web Page: http://msdn.microsoft.com/library/en-us/cpguide/html/cpconglobalassemblycache.asp

shellcodetest.c


/*shellcodetest.c*/
char code[] = "bytecode will go here!";
int main(int argc, char **argv)
{
int (*func)();
func = (int (*)()) code;
(int)(*func)();
}

odfhex - objdump hex extractor

//**************************************
odfhex - objdump hex extractor
by steve hanna v.01
   vividmachines.com
   shanna@uiuc.edu
you are free to modify this code
but please attribute me if you
change the code. bugfixes & additions
are welcome please email me!
to compile:
g++ odfhex.cpp -o odfhex


note: the XOR option works
perfectly, but i haven't implemented
the full x86 payload decoder yet.
so that option is mostly useless.

this program extracts the hex values
from an "objdump -d <binaryname>".
after doing this, it converts the
hex into escaped hex for use in
a c/c++ program.
happy shellcoding!
***************************************/


#include <stdio.h>
#include <unistd.h>
#include <memory.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

#define HEX_PER_LINE 17
char symbols[37] = "0123456789abcdefghijklmnopqrstuvwxyz";
const int MAX_BASE = 36;
int GetIndex(char * pString, char search);
int BaseToDec(char* number, int base)
{
       if( base < 2 || base > MAX_BASE)
          return 0; //Failed
       int NumLength = strlen(number);
       int PlaceValue, total = 0;

       PlaceValue = (int)pow(base,NumLength-1);


      for(int i=0;i<numlength br="" i="">      {
          total += GetIndex(symbols,*number)*PlaceValue;
          number++;
          PlaceValue /= base; //Next digit's place value (previous/base)
      }
     return total;
}

int GetIndex(char * pString, char search)
{
     int index = 0;
     while(*pString != '0')
     {
       if(*pString==search)
               break;
       pString++;
       index++;
     }
     return index;
}


int main(int argc, char** argv)
{
       FILE* dump = NULL;
       long length = 0;
       char* content;
       int i=0;
       int count =0;
       int total=0;
       int XORvalue=0;
       bool XORit = false;
       char HexNumber[3]={'\0'};

       printf("\nOdfhex - object dump shellcode extractor - by steve hanna - v.01\n");

       if(argc < 2)
       {

             printf("%s: <object dump="" file=""> [-x xor offset in decimal] \n",argv[0]);
             return -1;
       }

       dump = fopen(argv[1],"r");
       if(!dump)
       {
              printf("Error: Couldn't open file.\n");
              return -1;
       }

       fseek(dump,0,SEEK_END);

       length = ftell(dump);

       content = new char[length+1];
       memset(content,0,sizeof(content));
       printf("Trying to extract the hex of %s which is %d bytes long\n",argv[1],length);

       if (argc > 3 &&  !strcmp(argv[2],"-x"))
       {
              XORit =true;
              XORvalue = BaseToDec(argv[3],16);
              printf("XORing with 0x%02x\n",XORvalue);
       }
       fseek(dump,0,SEEK_SET);
       for(int i=0; i < length; i++)
       {
              content[i] = fgetc(dump);
       }
       fclose(dump);

       while(count !=4)
       {

              if(content[i] == ':')
                     count++;
              i++;
       }
       count = 0;
		
	   printf("\"");
       while(i < length)
       {
			if( (content[i-1] == ' ' || content[i-1]=='\t') &&
                (content[i+2] == ' ' ) &&
                (content[i] != ' ') &&
                (content[i+1] != ' ') &&
                ((content[i]>='0' && content[i]<='9') || (content[i]>='a' && content[i]<='f')) &&
                ((content[i+1]>='0' && content[i+1]<='9') || (content[i+1]>='a' && content[i+1]<='f'))
              )
				{
					if(XORit)
					{
				        HexNumber[0] = content[i];
				        HexNumber[1] = content[i+1];

					    printf("\\x%02x",BaseToDec(HexNumber,16) ^ XORvalue);
					}
					else
						printf("\\x%c%c",content[i],content[i+1]);

                     count++;
                     total++;   
            }
		 
			if(i+1 == length)
			{
				 printf("\";\n");
			}
			else if(count == HEX_PER_LINE) 
			{
				printf("\"\\\n\"");
				count =0;
			}
       i++;
       }
	   
       delete[] content;
       printf("\n%d bytes extracted.\n\n",total);
       return 0;
}

Make your system type



Set ws = CreateObject("WScript.Shell")

str = "Hi there... ~ Dont click your mouse while i am typing." & _
" ~~This is a send key example, using which you can send your keystrokes" & _
"to any application you want.~~" & _
"you can increase the value of sleep to for longer delay~~" & _
"So enjoy~Napstr Rulz..."


ws.Run("notepad.exe")
WScript.Sleep(1000)

For c=1 To Len(str)
WScript.Sleep(100) 'Increase the value for longer delay

ws.SendKeys Mid(str,c,1)

Next


Inheritance in C#

Classes can inherit from another class. This is accomplished by putting a colon after the class name when declaring the class, and naming the class to inherit from—the base class—after the colon


using System;


namespace Tutorial
{
public class Parent
{
string parentString;
public Parent() // Constructor
{
Console.WriteLine("Parent Constructor.");
}
public Parent(string myString) // Constructor takes "myString" as parameter.
{
parentString = myString; // Assigns parameter to parentString
Console.WriteLine(parentString);
}
public void print()
{
Console.WriteLine("I'm a Parent Class.");
}
}
public class Child : Parent // Inheritance
{
public Child()
: base("From Derived") //Inherits and calls the base class constructor.
{
Console.WriteLine("Child Constructor.");
}
public void print()
{
base.print();
Console.WriteLine("I'm a Child Class.");
}
public static void Main() //Static main method, init of application
{
Child child = new Child();
child.print();
((Parent)child).print();
}
}
}

The new class—the derived class—then gains all the non-private data and behavior of the base class in addition to any other data or behaviors it defines for itself. The new class then has two effective types: the type of the new class and the type of the class it inherits.

Measure execution time

This C# code snippet measures a time interval as you would measure the execution time of a task.
using System;

DateTime startTime = DateTime.Now;
Console.WriteLine ("Started: {0}", startTime);
 
// Execute the task to be timed
for (int i=1; i < 100000; i++){}   
  
DateTime stopTime = DateTime.Now;
Console.WriteLine ("Stopped: {0}", stopTime);
 
TimeSpan elapsedTime = stopTime - startTime;
Console.WriteLine ("Elapsed: {0}", elapsedTime);
Console.WriteLine ("in hours       :" + elapsedTime.TotalHours);
Console.WriteLine ("in minutes     :" + elapsedTime.TotalMinutes);
Console.WriteLine ("in seconds     :" + elapsedTime.TotalSeconds);
Console.WriteLine ("in milliseconds:" + elapsedTime.TotalMilliseconds);

Declare simple event

This C# code snippet declares an event with EventHandler using the default implementation for removing events and subscribing to events. We implement the IDisposable interface simply to have a reasonable excuse to throw an event.
using System;
 
public class MyClass : IDisposable
{
   public event EventHandler Disposing;  
 
   public void Dispose()
   {
      // release any resources here
      if (Disposing != null)
      { 
         // someone is subscribed, throw event
         Disposing (this, new EventArgs());
      }
   }
 
   public static void Main( )
   {
      using (MyClass myClass = new MyClass ())
      {
         // subscribe to event with anonymous delegate
         myClass.Disposing += delegate 
            { Console.WriteLine ("Disposing!"); };
      }
   }
}

Versioning in C#

This sample demonstrates versioning in C# through the use of the override and new keywords. Versioning maintains compatibility between base and derived classes as they evolve.


// versioning.cs
public class MyBase
{
public virtual string Meth1()
{
return "MyBase-Meth1";
}
public virtual string Meth2()
{
return "MyBase-Meth2";
}
public virtual string Meth3()
{
return "MyBase-Meth3";
}
}

class MyDerived : MyBase
{
// Overrides the virtual method Meth1 using the override keyword:
public override string Meth1()
{
return "MyDerived-Meth1";
}
// Explicitly hide the virtual method Meth2 using the new
// keyword:
public new string Meth2()
{
return "MyDerived-Meth2";
}
// Because no keyword is specified in the following declaration
// a warning will be issued to alert the programmer that
// the method hides the inherited member MyBase.Meth3():
public string Meth3()
{
return "MyDerived-Meth3";
}

public static void Main()
{
MyDerived mD = new MyDerived();
MyBase mB = (MyBase) mD;

System.Console.WriteLine(mB.Meth1());
System.Console.WriteLine(mB.Meth2());
System.Console.WriteLine(mB.Meth3());
}
}





Comparison Microsoft Dynamics CRM 3.0 to 4.0

Features

3.0

4.0

Description

Multi-langual Support

No

Yes

The new multilingual user interface makes it possible to have more than one language available for the user interface, Help, and metadata in a single installation. so users can work and share data seamlessly in the language of their choice.

Multi-currency Support

No

Yes

It supports multiple currencies with automatic exchange calculation for reporting purposes. Currency is defined on organization creation as base currency. Currency can also be defined by: org, user, Account. All financial transactions to capture the value of the transaction in both the base currency & transaction currency. System administrators to define transaction currencies and define an exchange rate to associate the base currency with the transaction currency Currency order. The account default currency is displayed if one had
been defined. If a default currency is not defined for the account, the user’s default currency is displayed if one has been defined.If a default currency is not defined for the user, the base currency is displayed.

Multi-tenancy

No

Yes

A new multi-tenant architecture allows organizations to host multiple distinct instances of Microsoft Dynamics CRM 4.0 on the same server. This not only allows them to make better use of hardware, it reduces management and maintenance costs associated with the CRM application. Multiple organizations may each have their own instance of Microsoft Dynamics CRM 4.0 without requiring additional database servers, making it an excellent solution for companies that host CRM services for multiple customers, or for organizations with distinct business units who each need their own data repository.

Smart Search

No

Yes

Smart Search makes it easier for you to find what you’re looking for by eliminating clicks and removing the necessity for a separate lookup window. Search results will automatically display if an exact match is found. Relevant options are also displayed on partial matches when you type so you can easily select the relevant item, enabling you to spend your time on higher-value tasks.

Multi-stage Workflows

No

Yes

New tools in Microsoft Dynamics CRM 4.0 make it easier to create multi-stage workflows such as a sales cycle or customer retention process. Microsoft Dynamics CRM 4.0 also provides visibility into running workflow stages, enabling users to see and track the progress of business processes. End users can also see the status of workflows that are running, giving them greater insight into their customers.

Metadata Application Programmer Interface

No

Yes

The Microsoft Dynamics CRM 4.0 metadata application programming interface (API) has been expanded to make it easier for developers to create flexible custom solutions and to enhance integration capabilities. Developers can now create, read, update, and delete metadata on the fly and create custom entities, attributes, and relationships programmatically. The Microsoft Dynamics CRM 3.0 Metadata API is still available to
support backward compatibility. Now it is easier than ever to have a CRM system that is tailored to meet specific business needs with the flexibility to change and expand as the business does.

Support for SQL Mirroring

No

Yes

Line-of-business applications must be available to support business requirements without downtime or loss of data. When mission-critical applications go down, the impact can be significant and the result can be missed opportunities, dissatisfied customers, and lost employee productivity. With support for Microsoft SQL Server® mirroring, Microsoft Dynamics CRM 4.0 maintains a copy of its database so that in the event of a database failure it can switch databases automatically with minimal disruption.

Clustering and Load Balancing

Yes

Yes

Microsoft Dynamics CRM 4.0 supports clustering and load balancing of all solution components, including Exchange Server, SQL Server Reporting Services, and Web services.Clustering allows you to scale your applications effectively so that you can support youruser base and expand as your business grows.

Internet Facing Deployment

No

Yes

Microsoft Dynamics CRM 4.0 gives you an easier, faster way to access your data over the Internet with Internet-Facing Deployments. Now end users can use Microsoft Office Outlook to access the CRM application using hypertext transfer protocol (HTTP) with Secure Sockets Layer (SSL) from home or while travelling without requiring a VPNconnection.

Resource Center

No

Yes

The new Resource Center provides an online community for people to share information and best practices, and learn about using Microsoft Dynamics CRM. In the Resource Center, you have access to a variety of problem-solving content, including:
• Current blog posts,
• newsgroup answers, and
• articles

Advanced Relationship Modeling (Many to Many Relationships,System to System

Relationships)

No

Yes

Now MSCRM4.0 allows to create
1) System-to-System relationships between supported entities
2) Many-to-Many relationships between supported entities
3) Self-Referential relationships

Advanced Diagnostics

No

Yes

With new diagnostic tools, it is easier than ever to get a clear picture of how well the CRMsystem is running. Diagnostic tools provide administrators with a broad set of alerts and warnings to help detect and resolve issues with the CRM system, including detection of unsupported configurations, before they result in outages.

Portable Application Model

No

Yes

Microsoft Dynamics CRM 4.0 extends the portable application model, which supports the export and import of the entire CRM application for seamless migration to another CRM server. Now security roles, workflows, organization settings, multi-language UI settings, and other metadata can all be imported and exported, making it easier for technical teams to move from development to testing to production or move the
CRM installation to a new server.

Duplicate Detection

No

Yes

Microsoft Dynamics CRM 4.0 helps ensure the quality of your data by providing duplicate detection when adding data to the system or during a regular maintenance cycle.

Data Import Wizard

No

 

Data Import wizard is used to move data from other applications into Microsoft Dynamics CRM. Import Data Wizard, which is useful for importing data you have stored in a spreadsheet, importing leads that you have purchased, and for enriching existing data.

Windows Workflow Foundation

No

Yes

Microsoft Dynamics CRM 4.0 makes it easier to unify business processes across the business with Microsoft Windows® Workflow Foundation, a set of tools and technologies for creating and integrating data and processes from your CRM solution with other Microsoft line-of-business systems. Workflows built in Microsoft Dynamics CRM 3.0 are forward-compatible and will continue tofunction in Microsoft Dynamics CRM 4.0.

Workflow Wizard

No

Yes

Microsoft Dynamics CRM workflow allows companies to automate how they use and manage data. Microsoft Dynamics CRM 4.0 builds on this capability by empowering end-users to create workflows without IT involvement using a new Web-based workflow wizard. Workflows can easily be shared using team, division, and system workflow libraries so that people can find workflows that are relevant to their work.

Dynamic Data Access for Workflow Design

No

Yes

The workflow forms designer gives users access to dynamic data so they can easily createworkflows that provide rich contextual CRM data. Forms can be easily created that show data values based on live data in your CRM database. Incorporating dynamic data into workflows helps users deliver context-sensitive relevance alongside workflow functionality.

Promote E-mail to Lead

No

Yes

In the past, when the sales manager or salesperson received an e-mail that they wanted to categorize as a lead, they needed to open the lead form and create a new lead. Now they can convert an activity directly into a lead.

Promote E-mail to Case

No

Yes

E-mail messages can be promoted into cases automatically, helping you do your work more efficiently. This reduces the amount of manual work required to manage these typesof activities and speeds customer communications.

Web Mail Merge

No

Yes

New and enhanced tools with support for custom attributes, as well as central storage and sharing of mail merge templates make it easier for users to manage and create mail merges. With CRM 4.0 you can create and share reusable templates with your coworkers so you can work more productively. A new Web-based tool for mail merges empowers users to work with mail merges through the Web.

Reporting Wizard

No

Yes

Microsoft Dynamics CRM 4.0 empowers end users to create, share, and use reports without IT assistance. The Web-based Reporting Wizard provides simplified access to information, allowing users to work more independently and freeing IT staff to do other work. Users can also create and share personalized views and filters on reports to help them focus on the information that’s most relevant to their work and share insight
with others The report wizard allows customers to analyze their data by creating and editing new reportsin Microsoft Dynamics CRM or by customizing an existing report created with the reportwizard. The report wizard will allow customers to:
• Group data
• Summarize data, for example, total revenue
• Present data in tables, graphs, and charts
• Print without exporting to Excel

Scheduled Reporting

No

Yes

Keeping up with changes in the customer repository is an ongoing challenge. Scheduled and recurring reports provide snapshots of the customer information as it evolves. On-demand reporting provides customer data in real time, so that people can stay informed and do their job better.

Offline Reporting

No

Yes

Offline users can take advantage of reporting capabilities using synchronized data. Offline users can easily run reports against their locally synchronized data store on their client machine, and reports are republished in offline mode. Users have full access to reporting features, such as filtered views, helping them be effective even without a connection to the CRM system.

Offline Customizations

No

Yes

Microsoft Dynamics CRM 4.0 offers a consistent user experience whether working online or offline, including the ability to take reports, workflows, and other custom functionality offline. A new offline software development kit (SDK) helps developers create solutions that provide functionality even when a connection to the server is not available.

Smart Navigation

No

Yes

Each organization has its own way of using CRM. You can now easily define the layout of the left navigation pane in Microsoft Dynamics CRM 4.0 so that it exposes only the functionality that your users need. Access to navigation items is role-based, so that users can focus on items that are relevant to their job.

E-Mail Smart Matching

No

Yes

Tracking correspondence is now easier than ever before with tracking enhancements in Microsoft Dynamics CRM 4.0. E-mail smart matching evaluates the incoming messages and automatically matches them with the appropriate conversation, without a visible tracking token. This capability streamlines communications, helping you improve customer response and build loyalty.

Asynchronous Plugins

No

Yes

The plug-in model supports asynchronous in addition to synchronous events. Previous callouts only supported synchronous methods. But Microsoft Dynamics CRM 4.0 plug-ins can be configured as asynchronous events that can occur after the platform call.

Event Framework Plug-ins

No

Yes

A new event framework in Microsoft Dynamics CRM 4.0 makes it easier to extend the capabilities of Microsoft Dynamics CRM with custom code components, called plug-ins, that are dynamically registered and run inside the CRM application. Close integration between custom code and the CRM application makes it easier for
developers to create streamlined solutions quickly. Plug-ins can also be configured to execute while working offline, making it easier to provide customizations that benefit both online and offline users.

Templates

No

Yes

MSCRM 4.0 contains the following out of box templates
- Article Templates
– Contract Templates
– E-Mail Templates

Integration with Office Communicator

No

Yes

Integration with Microsoft Office Communications Server empowers quick communication and collaboration. Users can now see who is online or offline, free or busy, and launch a Microsoft Office Communicator session without leaving Microsoft Dynamics CRM 4.0. This makes it even easier for teams to work together quickly whether they’re in the same office or different geographical regions.

New Deployment Wizards, which include bulk importing of users from Active

Directory

No

Yes

Microsoft Dynamics CRM 4.0 improves administrator productivity by streamlining the process for adding users. New users can now be created in bulk. Tasks such as importing userinformation from the Microsoft Active Directory directory service, setting user roles, andassigning licenses can all be automated, greatly reducing the time and effort required tocreate new users and freeing up administrators to do other work.

Email Topology changed to support more multiple choices of email

routing

No

Yes

Microsoft Dynamics CRM 4.0 offers a broad range of choice for e-mail platforms. Native support for Exchange Server ensures seamless e-mail integration, and extends powerfulfeatures of Exchange Server to provide a richer e-mail experience. Support for POP3 andoutbound SMTP allow Microsoft Dynamics CRM 4.0 to support diverse business scenarios.

Multiple ways to Authenticate

No

Yes

Microsoft Dynamics CRM supports multiple authentication models. The type of authentication interface that is used depends on if you are authenticated through Microsoft Dynamics CRM Online, on-premise, or Internet-facing deployment (IFD).
1. Microsoft Dynamics CRM Online – authentication is handled through Windows Live, which was previously known as Passport.
2. Microsoft Dynamics CRM 4.0, on-premise – authentication is handled through Active Directory, which is also known as Windows Integrated Authentication.
3. Microsoft Dynamics CRM 4.0, IFD – Forms based authentication, handled through Active Directory.

New Data Mapping features

No

Yes

The data maps are used to map source data that is contained in the comma-separated values (CSV) source files to Microsoft Dynamics CRM entity attribute types. You have to map a column in the source file to an appropriate Microsoft Dynamics CRM entity attribute by using column mapping or complex transformation mapping. The data in the unmapped columns is not imported during the data migration operation. Data migration also includes owner mapping, notes and attachments, and complex transformation mapping in which data can be modified before migration.

Direct External Interface into Dynamics CRM without a required VPN

No

Yes

Microsoft Dynamics CRM 4.0 allows mobile or travelling users access to the CRM system using the Microsoft Office Outlook client over the Internet without requiring a Virtual Private Network (VPN) connection. The revolution in portable computing has created new challenges to IT departments seeking to give mobile users more secure access to resources. The new Internet Facing Deployment capability in Microsoft Dynamics CRM 4.0 makes it easier for organizations to configure on-premise servers to be accessed over the Internet, reducing the burden on IT. Users can now access Microsoft Dynamics CRM using their Outlook client over hypertext transfer protocol
(HTTP) using Sockets Layer (SSL) from home or while travelling without requiring a VPN connection.

Pop3 Support/Exchange 2007 Support (64 bit)

No

Yes

Microsoft Dynamics CRM 4.0 allows organizations to choose from a wide range of e-mail platforms. In Microsoft Dynamics CRM 4.0, the e-mail router supports POP3 e-mail stores as well as Microsoft© Exchange Server, giving administrators and users greater choice of e-mail technologies. Microsoft Dynamics CRM 4.0 also provides full support for Microsoft© Exchange Server 2007.

Diagnostic Tools in the Outlook for CRM client

No

Yes

Microsoft Dynamics CRM 4.0 gives administrators superior visibility into the functioning of system and workflow processes as well as new diagnostic tools for Microsoft Office Outlook. Some Microsoft Dynamics CRM tasks require longer processing and time to execute than others. Customers requested better monitoring of these processes so they could gain greater visibility into the ongoing performance of Microsoft Dynamics CRM. Microsoft Dynamics CRM 4.0 adds process status viewers that allow administrators to monitor the functioning of asynchronous processes; including data imports, workflows, and duplicate checking. New Outlook diagnostics also make it easier to troubleshoot end-user problems. An administrator can view information about the functioning of the Microsoft Dynamics CRM client, including network connectivity, connection quality, user role, credentials, and synchronization status.

More flexible licensing options such as device versus user CALs

No

Yes

Microsoft Dynamics CRM 4.0 introduces new options that let you match your licensing agreement with your buying criteria and deployment preferences. Every business has different needs and different ways of using CRM. Since the release of Microsoft Dynamics CRM 3.0, we’ve enhanced our licensing model better match how different companies use Microsoft Dynamics CRM. The new device CAL allows organizations to license Microsoft Dynamics CRM on a per-device basis rather than a per-user basis. This can help organizations save money in scenarios, such
as call centers, where multiple users access Microsoft Dynamics CRM using the same device. Many organizations have users who require access to Microsoft Dynamics CRM data but don’t need the full functionality of the solution. For example, analysts may need to use CRM data to make sales projections, even though they don’t usually work inside the Microsoft Dynamics CRM system. The new limited use CAL gives these workers read-only access to Microsoft Dynamics CRM data at a reduced price, enabling organizations to make better use of Microsoft
Dynamics CRM while reducing costs. Many companies are gaining additional value from their Microsoft Dynamics CRM data by making that data available to external systems. For example, an organization might want to expose select data on an external partner, customer, or distributor portal. In order to make it easier for companies to do this, the price of theexternal connector license has been reduced for Microsoft Dynamics CRM 4.0.

Multi-criteria email tracking. Email tracking token can be turned

off

No

Yes

E-mail tracking has been improved in Microsoft Dynamics CRM 4.0 to provide a seamlessuser experience with greater flexibility. E-mail tracking in Microsoft Dynamics CRM 3.0

enables users to track e-mails related to their customers, accounts, contacts. For example, a

salesperson may wish to track responses to customer e-mails related to a particular sales

campaign. This feature has been enhanced in Microsoft Dynamics CRM 4.0 to provide easier and

more flexible tracking options, including automatic tracking and bulk selection of e-mails

for tracking. E-mail tracking no longer requires a tracking token. Instead, e-mails can be

tracked based on a variety of criteria, including subject, sender, and recipient. Users can

customize these settings to match their needs so that important e-mails are tracked

automatically. This enables them to be more efficient in their work and gain better

visibility into customer interactions.

Data Migration Manager

No

Yes

Data Migration Manager, which can be used to migrate data from another customerrelationship management system to Microsoft Dynamics CRM.

Organization Import Wizard

No

Yes

Move Microsoft Dynamics CRM 4.0 organizations to other servers with the new Organization Import Wizard. This wizard allows a new organization to be created in your development environment and easily ported to your production environment. When you upgrade server farms, you can quickly import your existing CRM environments to the new farm, as well as import an organization from any domain in the Microsoft Active Directory® forest. The Organization Import Wizard allows you to keep current users, or map users in the new domain to your imported organization, saving you from manually managing user migration.

Enhanced Performance

No

Yes

Microsoft Dynamics CRM 4.0 delivers several new and improved technologies that boost application performance and help accelerate your business. CRM has been tuned for etter performance in wide area network (WAN) environments, transferring only the data t hat needs to be transferred over slow connections. Microsoft Dynamics CRM 4.0 now uses asynchronous processing for bulk transactions and other long-running tasks,
minimizing the impact on other core business applications. The e-mail router also upports parallel processing of inboxes and improves support for enterprise deployment scenarios, providing a more reliable and responsive end-user experience.

Component Scalability

No

Yes

Because each business uses the CRM application differently, organizations can elect to cluster CRM application services together to match their usage needs. For example, one organization may make heavy use of workflow, while another may have large data imports.Clustering the components and services your business uses most, to match your business needs,improves scalability and improves the responsiveness of your CRM application.

System Job Monitor

No

Yes

Microsoft Dynamics CRM 4.0 gives administrators superior visibility into system and data management jobs. Process status viewers enable administrators to efficiently monitor the functioning of asynchronous processes including data imports, workflows, and duplicate checking. This keeps administrators better informed as to the functioning of the CRM system and makes it easier to diagnose issues.

Advanced Workflow expressions AND Triggers

No

Yes

Workflow additions and enhancements help eliminate limitations so companies and end users can create a wide range of sophisticated automation solutions. The scope of workflow has been expanded to include more events and entities, workflow expressions now include support for transverse relationships, and improved branching conditions make workflows more flexible. Workflows can be triggered automatically when a data value or
flag reaches a specific level. The end result is a workflow platform and tool set for sophisticated and intelligent modeling of business processes.

Workflow Accessibility

No

Yes

End users can access workflow functionality in Office Outlook or through the Microsoft Dynamics CRM 4.0 Web client, giving them broader access to business automation tools. Workflows can be published to a shared workflow library for thers to find and use. This enables users to capture and share their business processes with
others without requiring the intervention of an IT professional.

Campaign Automation

No

Yes

Campaigns are streamlined in Microsoft Dynamics CRM 4.0 so that users can create, launch, and complete campaigns more quickly and with fewer clicks. When a user creates a campaign, they can send campaign e-mail messages and close campaign activities automatically. Automating these manual tasks helps users spend less time
on manual processes.

Activity Synchronization

No

Yes

All activity types in Microsoft Dynamics CRM 4.0 can be synchronized with Microsoft Exchange Server, making it easier for users and organizations to track their work. This allows users to track CRM activities, such as phone calls or letters, in addition to tracking e-mail messages, tasks, and other Exchange Server activities.
This helps unify activities in one place so that users can work more productively.