Thursday, March 3, 2016

PowerBuilder - Find windows where datawindow is used

If You have a listo of datawindows and would like to make a list of windows where each of these datawindows are used, this Power-Shell function might help.
By tweaking it You could search for whatewher You need, but basic concept is below.

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

$windowTitles = "windowsTitles.txt"

New-Item $windowTitles -type file -force

function search ([string]$fullName) {

    $shortName =  [io.path]::GetFileNameWithoutExtension($fullName)

    $files = gci -include *.srw,*.sru,*.srd -recurse | select-string $shortName | group path | select name

    $found = 0

  if ($files.Count -eq 0) { return 0 }

    foreach ($file in $files)

  {

   $shortName2 =  [io.path]::GetFileNameWithoutExtension($file.Name)      if ($shortName -eq $shortName2) { continue }   

   $found = $found + 1

      Write-Host "Used in: " $shortName2

      If ($file.Name.EndsWith(".srw")) {

    Write-Host "Used in: " $shortName2 " and its a WINDOW!"

    $titleString =  Get-Content $file.Name | select-string -pattern "string title = "

    if (-not $titleString) {

     Write-Host "Window has no title"

     Return 1

    }

    Write-Host "Windows title is:" $titleString

    $title = $titleString.line.replace("string title = ","")

            # write title to file

    Add-Content -Encoding UTF8 $windowTitles $title

    Return 1

   } Else {

    Return search($file.Name)

   }

  }

    Return $found

}

Use it something like this ( is same PS1 file for example ) :

$files = gci -include *.srd -recurse | Where-Object {$_.FullName -like "*\$folder\*"} | select-string '!!!!ADD YOUR REGEX HERE!!!' | group path | select name
Write-Host "Found number of datawindows:"
Write-Host $files.Count
$index = 0
foreach ($file in $files)
{
if (-Not $file.Name) {break}
$dwShortName =  [io.path]::GetFileNameWithoutExtension($file.Name)
Write-Host "Searching for: " $dwShortName
$found = search($file.Name)
}