Skip to main content What is Dynamics 365? Guided tours Customer stories Try our products CRM ERP Sales Service Sales Customer Insights Customer Service Contact Center Field Service Supply Chain Management Commerce Finance Project Operations Human Resources Business Central Pricing Business application topics Training & certifications Migrate to the cloud Documentation Events Dynamics 365 Blog Product updates Onboarding and implementation Community Find a partner Software Development Companies Partner resources Microsoft Marketplace Product documentation Technical support On-premises product support Contact us Try for free Sign in
  • 2 min read

Coffee Break – Search in a Dynamics NAV object file using Windows PowerShell


This coffee break post illustrates how to search a text file for specific words or a phrase. You can do this with Windows PowerShell in any text files, but let’s use some Dynamics NAV objects exported as text. Technically speaking we are reading a text file then piping it line for line through a search cmdlet, which pipes matching lines further to a log.txt file.

Coffee Break 5 – Searching through a Dynamics NAV text file

Customer story:

The developer wants an automated way of locating all occurrences of a string (table name, field name, comment, …) in a country-specific version of Dynamics NAV, in this example the Norwegian version. And we will log the output of this search to a log file in c:\NAVApp\Log. 

Exporting objects from Dynamics NAV:

Prerequisites:

Crete a folder C:\MyNAVApp with a subfolder \Log so that the resulting full path is C:\MyNAVApp\Log.

For this purpose we use the Microsoft Dynamics NAV Application Merge Utilities. Note that these install to the equivalent of C:\Program Files (x86)\Microsoft Dynamics NAV\80\RoleTailored Client. This time we don’t need to import the Management module, only the application merge utilities:

Import-Module "${env:ProgramFiles(x86)}\Microsoft Dynamics
NAV\80\RoleTailored Client\Microsoft.Dynamics.Nav.Model.Tools.psd1"
  • Note 1: Make sure to import Microsoft.Dynamics.Nav.Model.Tools.psd1, and not NavModelTools.ps1.
  • Note 2: This will load the path for finsql.exe too, and use the finsql in the client folder.

Set a few variables. Assuming that we work in folder C:\MyNAVApp\, and we will be searching for where “G/L Account” table reference is used. And we will log the output of this search to a log file in the c:\MyNAVApp\Log folder.

$objectPath = 'C:\MyNAVApp'
$sourcepath = Join-Path $ObjectPath '\MyObjects' 

$NAVobjects = Join-Path $ObjectPath 'NAVobjects.txt'
$LogPath = Join-Path $ObjectPath '\log\whereused.txt'
#Note, a search string can also be an array of strings
$SearchString = '”G/L Account”'

Export the objects you like, either all objects:

Export-NAVApplicationObject  -DatabaseName "Demo Database NAV (8-0)"
-DatabaseServer ".\NAVDEMO" -Path $NAVObjectFile

Or filter (choose the filter you like):

$FilterString = "Version List=*NAVNO*"
#or

$FilterString = "Modified=Yes"
Export-NAVApplicationObject  -DatabaseName "Demo Database NAV (8-0)"
-DatabaseServer ".\NAVDEMO" -Path $NAVObjects -Filter $FilterString 

#Split into individual object files

split-navapplicationobjectfile -Source $NAVobjects -Destination $sourcepath -
PassThru -Force

Now load the list of files in the folder. We’re using the -File parameter with Get-ChildItem to limit the scope to files only (sub folders are not included).

$myobjects = Get-ChildItem -Path $SourcePath -Filter *txt -File

The next line shows a very simple way to read through all text files in the specified path (c:\MyNAVApp) and for each file searches for the search string (in our case “G/L Account) and for each hit pipe the source line to the log file along with the line number. For this we will use the Select-String cmdlet, that can work directly on Objects with File Info (objects returned by calling  Get-ChildItem cmdlet).

$myobjects | Select-String $SearchString | Out-File –Filepath $LogPath

Note that using the parameters and segments above implies that:

  • The script raises an error if the $ObjectPath does not exist.
  • Out-File will overwrite the existing file per pipeline
  • Out-File will append lines to the file, per pipeline object

 

Jasminka Thunes, Escalation Engineer Dynamics NAV EMEA

Lars Lohndorf-Larsen, Escalation Engineer Dynamics NAV EMEA

Bas Graaf, Senior Software Engineer Dynamics NAV

 

Get started with Dynamics 365

Drive more efficiency, reduce costs, and create a hyperconnected business that links people, data, and processes across your organization—enabling every team to quickly adapt and innovate.