Searching JSON Data



After you have created some applications that use Profound UI Rich Display Files, you will want to be able to search them.  For example, if you need to increase the size of the CUSTADDR field, you might want to locate all display files that have widgets bound to that field, so you can increase the size and re-test the programs.  Or perhaps you've used a particular JavaScript API, such as pui.normalizeURL() and would like to find all applications that use that API.   All of the widgets and properties that you code in Rich Display files are stored in JSON data that's embedded with HTML keywords in your DDS source code. 

Profound UI provides a command named PUIFNDSTR that you can use to search that DDS source code.  The details of this command follow:

Find String in PUI DDS Source (PUIFNDSTR)

The Find String in PUI DDS Source (PUIFNDSTR) command lets you search for character strings in the Profound UI metadata stored in DDS source code. You can use it to determine which widgets contain a given string or are bound to a particular DDS field.


Parameters

Keyword

Description

Choices

Notes

Keyword

Description

Choices

Notes

STRING

Find 'string'

Character value, *ALL

Required

PROPERTY

Property to search

Character value, *ALL

Required

SUBPROP

Sub-property to search

Character value, *NONE, *ALL

Optional

SRCFILE

Source file

Qualified object name

Optional



Qualifier 1: Source file

Name, QDDSSRC





Qualifier 2: Library

Name, *LIBL, *CURLIB



SRCMBR

Source member

Name, *ALL

Optional

BNDONLY

Bound field names only

*YES, *NO

Optional

MATCHCASE

Search is case-sensitive

*YES, *NO

Optional

OUTPUT

Output

*, *OUTFILE

Optional

OUTFILE

File to receive output

Qualified object name

Optional



Qualifier 1: File to receive output

Name





Qualifier 2: Library

Name, *LIBL, *CURLIB



OUTMBR

Output member options:

Element list

Optional



Element 1: Member to receive output

Name, *FIRST





Element 2: Replace or add records

*REPLACE, *ADD



Find 'string' (STRING)

Specifies the string you want to search for.

This is a required parameter.

*ALL

Return all properties, no matter what the values are set to.

character-value

Specify the string to search for.

When the bound only (BNDONLY) parameter specifies *NO, any widget property that contains this string will be returned.

When the bound only (BNDONLY) parameter specifies *YES, only bound variables that exactly match this string will be returned.

Property to search (PROPERTY) 

Specifies widget property name that will be searched.

This is a required parameter.

*ALL

Search all widget properties.

character-value

Only widget properties that contain the specified string will be searched. For example, if you specify 'border' for this string, all widget property names that contain the word 'border' will be searched.

Sub-property to search (SUBPROP) 1

Specifies widget sub-property name that will be searched. Some widget properties (such as "value") contain sub-properties such as "zeroBalance" (as shown on the Binding dialog) or "translations" (as shown on the "Translation Settings" dialog). The sub-property name as stored in the JSON metadata may be slightly different than what is shown on the dialogs.  For example, "Show Zero Balance" on the Binding dialog is stored in the metadata as "zeroBalance". To view the actual sub-property names, you can perform the following steps in the Profound UI Visual Designer:

  • Open the Rich Display File, which will be initially displayed in Design View. Click "Edit" on the ribbon to select the Edit tab.

  • Under "View", click "Source" to switch to Source View. The JSON metadata for all widgets are displayed.

  • Right click on the source and click "Format Document" to view the metadata in a more readable format.

  • Press Ctrl-F to search for a particular widget and view its properties and sub-properties.

Example: Command "PUIFNDSTR STRING(12345) PROPERTY(*ALL) SUBPROP(translations)" will find all instances where the sub-property "translations" contains string "12345", regardless of what property the sub-property "translations" belongs to. Command "PUIFNDSTR STRING(12345) PROPERTY("column headings") SUBPROP(translations)" will find all instances where the sub-property "translations" of property "column headings" contains string "12345".

*NONE                                                                   

No sub-property will be searched.   

*ALL

Search all widget sub-properties of the property specified in the PROPERTY parameter.                                                                          

character-value

Only widget sub-properties that contain the specified string will be searched. For example, if you specify 'translations' for this string, all widget sub-property names that contain the word 'translations' will be searched.



1(available in Profound UI Version 6, Fix Pack 7.0)

Source file (SRCFILE)

Specifies the file that contains the members that you want to search. This file should be a source physical file that contains DDS source code.

Qualifier 1: Source file

QDDSSRC

The source file named QDDSSRC contains the DDS source code that is to be searched.

name

Specify the name of a source physical file that contains DDS code to be searched.

Qualifier 2: Library

*LIBL

The library list will be searched to find the file. Only the first file found will be searched.

*CURLIB

The current library of the job will be used to locate the file to be searched.

name

Specify the name of a library that contains the source file to be searched.

Source member (SRCMBR)

Specifies the name of the member to be searched.

*ALL

Search all members in the source physical file.

name

Specify the name of a member in the source physical file to search.

Bound field names only (BNDONLY)

Specifies whether to limit the search to bound field names. Bound field names are DDS fields that have been connected to widgets in your display file.

*YES

Only search bound field names. When *YES is specified, the STRING parameter will be interpreted as a field name to search for. The search will output all widgets that have the given field name bound to them. There will be one output record for each place that the bound field is used.When BNDONLY(*YES) is specified, the STRING parameter must match the field name exactly.

*NO

Search for strings in both bound and un-bound properties. Any property that contains the STRING parameter (either an exact match, or when STRING is a substring of the widget property) will be returned.

Search is case-sensitive (MATCHCASE)

Specifies whether the search is case-sensitive.

*YES

The search will only match if the upper/lower case letters in the source code match the upper/lower case letters in the STRING and PROPERTY parameters exactly.

*NO

The search will match any string found, regardless of upper/lower case letters. This is the default.

Output (OUTPUT)

Specifies where the output from the command is sent.

*

The output from the command is sent to the user's interactive terminal.

*OUTFILE

The output from the command is directed to the database file specified for the File to receive output (OUTFILE) parameter.

File to receive output (OUTFILE)

Specifies the database file that search output will be directed to if *OUTFILE is specified in the OUTPUT parameter. The format of this file must patch that of the FNDSTRP physical file provided with the Profound UI product.

Qualifier 1: File to receive output

name

Specify the name of the database file to receive output.

Qualifier 2: Library

*LIBL

The library list is searched to locate the database file to receive the output. You may only specify *LIBL for files that already exist on disk. When creating a new file, please specify a library name or *CURLIB.

*CURLIB

The job's current library is used to locate or create the database file to receive the output.

name

Specify the name of a database file to receive the output. If this file does not exist, the PUIFNDSTR utility will create it.

Output member options: (OUTMBR)

Specifies the member in which search output will be placed.

Element 1: Member to receive output

*FIRST

Use the first member in the physical file. If no members exist the PUIFNDSTR utility will a new one with the same name as the output file name.

name

Specify the name of the member that should receive the search output. This member will be created if it does not exist.

Element 2: Replace or add records

*REPLACE

If the member exists, replace it's contents with the output of the current search.

*ADD

If the member exists, new records returned by the current search will be added to the end of the member.


Examples for PUIFNDSTR

Example 1: Simple Command Example
PUIFNDSTR STRING('js:') PROPERTY(*ALL) SRCFILE(SOURCE/QDDSSRC)

This command will search all properties of all widgets for 'js:'. The output will appear on the interactive display.

Example 2: Searching for a bound field
PUIFNDSTR STRING(CUSTNO) PROPERTY(*ALL) BNDONLY(*YES)

This command will search all properties of all widgets and return all properties that have been bound to the CUSTNO field.


Error messages for PUIFNDSTR

*ESCAPE Messages

*ESCAPE Messages

CPF9801

Object &2 in library &3 not found.

CPF9802

Not authorized to object &2 in &3.

CPF9810

Library &1 not found.

CPF9812

File &1 in library &2 not found.

CPF9820

Not authorized to use library &1.

PUI0041

&1 errors detected during search.