Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This article describes the API used to develop client plug-ins, as well as client-side form scripts.

For more information, refer to the client API documentation.


Table of Contents

scope.api

The API is available by using scope.api.<moren>

scope.api.router

It only contains the function get(), which returns the Angular router.

scope.api.clipboard

The clipboard consists of an array of DMS objects and the type of clipboard action.

There are two action types available using the const "ClipboardAction":

TypeDescription
ClipboardAction.COPY
copies DMS objects
ClipboardAction.CUT
cuts DMS objects


scope.api.clipboard.set()

Use this function to set DMS objects and action type.

ParameterTypeDescription
elements
DmsObject[]
DMS objects you want to copy or cut
action
ClipboardAction

type of action

scope.api.clipboard.get()

This function returns a clipboard object with elements and action.

scope.api.clipboard.clear()

This function clears the clipboard.


scope.api.events

Events can be triggered by a component. Listening components can then react.

Type of events

There are several client-specific events. The most common ones are bundled in the const "EnaioEvent".

Type

Description

Data

LOGOUT
on
On logout.
CLIENT_LOCALE_CHANGED
the
The client locale
has
was changed.ISO locale string
SCHEMA_LOCALE_CHANGED
the
The schema locale
has
was changed.ISO locale string
DMS_OBJECT_DELETED
a
A DMS object was deleted.the deleted DMS object
DMS_OBJECT_VERSION_RESTORED
an
An older version of a DMS object was restored.the ID of the restored DMS object
DMS_OBJECT_FAVORITE_ON
a
A DMS object was added to the favorites.the ID of the DMS object
DMS_OBJECT_FAVORITE_OFF
a
A DMS object was removed from the favorites.the ID of the DMS object
DMS_OBJECT_LOADEDA DMS object was loaded into the object detailsthe loaded DMS object
DMS_OBJECT_UPDATED
a
A DMS object was updated (
index data
metadata, content, subscription, ...).the updated DMS object
DMS_OBJECT_PASTED
a
A DMS object was pasted into a new context folder.the pasted DMS
objects
object
DMS_OBJECT_VERSION_RESTORED
An older version of a DMS object was restoredthe ID of the restored DMS object
EO_DIALOG_STACK_CHANGED
the
The dialog stack
has
was changed.an object with ID and active status of the dialog

...

PROCESS_FILE_CHANGEDTriggering this event causes the process file list to be updated with given file entries.an array of file entries


scope.api.events.trigger()

With this function, you can trigger an event of a the type mentioned above.

ParameterTypeDescription
typestringtype of the event
dataany

(optional) data associated with the event

...

Code Block
languagejs
titleExample
linenumberstrue
scope.api.events.trigger(EnaioEvent.DMS_OBJECT_UPDATEDeo.dms.object.updated, dmsObject);

To update the process file list, use this trigger:

Code Block
titleExample: trigger the process file list
scope.api.events.

...

With this function, you can listen to events of a type mentioned above.

...

Code Block
languagejs
titleExample
linenumberstrue
scope.api.events.on(EnaioEvent.DMS_OBJECT_UPDATED).subscribe(event => {
	let dmsObject = event.data;
	let eventType = event.type;
});

scope.api.session

Currently, only the following session function is available.

scope.api.session.getUser() (user information)

The function scope.api.session.getUser() returns the user object, in which the following properties about the currently logged-in user are available. They are read-only.

...

Functions

...

Sample script:

Code Block
languagejs
titleAktueller Benutzer
linenumberstrue
// Write information for the current user in a model value
// The model value must be a STRING type.
var u=scope.api.session.getUser(); 
scope.model.text.value=
'- Login name				\n'+u.name+'\n'+
'- Roles					\n'+u.roles.join()+'\n'+
'- Hasrole FULL_ACCESS?		\n'+u.hasRole('FULL_ACCESS');

scope.api.util

A list of helper functions follows:

sopce.api.util.translate

...

trigger("eo.process.file.changed",[{
	id:'BD5DEF6896D842219719CEEBF8BC355A',
	title: "Hello Again",
	description: "Hello Again from Horst",
	iconid: "8ED1E037E4D7468AB69EB8A04C2EA080",
	creator: "root",
	addtime: "2021-07-09T09:19:40.047+0000",
	type: "qdoc"
}]);


scope.api.events.on()

With this function, you can listen to events of a type mentioned above.

ParameterTypeDescription
typestringtype of the event


Returns an observable containing type and data.

Code Block
languagejs
titleExample
linenumberstrue
scope.api.events.on(eo.dms.object.updated).subscribe(event => {
	let dmsObject = event.data;
	let eventType = event.type;
});

scope.api.session

Currently, only the following session function is available.

scope.api.session.getUser() (user information)

The function scope.api.session.getUser() returns the user object, in which the following properties about the currently logged-in user are available. They are read-only.

NameDescription
idSystem ID (32 characters)
nameLogin name
firstnameFirst name
lastnameLast name
titleDisplayed name in the format of 'lastname, firstname'
emailE-mail address
rolesString array with the roles for which the user is authorized
localeApplication language in ISO code (de, en, ...) as configured in the client settings
schemaLocaleObject definition language in ISO code (de, en, ...) as configured in the client settings
deputiesString array with substitutes configured for this user
privelegesString array with the function rights of the user
presentFALSE if the user is not present as configured in the client settings or in yuuvis® RAD management-studio
userImageREST call for retrieval of the user image

Functions

NameDescription
hasRole(rolename)Checks whether rolename is given in the scope.api.session.getUser().roles array. Note: case-sensitive.

Sample script:

Code Block
languagejs
titleAktueller Benutzer
linenumberstrue
// Write information for the current user in a model value
// The model value must be a STRING type.
var u=scope.api.session.getUser(); 
scope.model.text.value=
'- Login name				\n'+u.name+'\n'+
'- Roles					\n'+u.roles.join()+'\n'+
'- Hasrole FULL_ACCESS?		\n'+u.hasRole('FULL_ACCESS');

scope.api.util

A list of helper functions follows:

sopce.api.util.translate

Returns the translated value for a specific translation key.

Code Block
languagejs
titleExample: Messages
linenumberstrue
var myText = scope.api.util.translate('my.translation.key'); // myText = 'Example Text'

sopce.api.util.notifier (display messages)

This helper can be used to display messages in the form of a toaster. 

Functions

NameDescriptionColor
success(message[,title])Displays a success messageGreen
error(message[,title])Displays an error messageRed
info(message[,title])Displays an informational messageGray
warning(message[,title])Displays a warning messageOrange

Example

Code Block
languagejs
titleExample: Messages
linenumberstrue
var scope.api.util.notifierm=scope.model;
m.unlimited.onchange=function() {
	if( m.unlimited.value ) {	
		scope.api.util.notifier.success( 
			 m.firstname.value +' ' +m.familiyname.value+' is now employed without time limit.',		// Message
			'Personal information changed'   // optional: use a short title
		);
	}
}



The success message is displayed in green.

Image Added

scope.api.util.encodeFileName

Encodes a file name safe for sending characters beyond ASCII-7bit using quoted printable encoding.

More information to come.

scope.api.http

You can use HTTP requests to get data from any service of the system, including custom microservices, which are part of the yuuvis® RAD microservice infrastructure.

The following standard functions are supported: get, post, put and delete.

If you want a format different from JSON, you have to add a third paramete{responseType: 'arraybuffer' | 'blob' | 'json' | 'text'}.

Remark: The handling of async HTTP requests must be done using 'then' because 'await' is currently not supported.

scope.api.http.get

Code Block
languagejs
titleExample : Messagesfor get
linenumberstrue
var myText =// 1st example: show some user's inbox work items in the message box:
scope.api.util.translate('my.translation.key'); // myText = 'Example Text'

sopce.api.util.notifier (display messages)

This helper can be used to display messages in the form of a toaster. 

Functions

...

Example

Code Block
languagejs
titleExample: Messages
linenumberstrue
var scope.api.util.notifierm=scope.model;
m.unlimited.onchange=function() {
	if( m.unlimited.value ) {	
		scope.api.util.notifier.success( 
			 m.firstname.value +' ' +m.familiyname.value+' is now employed without time limit.',		// Message
			'Personal information changed'   // optional: use a short title
		);
	}
}



The success message is displayed in green.

Image Removed

scope.api.util.encodeFileName

Encodes a file name safe for sending characters beyond ASCII-7bit using quoted printable encoding.

More information to come.

scope.api.http

You can use HTTP requests to get data from any service of the system, including custom microservices, which are part of the yuuvis® RAD microservice infrastructure.

...

.http.get('/get?size=10','/inboxservice').then(
	function(result) {
	    var inbox='';
		result.data.content.forEach(function(row) {
			inbox+=row.title+'</br>';
		});
		scope.api.util.notifier.success(inbox,'Some inbox work items');
	},
	function(error) {
		scope.api.util.notifier.error('Failed to load inbox', 'Error');
	}
);


// 2nd example: show all users' favorites
scope.api.http.get('/service/user/favorites','/rest-ws').then(
	function(result) {
	    var favs='';
		result.data.forEach(function(row) {
			favs+=row.title+'</br>';
		});
		scope.api.util.notifier.success(favs,'Your favorites');
	},
	function(error) {
		scope.api.util.notifier.error('Failed to load favorites', 'Error');
	}
);

// For more information, see the REST function descriptions.

scope.api.http.

...

put

// 1st example: show some user´s inbox workitems in the message box: scope.api.http.get('/get?size=10','/inboxservice').then( function(result) { var inbox=''; result.data.content.forEach(function(row) { inbox+=row.title+'</br>'; }); scope.api.util.notifier.success(inbox,'Some inbox workitems'); }, function(error) { scope.api.util.notifier.error('Failed to load inbox', 'Error'); } ); // 2nd example: show all users' favorites
Code Block
languagejs
titleExample for getput
linenumberstrue
// how to change object data
var objectId = '7B683C8E19BD492198F6A262D14EF43F';
var changeBody = {'status': 'active'};
scope.api.http.put('/service/dms/'+objectId, changeBody, '/rest-ws').then(
	function(result){
		scope.api.util.notifier.info('Status changed to "active"', 'Success');
	},
	function(error){
		scope.api.util.notifier.error('Failed to change object data for ' + objectId, 'Error');
	}
);

// For more information, see the REST function descriptions.

scope.api.http.del

Code Block
languagejs
titleExample for del
linenumberstrue
// how to delete an object until version 8.16 LTS
var objectId = '7B683C8E19BD492198F6A262D14EF43F';

scope.api.http.getdel('/service/user/favorites',dms/' + objectId, '/rest-ws').then(
	function(result) {
	    var favs=''; 		result.data.forEach(function(row) {
			favs+=row.title+'</br>';
		});
		scope.api.util.notifier.success(favs,'Your favoritesinfo('Deleted object ' + objectId, 'Success');
	},
	function(error) {
		scope.api.util.notifier.error('Failed to loaddelete object favorites' + objectId, 'Error');
	}
);

// For more information, see the REST function descriptions.

scope.api.http.put

Code Block
languagejs
titleExample for put
linenumberstrue
// how to change object data
var objectId = '7B683C8E19BD492198F6A262D14EF43F';
var changeBody = {'status': 'active'};how to delete an object beginning with version 9.0
// the new parameter forceDelete=true must be used if objects that are contained in a process file should be deleted nevertheless

scope.api.http.putdel('/service/dms/' + objectId, changeBody + '?forceDelete=true', '/rest-ws').then(
	function(result) {
		    scope.api.util.notifier.info('StatusDeleted object changed' to "active"'+ objectId, 'Success');
	},
	function(error) {
		scope.api.util.notifier.error('Failed to changedelete object data for ' + objectId, 'Error');
	}
);

// For more information, see the REST function descriptions.

scope.api.http.

...

post

Code Block
languagejs
titleExample for delpost
linenumberstrue
// how to deletecreate ana objectsubscription
var objectId = '7B683C8E19BD492198F6A262D14EF43F';
var body = {subject: 'My subscription', type: 'document'};


scope.api.http.delpost('/service/dms/subscription/' + objectId, body, '/rest-ws').then(
	function(result) {
	    	scope.api.util.notifier.info('DeletedCreated subscription objectfor ' + objectId, 'Success');
	},
	function(error) {
		scope.api.util.notifier.error('Failed to deletecreate subscription objectfor ' + objectId, 'Error');
	}
);

// For more information, see the REST function descriptions.

...

 information, see the REST function descriptions.

scope.api.dms

This section describes the read access to object information.

scope.api.dms.getObject()

Loads a DMS object from the backend.

ParameterTypeDescription
idstringThe ID of the DMS object to be fetched.
typestringoptional: The object type of the selected DMS object. Will improve performance if set.
versionstringoptional: Retrieve a specific version of the DMS object.


Code Block
languagejs
titleExample for post
linenumberstrue
// example: howget toobject createof a given subscriptionID
var objectId = '7B683C8E19BD492198F6A262D14EF43F';
var body = {subject: 'My subscription', type: 'document'};


scope.api.http.post('/service/dms/subscription/' + objectId, body, '/rest-ws').then(
	function(result){
		scope.api.util.notifier.info('Created subscription for ' + objectId, 'Success');
	},
	function(error){
		scope.api.util.notifier.error('Failed to create subscription for ' + objectId, 'Error');
	}
);

// For more information, see the REST function descriptions.

scope.api.dms

This section describes the read access to object information.

scope.api.dms.getObject()

Loads a DMS object from the backend

...

Code Block
languagejs
linenumberstrue
// example: get object of a given ID
var objectId = '7B683C8E19BD492198F6A262D14EF43F';
scope.api.dms.getObject(objectId).then(
	function(result) {
		scope.api.util.notifier.info(result.title, 'Title of Object');
		// index-values can be found in result.data
		// example: result.data.companyname
	},
	function(error) {
		scope.api.util.notifier.error(''+error, 'An error occured');
	}
);

...

Fetch DMS objects from the server by search parameters.

This functions uses the DMS-Service search.

...

';
scope.api.dms.getObject(objectId).then(
	function(result) {
		scope.api.util.notifier.info(result.title, 'Title of Object');
		// index-values can be found in result.data
		// example: result.data.companyname
	},
	function(error) {
		scope.api.util.notifier.error(''+error, 'An error occured');
	}
);


scope.api.dms.getResult()

Fetch DMS objects from the server by search parameters.

This functions uses the DMS-Service search.

ParameterTypeDescription
fieldsobjectthe fields to be matched, example: {name: 'max', plz: '47111}
typestringthe qualified name of the object type


This function returns a promise which is resolved by an array of DmsObjects matching the given parameters.

Code Block
languagejs
// fill dynamic list with object values
var dynlist = scope.model.catalogfield;
var myRequest={};
if ( scope.situation == 'CREATE' ) { 
	 myRequest={create:true};
}
if ( scope.situation == 'EDIT' ) {
	 myRequest={edit:true};
}
scope.api.dms.getResult(myRequest,'dynlist').then( 
	function(result) {
		var dynlist = [];
		result.forEach(function(row) {
			if( row.data.value ) {
				dynlist.push({
					value: row.data.value,
					description: row.data[scope.api.session.getUser().userSettings.schemalocale]
				});
			};
		});
		dynlist.setList({
			config: {
				allelementsselectable: true
			},
			entries: dynlist
		});
	},
	function(error) {
		scope.api.util.notifier.error('Could not values',error);
	}
);



scope.api.dms.downloadContent()

This function starts a download of the content file of a DMS object.

ParameterTypeDescription
dmsObjectDmsObjectthe DMS object with the content to download
renditionstring(optional) the type of the content file ('PDF', 'TIFF', 'TEXT', 'JPEG') if you don't want to have the original file

scope.api.config

Gets information about configurations.

scope.api.config.get()

This function returns information about the location of special resources.

...

scope.api.agent (version 4.0)

...

don't want to have the original file

scope.api.config

Gets information about configurations.

scope.api.config.get()

This function returns information about the location of special resources.

Config entryDescription
serviceBaserelative URL to the yuuvis® RAD rest services

scope.api.agent

These functions help to handle custom actions with yuuvis® RAD agent.

scope.api.agent.getAvailability()

This function gets the agent availability and returns a promise which is resolved with the agent availability.

PromiseDescription
agentAvailability.CONNECTEDThe user has an agent connected and the current browser session is connected.
agentAvailability.AVAILABLEThe user has an agent connected to the system, but there is no pairing between the current browser session and an agent.
agentAvailability.UNAVAILABLEThe user is not connected with any agent.


For examples, see the 
Client-side Custom Action Scripting documentation.

scope.api.agent.executeAction()

This function executes an action on a connected and paired client computer. For the format of the args parameter, see below.

ActionParametersDescription
scope.api.agent.action.OPEN { document: { id: <string>, title: <string>, type: <string> }, lock: <bool> }Opens a document for local editing. Only a single DmsObject at a time can be opened.
The current user can lock the document by passing true.
scope.api.agent.action.

...

This function gets the agent availability and returns a promise which is resolved with the agent availability.

...

MAIL[ { id: <string>, title: <string>, type: <string> }, .. ]Creates a new e-mail with documents as attachment.
scope.api.agent.action.MAIL_AS_PDF[ { id: <string>, title: <string>, type: <string> }, .. ]Creates a new e-mail with as PDF rendition documents as attachment.
scope.api.agent

...

This function executes an action on a connected and paired client computer. For the format of the args parameter, see below.

ActionParametersDescription
.action.CLIPBOARD[ { id: <string>, title: <string>, type: <string> }, .. ]Downloads the documents to the local computer and puts them into the system clipboard.
scope.api.agent.action.OPEN { document: { CLIPBOARD_AS_PDF[ { id: <string>, title: <string>, type: <string> }, lock: <bool> }Opens a document for local editing . Only a single DmsObject at a time can be opened.
The current user can lock the document by passing true. ]
Downloads the documents as PDF rendition to the local computer and puts them into the system clipboard.
scope.api.agent.action.MAILEXTERNAL[ { idexecutable: <string>, titleargs: <string>, type: <string> }, [ <string, .. ] }Creates a new e-mail with documents as attachment.Calls a local executable. Restricted to executables in the 'agent externals' folder next to the agent installation directory: <AGENT_INSTALLATION_DIRECTORY>\..\agent externals


Examples

Code Block
languagejs
linenumberstrue
scope.api.agent.

...

executeAction(scope.api.agent.action.

...

OPEN, { document: { id: myObject.id, title: myObject.title, type: myObject.type }, lock: false });

// from, to, cc and bcc can be string or array of strings and are optional
scope.api.agent.executeAction(scope.api.agent.action.

...

Examples

Code Block
languagejs
linenumberstrue
scope.api.agent.executeAction(scope.api.agent.action.OPEN, { document: { id: myObject.id, title: myObject.title, type: myObject.type }, lock: false });

scope.api.agent.executeAction(scope.api.agent.action.MAIL, {
        message: {MAIL, {
        message: {
			from: ["mail1@mail.org", "mail2@mail.org"]
			to:	"mail3@mail.org"
			cc:	["cc_mail@mqilorg"]
			bcc: "bcc_mail@mail.org"
          	text: "some fancy text",        // as e-mail body text (if not provided will be filled with "title (filename)" of attachment if no attachment is provided text will be empty)
          text	subject: "some fancy textsubject",        // as e-mail body text
        subject: "some fancy subject"   // as e-mail subject
  subject (if not provided will be filled with "title (v: version)" or "title" of attachment if no attachment is provided subject will be empty)
         },
        attachments: myObject.map(o => { return { id: o.id, title: o.title, rendition: "", version:null, type: o.typeName } })        
           // attach all document files of the corresponding objects to the e-mail
           // if message = null default values are used
      });

scope.api.agent.executeAction(scope.api.agent.action.EXTERNAL, { executable: 'jump2sap.exe', args: [ '/ID', myObject.id ] });

...