Category Archives: Blog
Part 1: Understanding Security Roles in Microsoft Dynamics 365 Finance & Operations
Ensuring user security is a crucial aspect of Microsoft Dynamics 365 Finance and Operations (D365FO). To access or utilize any features within the system, users must be assigned a security role. Without a role, they will be unable to perform any actions. Access levels and business processes for a role are defined by duties and privileges, ensuring that users have the appropriate permissions for their responsibilities. In this blog, we will explore the fundamentals of security roles and their functionality in Dynamics 365 Finance and Operations (FO). Understanding Security in Dynamics 365 Security in Dynamics 365 Finance & Operations is built around four key components: 1. Security Roles 2. Duties 3. Privileges 4. Permissions Security Configuration Tool: Managing Security in D365FO The Security Configuration Tool allows administrators to create, modify, and test security roles, duties, and privileges. Key Features of the Security Configuration Tool: ✔ View Entry Point Permissions – Displays permissions assigned to any role, duty, or privilege.✔ Test Security Role – Allows users to test security settings without creating a test user.✔ Non-Permanent Changes – Changes must be published before they take effect.✔ Export & Import Security Changes – Security settings can be exported and imported across environments.✔ Hierarchy View – Provides a full view of roles, duties, privileges, and entry points.✔ Duplicate Existing Roles – Users can create copies of existing roles to modify. To conclude, security roles in D365FO ensure that users have access only to the necessary data and functions required for their specific job roles. By understanding roles, duties, privileges, and permissions, businesses can maintain control and prevent unauthorized access. In Part 2, we will dive deeper into the step-by-step process of creating and modifying security roles using the Security Configuration and Diagnostic Tools. Stay tuned for Part 2!???? We hope you found this blog useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfonts.com.
Share Story :
General Ledger User Access control in D365 F&O
Companies need to control access of different modules for security and operational reasons. In this blog, we will see how we can do it in D365 F&O. For any business securing financial data is paramount. Microsoft Dynamics 365 Finance and Operations (D365 F&O) provides organizations with a functionalities to manage and analyze financial operations, including accounting, procurement, and supply chain management. It is crucial to ensure that access to this data is carefully controlled. In this blog, we’ll explore General Ledger User Access Control in D365 F&O. This feature is to ensure correct level of access to financial data, preventing unauthorized actions and reducing the risk of fraud or errors. By the end of this post, you’ll have a clearer understanding of how to efficiently manage user roles, permissions, and access levels in the General Ledger module, helping to maintain both security and compliance in your financial operations. Please follow the below steps: =>Security diagnostics. Below screen will appear Option 2 This functionality helps in access control and security configuration and audit procedures.As D365 F&O continues to evolve, organizations should regularly review and update user permissions, leveraging available tools like security diagnostics, audit logs, and workflow approvals to maintain a secure and compliant financial environment. We hope you found this blog useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfonts.com.
Share Story :
Automating File Transfers from Azure File Share to Blob Storage with a Function App
Efficient file management is essential for businesses leveraging Azure cloud storage. Automating file transfers between Azure File Share and Azure Blob Storage enhances scalability, reduces manual intervention, and ensures data availability. This blog provides a step-by-step guide to setting up an Azure Timer Trigger Function App to automate the transfer process. Why Automate File Transfers? Steps to Implement the Solution 1. Prerequisites To follow this guide, ensure you have: 2. Create a Timer Trigger Function App 3. Install Required Packages For C#: For Python: 4. Implement the File Transfer Logic C# Implementation 5. Deploy and Monitor the Function To conclude, automating file transfers from Azure File Share to Blob Storage using a Timer Trigger Function streamlines operations and enhances reliability. Implementing this solution optimizes file management, improves cost efficiency, and ensures compliance with best practices. Begin automating your file transfers today! Need expert assistance? Reach out for tailored Azure solutions to enhance your workflow. We hope you found this blog useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfonts.com.
Share Story :
Buggy LLC Partners with CloudFronts for Managed Services Agreement (MSA) Renewal
We are delighted to announce that a leading US-based TLC car rental brand, Buggy LLC is partnering with CloudFronts for Dynamics 365 support & maintenance with Managed Services Agreement (MSA). Buggy LLC is a leading data-centric TLC (Taxi and Limousine Commission) car rental company, dedicated to providing reliable and efficient transportation solutions for drivers who are looking to drive for ride-hailing apps like Uber and Lyft. Buggy offers a comprehensive fleet of well-maintained, TLC-approved vehicles, ensuring drivers have access to top-quality cars that meet strict regulatory standards. With an unwavering commitment to safety, exceptional customer service, and cutting-edge technology, Buggy empowers drivers to maximize their earnings while providing passengers with safe and comfortable rides. Learn more about them at https://www.joinbuggy.com/ The partnership with CloudFronts began with the implementation of an integrated fleet management experience on Dynamics 365 for Fast Track Mobility. Subsequently, Fast Track Mobility was acquired by Buggy LLC and became a wholly owned subsidiary of Voyager Global Mobility, a rapidly growing mobility operating company. Following the implementation, they entered into a Managed Services Agreement (MSA) with CloudFronts and renewed it multiple times over the years. Under this latest renewal of the MSA, CloudFronts will ensure that the proper elements and commitments are in place to provide ongoing technical, functional support & maintenance services to the client. Visit us at https://www.cloudfronts.com/ to learn more about our Dynamics 365 offerings. About CloudFronts CloudFronts is a Dynamics 365 focused Microsoft Solutions Partner helping Teams & Organizations worldwide solve their Complex Business Challenges with Microsoft Cloud. Our head office and robust delivery centre are based out of Mumbai, India, along with branch offices in Singapore & the U.S. Since its inception in 2012, CloudFronts has successfully served over 500+ small and medium-sized clients all over the world, such as North America, Europe, Australia, MENA, Maldives & India, with diverse experiences in sectors ranging from Professional Services, Financial Services, Manufacturing, Retail, Logistics/SCM, and Non-profits. Please feel free to connect with us at transform@cloudfronts.com
Share Story :
How to Enable the Latest Purchase Price Parameter in Microsoft Dynamics 365 Finance & Operations
Managing item purchase prices effectively is crucial for accurate cost control in Microsoft Dynamics 365 Finance & Operations (D365FO). One of the key features that impacts how item prices update is the Latest Purchase Price Parameter. When enabled, this parameter ensures that an item’s price is updated based on the most recent purchase cost recorded in a Purchase Order (PO). This means that every time a new PO is created, the item’s purchase price can change depending on the most recent cost price recorded in the system. In this blog, we will explore:The impact of enabling the Latest Purchase Price parameter.Step-by-step instructions to activate this parameter.How to track price changes using Last Price History. Impact of Enabling the Latest Purchase Price Parameter Key Effects of Enabling This Parameter:The purchase price of an item in the Item Master updates automatically based on the latest purchase price in a PO.This applies to both fixed and variable pricing models.If multiple POs are created for the same item at different prices, the purchase price will fluctuate accordingly.The updated purchase price will also reflect in the Manage Cost > Item Price section. Example Scenario: Steps to Enable the Latest Purchase Price Parameter in Released Products Step 1: Navigate to Released Products Step 2: Select the Product Step 3: Enable the Latest Purchase Price Parameter Step 4: Set Initial Price in Product Master Step 5: Create a Purchase Order (PO) Step 6: Update the Purchase Price Step 7: Confirm the Purchase Order Step 8: Post the Product Receipt (GRN) Step 9: Invoice the Purchase Order Outcome:Once invoicing is complete, navigate to the Product Master and open the product. If the Latest Purchase Price parameter is enabled, you will see that the purchase price has been updated from 50 USD to 100 USD, reflecting the latest purchase cost. Additionally, under Manage Cost > Item Price, the updated purchase price of 100 USD will be visible. How to Enable Last Price History in Dynamics 365 To track purchase price fluctuations over time, you need to enable the Last Price History feature. Steps to Enable Last Price History: Outcome:Once enabled, you can view historical purchase price changes in the Item Price section, helping businesses analyze pricing trends and make informed purchasing decisions. To conclude, enabling the Latest Purchase Price Parameter in D365FO ensures that item prices remain current based on the most recent purchase cost. This feature is beneficial for businesses managing fluctuating costs and needing accurate pricing in their procurement process. Additionally, by enabling Last Price History, organizations can track price variations over time, ensuring better cost analysis and decision-making. By following the steps outlined in this blog, you can optimize your item pricing strategy and enhance financial accuracy in Dynamics 365 Finance & Operations. We hope you found this blog useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfonts.com. Need further assistance? Feel free to leave a comment or reach out for expert guidance on pricing configurations in D365FO! Thank you for reading!
Share Story :
Getting Started with Dynamics 365 Finance & Operations: Table and Form Customization
Dynamics 365 Finance and Operations (D365 F&O) allows customization through extensions, enabling developers to add new fields to existing tables and forms without modifying the original Microsoft code. This approach ensures upgrade safety and maintainability. In this blog, we’ll cover: Step 1: Creating a Table Extension A table extension lets you add custom fields to an existing table (e.g., CustTable for customers). 1. Create a Table Extension In Visual Studio, right-click your project → Add → New Item. Select Dynamics 365 Items → Data Model → Table Extension. Name it (e.g., MyCustTableExtension). 2. Define the New Fields After choosing the appropriate data type and entering the required information, you can proceed to create the field. 3. Synchronize the Database After adding fields: Right-click the project → Build. Right-click the project → Dynamics 365 → Synchronize Database. Step 2: Extending a Page to Display the New Fields Now, let’s add these fields to the Customer Details page (CustTable form). 1. Create a Page Extension Right-click your project → Add → New Item. Select Application Explorer → User Interface → Forms → Create Extension. Name it (e.g., MyCustTablePageExtension). 2. Add Fields to the Page You can drag and place where you want. 3. Build and Test Build the project (F6). Run the CustTable form (Ctrl+F5). Open a customer record → Your new fields should appear under “General Tab”. Best Practices for Extensions To conclude, with table and form extensions, you can safely customize D365 F&O without altering base Microsoft code. This ensures smoother upgrades and better maintainability. Try it out and enhance your F&O implementation today! We hope you found this blog useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfonts.com.
Share Story :
Optimizing Dynamics 365 Storage: Ways to Free Up Space
Maintaining optimal performance in Dynamics 365 (D365) requires proactive storage management. Running out of space can slow down your system, so it’s crucial to monitor storage usage and act before reaching capacity. Ideally, you should receive an alert when storage hits 80%, giving you time to take corrective action. How to Reduce Storage Consumption in D365 If your D365 environment is nearing its storage limit, here are some effective ways to reclaim space: When Documents Are the Culprit If storage remains tight after these steps, documents and attachments are likely the issue. Studies show that 70% of D365 storage is often consumed by files—especially if your organization stores emails within the CRM. Unfortunately, traditional cleanup methods may not be enough to free up space efficiently. A Better Approach: Integrate External Storage Solutions Since D365 is designed for customer relationship management—not document storage—relying on it for file storage can be costly. Instead, consider migrating documents to dedicated storage systems that offer: Popular options include: By offloading documents to these platforms, you can reduce D365 storage costs while improving efficiency. To encapsulate, proactive storage management ensures smoother D365 performance and avoids unnecessary expenses. Clean up unused data, then explore external storage solutions for long-term efficiency. Would you like recommendations on the best storage migration strategy for your business? Let us know in the comments! We hope you found this blog useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfonts.com.
Share Story :
Phases of Quality Control in Business Central – 6
In the pharmaceutical industry, quality doesn’t stop at the first inspection. Even after raw materials (RM) and finished goods (FG) pass initial testing, they may need to be retested over time to ensure they still meet quality standards. Retesting is done for various reasons—checking product stability, verifying shelf-life, or re-evaluating materials due to storage issues. If not managed properly, it can lead to delays, compliance risks, or even wasted inventory. With our GMP-compliant Quality module in Business Central, the retesting process becomes more structured and efficient. In this blog, we’ll look at how the system helps identify items due for retesting, track test results, and make informed inventory decisions. Items due for retesting Once the QA user completes the quality process and posts the inspection receipt, the system stores the retesting date on the item ledger entry. This ensures that retesting requirements are properly recorded and can be tracked throughout the product lifecycle. Retesting Worksheet The next step is to track and manage items due for retesting. Business Central simplifies this with the Retesting Worksheet, which allows QA teams to efficiently identify materials and products that need to be retested. With this approach, retesting becomes a structured and automated process, helping pharma companies stay compliant and maintain quality without operational bottlenecks. I Hope you found this blog useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfonts.com.
Share Story :
Phases of Quality Control in Business Central – 5
In our previous posts, we covered the key stages of production—planning, creating orders, managing materials, and reviewing the final product. Now, let’s focus on an important next step: quality control of Finished product. Quality control is not something we just do at the end of the process; it’s crucial to making sure our products meet the high standards our customers expect. In this post, we’ll explain the essential steps involved in quality control, from inspections to ensuring everything follows the right rules, all to make sure only the best products are delivered. Let’s dive into how we keep our products up to standard and protect the reputation of our brand! Released production order System will automatically create Inspection datasheet with all the item details and list of specification. Inspection Datasheet Inspection Receipt Posted inspection receipt To conclude, our comprehensive quality control, driven by inspection datasheets and receipts, delivers excellent products, traceable records, and customer confidence through verifiable results and Certificates of Analysis. I Hope you found this blog useful, and if you would like to discuss anything, you can reach out to us at transform@cloudfonts.com.
Share Story :
Implementing Encryption and Decryption Functions via API in Business Central
In Microsoft Dynamics 365 Business Central, securing sensitive data like passwords is crucial for protecting both businesses and customers. By the end of this post, you will understand how passwords are encrypted before being stored and decrypted only when necessary. This ensures that passwords remain secure, minimizing exposure and building trust. 1. Storing Encrypted Passwords Passwords are encrypted before being stored in the database to ensure they are protected. This prevents anyone from accessing passwords in plain text, even if they gain unauthorized access to the database. Here’s an example of how a custom table, CFSCustomPage, stores encrypted passwords using the EncodePassword procedure. In the above code, the password is encrypted before being stored in the database to ensure the data remains secure. The EncodePassword procedure is used for encrypting the password. 2. Decrypting Passwords When Needed When passwords need to be retrieved, they are decrypted using the DecodePassword procedure. This ensures that passwords are only accessible when required, minimizing exposure. Here’s the decryption function: In the above code, passwords are decrypted only when needed, allowing the system to securely handle sensitive data. 3. Returning Decrypted Passwords via API For external systems or applications requiring access to customer data, Business Central ensures that passwords are only decrypted and transmitted securely via API. This way, customer information remains protected throughout the process. Here’s how the API Page CFSCustPageAPI handles this: The API exposes the encrypted password and only decrypts it when accessed securely through the API. 4. Returning Decrypted Passwords in a List Page Passwords can also be decrypted and displayed in a list page when necessary, ensuring they are only shown to authorized users. This is done using the DecodePassword function in the page CFSCustomPage, as shown below: This page allows authorized users to view encrypted passwords, MD5, SHA1, SHA512, and AES encrypted passwords, and also decrypt them when necessary. 5. Best Practices for Password Security 6. Encryption Types Used in the System Here are the different types of encryptions and hashing methods used in Business Central: Code: table 71983576 CFSCustomPage { Caption = ‘CustomPage’; DataClassification = ToBeClassified; fields { field(71983575; “No.”; Code[20]) { Caption = ‘No.’; DataClassification = CustomerContent; } field(71983576; Name; Text[50]) { Caption = ‘Name’; DataClassification = CustomerContent; } field(71983577; Password; Text[365]) { Caption = ‘Password’; DataClassification = CustomerContent; } } keys { key(PK; “No.”) { Clustered = true; } } // Procedure to encode (encrypt) a password [ServiceEnabled] procedure EncodePassword(var Password: Text[365]) var EncryptedPassword: Text[365]; begin // Encrypt the password using the Encrypt function EncryptedPassword := Encrypt(Password); // Assign the encrypted password back to the Password field Password := EncryptedPassword; end; // Procedure to decode (decrypt) the password [ServiceEnabled] procedure DecodePassword(EncryptedPassword: Text[365]): Text var DecryptedPassword: Text; begin // Decrypt the password using the Decrypt function DecryptedPassword := Decrypt(EncryptedPassword); // Return the decrypted password exit(DecryptedPassword); end; // Procedure to generate MD5 hash of a password procedure MD5Hash(Pwd: Text): Text var CryptographyManagement: Codeunit “Cryptography Management”; HashAlgorithmType: Option MD5,SHA1,SHA256,SHA384,SHA512; begin // Generate and return the MD5 hash of the password exit(CryptographyManagement.GenerateHash(Pwd, HashAlgorithmType::MD5)); end; // Procedure to generate SHA1 hash of a password procedure SHA1(Pwd: Text): Text var CryptographyManagement: Codeunit “Cryptography Management”; HashAlgorithmType: Option MD5,SHA1,SHA256,SHA384,SHA512; begin // Generate and return the SHA1 hash of the password exit(CryptographyManagement.GenerateHash(Pwd, HashAlgorithmType::SHA1)); end; // Procedure to generate SHA512 hash of a password procedure SHA512(Pwd: Text): Text var CryptographyManagement: Codeunit “Cryptography Management”; HashAlgorithmType: Option MD5,SHA1,SHA256,SHA384,SHA512; begin // Generate and return the SHA512 hash of the password exit(CryptographyManagement.GenerateHash(Pwd, HashAlgorithmType::SHA512)); end; // AES Encryption and Decryption example procedure AESEncryptionExample(Passowrd: Text): TEXT var RijndaelCryptography: Codeunit “Rijndael Cryptography”; Base64Convert: Codeunit “Base64 Convert”; EncryptedText: Text; DecryptedText: Text; SecretTexts: SecretText; begin // Convert the encryption key ‘1106198321061984’ to Base64 format and store it in SecretTexts SecretTexts := Base64Convert.ToBase64(‘1106198321061984’); // Set the encryption key and initialization vector (IV) using Base64-encoded values RijndaelCryptography.SetEncryptionData(SecretTexts, Base64Convert.ToBase64(‘ITGateWayXyZ1234’)); // Set the AES block size to 128 bits (standard AES block size) RijndaelCryptography.SetBlockSize(128); // Set the cipher mode for AES to CBC (Cipher Block Chaining) RijndaelCryptography.SetCipherMode(‘CBC’); // Set the padding mode for AES encryption to PKCS7 (standard padding scheme for block ciphers) RijndaelCryptography.SetPaddingMode(‘PKCS7’); // Encrypt the password using AES encryption EncryptedText := RijndaelCryptography.Encrypt(Passowrd); // Decrypt the encrypted password using … Continue reading Implementing Encryption and Decryption Functions via API in Business Central