Category Archives: Dynamics 365
Email Migration from D365 CRM v8.2 to D365 CRM v9 using TIBCO Cloud Integration: Activity Parties
Introduction: In this blog, I will detail how to migrate Activity Parties of Emails from one CRM to another. In my previous blog, I outlined the first step of the Email migration process which is migrating the body of the email. Migrating the corresponding Activity Parties of an Email is the second step of this process, as the Email body now exists in the Target CRM. What are Activity Parties? Other than the Body, an Email Activity consists of: Sender: The person(s) sending the email. Recipient: The person(s) receiving the email. CC & BCC: The person(s) that are copied in the email. Owner: The person who is the owner of the email. Regarding: This generally links to an entity in CRM which pertains to the email. For example, a Case or a Project in CRM. ‘Sender’, ‘Recipient’, CC’, ‘BCC’, ‘Owner’ and ‘Regarding’ are each stored in CRM as a separate Activity Party of that email with a ‘Participation Type’ code (field name: ‘participationtypemask’) to establish the field that specific party belongs to i.e. 1 = Sender, 2= To Recipent and so on (as shown below). Generally, in an Activity Party, the person(s) are either System Users or Contacts. This is specified in the field ‘partyobjecttypecode’ as shown above. Keeping this in mind, one can lookup to these entities to obtain the corresponding GUIDs in the Target System and map it as the ‘partyid ‘. After the Activity Party is created, the owner of the Activity Party should be updated as per its owner in the Source environment. The ‘Owner’ Activity Party is automatically created by CRM as the same User as the Owner of the Email (configured when you migrate the Email Body in Step 1). The ‘Regarding’ Activity Party links to a Case/ Project and not a ‘person’, however, the same logic applies i.e. map the required GUID and its type. Migrating Activity Parties is not as complicated once understood. Unfortunately, not much is easily available online about this. I hope this blog demystified a few concepts about Activity Parties of an Email and how they can be migrated from one CRM to another. My next blog will detail how to migrate Email Attachments and update the status of an Email.
Share Story :
Email Migration from D365 CRM v8.2 to D365 CRM v9 using TIBCO Cloud Integration: Email Body
Introduction: Data migration can be a little challenging, especially when it comes to Emails. In this blog, I will outline the steps that need to be followed to successfully migrate Emails as well as important things to keep in mind during the process. Steps: There are four main steps to follow to successfully migrate an Email from Source to Target: Send the body of the Email. Send all the related Activity Parties. Send the details of the related Email Attachment(s). Update the Status of the Email. In this blog, we will be dealing with the first step i.e. creating the map in TIBCO Cloud Integration to send the Body of an Email. Migrating the body of the Email is straightforward compared to the next step but there are a few aspects to keep in mind: 1) Send the email as Open so that Activity Parties and Attachments can be migrated in the following steps. Not sending the email with an “Open” status could lead to Activity Parties and Attachments not being migrated to the corresponding email. 2) When an email is migrated, the owner of the email will be the User configured in the CRM Connection in Scribe. In order to maintain the same owner as in the Source, you can update the email with the correct owner after it is created. In the screenshot below, I am using a Lookup Table in Scribe to map the User GUID of the Target System. 3) If you want the GUID of the email to remain the same in Source and Target, do not forget to map the ‘activityid’ of the Email entity. Conclusion: I hope this blog provided some insight into the migration process for Email Activities. In the next blog ‘Email Migration from CRM v8.2 to CRM v9 using TIBCO Cloud Integration: Activity Parties‘, I will talk about migrating ‘Activity Parties’ which can be the most challenging part of Email Migration.
Share Story :
Print Custom Size Report using Document Routing in D3FOE
Introduction: Recently I was working on Cheque Report. I created a custom size Cheque design and it was working fine while downloading it. Then the task was to print the cheque and test but the printout was off size. In this blog I will guide you how the custom size report prints using document routing agent in Dynamics 365 for Operations. Pre-requisites: Install Document Routing agent Configure Network Printers Adobe Reader Note: Click here to refer how to configure Document routing and network printer Steps: 1. Setup Printer Page Size You need to configure your printer to print custom size report. Go to Printer Paper size and select custom. A new dialog will ask for page size. Enter the Custom Paper size. Make this custom size as your default size. 2. Setup Adobe Reader Once you print the report from Operations with Print Destination as Printer, The Document Routing will take the command and send the document to Adobe Reader. Thus, it takes printing configurations of Adobe Reader and send it to Printer for printing. So, we need to setup the Adobe Reader as well. Please refer below screenshot for Adobe Reader Settings. Conclusion: After setting up Printer size and Adobe Reader with same orientation and page size you can print the Custom size report from D365 Operations directly to Printer with correct print layout.
Share Story :
Fetch Parameter name from ID for SSRS Report in D365 Operations
Introduction: I was stuck in an issue recently where I was working on SSRS report with multiple filter parameters. In multiple parameter, one parameter was Brand ID and in report I had to display the Brand name instead of its ID. In this blog article, we will see how we can get the name of brand as parameter using brand id in Dynamics 365 Operations. Steps: Override getFromDialog() Method getBrandName() method to fetch Brand name. parmBrandName() to set the value 1. Override getFromDialog() Method: In UI Builder class override getFromDialog() method. This method gets the value of Brand Id. /// <summary> /// Transfers data from the dialog into the data contract object. /// </summary> public void getFromDialog() { super(); RecId r; r = contract.parmEcoResCategoryId(); if (r) contract.parmBrandName(this.getBrandName(r)); } 2. getBrandName() method to fetch Brand name: This method is used to find Brand name and called from getFromDialog() method. The return value is passed as parameter to contract class. /// <summary> /// This method looks up name of the organization using the hierarchy relationship id. /// </summary> /// <param name = “hierarchyRelationshipId”>The hierarchy relationship id for the organization.</param> /// <returns>Name of the organization.</returns> public EcoResCategoryName getBrandName(RecId hierarchyRelationshipId) { EcoResCategory category; select firstonly Name from category where Category.RecId == hierarchyRelationshipId; return category.Name; } 3. parmBrandName() to set the value: This method gets or sets the value of Category Name. /// <summary> /// Gets or sets the value of the datacontract parameter Category Name. /// </summary> /// <param name=”_categoryName”> /// The new value of the datacontract parameter CategoryName; optional. /// </param> /// <returns> /// The current value of datacontract parameter CategoryName /// </returns> [ DataMemberAttribute(‘Retail Category Name’), SysOperationLabelAttribute(literalstr(“Brands”)), SysOperationHelpTextAttribute(literalstr(“Brands Category”)) ] public EcoResCategoryName parmBrandName(EcoResCategoryName _categoryName = categoryName) { categoryName = _categoryName; return categoryName; } Conclusion: This blog showed how we can fetch the parameter value from another parameter in SSRS report using filter parameters with Contract and UIBuilder class in D365 Operations.
Share Story :
Open new form with fields pre-populated using Xrm.Navigation in D365
Introduction: Xrm.Navigation provides navigation related methods like openAlertDialog, openConfirmDialog, openErrorDialog, openFile etc. In this blog we will be discussing about openForm method which opens an entity form or a quick create form. There might be requirements to open a new form with certain fields pre-populated on certain conditions or to open a specific record. Implementation: Step 1: Syntax:Xrm.Navigation.openForm(entityFormOptions,formParameters).then(successCallback, errorCallback) Here the parameter entityFormOptions is an Object and is a required parameter. Step 2: In the below example taken, we have written a script on the contact form to trigger on Save which will open up the quick create form with values filled in some of the fields. As we can see in the below image we have passed the execution context as the first parameter. Step 3: The code for the same is given below: scripting={ myfunction:function(executionContext){ debugger; var formContext = executionContext.getFormContext(); var entityFormOptions = {}; entityFormOptions[“entityName”] = “contact”; entityFormOptions[“useQuickCreateForm”] = true; var formParameters = {}; formParameters[“firstname”] = formContext.getAttribute(“firstname”).getValue(); formParameters[“lastname”] = formContext.getAttribute(“lastname”).getValue(); formParameters[“fullname”] = formContext.getAttribute(“fullname”).getValue(); formParameters[“jobtitle”] = “Developer”; Xrm.Navigation.openForm(entityFormOptions, formParameters).then( function (success) { //Any Specific action to be performed console.log(success); }, function (error) { //Any specific action to be performed console.log(error); }); } }; Step 4 : After updating the value and saving the form a quick create form opens up with some of the fields filed out. We get the value of the fields using the formContext.getAttribute(“fieldname”).getValue(); The successCallback and errorCallback are optional. In the Unified Interface the successCallback and the errorCallback function will be executed only if the we are opening the quick create form. Step 5: As seen in the image below we make some changes to the contact form and save the changes. After saving a new contact quick create form opens up with the first name, last name and job title fields filled. Here in our case we have specified entityFormOptions[“useQuickCreateForm”] = true; If this property is not set a normal form open’s up with the values filled in the fields in the same window. If we want to open the new record in a new window we should specify entityFormOptions[“openInNewWindow”]= true which is a Boolean value and it is an optional field. Step 6: If we want to open a specific record we just specific the following entityFormOptions[“entityName”]=”account” entityFormOptions[“entityId”]=”Specify Guid Here” Hope this helped!
Share Story :
Commands to Create .bacpac file from Azure SQL to SQL Server
Introduction: This topic explains how to export a Microsoft Dynamics 365 for Finance and Operations, Enterprise edition database from an environment that is based on Microsoft Azure. Steps: 1. Create a duplicate of the source database. <“CREATE DATABASE MyNewCopy AS COPY OF axdb_mySourceDatabaseToCopy”> To monitor the progress of the copy operation, run the following query against the MASTER database in the same instance. 2. Run the Sql Server script to Prepare the database. –Prepare a database in SQL Azure for export to SQL Server. –Disable change tracking on tables where it is enabled. declare @SQL varchar(1000) set quoted_identifier off declare changeTrackingCursor CURSOR for select ‘ALTER TABLE ‘ + t.name + ‘ DISABLE CHANGE_TRACKING’ from sys.change_tracking_tables c, sys.tables t where t.object_id = c.object_id OPEN changeTrackingCursor FETCH changeTrackingCursor into @SQL WHILE @@Fetch_Status = 0 BEGIN exec(@SQL) FETCH changeTrackingCursor into @SQL END CLOSE changeTrackingCursor DEALLOCATE changeTrackingCursor –Disable change tracking on the database itself. ALTER DATABASE — SET THE NAME OF YOUR DATABASE BELOW MyNewCopy set CHANGE_TRACKING = OFF –Remove the database level users from the database –these will be recreated after importing in SQL Server. declare @userSQL varchar(1000) set quoted_identifier off declare userCursor CURSOR for select ‘DROP USER ‘ + name from sys.sysusers where issqlrole = 0 and hasdbaccess = 1 and name <> ‘dbo’ OPEN userCursor FETCH userCursor into @userSQL WHILE @@Fetch_Status = 0 BEGIN exec(@userSQL) FETCH userCursor into @userSQL END CLOSE userCursor DEALLOCATE userCursor –Delete the SYSSQLRESOURCESTATSVIEW view as it has an Azure-specific definition in it. –We will run db synch later to recreate the correct view for SQL Server. if(1=(select 1 from sys.views where name = ‘SYSSQLRESOURCESTATSVIEW’)) DROP VIEW SYSSQLRESOURCESTATSVIEW –Next, set system parameters ready for being a SQL Server Database. update sysglobalconfiguration set value = ‘SQLSERVER’ where name = ‘BACKENDDB’ update sysglobalconfiguration set value = 0 where name = ‘TEMPTABLEINAXDB’ –Clean up the batch server configuration, server sessions, and printers from the previous environment. TRUNCATE TABLE SYSSERVERCONFIG TRUNCATE TABLE SYSSERVERSESSIONS TRUNCATE TABLE SYSCORPNETPRINTERS –Remove records which could lead to accidentally sending an email externally. UPDATE SysEmailParameters SET SMTPRELAYSERVERNAME = ” GO UPDATE LogisticsElectronicAddress SET LOCATOR = ” WHERE Locator LIKE ‘%@%’ GO TRUNCATE TABLE PrintMgmtSettings TRUNCATE TABLE PrintMgmtDocInstance –Set any waiting, executing, ready, or canceling batches to withhold. UPDATE BatchJob SET STATUS = 0 WHERE STATUS IN (1,2,5,7) GO 3. Export the database from Azure SQL cd C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin SqlPackage.exe /a:export /ssn:.database.windows.net /sdn:MyNewCopy /tf:D:\Exportedbacpac\my.bacpac /p:CommandTimeout=1200 /p:VerifyFullTextDocumentTypesSupported=false /sp:EG=ajgU8!Fx=gY /su:sqladmin Where : ssn (source server name) – The name of the Azure SQL Database server to export from. sdn (source database name) – The name of the database to export. tf (target file) – The path and name of the file to export to. sp (source password) – The SQL password for the source SQL Server. su (source user) – The SQL user name for the source SQL Server. We recommend that you use the sqladmin
Share Story :
Keeping tasks flexible in duration in Dynamics PSA
Overview: Auto Scheduling in PSA’s WBS books the hours when you enter the dates and dates when you enter the hours. They are interlocked. I want to schedule a task which is less in no. of hours but will span across more than expected duration of period. Such requirement is when signing a support contract with the client. Scenario While defining WBS for a Project called Abby’s D365 Implementation. I want to schedule a UAT task to span across over 10 which has only 22 hours. If I select the days as 3, I get my 22 Hours. Or select hours as 22, I get 3 days. But then, I can’t change the same to extend for more days. If I select the desired 10 days, I get 80 hours.Hence, I’ll toggle the Task Mode to Manual. Now, I can keep my Effort Hours and Duration as desired. To represent Manual mode, the icon changes to Calendar with a Pencil on it. That’s how you can keep flexible hours for the tasks you want to expand over a long duration.
Share Story :
Create Record in CRM using PowerApps with Microsoft flow
A fiber optic link service organization utilizes the application to react to blackouts by dispatching specialists to issue zones. An in-home medical care specialist organization utilizes the application to timetable and dispatch medical services laborers to direct medication and other considerations to various patients. A facility manager uses the Dynamics 365 Field Service management software to deliver maintenance and repair services for heating and cooling equipment. A medical device manufacturer sells machines to hospitals and clinics and uses the application to manage maintenance services over the lifetime of the machinery. Customer Service will typically use the desktop application to prioritize different requests so that work orders and on-site visits can be created from cases. Service Managers will use the software to oversee service delivery and track performance metrics over time. Introduction: This blog explains how to create Record in CRM using PowerApps with Microsoft flow. Steps to be followed: Create Blank App. Insert Label, Text Input and Button controls.(Fields which you want to create in CRM.) Select the Button (Add To CRM) and go to Action –> Flows. Click on Create a New Flow. Click on New step –> Add an Action. Select Dynamics 365 –> Create a new record. Enter the Organization Name and Select the Entity for which you want to create record in CRM. For Last Name, click on “Ask in PowerApps”. Repeat for Email and First Name. For Description we will add text. Give Name to the flow and Create Flow. Now change the OnSelect Property of button.(here lastname, firstname and email are the name of text input control) Enter Details and Click on Button. Record will get created in CRM.Description:
Share Story :
Finally a CRM that improves my productivity!
As a Sales professional all my life I have used several CRMs. This includes my experience using Homegrown CRM, no CRM (Excel Spreadsheet), Salesforce Automation and now finally Microsoft Dynamics 365 for Sales. It has been about 2 months that I am using it and without a doubt, D365 steals the show! CRMs have been disliked by sales professional because they seem to be more of a data entry job than a one focused towards helping people become more productive, one that throws more insights and one that makes life easier. All of this is what every CRM promises to do but don’t very much end up achieving. Most of the time people end up duplicating their jobs and hence don’t find it useful. But not anymore with D365 for Sales! Let me tell you why? A sales professional spends maximum time on the below 3 tools in the following order: Email CRM and/or LinkedIn LinkedIn and/or CRM 1) Email: A lot of communication happens on email which the CRM fails to capture. One key Differentiator in D365 for sales is the Email Tracking feature. All you will have to do in your outlook is to click on ‘Dynamics 365’ and it opens the same opportunity/lead in D365 CRM. Then click ‘Track’ and all the emails get tracked against that opportunity. It is so useful that you don’t have to spend your precious time in searching old emails. Even if an account manager leaves the job, the successor can just reply on systems to track every bit of communication. 2) Another beautiful feature that will soon release is how all your contacts within the CRM will show up LinkedIn profiles. This will help to prepare for your meetings by tracking your prospects activities, likes etc. and customize your communication. Your manager too can prepare for the meetings by just looking up the CRM! A sales Leader can completely rely on CRM for reviewing his/her teams as all the information needed is present here. You can derive all the insights that you need to make data driven decisions. Your organization is now truly dependent on technology. Apart from this AI and ML are soon going to aid D365 CRM with features like Predictive Lead scoring, Relationship health and Social Intelligence all to make you a smarter than ever sales consultant! Well these features have made my life simpler. I can truly say that MS Dynamics 365 for sales is the tool that really offers Value. The seamless integration and Unified systems that we keep hearing is what you can experience for real. You may reach out to me on pkakrania@cloudfronts.com would you like to make a smarter choice for your Sales Organization and derive true productivity.
Share Story :
Error while importing solutions using Package Deployer
Introduction: Package deployer is used to simplify the deployment process. It has the ability to automate the import of one or more solution.In this blog we will discuss about the error “Verify the state of the solution in CRM” which is shown while importing solution using package deployer. Implementation: Step 1: In the ImportConfig.xml file we give the name of the solutionpackagefilename, that is the name of our solution. Step 2: Then we build the project and copy the folder containing the solution and the Package.dll file created. Step 3: Then we run the Package Deployer application and connect to the organization the below screen shows the solution is successfully unpacked. But after clicking Next when the solution is imported the error shown is as follows. Step 4: In the Log file we can see that the import was not successful due to the missing dependencies. Once the missing dependencies are added the solution is successfully imported using the package deployer . The missing components can be verified if the solution is imported manually.
