Showing posts with label UR12. Show all posts
Showing posts with label UR12. Show all posts

Wednesday, May 8, 2013

Problem Importing UR12 customizations with Web Resources added in a Pre-UR12 environment

With UR12 Microsoft included new fields and dependencies that prevents us from importing a solution exported out of a UR12/Polaris environment to a Pre-UR12 organization. To resolve CRM Team now ships the Down-level utility along with the latest version of the CRM SDK.

We however came across an issue that was apparently not detected by the Down-level tool and had to be resolved manually by editing the customization file.
The situation here was that we had added a web resource on the account entity form. In the latest version the properties window has the following option




  The feature was missing in the earlier version of the install. When you import this solution to an earlier UR, you see the following error



 When we downloaded the log file we found the cause of the error as stated below.


The import file is invalid. XSD validation failed with the following error: 'The element 'parameters' has invalid child element 'ShowInROF'. List of possible elements expected: 'Url, PassParameters, Security, Scrolling, Border, Preload, IsPassword, Height, Width, AltText, SizeType, HorizontalAlignment, VerticalAlignment, Data'.'.


< < < < < ERROR LOCATION > > > > >


< ShowInROF> false< /ShowInROF> < PassParameters> true< /PassParameters> < Security> false< /Security> < Scrolling> auto< /Scrolling> < Border> false< /Border> < /parameters> < /control> < /cell> < /row> < row> < /row> < row> < /row> < row> < /row> < row> < /row> < row> < /row> < row> < /row> < row> < /row> < row> < /row> < row> < /row> < row> < /row> < row> < /row> < row> < /row> < row> < /row> < row> < /row> < row> < /row> < row> < /row> < row> < /row> < row> < /row> < row height="auto"> < /row> < /rows> < /section> < section showlabel="false" showbar="false" IsUserDefined="0" id="{ca3b45e5-5018-4cd2-8a57-c14fe7224449}" name="{ca3b45e5-5018-4cd2-8a57-c14fe7224449}" columns="1" locklevel="0" labelwidth="115" celllabelalignment="Left" celllabelposition="Left"> < labels> < label description="General" languagecode="1033" /> < /labels> < rows> < row> < cell id="{c41a075f-5bfa-433b-85a4-199a613dc642}"> < labels> < label description="Caption" languagecode="1033" /> < /labels> < control id="xxx_name" classid="{4273EDBD-AC1D-40d3-9FB2-095C621B552D}" datafieldname="xxx_name" /> < /cell> < /row> < row> < cell id="{a7d9469b-ac...'."


To resolve this issue we need to extract the solution which we are trying to import to CRM.


Open the customizations.xml file and search for the “<ShowInROF>” parameter, remove these parameter where all you find from that file and save the file.

   


  After saving the file zip all the files together and import in CRM. This time you can successfully import the solution in CRM.

Hope this saves some time for others with similar issues


Tuesday, February 5, 2013

Use ExecuteMultipleRequest for performance improvement in bulk data load and other operations


 A new request called ExecuteMultipleRequest has been added to the Update rollup 12 for the Bulk Data Load. Using this request, multiple request can be executed with the single server call. The main advantage of this request is that it will definitely improve the performance since in one round trip to the server, it actually posts more than 1 message to be executed. With reduced round trips for each individual request the performance improvement is exponential.

ExecuteMultipleRequest accepts the collection of different request and executes each request in a order they appear in the collection. This request will optionally returns the response of each request or error occurred while executing the request. Each message request in the input collection is processed in a separate database transaction.

Members of ExecuteMultipleRequest:

1.    Requests: It is a collection of message requests to execute.

2.    Settings: It contains settings that define whether execution should continue if an error occurs executing a request and if responses for each message request processed are to be returned.
Below is the example, where different requests like Create/Update are added to ExecuteMultipleRequest collection and submit it for processing in a single round trip.
                    // Create an ExecuteMultipleRequest object.
                    ExecuteMultipleRequest requestWithResults = new ExecuteMultipleRequest()
                    {
                        // Assign settings that define execution behavior: continue on error, return responses.
                        Settings = new ExecuteMultipleSettings()
                        {
                            ContinueOnError = true,
                            ReturnResponses = true
                        },
                        // Create an empty organization request collection.
                        Requests = new OrganizationRequestCollection()
                    };
                   //create account entity
                   Entity accountEntity=new Entity("account");
                   //set name for the account
                   accountEntity.Attributes["name"] = "New Account "+new DateTime();
                   //create CreateRequest object
                   CreateRequest createRequest = new CreateRequest { Target = accountEntity };
                   //add to ExecuteMultipleRequest Collection
                   requestWithResults.Requests.Add(createRequest);
                   //retrieve contact entity
                   Entity contactEntity = _service.Retrieve("contact", new Guid("FC298C3B-2E4F-     E211-9DED-1CC1DE6DAA3E"),                                      new Microsoft.Xrm.Sdk.Query.ColumnSet());
                   //set Business Phone for the contact
                   contactEntity.Attributes["telephone1"]="1234567";
                   //create UpdateRequest
                   UpdateRequest updateRequest = new UpdateRequest { Target = contactEntity };
                   //add to ExecuteMultipleRequest Collection
                   requestWithResults.Requests.Add(updateRequest);
                   // Execute all the requests in the request collection using a single web method call.
                   ExecuteMultipleResponse responseWithResults = (ExecuteMultipleResponse)_service.Execute(requestWithResults);
                        if (responseWithResults.IsFaulted)
                        {
                            // Display the results returned in the responses.
                            foreach (var responseItem in responseWithResults.Responses)
                            {
                                // A valid response.
                                if (responseItem.Response != null) { }
                               
                                // An error has occurred.
                                if (responseItem.Fault != null) { }
                              
                            }
                        }

Members of ExecuteMultpleResponse:

1.    IsFaulted: It can be used  to identify if any of the messages submitted failed. Once you have identified an error you can loop through the response item to read the error description per message failure.

2.    Responses: Indicates the collection of responses.

Note: This request will only work on organizations that have UR12 applied or on Online organizations that have been upgraded to Polaris.



For further read on this, you can also refer to Microsoft CRM SDK documentation on ExceuteMultiple here.



Monday, January 21, 2013

Process - Driven UI Explored

CRM in Cross-Browser has been one of the best improvements. CRM works much faster in Chrome and Fire Fox. So the forms that would take a few seconds to load prior to this update now is like click and its open :)
 

Some of it may have to do with the new Process-Driven UI made available for the Sales and Service Process.
 

What’s with the Process-Driven UI?

The idea is to make the UI more intuitive and process-driven rather than requiring users to create records manually through the sales process as well as reduce the number of clicks and popup forms required.








The top panel includes the milestones defined for the entire lead qualification process. This panel will let you know the progress made and stage at which the current lead is in the sales process.


The process steps are configurable. You can configure the process steps using the Edit Sales Process option in the … menu





The social section of the form has the activities, feeds and notes section incorporated in a single section that can be easily switched between without popups. Ability to quickly add Phone call and Task has been included just like we had the notes section in earlier version where we could just type in to add a new note.

 

Qualifying a lead is now just a click without any popups again. There is a button added separately for Qualify and Disqualify. Upon qualify it will auto-create Account and Contact depending on the information included in the Lead along with the Opportunity.


Using the Navigation panel you can navigate to the other associated entity grids included in the form. But note you can no longer create a new record for these associated entities from this view. It is just a listing of the associated records that you can click to view but cannot add a new record for that entity like it was in the traditional UI.


Is the Process Driven UI customizable?


Yes. The process-driven form is available under the specific entity. While the earlier forms were called Information, the process-driven form is named by the entity name.

You are open to edit and customize this form to include additional fields/controls. 

New addition is you can now include web resources in the process-driven UI as well as the classic UI and still have the forms open in Read-Optimized mode.


One observation made is, though you are allowed to add script libraries, but if you include one of those you lose the process driven top panel and it is replaced with the ribbon associated with classic form.
 

How to Enable Process Driven UI?

In existing organizations that are being upgraded, Process-Driven UI needs to be manually enabled by the user.
 

This section provides you with the feature to migrate the existing forms to the new UI & enable the new forms

Note: Once the new forms are enabled, it cannot be rolled back or disabled. However the new forms do have an option in the menu to “Switch to Classic forms”.

How to update to polaris ?

Follow the below steps

Step1

Go to the Administration Tab and click on "Product Updates"




Step2

Click on Update button to Update your system to Process-Driven UI. Remember once you Updated to Polaris the changes cannot be rollback.



Step3



Step4

Click on  " Yes "



Step5



Step6    

when you will click on " Migrate customization to the new forms " then the below page appears in new window




Step7

After reading the above page click on Enable the new forms


 

Simply click on YES and you are ready to explore Polaris ….!

 

Thanks!