Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

SOLVED

Nee help to read multiple files from nlserver module

Avatar

Level 3

Hi All

 

Can anyone please help me to understand, how to read multiple files from the SFTP location. the below command picks one file per run.

 

package -instance: [instance_name] -export:sftp/adobe/export/test.xml -spec:cus:PKGXXX -verbose

 

Note: The above script is used in nlserver module.

Thank you!

1 Accepted Solution

Avatar

Correct answer by
Level 4

Hi @ukender ,

If the purpose is to export packages, then I think you may be able to use the JS code. I had defined my packages in package definition. So the following code would export packages in package definition one by one. We can filter out any packages based on the namespace or package name.

var query = xtk.queryDef.create(

<queryDef schema="xtk:specFile" operation="select">
  <select>
  <node expr="@name"/>
  <node expr="@namespace"/>
  <node expr="data"/>
  </select>
</queryDef>
);

var res = query.ExecuteQuery();
var exported = 0;
for (var i = 0;i<Object.keys(res).length; i++){
  logInfo("Exporting Package " + res[i].@name + " to xml");
  if(res[i].@namespace == "cus") {
    try{
      var specFile = xtk.specFile.create(res[i]);
      var package = specFile.GenerateDoc();
      var fileName = "<SFTP path>/PKG_" + res[i].@name.toLowerCase() + ".xml";
      saveXmlFile(package, fileName);
      exported++;
     }catch(err){
           logWarning("Package " + res[i].@name + "has not been exported due to an error.");
     }
   } else {
      continue;
   }   
}

View solution in original post

0 Replies

Avatar

Community Advisor

Hi @ukender 

 

Try with below script:

package -instance: [instance_name] -export:sftp/adobe/export/*.xml -spec:cus:PKGXXX -verbose

 

Thanks,

Jyoti

 

Avatar

Level 3

Hi Jyoti

 

Thanks for the response, I have tried that option but it is expecting the proper file name in nlmodule.

 

Thank you!

Avatar

Community Advisor

Hi @ukender ,

 

You can use the command: ls -la to list all the files.

Once you have the name and number of files, run the loop to pick each file name and then execute your command.

 

What is your purpose to run this command? May be you can use some alternative suggestion as well.

 

Thanks,

Jyoti

Avatar

Level 3

Hi Jyoti

Trying to import / export the package files thru workflow using nlserver module. It is perfectly working if we define a single file for import from sftp location but finding difficulties to fetch multiple files, tried the below options but no success.

Able to write the file names using JS activity after the file collector but unsure how to feed multiple files to nlserver module.

 

package -instance: [instance_name] -import:sftp/adobe/export/*.xml -verbose
package -instance: [instance_name] -import:sftp/adobe/export/*.* -verbose

Thank you!

Avatar

Community Advisor

Hi @ukender ,

 

Even if you are able to read all the files at once, you will be able to process one file at a time. So instead of using nlserver module, you can use:

1) File Collector activity which will pick the file. Once file is picked move them to different location. Also, check "Stop as soon as file is processed". This will make sure to stop once all the files are read and imported.

2) Test activity to check if there's any file present to import.

3) Data Loading activity which will read the files coming from File Collector.

4) Load data of the file.

5) Loop back the workflow to File Collector.

 

Thanks,

Jyoti

Avatar

Level 3

Hi Jyoti
Thank you for the details. For importing the xml package (deployment package file), I guess we need to use nlserver module. Any lead how to pass multiple values into the nlserver module that would give a solution for the issue. 

 

The first 2 steps are present in the workflow but unsure how to loop the file names in nlserver module and execute multiple times.

 

Thank you!

Avatar

Level 5

Hi Ukender, 

 

Did you try the File transfer activity.  

 

adithyacs86_0-1641303396492.png

 

Thanks,
Adithya

 

Avatar

Level 3

Hi Adithya,

Thanks for the response, would like to understand how to count the number of files available in the directory and feed the xml name dynamically in nlserver module.

Thank you!

Avatar

Level 5

Hi Ukender, 

 

Not sure if you have to really use the nlserver module for SFTP things. 

 

Can you check if you can use something like below in JS 

logInfo(execCommand("ls -ls /usr/local/neolane.../<your directory to search for the files>"))

 

Thanks,
Adithya

Avatar

Correct answer by
Level 4

Hi @ukender ,

If the purpose is to export packages, then I think you may be able to use the JS code. I had defined my packages in package definition. So the following code would export packages in package definition one by one. We can filter out any packages based on the namespace or package name.

var query = xtk.queryDef.create(

<queryDef schema="xtk:specFile" operation="select">
  <select>
  <node expr="@name"/>
  <node expr="@namespace"/>
  <node expr="data"/>
  </select>
</queryDef>
);

var res = query.ExecuteQuery();
var exported = 0;
for (var i = 0;i<Object.keys(res).length; i++){
  logInfo("Exporting Package " + res[i].@name + " to xml");
  if(res[i].@namespace == "cus") {
    try{
      var specFile = xtk.specFile.create(res[i]);
      var package = specFile.GenerateDoc();
      var fileName = "<SFTP path>/PKG_" + res[i].@name.toLowerCase() + ".xml";
      saveXmlFile(package, fileName);
      exported++;
     }catch(err){
           logWarning("Package " + res[i].@name + "has not been exported due to an error.");
     }
   } else {
      continue;
   }   
}

Avatar

Level 3

Thank you for your inputs @Krishnanunni. I will try that option, Is it possible to import the exported xml package from an SFTP location?
If you have an idea pls share it, would be really helpful.

Thank you!

Avatar

Level 4

@ukender ,

I haven't used it but the xtk.builder InstallPackage function might be useful for this. Please see the below function:
https://experienceleague.adobe.com/developer/campaign-api/api/sm-builder-InstallPackage.html.

You may try reading the xml file and passing the content to the installpackage function.

Avatar

Administrator

Hi @ukender,

Were you able to resolve this query with any of the given solutions or do you still need more help here? Do let us know.
Thanks!