Welcome to the new Parasoft forums! We hope you will enjoy the site and try out some of the new features, like sharing an idea you may have for one of our products or following a category.

Combine the value from two response fields in a third field

ramp
ramp Posts: 4

Hi,

I am writing a SOAP Message Responder. Some of the fields of the response derives its value from a DataSource column while some gets their value from variables populated by an XML Data Bank.

Now my question is how do I combine these values to populate another field in the response. For example, I need a field to be the product of a field that derives its value from a datasource and another field that derives its value from a variable.

Regards,
Ram.

Comments

  • OmarR
    OmarR Posts: 235 admin
    edited December 2016

    Our first Post! Welcome ramp!
    To clarify, are you asking how to parameterize an xml databank value AND a datasource (table, repo, file, etc) in your response? If so, you have the ability to select between the two when in Form Input/ Form XML mode. You may also parameterize the value by using the ${} syntax in Literal mode.

    If you wish to concatenate values from an xml databank and a datasource for a field in your response, you can use an xml databank or an xml transformer to ALTER the specific field and APPEND the value to the already parameterized field.

    Alternatively, you can achieve this by using the ${} syntax. For example: ${Table_Data}${Databank_value}

  • ramp
    ramp Posts: 4

    Thank you for your response. I want to implement a product (multiplication rather than concatenation). So I should be able to ${Table_Data} * ${Databank_value} in a literal mode? I don't have access to my dev environment right now. I will try it out and let you know how it worked.

  • [Deleted User]
    [Deleted User] Posts: 0 admin
    edited December 2016

    Hi Ram,

    To accomplish the multiplication you will need to script the response for the element. 1. You can select the "scripted" option from the element that you wish to recieve the combined result

    1. Enter a script like this. (I used jython)
      from com.parasoft.api import * def combineValues (context): fromDataBank = float(context.getValue("Generated Data Source", "1. id")) fromDataSource = float(context.getValue("myData", "value2")) Application.showMessage ("Value from DataBank =" + str(fromDataBank)) Application.showMessage ("Value from DataSource =" + str(fromDataSource)) combined = (fromDataBank * fromDataSource) Application.showMessage ("Multiplied result =" + str(combined)) return str(combined)
  • OmarR
    OmarR Posts: 235 admin

    Thank you for clarifying! Multiplication! If you wish to do some type of calculation on the fly, you will most likely require a script as suggested above (thanks for the lovely script Chris ;) )

    To add to Chris's solution:
    The "context" parameter contains most of the metadata from test runs like
    environment variables, Suite variables, databank variables, etc. A user can access the Databank values using a special Data Source name: "Generated Data Source". For example:
    value = context.getValue("Generated Data Source", "columnName")
    The "columnName" here would be the column name in the XML Data Bank.

    Similarly, to access values from a table or an excel Datasource, a user would simply use the name given to the datasource. For example:
    value = context.getValue("myTable-ds", "columnName")
    The "columnName" here would be the column name in the Table-datasource.

  • ramp
    ramp Posts: 4
    edited December 2016

    Hi Chris & Omar

     Thanks for your help so far. Would you be able to share a javascript version of the jython script  ? Or its not possible using js? I can probably do java though. Sorry to ask - there is very little documentation (apart from api listing) on scripting examples. Else I would have figured it without bothering you.
    

    (Btw whatever I do, the above lines are appearing in a text area, dont know how to turn it off - sorry about that).

    Also I had 2 issues while saving the xml data bank value. I was configuring the XML Data Bank tool manually using the 'Add Output' on my responder to extract a value from the request payload to use in the response payload -

    1. It was never saving it to the internal data source as promised in the help doc. When I changed it to store the value in variable, it did work.

    From doc :

    Custom column name: Tells Virtualize the name of the data source column in which to store the value. Values are stored in an internal data source unless you specify otherwise (e.g., if you select Writable data source column or Variable). This is the name you will use to reference the value in other places.

    1. I am not able to open the XML data bank tool again after closing it. It is not visible within the project or the responder suite. Am I missing something here and being plain stupid :) ?

    Thanks again for your help.

  • OmarR
    OmarR Posts: 235 admin

    Hey ramp,

    Since we are extracting data from the request and reusing it in our Responder, we will need to enable the "Allow incoming request tools to modify the message before applying data source or multiple response correlations" option.

    Would you kindly enable the option below and re-run your scenario?

    This option is also important when the XML must be altered to make it suitable for correlation—or if the message is not XML at all and requires some transformation before the virtual asset sends the client a suitable response for the request.

    Also, regarding the disappearing databank, I am not sure why this occurred. It could have been a hiccup from eclipse not saving properly? I have yet to experience this myself. As a precaution, lets save our work after each configuration made and ensure not to have too many tabs are open at a single time.

  • ramp
    ramp Posts: 4

    Thanks Omar. That worked,

    Also the disappearing data bank was my stupidity as I had suspected. I could see when the responder node was expanded. Slightly unintuitive for a newbie, but my fault nevertheless.

    Thanks for your help.

  • nsfmost2005
    nsfmost2005 Posts: 8

    Hi,

    I have some 25 coulmn names in my XML data bank and I need to use all the column names in a Jython script. I do not want to write context.getValue("Genearted Data Source","Column_1") ,..... upto Column_25. How can I iterate through the names in the XML data bank??

    Thanks

  • jakubiak
    jakubiak Posts: 810 admin

    Unfortunately there is no API to dynamically get the columns from an XML Data Bank.

  • benken_parasoft
    benken_parasoft Posts: 1,297 ✭✭✭

    Unfortunately there is no API to dynamically get the columns from an XML Data Bank.

    Actually, a possible solution was posted here:
    Iteration of Columns in Data Bank

  • jakubiak
    jakubiak Posts: 810 admin

    Oh awesome - thanks @benken_parasoft!