robocorp / rpaframework

Collection of open-source libraries and tools for Robotic Process Automation (RPA), designed to be used with both Robot Framework and Python
https://www.rpaframework.org/
Apache License 2.0
1.16k stars 223 forks source link

RPA.Tables needs keyword to easily transfer it in work items #903

Open orlof opened 1 year ago

orlof commented 1 year ago

Current solution requires this kind of code:

    # STEP 1

    # create a table for testing
    ${files}=    List files in directory    ${CURDIR}
    ${table}=    Create table    ${files}

    # export table to list of dicts
    ${export}=    Export table    ${table}
    # transform to JSON string
    ${json_str}=    Evaluate    json.dumps($export)    modules=json

    # HERE WOULD BE THE WORK ITEM TRANSFER

    # STEP 2

    # transform JSON string back to list of dicts
    ${json}=    Evaluate    json.loads($json_str)    modules=json
    # reconstruct the table from list of dicts
    ${table2}=    Create Table    ${json}
    Log    ${table2.columns}

We need to design a single keyword solution.

orlof commented 1 year ago

RPA.JSON library has keywords:

Convert JSON to string
Convert string to JSON

Those should do the trick without evaluating python:

Producer
    # create a table for testing
    ${files}=    List files in directory    ${CURDIR}
    ${my_table}=    Create table    ${files}

    Create output work item
    ${my_table}=    Export table    ${my_table}
    ${my_table}=    Convert JSON to string    ${my_table}
    Set work item variable    my_table    ${my_table}
    Save work item

Consumer
    ${my_table}=    Get work item variable    my_table
    ${my_table}=    Convert string to JSON    ${my_table}
    ${my_table}=    Create table    ${my_table}

By far the best user experience would be to allow Tables directly in Get work item variable and Set work item variable -keywords. The previous example would become:

Producer
    # create a table for testing
    ${files}=    List files in directory    ${CURDIR}
    ${my_table}=    Create table    ${files}

    Create output work item
    Set work item variable    my_table    ${my_table}
    Save work item

Consumer
    ${my_table}=    Get work item variable    my_table