Utilizzo di Trasferimento file (IND$File)

Questa serie di macro di esempio illustra come utilizzare l'API Trasferimento file per richiamare un elenco di file, scaricare un file e caricare un file in un host 3270.

NOTA:Per poter eseguire queste macro, effettuare l'accesso e passare al prompt dei comandi.

Elenco di file

Questa macro illustra come utilizzare l'API Trasferimento file per richiamare un elenco di file in un host 3270 tramite il trasferimento IND$File. L'oggetto di trasferimento IND$File viene richiamato dalla factory trasferimento file, quindi utilizzato per ottenere una matrice di oggetti HostFile da TSO o CMS.

var macro = createMacro(function*() {
  'use strict';
  
  try {
    var fileTransfer = fileTransferFactory.getInd$File();
    var hostFiles = yield fileTransfer.getHostFileListing();
    
    yield ui.message('Found ' + hostFiles.length + ' files');
    if (hostFiles.length > 0) {
      var firstFile = hostFiles[0];
      var msg1 = 'The catalog name is ' + firstFile.getParent() + '. ';
      var msg2 = 'The first file is ' + firstFile.getName();
      yield ui.message(msg1 + msg2);
    }
  } catch (error) {
    yield ui.message(error);
  }
});

// Eseguire la macro
return macro();

Download di file

Questa macro illustra come utilizzare l'API Trasferimento file per scaricare un file da un host 3270 tramite il trasferimento IND$File. L'oggetto di trasferimento IND$FILE viene richiamato dalla factory trasferimento file. In questo esempio il metodo di trasferimento è impostato su ASCII per dimostrare l'utilizzo della funzione setTransferOptions. La macro di esempio scarica il primo file restituito da una chiamata a getHostFileListing creando un URI di download tramite una chiamata alla funzione getDownloadUrl. La macro può essere utilizzata sia in ambiente CMS che TSO ma è necessario specificare la scelta nella prima riga oppure modificare leggermente il codice per il sistema desiderato.

var hostEnvironment = 'CMS'; // 'TSO'
// Costruire il percorso file, ad esempio catalog/file.name o catalog/partition/file
function getPath (fileNode) {
  var prefix = fileNode.getParent() ? fileNode.getParent() + '/' : '';
  return prefix + fileNode.getName();
}

var macro = createMacro(function*() {
  'use strict';
  
  try {
    var fileTransfer = fileTransferFactory.getInd$File();
  
    // Le opzioni di transferMethod sono 'binary' e 'ascii'
    fileTransfer.setTransferOptions({transferMethod: 'ascii'});
    
    // Questo esempio recupera il primo file restituito nell'elenco
    var hostFiles = yield fileTransfer.getHostFileListing();
    var firstHostFile = hostFiles[0];
    
    if (hostEnvironment === 'CMS') {
      yield wait.forText('Ready', new Position(1,1), 5000);
    }
    
    // Download
    // Se si conosce già il percorso del file desiderato, passare il percorso a getDownloadURL()
    var downloadUrl = fileTransfer.getDownloadURL(getPath(firstHostFile));
    
    // Questo modifica la posizione del browser. I risultati potrebbero essere diversi a seconda del browser
    window.location = downloadUrl;
    
    // Per leggere il contenuto del file in una variabile anziché scaricarlo,
    // è possibile utilizzare jQuery
    // var fileContents = yield $.get(downloadUrl);
    
  } catch (error) {
    yield ui.message(error);
  }
});

// Eseguire la macro
return macro();

Caricamento di file

Questa macro illustra come utilizzare l'API Trasferimento file per caricare un file in un host 3270 tramite il trasferimento IND$File. La macro di esempio richiede all'utente di scegliere un file dal file system locale attivando la finestra di selezione dei file del browser. Richiama poi il catalogo corrente su TSO o l'identificatore di unità su CMS chiamando getHostFileListing. Infine viene chiamata la funzione sendFile per consegnare all'host il file locale selezionato. La macro può essere utilizzata sia in ambiente CMS che TSO ma è necessario specificare la scelta nella prima riga. In questo esempio il metodo di trasferimento è impostato su ascii, ma è possibile impostarlo su binary.

var hostEnvironment = 'CMS'; // 'TSO'
// Apre la finestra di selezione file del browser a livello di codice
function promptForFileToUpload () {
  return new Promise(function (resolve, reject) {
    // Non si ricevono notifiche se l'utente annulla la finestra di selezione file, quindi rifiutare dopo 30 secondi
    var timerId = setTimeout(reject.bind(null, 'Timed out waiting for file selection'), 30000);
    var fileSelector = document.createElement('input');
    fileSelector.setAttribute('type', 'file');
    fileSelector.onchange = function (evt) {
      var file = evt.target.files[0];
      clearTimeout(timerId);
      resolve(file);
    };
    fileSelector.click();
  });
}

var macro = createMacro(function*() {
  'use strict';
  
  try {
    var fileTransfer = fileTransferFactory.getInd$File();
    
    // Le opzioni di transferMethod sono 'binary' e 'ascii'
    fileTransfer.setTransferOptions({transferMethod: 'ascii'});
    
    var localFile = yield promptForFileToUpload();
    
    // Richiamare il nome del catalogo corrente e aggiungervi il nome del file selezionato
    var hostFiles = yield fileTransfer.getHostFileListing();
    var destination = hostFiles[0].getParent() + '/' + localFile.name;
    
    if (hostEnvironment === 'CMS') {
      yield wait.forText('Ready', new Position(1,1), 5000);
    }
  
    var result = yield fileTransfer.sendFile(localFile, destination);
  
  } catch (error) {
    yield ui.message(error);
  }
});

// Eseguire la macro
return macro();