Private/Select-Solution.ps1

function Invoke-ExportData {
    Param(
        [string] [Parameter(Mandatory = $true)] $StartPath,
        [string] [Parameter(Mandatory = $true)] $SelectedSolution
    )

    try {
        $ProgressPreference = 'SilentlyContinue'

        $message = @"
 
         ____ _ _____ _
        | _ \ __ _| |_ __ _ | ____|_ ___ __ ___ _ __| |_
        | | | |/ _' | __/ _' | | _| \ \/ / '_ \ / _ \| '__| __|
        | |_| | (_| | || (_| | | |___ > <| |_) | (_) | | | |_
        |____/ \__,_|\__\__,_| |_____/_/\_\ .__/ \___/|_| \__|
                                          |_|
        
v2
"@

        Write-Host $message
        Write-Host ""    

        Write-Host "Running for path : " $StartPath
        Get-ConfigJSON($StartPath)

        $message = "Installing Data Management Tools..."
        Write-Host $message

        $message = "Establishing connection to $global:devops_ServerUrl"
        Write-Host $message

        Install-PAC
            
        #Create PAC Auth
        if ($global:devops_DataverseCredType -eq "servicePrincipal") {
          & $env:APPDATA\Capgemini.PowerPlatform.DevOps\PACTools\tools\pac.exe auth delete --name ppdo
          # Added escaped quotes required to get secrets working that started with - (https://github.com/dylanhaskins/Capgemini.PowerPlatform.DevOps/issues/150)
          & $env:APPDATA\Capgemini.PowerPlatform.DevOps\PACTools\tools\pac.exe auth create --applicationId $global:devops_ClientID --clientSecret `"$global:clientSecret`" --environment $global:devops_ServerUrl  --tenant $global:devops_TenantID  --name ppdo
          #--name $global:devops_SolutionName
        }
        if ($global:devops_DataverseCredType -eq "user") {
          & $env:APPDATA\Capgemini.PowerPlatform.DevOps\PACTools\tools\pac.exe auth delete --name ppdo
          & $env:APPDATA\Capgemini.PowerPlatform.DevOps\PACTools\tools\pac.exe auth create --username $global:devops_DataverseEmail --password $global:Password --environment $global:devops_ServerUrl --name ppdo
          #--name $global:devops_SolutionName
        }

        $conn = Get-DataverseConnection($global:devops_ServerUrl)

        if ($conn.IsReady) {
            try {

                # PRE ACTION
                    if (Test-Path -Path $global:devops_projectLocation\$SolutionName\Scripts\ExportPreAction.ps1) {
                        Write-Host "Execute Pre Action from $global:devops_projectLocation\$SolutionName\Scripts"
                        . $global:devops_projectLocation\$SolutionName\Scripts\ExportPreAction.ps1 -Conn $conn
                    }
                    else {
                        Write-Host "Data Export PreAction not enabled, create a file called ExportPreAction.ps1 in the Scripts folder if you wish to use one" -ForegroundColor Yellow
                    }
                Write-Host "Exporting Data to $global:devops_projectLocation\$SolutionName\ReferenceData\data.zip"
                $ProgressPreference = 'SilentlyContinue'
                & $env:APPDATA\Capgemini.PowerPlatform.DevOps\PACTools\tools\pac.exe data export --schemaFile "$global:devops_projectLocation\$SolutionName\ReferenceData\schema.xml" --dataFile "$global:devops_projectLocation\$SolutionName\ReferenceData\data.zip" --overwrite --verbose
                Expand-Archive -Path $global:devops_projectLocation\$SolutionName\ReferenceData\data.zip -DestinationPath $global:devops_projectLocation\$SolutionName\ReferenceData\Extracted\ -Force
                Remove-Item -Path $global:devops_projectLocation\$SolutionName\ReferenceData\data.zip -Force -ErrorAction SilentlyContinue
                #Export-CrmDataFile -CrmConnection $conn -SchemaFile "$global:devops_projectLocation\$SolutionName\ReferenceData\schema.xml" -DataFile "$global:devops_projectLocation\$SolutionName\ReferenceData\data.zip" -EmitLogToConsole

                
                # POST ACTION
                if (Test-Path -Path $global:devops_projectLocation\$SolutionName\Scripts\ExportPostAction.ps1) {
                    Write-Host "Execute Pre Action from $global:devops_projectLocation\$SolutionName\Scripts"
                    . $global:devops_projectLocation\$SolutionName\Scripts\ExportPostAction.ps1 -Conn $conn
                }
                else {
                    Write-Host "Data Export PostAction not enabled, create a file called ExportPostAction.ps1 in the Scripts folder if you wish to use one" -ForegroundColor Yellow
                }
            }
            catch {
                Write-Host $_
                pause
            }
            finally {
                Write-Host "Data Export Complete!!"
                pause
                #Start-Sleep -Seconds 3
            }
            
        }

    }
    catch {
        Write-Host $_
        Pause
    }
    finally {
    }

}

function Get-ExportDataValid {
    if (!(Test-Path "$global:devops_projectLocation\$SolutionName\ReferenceData\schema.xml")) {
        if ((Test-Path "$global:devops_projectLocation\$SolutionName\ReferenceData\data_schema.xml")) {
            Write-Host "Converting Legacy Data Export to Config Migration"
            Move-Item -Path "$global:devops_projectLocation\$SolutionName\ReferenceData\data_schema.xml" -Destination "$global:devops_projectLocation\$SolutionName\ReferenceData\schema.xml"            
            Invoke-ExportData -StartPath $global:devops_projectLocation -SelectedSolution $selectedSolution
        }
        Write-Host ""
        Write-Host "Schema.xml file not found, if you want to include Configuration Data, please run 'Configuration Data Create / Edit' first" -ForegroundColor Yellow
    }
    else {
        Invoke-ExportData -StartPath $global:devops_projectLocation -SelectedSolution $selectedSolution
    }
}
function Show-SolutionMenu {
    param (
        [string]$SolutionName = ''
    )
    Get-SolutionMenu -SolutionName $SolutionName
    $solutionSelection = Read-Host "Selection"
    try {
        switch ($solutionSelection) {
            'E' {
                try {              
                    Invoke-ExportSolution -StartPath $global:devops_projectLocation -SelectedSolution $selectedSolution
                }
                catch {
                    Write-Error $_
                    pause
                }  
            } 'C' {
                try {
                    Install-ConfigMigration
                    Write-Host "Launching Configuration Migration Utility..."
                    Write-Host "Please make sure to save the Schema file in $global:devops_projectLocation\$SolutionName\ReferenceData\schema.xml" -ForegroundColor Yellow
                    Write-Host "This path has been placed in your Clipboard to Paste in the Save File Dialog"
                    Set-Clipboard -Value "$global:devops_projectLocation\$SolutionName\ReferenceData\schema.xml"
                    . $env:APPDATA\Capgemini.PowerPlatform.DevOps\ConfigMigration\DataMigrationUtility.exe
                    pause
                }
                catch {
                    Write-Error $_ 
                    pause                                                
                }                    
                
            } 'D' {
                try {
                    Get-ExportDataValid
                }
                catch {
                    Write-Error $_ 
                    pause  
                }
                
            } 'G' {
                Get-EarlyTypes -StartPath $global:devops_projectLocation -SelectedSolution $selectedSolution
            } 'P' {
                try {
                    $CurrentLocation = Get-Location
                    Set-Location $global:devops_projectLocation\$selectedSolution\spkl\
                    . .\deploy-plugins.bat  
                    pause
 
                    Set-Location $CurrentLocation
                }
                catch {
                    Write-Host $_
                    pause
                }
                
            } 'W' {
                try {
                    $CurrentLocation = Get-Location
                    Set-Location $global:devops_projectLocation\$selectedSolution\spkl\
                    . .\deploy-webresources.bat    
                    Set-Location $CurrentLocation
                    pause
                }
                catch {
                    Write-Host $_
                    pause
                }
             }'Q' {
            }
        }            
    }
    catch {
        Write-Host $_
        pause
    }
}

function Select-Solution {
    if ($global:devops_projectFile.DataverseSolutions.Count -gt 0) {
        $options = $global:devops_projectFile.DataverseSolutions | ForEach-Object { $_.SolutionName }

        do {
            $sel = Invoke-Menu -MenuTitle "---- Please Select the Dataverse Solution to Manage ------" -MenuOptions $options
            $selectedSolution = $global:devops_projectFile.DataverseSolutions[$sel].SolutionName
        } until ($selectedSolution -ne "")

        Set-Location -Path $global:devops_projectLocation

        if ($global:devops_projectFile.ADOConfigured -eq "True") {
            try {
                git fetch --prune origin
                git pull origin
            }
            catch {
                pause
            }            
        }
        Show-SolutionMenu -SolutionName $selectedSolution
    }
}