Verwenden der Dateiübertragung (IND$File)

Mit den folgenden Beispielmakros wird veranschaulicht, wie Sie mithilfe der Dateiübertragungs-API eine Dateiliste abrufen, eine Datei herunterladen und eine Datei auf einen 3270-Host hochladen können.

HINWEIS:Zum Ausführen dieser Makros müssen Sie angemeldet sein und eine Eingabeaufforderung geöffnet haben.

Makro zum Auflisten von Dateien

Mit diesem Makro wird veranschaulicht, wie Sie mithilfe der Dateiübertragungs-API mittels IND$File-Übertragung eine Dateiliste auf einem 3270-Host abrufen. Das IND$File-Übertragungsobjekt wird aus der Dateiübertragungsfactory abgerufen und dann zum Abrufen eines Arrays von HostFile-Objekten von TSO oder CMS verwendet.

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 = 'Der Katalogname lautet ' + firstFile.getParent() + '. ';
			var msg2 = 'The first file is ' + firstFile.getName();
			yield ui.message(msg1 + msg2);
		}
	} catch (error) {
		yield ui.message(error);
	}
});

// Makro ausführen
return macro();

Makro zum Herunterladen einer Datei

Mit diesem Makro wird veranschaulicht, wie Sie mithilfe der Dateiübertragungs-API mittels IND$File-Übertragung eine Datei von einem 3270-Host herunterladen. Das IND$File-Übertragungsobjekt wird aus der Dateiübertragungsfactory abgerufen. In diesem Beispiel ist ASCII als Übertragungsart festgelegt, um die Verwendung der setTransferOptions-Funktion zu veranschaulichen. Mit dem Beispielmakro wird die erste Datei heruntergeladen, die von einem Aufruf von getHostFileListing zurückgegeben wird, indem ein Download-URI mit einem Aufruf der getDownloadUrl-Funktion erstellt wird. Das Makro kann entweder in einer CMS- oder einer TSO-Umgebung verwendet werden, jedoch muss die Auswahl in der ersten Zeile angegeben oder der Code für das gewünschte System geringfügig geändert werden.

var hostEnvironment = 'CMS'; // 'TSO'
// Dateipfad erstellen, d. h. catalog/file.name oder 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();
		
		// transferMethod-Optionen sind 'binary' und 'ascii'
		fileTransfer.setTransferOptions({transferMethod: 'ascii'});
		
		// In dieser Demo wird die erste Datei abgerufen, die in der Liste
		var hostFiles = yield fileTransfer.getHostFileListing();
		var firstHostFile = hostFiles[0];
		
		if (hostEnvironment === 'CMS') {
			yield wait.forText('Ready', new Position(1,1), 5000);
		}
		
		// Download
		// Wenn Ihnen der Pfad der gewünschten Datei bereits bekannt ist, übergeben Sie ihn einfach an getDownloadURL()
		var downloadUrl = fileTransfer.getDownloadURL(getPath(firstHostFile));
		
		// Dadurch wird der Browserspeicherort geändert. Möglicherweise ergeben sich unterschiedliche Ergebnisse in unterschiedlichen Browsern.
		window.location = downloadUrl;
		
		// Wenn Sie die Dateiinhalte in eine Variable einlesen möchten, anstatt sie
		// herunterzuladen, können Sie Folgendes verwenden: jQuery
		// var fileContents = yield $.get(downloadUrl);
	
	} catch (error) {
		yield ui.message(error);
	}
});

// Makro ausführen
return macro();

Makro zum Hochladen einer Datei

Mit diesem Makro wird veranschaulicht, wie Sie mithilfe der Dateiübertragungs-API mittels IND$File-Übertragung eine Datei auf einen 3270-Host hochladen. Mit dem Beispielmakro wird der Benutzer aufgefordert, eine Datei im lokalen Dateisystem auszuwählen, indem das Dialogfeld des Browsers zur Dateiauswahl ausgelöst wird. Dann wird durch Aufrufen von getHostFileListing der aktuelle Katalog auf TSO oder die Laufwerkskennung auf CMS abgerufen. Schließlich wird die sendFile-Funktion aufgerufen, um die ausgewählte lokale Datei an den Host zu übermitteln. Das Makro kann entweder in einer CMS- oder einer TSO-Umgebung verwendet werden, die Auswahl muss jedoch in der ersten Zeile angegeben werden. In diesem Beispiel ist die Übertragungsart auf ascii festgelegt. Sie können dies jedoch in binary ändern.

var hostEnvironment = 'CMS'; // 'TSO'
// Dialogfeld des Browsers zur Dateiauswahl programmgesteuert öffnen
function promptForFileToUpload () {
		return new Promise(function (resolve, reject) {
		// Es erfolgt keine Benachrichtigung, wenn der Benutzer das Dialogfeld zur Dateiauswahl schließt, daher nach 30 Sekunden ablehnen
		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();
		
		// transferMethod-Optionen sind 'binary' und 'ascii'
		fileTransfer.setTransferOptions({transferMethod: 'ascii'});
		
		var localFile = yield promptForFileToUpload();
		
		// Aktuellen Katalognamen abrufen und ausgewählten Dateinamen an ihn anfügen
		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);
	}
});

// Makro ausführen
return macro();