Share this page

# Tuxedo correlation

Tuxedo Vuser scripts require manual correlation. The following tasks describe how to correlate Tuxedo scripts.

Note: Design Studio is not supported for Tuxedo scripts.

In this topic:

## About correlating Tuxedo scripts

To correlate statements, you modify your recorded script within the VuGen editor using one of the following LRT functions:

- lrt_save[32]_fld_val. Saves the current value of an FML or FML32 buffer (a string in the form "name=<NAME>" or "id=<ID>") to a parameter.

- lrt_save_parm. Saves a portion of a character array (such as a STRING or CARRAY buffer) to a parameter.

- lrt_save_searched_string. Searches for an occurrence of a string in a buffer and saves a portion of the buffer, relative to the string occurrence, to a parameter.

## Determine values that need correlation

When working with CARRAY buffers, VuGen generates log files during recording (with the .rec extension) and during replay (with the .out extension) which you can compare using the comparison utility. You can look at the differences between the recording and replay logs to determine which portions of CARRAY buffers require correlation.

To compare the log files:

1. Select View > Output to display the execution log and recording log for your script.

2. Examine the Replay Log tab.

The error message should be followed by a statement beginning with the phrase: Use <comparison tool> to compare.

3. Double-click on the statement in the execution log to start the comparison utility.

For more information, see Search for values that need correlation.

Back to top

## Correlate for FML/FML32 buffers

Use lrt_save_fld_val or lrt_save32_fld_val to save the contents of the FML or FML32 buffer.

To correlate statements using lrt_save_fld_val:

1. Insert the lrt_save_fld_val statement in your script where you want to save the contents of the current FML (or FML32) buffer.

Example:

`lrt_save_fld_val (fbfr, "name", occurrence, "param_name");`

2. Locate the lrt statements with the recorded values that you want to replace with the contents of the saved buffer. Replace all instances of the recorded values with the parameter name in curly brackets.

Example:

In the following example, a bank account was opened and the account number was stored to a parameter, account_id.

    /* Fill the data_0 buffer with new account information*/
    data_0 = lrt_tpalloc("FML", "", 512);
    lrt_Finitialize((FBFR*)data_0);
    lrt_Fadd_fld((FBFR*)data_0, "name=BRANCH_ID", "value=1", LRT_END_OF_PARMS);
    lrt_Fadd_fld((FBFR*)data_0, "name=ACCT_TYPE", "value=S", LRT_END_OF_PARMS);
    ...
    LRT_END_OF_PARMS);
    lrt_Fadd_fld((FBFR*)data_0, "name=LAST_NAME", "value=Doe", ...);
    lrt_Fadd_fld((FBFR*)data_0, "name=FIRST_NAME", "value=John", ...);
    lrt_Fadd_fld((FBFR*)data_0, "name=SAMOUNT", "value=234.12", ...);
    /* Open a new account and save the new account number*/
    tpresult_int = lrt_tpcall("OPEN_ACCT", data_0, 0,    &data_0, &olen_2, 0);
    lrt_abort_on_error();
    lrt_save_fld_val((FBFR*)data_0, "name=ACCOUNT_ID", 0, "account_id");
    /* Use result from first query to fill buffer for the deposit*/
    lrt_Finitialize((FBFR*)data_0);
    lrt_Fadd_fld((FBFR*)data_0, "name=ACCOUNT_ID", "value={account_id}", LRT_END_OF_PARMS);
    lrt_Fadd_fld((FBFR*)data_0, "name=SAMOUNT", "value=200.11", ...);

In the above example, the account ID was represented by a field name, ACCOUNT_ID. Some systems represent a field by an ID number rather than a field name during recording.

You can correlate by field ID as follows:

    lrt_save_fld_val((FBFR*)data_0, "id=8302", 0, "account_id");

Back to top

## Correlate based on buffer location

The following steps describe how to correlate a string in a Tuxedo script by using the lrt_save_parm function. This function creates a correlation based on the location of a string within the buffer.

To correlate based on buffer location:

1. Insert an lrt_save_parm statement in your script, at the point where you want to save the contents of the current buffer.

2. Open the replay.vdf file from the Solution Explorer, and locate the buffer data that you want to replace with the contents of the saved buffer.

3. Replace all instances of the value with the parameter name in curly brackets.

Example:

In the following example, an employee ID from a CARRAY buffer must be saved for later use. The recorded value was "G001" as shown in the output.

    lrt_tpcall:227, PprLoad, 1782
    Reply Buffer received.
    ...
    123    "G001"
    126    "..."
    134    "Claudia"

Insert lrt_save_parm using the offset, 123, immediately after the request buffer that sends "PprLoad" and 227 bytes.

    /* Request CARRAY buffer 57 */
        lrt_memcpy(data_0, buf_143, 227);
        tpresult_int = lrt_tpcall("PprLoad",
            data_0, 227, &data_1, &olen, TPSIGRSTRT);
        lrt_save_parm(data_1, 123, 9, "empid");

In the replay.vdf file, replace the recorded value, "G001", with the parameter, empid.

    char buf_143[] =    "\xf5\x0\x0\x0\x4\x3\x2\x1\x1\x0\x0\x0\xbc\x2\x0\x0\x0\x0\x0\x0"
        "X"
    "\x89\x0\x0\x0\xb\x0"
        "SPprLoadReq"
        "\xff\x0\x10\x0\x0\x4\x3\x6"
        "{empid}" // G001
        "\x7"
        "Claudia"
        "\xe"
        "LAST_NAME_SRCH"
    ...

This function can also be used to save a portion of a character array within an FML buffer. In the following example, the phone number is a character array, and the area code is the first three characters. First, the lrt_save_fld_val statement saves the phone number to a parameter, phone_num. The lrt_save_parm statement uses lr_eval_string to turn the phone number into a character array and then saves the area code into a parameter called area_code.

This function can also be used to save a portion of a character array within an FML buffer. In the following example, the phone number is a character array, and the area code is the first three characters. First, the lrt_save_fld_val statement saves the phone number to a parameter, phone_num. The lrt_save_parm statement uses lr_eval_string to turn the phone number into a character array and then saves the area code into a parameter called area_code.

Example:

    lrt_save_fld_val((FBFR*)data_0, "name=PHONE", 0, "phone_num");
    lrt_save_parm(lr_eval_string("{phone_num}"), 0, 3, "area_code");
    lr_log_message("The area code is %s\n", lr_eval_string("{area_code}"));

Back to top

## Correlate based on delimiter

The following steps describe how to correlate a string in a Tuxedo script by using the lrt_save_searched_string function. This function creates a correlation based on the location of a delimiter in the buffer (for example, correlate the string immediately after the first { ).

To correlate based on delimiter:

1. Insert an lrt_save_searched_string statement in your script where you want to save a portion of the current buffer.

   Note: Offset is the offset from the beginning of the string.

2. Open the replay.vdf file from the Solution Explorer, and locate the buffer data that you want to replace with the contents of the saved buffer.

3. Replace all instances of the value with the parameter name in curly brackets.

Example:

In the following example, a Certificate is saved to a parameter for a later use. The lrt_save_searched_string function saves 16 bytes from the specified olen buffer, to the parameter cert1. The saved string location in the buffer, is 9 bytes past the first occurrence of the string "SCertRep".

This application is useful when the buffer's header information is different depending on the recording environment.

The certificate will come 9 bytes past the first occurrence of "SCertRep", but the length of the information before this string varies.

    /* Request CARRAY buffer 1 */
    lrt_memcpy(data_0, sbuf_1, 41);
    lrt_display_buffer("sbuf_1", data_0, 41, 41);
    data_1 = lrt_tpalloc("CARRAY", "", 8192);
    tpresult_int = lrt_tpcall("GetCertificate",
        data_0,
        41,
        &data_1,
        &olen,
        TPSIGRSTRT);
    /* Reply CARRAY buffer 1 */
    lrt_display_buffer("rbuf_1", data_1, olen, 51);
    lrt_abort_on_error();
    lrt_save_searched_string(data_1, olen, 0, "SCertRep", 9, 16, "cert1");

Back to top

See also:

- Manually correlate scripts
- Tuxedo protocol

https://admhelp.microfocus.com VuGen,Professional Performance Engineering,Performance Engineering for Developers 8942
Tips to improve your search results... OpenText™ Virtual User Generator Help Center OpenText™ VuGen Help 26.1 All View Local Help Center View Online Help Center Version: