Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/TrudAX/XppTools
Dynamics 365 for Finance and Operations X++ development tools and utilities
https://github.com/TrudAX/XppTools
Last synced: 14 days ago
JSON representation
Dynamics 365 for Finance and Operations X++ development tools and utilities
- Host: GitHub
- URL: https://github.com/TrudAX/XppTools
- Owner: TrudAX
- License: mit
- Created: 2019-01-29T02:20:44.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2024-09-16T16:03:36.000Z (2 months ago)
- Last Synced: 2024-09-17T18:14:38.375Z (2 months ago)
- Language: PowerShell
- Homepage:
- Size: 2.33 MB
- Stars: 92
- Watchers: 19
- Forks: 38
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- awesome-msdyn365fo - XppTools - Useful X++ utilities and code samples. (X++ tools)
README
# XppTools
Useful X++ code samples
This repository contains 3 D365FO models:
- [XppTools](#xpptools)
- [DEVTools model](#devtools-model)
- [-Fields list](#-fields-list)
- [-Display system field name in the query filter](#-display-system-field-name-in-the-query-filter)
- [-Display table relation fields](#-display-table-relation-fields)
- [-Editable table browser](#-editable-table-browser)
- [-List of Values to Range](#-list-of-values-to-range)
- [-Execute direct SQL in the D365FO database](#-execute-direct-sql-in-the-d365fo-database)
- [-SQL reports](#-sql-reports)
- [-D365FO Infolog call stack](#-d365fo-infolog-call-stack)
- [-D365FO DFM Tools](#-d365fo-dfm-tools)
- [DEVCommon model](#devcommon-model)
- [-DEV class](#-dev-class)
- [-DEVDimensionHelper class](#-devdimensionhelper-class)
- [-Read Excel and CSV files](#-read-excel-and-csv-files)
- [DEVTutorial model](#devtutorial-model)
- [-Blocking in D365FO](#-blocking-in-d365fo)
- [-Create ledger journals using X++](#-create-ledger-journals-using-x)
- [-Create ledger journal from Excel file](#-create-ledger-journal-from-excel-file)
- [-Parallel batch processing in X++](#-parallel-batch-processing-in-x)
- [DEVTutorialReports submodel](#devtutorialreports-submodel)
- [-Sales Invoice report](#-sales-invoice-report)
- [DEVExternalIntegration submodel](#devexternalintegration-submodel)
- [-File-based integration in Dynamics 365 FinOps using X++](#-file-based-integration-in-dynamics-365-finops-using-x)
- [-Multicompany DMF integration in Dynamics 365 FinOps using X++](#-multicompany-dmf-integration-in-dynamics-365-finops-using-x)
- [-XppInteg - Azure Service Bus integration solution for Dynamics 365 FinOps](#-xppinteg---azure-service-bus-integration-solution-for-dynamics-365-finops)
- [-XppInteg - Import purchase orders from XML files into D365FO](#-xppinteg---import-purchase-orders-from-xml-files-into-d365fo)
- [-Implement Periodic Data Export from D365FO to SFTP](#-implement-periodic-data-export-from-d365fo-to-sftp)
- [-D365FO Integration: Event-Based Exports to External Web Services](#-d365fo-integration-event-based-exports-to-external-web-services)
- [Installation](#installation)
- [Contribution](#contribution)The DEV prefix is used for all objects.
## DEVTools model
It contains user X++ tools, with the additional application functionality. Each tool is located in the separate sub-model.
### -Fields list
Fields list form is an extended version of the standard Show all fields form with the additional features such as displaying all fields with the extended information, comparing and editing
Full description: [Fields list form](https://denistrunin.com/xpptools-fieldslist/). Sub-model name: DEVRecordInfo
![Fields list](assets/fieldslistEx.png)
### -Display system field name in the query filter
This utility adds system field name in the standard query filter lookup and in the "Personalize-Add columns" dialog. So you can search the field by Label(as standard) or by AOT name
Full description: [Filter by AOT name](https://denistrunin.com/xpptools-queryfieldsAOTname/). Sub-model name: DEVQueryFieldsAOTName
![DEV Query field name](assets/DEVQueryFieldsAOTName.png)
![DEV Query field name personalization](assets/DEVQueryFieldsAOTNamePers.png)### -Display table relation fields
This utility adds additional relation information into **Add table join** function of the standard Advanced query form(Advanced filter or sort - Joins - Add table join)
Code is based on **sukhanchik** post on [axForum](https://translate.google.com/translate?hl=en&sl=ru&tl=en&u=http%3A%2F%2Faxforum.info%2Fforums%2Fshowthread.php%3Fp%3D417433%23post417433&sandbox=1)
Sub-model name: DEVSysQueryFormAddRelInfo
![DEV SysQuery relation](assets/DEVSysQueryFormAddRelInfo.png)
### -Editable table browser
Extension for the standard D365FO table browser that allows root navigation and editing for non-development environments.
Test link https://usnconeboxax1aos.cloud.onebox.dynamics.com/?cmp=USMF&mi=DEVSysTableBrowser&tablename=custgroup. A user should be in the group "DEV Editable table browser"
Full description: [Editable table browser](https://denistrunin.com/xpptools-devtablebrowser/). Sub-model name: DEVSysTableBrowser
### -List of Values to Range
This functionality is intended to help users deal with list of values in query range. With help of this tool you can:
- Copy list of values from, for example, excel and paste it in a range;
- Easily manage values of existed rangeFull description: [List of Values to Range](https://denistrunin.com/xpptools-listvaluestorange/)
Sub-model name: DEVListOfValuesToRange![DEV list values to range](assets/DEVListOfValuesToRange.png)
**[⬆ back to top](#XppTools)**
### -Execute direct SQL in the D365FO database
'Execute direct SQL' is a simple form that allows one to write and execute direct SQL from the browser on the D365FO database.
Full description: [Execute direct SQL in D365FO database](https://denistrunin.com/xpptools-sqlexecute/)
Sub-model name: DEVSQLExecute![DEV SQL Execute](assets/DEVSQLExecute.png)
### -SQL reports
'SQL reports' functionality is a set of forms that allow to define and execute direct SQL reports in the D365FO database. There is a "SQL definition" table that defines the SQL text, a "SQL format" table that defines the output format(e.g. CSV, Excel, etc..) and an SQL Report table where the user can run the report and output the result to the selected format.
Sub-model name: DEVSQLReports
### -D365FO Infolog call stack
Extension for the standard D365FO system that allows saving stack trace data for infolog messages.
Full description: [D365FO Infolog call stack](https://denistrunin.com/xpptools-devinfocallstack/)
Sub-model name: DEVCallStackInfolog![DEV Call Stack](assets/DevCallStackInfoMain.jpg)
### -D365FO DFM Tools
Refresh Data Entities Faster in D365FO.
Full description: [How to Refresh Data Entities Faster in D365FO.](https://www.linkedin.com/pulse/how-refresh-data-entities-faster-d365fo-denis-trunin)
Sub-model name: DEVDMFTools![DEV DMF Tools](assets/DEVDMFTools.png)
**[⬆ back to top](#XppTools)**
## DEVCommon model
Elements that can be shared between different projects
### -[DEV](https://github.com/TrudAX/XppTools/blob/master/DEVCommon/DEVCommon/AxClass/DEV.xml) class
Collection of [global methods](https://denistrunin.com/xpptools-devglobal/)
### -DEVDimensionHelper class
[DEVDimensionHelper](https://github.com/TrudAX/XppTools/blob/master/DEVCommon/DEVCommon/AxClass/DEVDimensionHelper.xml) class contains various methods to work with the financial dimensions.
Description: Working with the [Financial dimensions](https://denistrunin.com/xpptools-devfindim/)
### -Read Excel and CSV files
Classes: [**DEVFileReaderBase**](https://github.com/TrudAX/XppTools/blob/master/DEVCommon/DEVCommon/AxClass/DEVFileReaderBase.xml), [**DEVFileReaderCSV**](https://github.com/TrudAX/XppTools/blob/master/DEVCommon/DEVCommon/AxClass/DEVFileReaderCSV.xml) and [**DEVFileReaderExcel**](https://github.com/TrudAX/XppTools/blob/master/DEVCommon/DEVCommon/AxClass/DEVFileReaderExcel.xml) - read from CSV and XLSX files
Description: [How to read Excel and CSV files in D365FO using X++](https://denistrunin.com/xpptools-readexcelfile/)
**[⬆ back to top](#XppTools)**
## DEVTutorial model
Various X++ examples, that can be used to test something or used as a template. Elements can reference to DEVCommon model objects
### -Blocking in D365FO
Form **DEVBlockingTest**, table **DEVBlockingTestTable**(to test SQL blocking issues)
[Blocking in D365FO](https://denistrunin.com/understanding-sql-blocking/)
### -Create ledger journals using X++
Class **[DEVTutorialCreateLedgerJournal](https://github.com/TrudAX/XppTools/blob/master/DEVTutorial/DEVTutorial/AxClass/DEVTutorialCreateLedgerJournal.xml)** that demonstrates different methods for a ledger journal creation
[Create ledger journals in D365FO using X++](https://denistrunin.com/xpptools-createledgerjournal/)
### -Create ledger journal from Excel file
Class [**DEVReadFromFileExampleCreateJournal**](https://github.com/TrudAX/XppTools/blob/master/DEVTutorial/DEVTutorial/AxClass/DEVReadFromFileExampleCreateJournal.xml) - sample code to create a ledger journal from Excel file
### -Parallel batch processing in X++
Classes [DEVTutorialBatchSingleThread](https://github.com/TrudAX/XppTools/blob/master/DEVTutorial/DEVTutorial/AxClass/DEVTutorialBatchSingleThread.xml), [DEVTutorialBatchMultipleThreadBase](https://github.com/TrudAX/XppTools/blob/master/DEVTutorial/DEVTutorial/AxClass/DEVTutorialBatchMultipleThreadBase.xml), [DEVTutorialBatchMultipleThread](https://github.com/TrudAX/XppTools/blob/master/DEVTutorial/DEVTutorial/AxClass/DEVTutorialBatchMultipleThread.xml) that demonstrates how you can convert your existing batch job to multi-threaded.
[A simple way to implement a parallel batch processing in X++](https://denistrunin.com/xpptutorial-batchmultithread/)
## DEVTutorialReports submodel
Contains report development examples
### -Sales Invoice report
A sample code to Create a new design for Sales Invoice report in D365FO (https://denistrunin.com/xpptools-reportsalesinvoice/)
## DEVExternalIntegration submodel
Contains "External integration" framework. It includes [core module](https://github.com/TrudAX/XppTools/tree/master/DEVTutorial/DEVExternalIntegration) and [samples](https://github.com/TrudAX/XppTools/tree/master/DEVTutorial/DEVExternalIntegrationSamples). The External Integration framework provides a standardized approach to developing X++ based integrations. It emphasizes ease of support and expedites the development process.
### -File-based integration in Dynamics 365 FinOps using X++
A sample code for implementing file-based integration in Dynamics 365 FinOps using X++. Create Ledger journals based on periodic import of Excel/CSV files from Azure storage (https://denistrunin.com/xpptools-fileintegledger/). Test files for Demo database [here](https://github.com/TrudAX/XppTools/blob/master/assets/TestPeriodicLedgerJournalImport.zip)
### -Multicompany DMF integration in Dynamics 365 FinOps using X++
A sample code to implement recurring file-based integration in D365FO using X++ and DMF (https://denistrunin.com/xpptools-fileintegdmf/).
### -XppInteg - Azure Service Bus integration solution for Dynamics 365 FinOps
A sample code to implement Azure Service Bus integration in D365FO using X++ (https://denistrunin.com/xpptools-integservbussalesjson/).
### -XppInteg - Import purchase orders from XML files into D365FO
A sample approach how to implement XML based integration by importing purchase orders from Azure File Share in D365FO using X++ (https://denistrunin.com/xpptools-integfilesharexmlpurch/).
### -Implement Periodic Data Export from D365FO to SFTP
How to implement various scenarios for periodic data export from D365FO to a file and uploading it to SFTP server (https://denistrunin.com/integration-outboundsftp/).
### -D365FO Integration: Event-Based Exports to External Web Services
How to implement robust, efficient integrations between Dynamics 365 Finance and Operations and external Web Services. (https://denistrunin.com/integration-outboundweb/).
**[⬆ back to top](#XppTools)**
## Installation
Download the Source code from this GitHub repo into the Temp directory on the DEV VM.
For **DEVTools,** I recommend creating a separate model:
1. Copy **DEVTools** folder to your package folder (C:\AOSService\PackagesLocalDirectory )
2. Start Visual Studio and Run compile for the **DEVTools** folder (Dynamics 365 –Build models.. – Select DEVTools)
3. Run database sync - **Invoke-D365DbSyncModule -Module "DEVTools"**![Copy to local folder](assets/CopyFolderToLocal.png)
For **External integration,** I recommend creating submodels in your main project model:
1. In VS, go to Dynamics 365 - Model Management - Create model.
2. Create 2 models **DEVCommon** and **DEVExternalIntegration,** for your main project package.![Submodel create](SubmodelCreate.png)
3. Copy all content from the downloaded models. The project structure should be like this:
![Folder Structure For Integration](FolderStructureForIntegration.png)
If you want to contribute - change the objects using Visual Studio in the **DEVTools** model, copy the changed elements(XML files) back into the Temp folder and create a GitHub pull request from this Temp folder. [Winmerge](https://winmerge.org/?lang=en) is a tool to compare folders.
If you want to rename element prefix you can use this tool that can change multiple file names - **Bulk Rename Utility**. (From DEV to YourPrefix). Then run **Replace in files** in Notepad++ .
## Contribution
Feel free to create issues and PRs 😃