Showing posts with label Dynamic CRM 2013 tricks. Show all posts
Showing posts with label Dynamic CRM 2013 tricks. Show all posts

Tuesday, November 10, 2015

CRM 2013 Tips: Set field read only/lock after save the record using CRM Business Rules

There are various ways to set field read only after saving record in CRM, most popular way is use JavaScript. However we can use Business Rule to set field read only based on the behavior of the other field or value of the same field. But there were no direct way to set field read only after saving the record. However we can utilize some behaviors of the Business Rule to set field read only after saving.

We can use “set field read only based on another field value” feature to set target field to read only. To do that we need a field which set value automatically after save the record and it should be read only by default. In CRM we have 4 fields which have those properties. Those fields are “Created By”, “Created On”, “Modified By” and “Modified On”. To set field read only after saving we need to add one of these fields to your target form (because Business Rules are working on the fields which available in the form). Then we can create business rule to set read only relevant field based on the value of previously mentioned fields.


For example:
I need to set read only field called “Identification Number” in the contact form after saving contact details.

Steps:
Add one of following fields in to the contact creation form.
  •     Crated On
  •     Created By
  •     Modified On
  •     Modified By

We choose “Created By” field as helping field to create business rule




Then create business rule to set “Identification Number” field to read only after set value to the “Crated By” field. We set business rule scope to form which we need to create contacts.



After activate business rule just create a contact record then you can see the Identification Number get locked because Created By field contains the data





Friday, October 30, 2015

Dynamic CRM Solution Deployment – Fix Access is Denied issue while importing CRM solutions



While importing CRM solution using Async service (CRM solution automated deployment), CRM copy the solution file (zip file) to the temporary directory with Guid (unique id). That temporary directory located inside of CRM installation directory. For example in our case it located in “C:\Program Files\Microsoft Dynamics CRM\CustomizationImport”. When we enable the trace using CRMDiag Tool it shows error in async service log like following. 

>Crm Exception: Message: Access is denied., ErrorCode: -2147187707, InnerException: System.UnauthorizedAccessException: Access to the path 'C:\Program Files\Microsoft Dynamics CRM\CustomizationImport\82c98e8896b34b2cb60e7741971a7921' is denied.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode)
   at Microsoft.Crm.CrmTemporaryFile..ctor(Byte[] fileData, String directoryName)
   at Microsoft.Crm.Tools.ImportExportPublish.RootImportHandler.ExtractFromCompressedFile(Byte[] compressedCustomizationFile, Boolean extractAllFiles)
   at Microsoft.Crm.Tools.ImportExportPublish.RootImportHandler..ctor(ImportXml parent, Boolean overwriteUnmanagedCustomizations, Boolean publishWorkflows, Byte[] compressedCustomizationFile, Boolean setup, Version existingDatabaseVersion, ExecutionContext context, Boolean extractAllFiles)
   at Microsoft.Crm.Tools.ImportExportPublish.ImportXml..ctor(Boolean overwriteUnmanagedCustomizations, Boolean publishWorkflows, Byte[] compressedCustomizationFile, Guid importJobId, Boolean convertToManaged, Boolean skipIntermediateImportJobUpdate, ExecutionContext context)
   at Microsoft.Crm.Tools.ImportExportPublish.ImportXml..ctor(Boolean overwriteUnmanagedCustomizations, Boolean publishWorkflows, Byte[] compressedCustomizationFile, Guid importJobId, Boolean convertToManaged, ExecutionContext context)
   at Microsoft.Crm.WebServices.ImportXmlService.ImportSolutionSkipCapable(Boolean overwriteUnmanagedCustomizations, Boolean publishWorkflows, Byte[] customizationFile, Guid importJobId, Boolean convertToManaged, Boolean skipProductUpdateDependencies, ExecutionContext context)
[2015-10-13 11:51:25.325] Process:CrmAsyncService |Organization:679a4ed3-4cb8-e411-940c-00155d6caa94 |Thread:    4 |Category: Platform.Sdk |User: d791b2fa-ce00-e011-903e-00155d6caa6a |Level: Error |ReqId: 6f0b3483-cfc9-42ae-b684-d9c141391f71 | VersionedPluginProxyStepBase.Execute  ilOffset = 0x65

 


How to fix:

The root cause of this issue is user who run the CRM Async service does not have write permission to the CRM Customization Import directory (in our case “C:\Program Files\Microsoft Dynamics CRM\CustomizationImport”). To fix this issue give necessary permission to the user who runs CRM Async service.



Identifying user who run CRM Async service

Navigate to Services -> Microsoft Dynamics CRM Asynchronous Processing Service, then check Log On As














Set permission to the user