Thursday, September 26, 2013

Common tasks related to CRM Queue management

1. How to create a queue
Settings -> Business Management -> Queues
2. How to assign a queue to team or user
Settings -> Business Management -> Queues
3. How to assign items to a queue
Workplace -> Activities-> Tasks -> Save -> Add to Queue
4. How to assign queue item to an user
Who is working on: Workplace -> Queues -> Item -> Queue Item Detail
5. How to enable an entity to a queue
Settings -> Customizations -> Customize the System -> Entities -> Queues checkbox

Graph Based Routing

http://roysvork.wordpress.com/2013/08/20/graph-based-routing/

graph complex

Monday, September 23, 2013

What is Queue definition in Microsoft CRM?

Queues are places in organizing, prioritizing, and monitoring the progress of your working items in CRM.

In CRM following entities are enabled for Queues by default:
Appointment
Campaignactivity
CampaignResponse
Email
Fax
Incident
Letter
PhoneCall
RecurringAppointmentMaster
ServiceAppointment
Task


Reference:
http://msdn.microsoft.com/en-us/library/gg328459.aspx

Wednesday, September 18, 2013

How to solve problem "Metadata contains a reference that cannot be resolved" while try to create connection with CRM server?

First of all, check the url if correct. If wrong url, will get this error.(http://{}/{orgName}/XRMServices/2011/Organization.svc)
If cannot find the problem, run CrmSvcUtil with enabled tracing information by
CrmSvcUtil.exe.config













Will get detailed error information

How to implement paging by LINQ

            int numberOfObjectsPerPage = 5001;
            int pageNumber = 1;
            var queryResultPage = acountlist
              .Skip(numberOfObjectsPerPage * pageNumber)
              .Take(numberOfObjectsPerPage).ToList();

Monday, September 16, 2013

Decoupling Your HTML, CSS, and JavaScript: Classes Are Your Contract

http://philipwalton.com/articles/decoupling-html-css-and-javascript/

How to solve problem "EntityState must be set to null, Created (for Create message) or Changed (for Update message)" while to try to update earlying binding entity?

How to solve problem "EntityState must be set to null, Created (for Create message) or Changed (for Update message)" while to try to update earlying binding entity?

There is one method in OrganizationServiceContext object calls: UpdateObject
Do not use the one in OrganizationServiceProxy. If use, the get the error message

context.UpdateObject(en);
//serviceProxy.Update(en);


ASP.NET and Web Tools for Visual Studio 2013 RC

http://blogs.msdn.com/b/webdev/archive/2013/09/09/announcing-release-of-asp-net-and-web-tools-for-visual-studio-2013-rc.aspx

Friday, September 13, 2013

The funny way to tell difference between null and undefined in JavaScript

You: What is name?
JavaScript: name? What's a name? I don't know what you're talking about. You haven't ever mentioned any name before. Are you seeing some other scripting language on the (client-)side?

name = null;
You: What is name?
JavaScript: I don't know.
In short; undefined is where no notion of the thing exists; it has no type, and it's never been referenced before in that scope; null is where the thing is known to exist, but it's not known what the value is.
One thing to remember is that null is not, conceptually, the same as false or "" or such, even if they equate after type casting, i.e.

name = false;
You: What is name?
JavaScript: Boolean false.

name = '';
You: What is name?
JavaScript: Empty string


http://stackoverflow.com/questions/801032/why-is-null-an-object-and-whats-the-difference-compared-to-undefined


The minimum steps to try out Microsoft CRM early binding

1. Generate CRM entity by CrmSDvcUtil.exe tool in folder of crm\sdk\bin
Reference:
http://msdn.microsoft.com/en-us/library/gg327844.aspx
CrmSvcUtil.exe /url:http://ServerName/OrganizationName/XRMServices/2011/Organization.svc /out:CSFileName.cs /username:usernamewithDomain /password:password /namespace:namespace /serviceContextName:contexName

2. Add following code in console app (Copy generate cs file into project and add it into)
            var _credentials = new ClientCredentials();
            _credentials.Windows.ClientCredential = (NetworkCredential)CredentialCache.DefaultCredentials;
            string CRM_SDK_URL = "http://ServerName/OrganizationName/XRMServices/2011/Organization.svc";
            OrganizationServiceProxy proxy = new OrganizationServiceProxy(new Uri(CRM_SDK_URL), null, _credentials, null);
            proxy.EnableProxyTypes();
            Account account = new Account { Name = "Sample Parent Account" };
            var _parentAccountId = proxy.Create(account);

Thursday, September 12, 2013

How to get list of sub accounts in CRM plugin ?

public void Execute(IServiceProvider serviceProvider)
  {
            Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext) serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));
            if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
            {
                Entity entity = (Entity)context.InputParameters["Target"];
                if (entity.LogicalName == "account") 
                {
                    // Obtain the organization service reference.
                    IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                    IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

                    //Get current account id (accountid)
                    var currentAccountid = entity["accountid"];
                    Microsoft.Xrm.Sdk.Query.QueryByAttribute querybyattribute = new Microsoft.Xrm.Sdk.Query.QueryByAttribute("account");
                    querybyattribute.ColumnSet = new Microsoft.Xrm.Sdk.Query.ColumnSet("accountnumber", "accountid", "emailaddress1");

                    querybyattribute.Attributes.AddRange("parentaccountid");
                    querybyattribute.Values.AddRange(currentAccountid);

                    EntityCollection retrieved = service.RetrieveMultiple(querybyattribute);
                    int count = 0;
                    foreach (var en in retrieved.Entities)
                    {
                        count += 1;
                        en.Attributes["accountnumber"] = count.ToString();
                        service.Update(en);
                    }
               }  
 
  }


Wednesday, September 11, 2013

How to remote debug Microsoft CRM plugin?

0. Tried Visual Studio 2010, failed. 32 bit VS not working with 64 bit remote debugger.
Error message:
Unable to attach to the process. The 32-bit version of the Visual Studio Remote Debugging Monitor (MSVSMON.EXE) cannot be used to debug 64-bit processes or 64-bit dumps. Please use the 64-bit version instead.
Certainly, you can not connect 2010 remote debugger with 2012
Unable to connect to the Microsoft Visual Studio Remote Debugging Monitor named 'CHATHAM\rwang@CRM'.  The Microsoft Visual Studio Remote Debugging Monitor (MSVSMON.EXE) does not appear to be running on the remote computer. This may be because a firewall is preventing communication to the remote computer. Please see Help for assistance on configuring remote debugging.

1. Remote tools for Remote Tools for Visual Studio 2012 Update 2
http://www.microsoft.com/en-my/download/details.aspx?id=38184
2. Run and Get Tcp/ip port number
3. Copy plugin pdb file into CRM box folder:
 C:\Program Files\Microsoft Dynamics CRM\Server\bin\assembly
4. In VS2012, Debug -> attach, put mahine_name@port_number in the qualifier box
5. Then attach to w3p process.

How to solve “Action failed for: Assembly must be registered in isolation” when try to register a plugin into CRM?

The user account must exist in the Deployment Administrators group of Deployment Manager.

The Whole error message:
Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: Action failed for assembly 'SamplePlugins, Version=0.0.0.0, Culture=neutral, PublicKeyToken=829f574d80e89132': Assembly must be registered in isolation.

Refenrence:
http://blogs.msdn.com/b/crminthefield/archive/2011/08/17/error-message-assembly-must-be-registered-in-isolation-when-registering-plugins-in-microsoft-dynamics-crm-2011.aspx






Monday, September 9, 2013

Why should not use eval in Javascript

- Open up code for injection attack
- Hard to deubg

Code example:
<script>
eval("x=10;y=20;document.write(x*y)");
document.write("<br>" + eval("2+2"));
document.write("<br>" + eval(x+17));
</script>
Reference:
http://stackoverflow.com/questions/86513/why-is-using-the-javascript-eval-function-a-bad-idea


How to create a Plugin to Microsoft CRM?


1. Download and install CRM SDK
http://www.microsoft.com/en-us/download/details.aspx?id=24004
2. Open Visual Studio and create new CRM plugin project
3. Set up Signing property for this project
4. Run pluginregistration Utility in the folder of "\sdk\bin"
5. In CRM, goto Setting->Customization->Plugin, will see the new plugin