Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht
Navigation: Dokumentationen agorum core > agorum core für Entwickler > agorum core JavaScript-API
Diese JavaScript-Bibliothek bietet Funktionen zum Lesen von JSON-Daten von einem WebStream und Wandeln von JSON-Daten in JavaScript-Objekte.
Binden Sie die Bibliothek stets am Anfang eines Skripts ein:
let json = require('client/json');
// Aufruf von http://url-to-service/path/to/service
let json = require('client/json');
let service = json('http://url-to-service', {
type: 'application/json', // Was liefern wir
accept: 'application/json' // Was wollen wir
})('/path/to/service');
// Parameter hinzufügen (URL-Parameter)
service.query({
param1: [ 'value1', 'value2' ],
sessionId: sessionId
});
// Liefert JSON oder ein gewandeltes JavaScript-Objekt.
let getResponse = service.get();
// Parameter hinzufügen (URL-Parameter)
service.query({
param1: [ 'value1', 'value2' ],
sessionId: sessionId
});
// body definieren
let body = {
test: 'test123',
sessionId: sessionId,
testDate: new Date(),
testLong: 1234567890123456,
testDouble: 12345.9876,
testBoolean: true
};
// Liefert JSON oder ein gewandeltes JavaScript-Objekt.
let postResponse = service.post(body);
// Parameter hinzufügen (URL-Parameter)
service.query({
param1: [ 'value1', 'value2' ],
sessionId: sessionId
});
// body definieren
let body = {
test: 'test123',
sessionId: sessionId,
testDate: new Date(),
testLong: 1234567890123456,
testDouble: 12345.9876,
testBoolean: true
};
// Liefert JSON oder ein gewandeltes JavaScript-Objekt.
let postResponse = service.put(body);
Sie können Header vor einer Verbindung (get, post) einsetzen, die das System bei jeder Verbindung mitgibt.
// Header hinzufügen.
service.header('X-Auth-Token', 123);
// Weitere Header mit gleichem key hinzufügen. -> Beide Header werden mitgeschickt.
service.header('X-Auth-Token', 'abc');
// Direkt ein Array mit mehreren Werten übergeben.
let tokens = ['123', 'abc'];
service.header('X-Auth-Token', tokens);
Dient als eine Art von Header zur Authentifizierung über Basic Auth.
// basicAuth hinzufügen.
service.basicAuth('username', 'password');
Sie können bei der Initialisierung optional die Time-outs connectionTimeout und receiveTimeout setzen.
let json = require('client/json');
let service = json('http://url-to-service', {
type: 'application/json',
accept: 'application/json',
connectionTimeout: 60000,
receiveTimeout: 30000
})('/path/to/service');
Im Normalfall liefert das System den Antwort-Body als Ergebnis. Sind im Header der Antwort auch relevante Informationen, so können Sie die Service-Referenz stattdessen im Raw-Modus erzeugen:
let json = require('client/json');
let getHeaderString = (result, name) => {
let header = result.headers[name] || [];
return header[0];
};
let service = json('http://url-to-service', {
raw: true
});
let result = service('/path/to/call').get();
let myHeader = getHeaderString(result, 'my-header');
let body = result.body;
Folgende Felder stehen in dem zurückgegebenen Ergebnis-Objekt zur Verfügung:
| Feld | Beschreibung |
|---|---|
| headers | Definiert ein Objekt, das alle Antwort-Header als Array enthält. |
| body | Definiert den Antwort-Body als String oder JSON (wie im nicht-Raw-Modus). |
| stream | Definiert den Antwort-Body als Stream bei Verwendung von getStream() statt get(). |
let json = require('client/json');
const SERVER = 'http://localhost';
const USERNAME = 'roi';
const PASSWORD = 'agorum';
let urlEncode = params =>
Object.entries(params)
.map(([key, value]) => encodeURIComponent(key) + '=' + encodeURIComponent(value))
.join('&');
let service = json(SERVER, {
accept: 'application/json',
type: 'application/x-www-form-urlencoded',
});
let sessionId = service('/api/rest/session').post(urlEncode({ username: USERNAME, password: PASSWORD })).sessionId;
Sie erhalten die sessionId, die Sie bei jedem weiteren Aufruf der API mitgeben müssen.
let json = require('client/json');
let objects = require('common/objects');
const SERVER = 'http://localhost';
const USERNAME = 'roi';
const PASSWORD = 'agorum';
let urlEncode = params =>
Object.entries(params)
.map(([key, value]) => encodeURIComponent(key) + '=' + encodeURIComponent(value))
.join('&');
let service = json(SERVER, {
accept: 'application/json',
type: 'application/x-www-form-urlencoded',
});
let sessionId = service('/api/rest/session').post(urlEncode({ username: USERNAME, password: PASSWORD })).sessionId;
let upload = (object, target) =>
service('https://agorumdocproxy.agorum.com/api/rest/object/upload').query({ sessionId: sessionId, target: target }).postForm({
file: object,
});
upload(objects.find('...'), 'home:MyFiles');
let json = require('client/json');
let objects = require('common/objects');
let transaction = require('common/transaction');
/**
* Uploads a file from an external URL and saves it into the agorum core system as a file object.
*
* <p>
* This function fetches a given document from an external URL (binary), detects the extension
* from the URL, creates a new file in the target folder, and sets the content of the file to the
* downloaded binary data.
* <p>
* Required modules: client/json (for HTTP request), common/objects (object handling), common/transaction (ensures atomic write)
*
* @param {Object} params Parameters for the upload
* @param {string} params.url The external URL of the file to be downloaded.
* @param {string} params.targetId Target folder (id or path) in agorum core to which the file will be uploaded.
* @param {string} [params.basename] Optional base name for the uploaded file (without extension). Defaults to 'logo'.
* @returns {GlobalObject} The newly created file object.
*
*/
exports.upload = params => {
// Parse parameters
/** @type {string} External URL to retrieve the file from. */
let url = params.url;
/** @type {string} agorum core folder where the file is uploaded. */
let targetId = params.targetId;
/** @type {string} Base name for uploaded file (without extension). Defaults to 'logo'. */
let basename = params.basename || 'logo';
// Fetch document from URL as binary with raw=true for binary stream.
let imageReq = json(url, {
accept: '*/*', // accept all MIME types
raw: true, // get raw binary body
})();
let imageResult = imageReq.getStream(); // getBody in original format (Stream)
//console.log('imageResult', imageResult.headers);
// Detect file extension from URL
let ext;
let path = url.split('?')[0]; // Remove query string for extension eval
let dot = path.lastIndexOf('.');
if (dot > -1 && dot > path.lastIndexOf('/')) {
ext = path.substring(dot + 1); // Get extension, without dot
}
// Create file in agorum core under transaction for atomicity
let targetFolder = objects.tryFind(targetId);
let newFile;
transaction(() => {
newFile = objects.create('file', {
name: basename + '.' + ext, // Full filename with extension
target: targetFolder,
});
// Set file content from the binary stream
newFile.setContent(imageResult.stream); // body is Buffer/Stream
});
return newFile;
};
// Example call: Download an SVG file into a specific folder
exports.upload({
url: 'https://www.agorum.com/bundles/agorumbasic/images/favicons/favicon.svg',
targetId: '/agorum/roi/customers/agorum.demo.color.logo/doc',
basename: 'logo',
});