XTK session write | Community
Skip to main content
shivaDT
Level 2
April 20, 2016
Solved

XTK session write

  • April 20, 2016
  • 13 replies
  • 17672 views

Hi Team ,

could you please advise ,if there is something wrong with the below script ..

I have tried to use it and its not working ...

please suggest ..

xtk.session.Write(<enrich4
xtkschema="temp:enrich4" _key="@id" id={responder.@id} > <Product2
description={secondArray[1]}/> <Product3
description={secondArray[2]}/></enrich4>);

regards

shiva

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by DimaKudryavtsev

Hi ShivaDT,

First, don't use xtk.session.Write for temporary schemas. Even if you manage it to work, it will be super slow.

If you need to modify flow data, export the file via data export comonent to the server HDD. By default the file will be stored in var/<Instance Name>/export folder. Use Javascript code to open the file, modify its lines and save it into another file. Use data load component to load the file back into the flow. Use another Javascript component to delete the file after it no longer required.

If you use CSV format, you will be able read the original file line by line, modify each line and store it back, so this solution will not consume large amount of memory.

My tests shows that this approach is about 100 times faster comparing with Write or WriteCollection functions. Adobe lacking library to parse or crease csv files, so you will have to build your own or adopt some existing one (Node.js module?)

Next, in your case, you don't have to do it at all. You can do your logic inside delivery template.

Lets asume, you targetData has element [Product/@description]

You can use following JSSP code to build up the lists

<%

     var allProducts =["FOOD","BINS & LINERS","BEVERAGES AND SWEETNERS","CATERING SUPPLIES","BATHROOM & KITCHEN PAPER","CLEANING CHEMICALS & EQUIPMENT","APPLIANCES"];

     var existingProducts = []

     for (var i in targetData.Product) {

          existingProducts.push(targetData.Product[i].description)

     }

     var newProducts = allProducts.filter(function(product) {

          for each (var existing in existingProducts) {

               if (existing == product) {

                    return false

               }

          }

          return true

     })

%>

Then just enumerate through the lists to produce required content

HI ShivaDT,

13 replies

Marcel_Szimonisz
Community Advisor
Community Advisor
June 18, 2018

Hello shivaDT, this is only to work with temp table within the workflow. you can load the group then do the change to its data in temp table and then load temp data back to the group. you can use save list activity. Or you can change data of group by the sqlExec but you need to find the group's internal name e.g grp13737291

queryDef on nms:group

Marcel

Jyoti_Yadav
Level 8
July 3, 2019

HI ShivaDT,

You can use below sql to update your temp data:

xtk.session.Write(<query xtkschema={vars.targetSchema} id={iId} _operation="update" />)

Thanks,

Jyoti

DimaKudryavtsev
DimaKudryavtsevAccepted solution
Level 3
August 6, 2019

Hi ShivaDT,

First, don't use xtk.session.Write for temporary schemas. Even if you manage it to work, it will be super slow.

If you need to modify flow data, export the file via data export comonent to the server HDD. By default the file will be stored in var/<Instance Name>/export folder. Use Javascript code to open the file, modify its lines and save it into another file. Use data load component to load the file back into the flow. Use another Javascript component to delete the file after it no longer required.

If you use CSV format, you will be able read the original file line by line, modify each line and store it back, so this solution will not consume large amount of memory.

My tests shows that this approach is about 100 times faster comparing with Write or WriteCollection functions. Adobe lacking library to parse or crease csv files, so you will have to build your own or adopt some existing one (Node.js module?)

Next, in your case, you don't have to do it at all. You can do your logic inside delivery template.

Lets asume, you targetData has element [Product/@description]

You can use following JSSP code to build up the lists

<%

     var allProducts =["FOOD","BINS & LINERS","BEVERAGES AND SWEETNERS","CATERING SUPPLIES","BATHROOM & KITCHEN PAPER","CLEANING CHEMICALS & EQUIPMENT","APPLIANCES"];

     var existingProducts = []

     for (var i in targetData.Product) {

          existingProducts.push(targetData.Product[i].description)

     }

     var newProducts = allProducts.filter(function(product) {

          for each (var existing in existingProducts) {

               if (existing == product) {

                    return false

               }

          }

          return true

     })

%>

Then just enumerate through the lists to produce required content

HI ShivaDT,