Alternatives of Document storage in Dynamics CRM
Scenario: CRM space is expensive, and often clients want alternatives to CRM storage for storing documents, images as these take up most of the space. Available solutions: SharePoint Online with Dynamics CRM OneDrive for Business with Dynamics CRM Currently, SharePoint document management is the preferred choice for most of the customers as alternative to storing email attachments and documents. Advantages of SharePoint: SharePoint storage cost is very small about $0.20 per GB/Month compared to CRM’s $9.99/GB/Month. So, CRM space is around 50 times costlier than SharePoint space. You can leverage SharePoint Document management features like: Full text Search Metadata sorting Revisions Enterprise grade security There are 2 ways to use SharePoint for document management with Dynamics: Use SharePoint Online Integration with Dynamics CRM. This is the ideal and efficient way to use SharePoint. You can see the steps for SharePoint online integration in one of our previous blogs: https://www.cloudfronts.com/enable-sharepoint-integration-and-onedrive-for-business-in-crm/ Use 3rd Party tools like Power Attachment, which will migrate your File attachments (notes) and Email attachments from CRM storage to Dynamics. More detail and pricing about Power attachments can found here: http://www.powerobjects.com/powerpacks/powerattachment/ 1st approach should be the preferred way for using SharePoint as it is free, and works well. But users complain about an extra step to navigate to attachments, in which case you can go for Approach 2. Alternative Solution: The drawback with using SharePoint is if you have requirement of migrating your documents from CRM storage (Notes Attachments and Email attachments), you need to use 3rd party paid tools like Power Attachment. Developing custom plugins to migrate documents to SharePoint is difficult in CRM online, since we cannot use External libraries in Sandbox plugin. Due to above 2 reason, we can use Azure Blob storage as a possible alternative for migrating CRM documents. What is Azure Blob storage: Massively-scalable object storage for unstructured data With exabytes of capacity and massive scalability, Azure Blob storage easily and cost-effectively stores from hundreds to billions of objects, in hot or cool tiers depending on how frequently data access is needed. Store any type of unstructured data—images, videos, audio, documents and more. Azure Blob Features: Easy to Use – Geo Redundancy Robust API access Very Cheap storage space: It costs about $0.03/ GB/ month- which is 6.5x less than SharePoint storage cost and 300x less than CRM storage cost. Learn more about pricing here: https://azure.microsoft.com/en-us/pricing/details/storage/blobs-general/ API Coding for CRUD Operations in Azure Blob: I have written a sample plugin which will migrate the CRM attachment to Azure blob, and save the Azure blob file link back in CRM. The plugin is registered on Annotation entity For this, I have used a RestHelper and BlobHelper utility code files, which have all the operations of (a) making a web request and (b) performing blob operations. The Helper files and the CRM plugin sample can be found in the below GitHub link: https://github.com/somesh2207/CRMOnlineWithAzureBlob The plugin file is UploadDocumentToBlob.cs The below code from the plugin file takes the document from CRM and creates a blob using REST API: Entity entity = (Entity)context.InputParameters[“Target”]; string documentBlobURL = string.Empty; //// Optional condition to migrate attachments related to particular entity. //// If you want to migrate attachments for all entities, remove this CONDITION if (entity.Contains(“isdocument”) && entity.GetAttributeValue<bool>(“isdocument”) == true && entity.GetAttributeValue<string>(“objecttypecode”) == “account”) { string storageAccount = “<storageaccountname>”; string filename = entity.GetAttributeValue<string>(“filename”); string containerName = “<blobcontainername>”; string storageKey = “<blobstorage_accesskey>”; //// Read File string text = entity.GetAttributeValue<string>(“documentbody”); BlobHelper blobHelper = new BlobHelper(storageAccount, storageKey); bool isUploadSuccess = blobHelper.PutBlob(containerName, filename, text); //// Once blob upload is Success, get the Azure blob download-able URL of the uploaded File if (isUploadSuccess) documentBlobURL = string.Format(“https://{0}.blob.core.windows.net/{1}/{2}”, storageAccount, containerName, filename); }
Share Story :
POS: – Retail Report Development & Configuration.
Introduction: There is server requirement from client, that They required few Reports and KPI directly on the POS on store. Like Sales by Hours or sales by Item. This report run against the retail channel Database which is connected to that specific terminal. This report is not too complex to develop on other word you can say its does not required any heavy development for these reports. it required on XML report definition, SQL Query for the Data or as requirement of column. In Below Presentation, I will demonstrate you “ Sales by Sale Person” Report. This report is most commonly request from client. Step 1: Open the AX Client and goto Retail -> Setup -> Channel Report Configuration Open Channel Report Configuration. Click on New Button, Once you click on New button Provide New Report ID :- 114 and Description :- Sales by Sale Persons In Report Details Section, select POS Permission Group in Permission Group fields For E.g. if casher want to run or view this report then select Cashier or if only Manager can view or run this report then select Manager. Report Definition XML, here you can develop the report. With below code. Which is combination XML report definition, SQL Query. <?xml version=”1.0″ encoding=”utf-8″?><RetailReport xmlns=”http://schemas.microsoft.com/dynamics/retail/2013/06/retailreportdefinition”><Title>SALESBYSALESPERSON</Title><DataSet><DataSourceType>OLTP</DataSourceType> <Query> <![CDATA[SELECT RST.NAMEONRECEIPT AS SALESPERSON, count(*) as TRANSACTIONLINES , CAST(SUM(RTL.NETAMOUNT) * – 1 AS DECIMAL(18,2)) AS SALESAMOUNT, CAST(AVG(RTL.NETAMOUNT) * -1 AS DECIMAL(18,2)) AS AVGSALESAMOUNT FROM ax.RETAILTRANSACTIONSALESTRANS RTL INNER JOIN ax.RETAILTRANSACTIONTABLE RTA ON RTL.CHANNEL = RTA.CHANNEL AND RTL.STORE = RTA.STORE AND RTL.TERMINALID = RTA.TERMINAL AND RTL.TRANSACTIONID = RTA.TRANSACTIONID LEFT OUTER JOIN ax.RETAILSTAFFTABLE RST ON RTL.STAFF = RST.STAFFID WHERE RTA.CHANNEL = @bi_ChannelId AND @dt_StartDate <= RTA.TRANSDATE AND @dt_EndDate >= RTA.TRANSDATE AND (RTA.TYPE = 19 OR RTA.TYPE = 2 OR RTA.TYPE = 14) AND RTA.PAYMENTAMOUNT <> 0.00 AND RTL.TRANSACTIONSTATUS = 0 group by RST.NAMEONRECEIPT ORDER BY SALESPERSON]]> </Query></DataSet> <ReportParameters><ReportParameter Name=”dt_StartDate” DataType=”DateTime” Label=”STARTDATE” DefaultValue=”2014/1/1″/><ReportParameter Name=”dt_EndDate” DataType=”DateTime” Label=”ENDDATE” /> </ReportParameters> <ReportCharts> <ReportXYChartCategories=”SALESPERSON”><Series>SALESAMOUNT</Series></ReportXYChart> <ReportXYChartCategories=”SALESPERSON”><Series>TRANSACTIONLINES</Series></ReportXYChart> <ReportXYChartCategories=”SALESPERSON”><Series>AVGSALESAMOUNT</Series></ReportXYChart> </ReportCharts></RetailReport> Report Definition XML Explanation XML Report Definition Below Part is XML Report Definition of POS Report. <?xml version=”1.0″ encoding=”utf-8″?><RetailReport xmlns=”http://schemas.microsoft.com/dynamics/retail/2013/06/retailreportdefinition”><Title>SALESBYSALESPERSON</Title><DataSet><DataSourceType>OLTP</DataSourceType> SQL Query With help of SQL Query, you can set report logic. For Sales by Sales Person report below is SQL Query. You can also use stored procedures. <Query> <![CDATA[SELECT RST.NAMEONRECEIPT AS SALESPERSON, count(*) as TRANSACTIONLINES , CAST(SUM(RTL.NETAMOUNT) * – 1 AS DECIMAL(18,2)) AS SALESAMOUNT, CAST(AVG(RTL.NETAMOUNT) * -1 AS DECIMAL(18,2)) AS AVGSALESAMOUNT FROM ax.RETAILTRANSACTIONSALESTRANS RTL INNER JOIN ax.RETAILTRANSACTIONTABLE RTA ON RTL.CHANNEL = RTA.CHANNEL AND RTL.STORE = RTA.STORE AND RTL.TERMINALID = RTA.TERMINAL AND RTL.TRANSACTIONID = RTA.TRANSACTIONID LEFT OUTER JOIN ax.RETAILSTAFFTABLE RST ON RTL.STAFF = RST.STAFFID WHERE RTA.CHANNEL = @bi_ChannelId AND @dt_StartDate <= RTA.TRANSDATE AND @dt_EndDate >= RTA.TRANSDATE AND (RTA.TYPE = 19 OR RTA.TYPE = 2 OR RTA.TYPE = 14) AND RTA.PAYMENTAMOUNT <> 0.00 AND RTL.TRANSACTIONSTATUS = 0 group by RST.NAMEONRECEIPT ORDER BY SALESPERSON]]> </Query></DataSet> Report Parameter This Dataset you to define report input parameter. In this Example Start date and End Date is Input parameter. When user want check data with specific date range then he can enter start and End date. <ReportParameters> <ReportParameter Name=”dt_StartDate” DataType=”DateTime” Label=”STARTDATE” DefaultValue=”2014/1/1″/><ReportParameter Name=”dt_EndDate” DataType=”DateTime” Label=”ENDDATE” /> </ReportParameters> Report Charts Report chart is used to Display chart on fields which you define in SQL Query Section. Here in this Example, I define SALESAMOUNT, TRANSACTIONLINES & AVGSALESAMOUNT. <ReportCharts> <ReportXYChartCategories=”SALESPERSON”><Series>SALESAMOUNT</Series></ReportXYChart> <ReportXYChartCategories=”SALESPERSON”><Series>TRANSACTIONLINES</Series></ReportXYChart> <ReportXYChartCategories=”SALESPERSON”><Series>AVGSALESAMOUNT</Series></ReportXYChart> </ReportCharts></RetailReport> Step 2: Once Step 1 is completed, we need to set this report to POS. so that user can use this report. We need to run job for the Report to all channel. In AX, go to Retail -> Periodic -> Data distribution -> Distribution schedule Run the JOB ID: – 1110. And wait for couple of minutes to complete the job. After Complete the Job Open AX POS and Go to POS Report. You will be able to see Sales by Sales Person Report. Conclusion: By Using, XML Report Definition, SQL Query, Report Parameter and Report Chart you can develop POS Report.
Share Story :
Creating a Web Template Page Template Using Liquid in CRM Portals
In this blog , we will see how can a user create a custom Page Template Web Template Using Liquid template code in CRM Portals. Pre-Requisites: 1. Dynamics 365 Portal(CRM) 2. D365 CRM Environment Scenario: The user will have to create a simple two-column template that WebLink Set as left -Side navigation, with the page content to the right. The Web Template Page Template that we are going to create is shown below. Steps for Implementing Above Scenario Step 1: The user will first have to create two Web Templates one which will have the layout design and the other will have the content to the layout designed previously. In the Layout web template the user has to go to Portals > Web Templates on the dashboard and select new in the CRM Environment. The user has to enter the following details along with the Liquid Template code as shown below. Step 2: In this step the user has to create the second Web Template as shown below which will contain the Liquid Template code for inserting data content in to the Web template layout designed previously. Step 3: Now the user will have to create a new web link set according to the Web Link Set that the user has defined and intends to use in his Web Template. Over here the user has referred to Web Link Set ‘My Order Link’. The user has to go to Portals > Web Link Sets and click on New and enter the details as shown below. The user needs to add Links to the Web Link Set as shown below by clicking on the ‘+’ button to the right after the Web Link Set is saved. Step 4: Once this is done the user now has to create a Page Template that will include the web templates that we have created previously. In order to create a new Page Template the user has to go to Portals > Page Template. The user will enter the details of the Page template as shown below and click on ‘Save’. Step 5: Now the user will create a Web Page that will utilize the Page Template that we have designed. The user can create a Web Page directly form a Page Template by clicking on the ‘+’ button to the right on the Web Page Tab or by going to Portals > Web Pages and clicking on New. The user has to enter the details of the Web Page as shown below. The user can create a custom Localized Content that will be used in the 2nd section of the layout of the Web Template. The user can create a new localized content for the following Web Page by selecting the ‘+’ option. Step 6: The user will have to go to the Dynamics 365 portal environment and create a new child page that will display the result. While Entering the details of the child page the user will have to specify the Page Template that we have created previously as shown below.
Share Story :
Invalid Namespace Error
Introduction: We have an integration of CRM with 3 party system which sends sales data. We used the Azure service bus to send data from CRM to 3 party system in real-time. It was working fine until CRM 2016 But after the upgrade of Dynamics CRM to Dynamics 365, our integration stopped. Description: We decided to check why our integration has stopped so, we checked the system log and we found there is some issue with service connection. After diagnosis of error we try to update the Azure service bus but we were not able to update the service end point. We continuously receiving the same error “Invalid Namespace” So we tried another approach and decided to create new service end point. I have followed the below steps for registration. Register a new Service Endpoint Add the connection string from Service Bus portal. Select the Designation Type as “Two way” The error occurs “Provide a valid Namespace Address” while saving it. Solution: We connected with Microsoft and they suggested that there is a slight modification in the Namespace Address. To resolve this issue you need to change Namespace Address from sb:// to https:// Example: sb://xxx.servicebus.windows.net/abc/xyz -> https://xxx.servicebus.windows.net/abc/xyz Conclusion: Sometimes unknown minor issues will stop your whole integration process and it will be not known to you. Hope this blog helps you resolve your service bus integration issue.
Share Story :
D365 Operations Table browser error – Object reference not set to an instance of an object.
In D365 Operations, many times we need to check what data is store in tables. So, we open table browser from backend. Sometimes we face below error for all tables while opening table browser, it is a very common error and it simply means any recent customization is not compiled or sync in database. Solution: Go to Dynamics 365 -> Build Models Select the model which you have recently customized. Go to options tab. Select Synchronize database. Click Build.
Share Story :
GST- Goods and Service Tax Implementation Update Procedure for Microsoft Dynamics NAV 2016 India
Introduction: Goods and Service Tax (GST) will be applicable at national level. It is a consumption based tax levied on sales, manufacture and consumption of goods and services. This tax will act like a substitute for all indirect tax levied by the government. GST patch has been released and is a part of the cumulative update 17 for Microsoft Dynamics NAV 2016. Pre-requisite: 1. Microsoft Dynamics NAV 2016 (IN version) 2. Cumulative Update 17 for Microsoft Dynamics NAV 2016 IN Purpose: The purpose of the blog is to explain the procedure to update the GST patch on Microsoft Dynamics NAV 2016 IN. Procedure: Download the Cumulative Update 17 for Microsoft Dynamics NAV 2016 IN (CU 17 NAV 2016 IN.zip) from here. Unzip the folder. Take SQL backup of the complete NAV 2016 database to ensure nothing is lost after the Cumulative update 17 which includes GST patch has been installed. Fig 1: SQL Backup of database A cumulative update includes files that are separated into the following folders i.e. ‘APPLICATION’ and ‘DVD’. Application folder includes the following files: Fig 2: Application folder To install application files, follow below steps: Unmodified databases: Import the CUObjects.fob file (highlighted in Fig. 3) into unmodified Microsoft Dynamics NAV 2016 database and replace the existing objects in the database with the cumulative update objects. Fig 3: CUObjects.fob file in Application folder Modified databases: Import the CUObjects.fob file (highlighted in Fig. 3) into the modified database. Replace the objects in the database that have not been modified. Compare and merge the cumulative objects with the objects in the database that have been modified. If a table in the cumulative update has a new field and the same table in your database has been modified, use the Merge: Existing<-New or the Merge: New<-Existing options to import the new fields. Fig 4: Reading objects process after selecting file to be imported Fig 5: Import Worksheet which shows the GST patch objects Fig 6: Number of objects created and replaced after import of objects has been completed All objects in the database have to be compiled after the import process has been completed. Now in the Microsoft Dynamics NAV desktop client and web client, GST patch will be available under Financial Management Department. Fig 7: GST patch available in NAV under Financial Management Department Fig 8: GST Using the above mentioned steps, GST patch can be installed in the Microsoft Dynamics NAV 2016 (IN version).
Share Story :
Step by Step instructions for Scribe Insight Version Upgradation
In this blog article, I am explaining about upgradation of Scribe insight version. Upgrading scribe insight 7.8.0 version to latest scribe insight 7.9.2 version. Step 1: Backup Export existing scribe Console Open scribe console -> right click -> Import/Export -> Export a package -> Select package -> Next -> Give specific name and path to store the backup files -> Next -> Finish This will create a .spkz file in the specified path. Take Backup of Collaboration folder Make a copy of collaboration folder. Path eg: C:\Users\Public\Documents\Scribe Take a backup of Scribe Serial Number Open Scribe Workbench -> Help -> About Scribe Insight -> Copy the Serial Number Step 2: Unregister the existing Scribe version Open Scribe Workbench -> Help -> Unregister this Computer -> Yes After successful unregistering, you will get a pop up window as Step 3: Stop the Scribe services From Task Manager -> End the Scribe.UpdateService.exe (if it exists) Step 4: Download current version of Scribe Insight Site: https://openmind.scribesoft.com/html/insight_download Step 5: Download Microsoft.NET Framework 4.5.2 Site: https://www.microsoft.com/en-us/download/details.aspx?id=42643 Note: Select scribe update notifier when asked during installation process. Restart the computer/remote server. Step 6: Run the Application Click on Run -> Next -> specify the path for unzip -> click Unzip -> Close. Step 7: Installation of Latest version of Scribe Insight Run Setup file Open ScribeInsight792_x64 folder (which is stored in the path specified during unzip) -> Run Setup.exe Uninstall existing adapters we need to uninstall the existing adapter eg: CRM , AX ,etc. Control Panel -> uninstall/ program Also, the system will automatically uninstall the adapter. Install Adapters Click on check box Insight adapters then click on Start installation Below window will appear Click on Install After Visual studio installation below window will pop up Restart the computer Open the setup.exe file again -> Click Next -> Accept the terms -> Next -> Install -> Next -> Accept license agreements -> Install -> Finish Setup wizard will pop up -> cancel username window -> select the adapter you want to install -> Next -> Finish Start Scribe Services Start -> Run -> services.msc -> Select Scribe Services one by one -> click on LogOn -> Click This Account -> Click Browse -> Browse the name -> Insert Password -> Apply Check dependencies and make sure all the dependent services are started before you start the Scribe Services. Do this for all the Scribe Services. (Services starting with name ‘Scribe’) Step 8: Register the Scribe Insight Select Register Online Copy the Serial Number which you took backup before. You will get details window You will get product update status Click Next Registration Successful window will appear -> Click Finish Step 9: Verify the version of installed Scribe Insight Open Scribe Workbench -> Help -> About Scribe Insight
Share Story :
Editable Grids in Dynamics 365
Introduction: Editable Grid is a new feature introduced Out-Of-The-Box with D365 to ease of most common necessity of editing records from the grid itself. Up until now, you had to explicitly open a record and then update the changes. With Editable Grids, You can enable Editable Grid at the entity level so that all Entity Views are converted to Editable Grids or also on a specific form where subgrid is used. Enable Editable Grid on the Entity Currently, this is how your default read-only grid looks: Navigate to your entity in the Default Solution (Settings > Customization > Customize The System > Default Solution > Entity) on which you want to enable Editable Grid. Then select the Controls tab on the entity as shown below: The click on Add Control… hyperlink as mentioned below: Once you see the window as below, select Editable Grid and click on Add. Once this has been enabled for the entity, you can make the change in the Control section as shown below: I’ve chosen to have Editable Grid for Web, Phone and Tablet as well. Save and Publish the entity changes. At this point, the Grid has been enabled on the Entity level. Enable Editable Grid on the Form Now, Editable Grid has been enabled for that entity. You can go to your form where you already are using this entity’s subgrid on its form. Open the Form Editor of that form. Double click on the Grid to show it’s properties. Navigate to Controls tab: Now, click on the Add Control similar to the step shown to enable Editable Grid on the Entity level. Make sure the options are selected to use Editable Grid and click OK. Save and Publish changes made to the form and refresh the form to see the change. You can now see the subgrid used has changed: Use Editable Grid You can quickly hover over the column and record value and change it easily. Also, fields that are read only, like System Fields will be shown representing a lock indicating that they can’t be edited. These are some of the basic uses of Editable Grid. More information is provided by Microsoft on their official documentation here: https://msdn.microsoft.com/en-us/library/mt788312.aspx.
Share Story :
Integrating Sales Order line items of Dynamics 365 Financials using TIBCO Cloud Integration
In this era where consumers are more aware, informed and expect just a little bit more with any service they opt for, you must be on your toes all the time if you want to satisfy them at every point. With Microsoft dynamics 365 for sales, go for the salesforce automation that will let you catch the nerves of what your consumers demand and expect. This will not only help you in engaging well with your customers, but will also help you in satisfying their business needs that will in turn help you to attract more new customers by satisfying the current ones. The accelerated performance and boosted productivity will be witnessed from time-to-time enabling your customers to build a solid business foundation of their own Introduction: In Dynamics 365 Financials, Sales order line items cannot be integrated in a single step. As, it takes only item number in a create () and rest all the fields are considered as an Update. Prerequisite: Dynamics 365 Financials. TIBCO Cloud Integration Subscription. Purpose of the Setup: Our goal is to integrate Sales Order Line item from Microsoft Dynamics CRM Online to D365 Financials through TIBCO Cloud Integration. Steps: Configure a connection for your Microsoft Dynamics CRM Online by providing the required information. Configure a connection for your D365 Financials by providing the required information. Create a new Solution and specify the Solution name and the Agent. Note: Here, we are using a Cloud Agent. Now create an Integration Map for integrating Sales Order Header and its Line items from CRM Online to Dynamics 365 Financials. Sales Order Header: Use Create Block and create Sales Order Header by mapping required fields. Sales Order Lines: Use For each child Block for looping the Sales Order Lines. Use Create Block to Create Sales Order Line by mapping primary fields like Document_No,Document_Type,No Use Update Merge Block to map rest of the fields of Sales Order Lines like quantity,Unit_price etc along with ETag and ETagConcurrencyBehavior Note: (As specified by Scribe Software) The OData Protocol uses Entity Tags (ETag) to determine how to update or delete data. The Dynamics NAV/Financials Connector exposes these ETags as fields: ETag — Available as a source and target field, contains the ETag value provided by the Dynamics NAV/Financials OData service. ETagConcurrencyBehavior — Available as a target field, used to determine how data conflicts are handled. Possible values for this field are: Always Overwrite (default) Overwrite If Match Overwrite If Not Match
Share Story :
Identify Users with System Administrator Role
Introduction: In this blog, we are going to discuss how to find the users having the System Administrator role. This can be done using the basic feature of CRM. Instead of checking all the Users separately and identifying the System Administrator(s) we can utilize the CRM feature of Advance Find. Steps: Step 1: Login to your CRM organization and click on Advanced Find located on the top toolbar as shown below. Step 2: On the Advanced Find page, click the Look for: drop down as shown below, scroll down and select Users. Step 3: Select Security Roles from the list. Step 4: After selecting Security Roles, under Fields select Name from the drop down Step 5: Enter the search string in the enter text location “System Administrator” and click Result. Step 6: Users with System Administrator role will be visible. We hope this has given you a useful information.
