Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin
{hidden}
Wiki Markup
Hidden
DO NOT EDIT THE CONTENT OF THIS PAGE DIRECTLY, UNLESS YOU KNOW WHAT YOU'RE DOING.
		THE STRUCTURE OF THE CONTENT IS VITAL IN BEING ABLE TO EXTRACT CHANGES FROM THE PAGE AND MERGE THEM BACK INTO SERVOY SOURCE{hidden}
{sub-section:description|text=}The Maintenance plugin can be used in combination with the solution import hooks to control the workflow when importing solutions into the Servoy Application Server.

The pre-import and post-import hooks 

The Maintenance plugin can be used in combination with the solution import hooks to control the workflow when importing solutions into the Servoy Application Server.

The pre-import and post-import hooks i.c.w.

...

the

...

Maintenance

...

plugin

...

allow

...

the

...

automatic

...

execution

...

of

...

administrative

...

tasks

...

on

...

the

...

Servoy

...

Application

...

Server

...

while

...

importing

...

solutions,

...

like:

...

  • Send

...

  • messages

...

  • to

...

  • connected

...

  • clients,

...

  • or

...

  • even

...

  • kill

...

  • connected

...

  • clients.

...

  • Put

...

  • the

...

  • server

...

  • into

...

  • maintenance

...

  • mode

...

  • for

...

  • the

...

  • duration

...

  • of

...

  • the

...

  • solution

...

  • import.

...

  • Perform

...

  • operations

...

  • on

...

  • databases.

...

Solution

...

Import

...

Hooks

...


During

...

solution

...

import

...

from

...

the

...

Servoy

...

Admin

...

Page,

...

modules

...

with

...

certain

...

name

...

patterns

...

are

...

handled

...

in

...

a

...

special

...

way.

...

Modules

...

whose

...

names

...

start

...

with

...

"before_import"

...

are

...

handled

...

as

...

pre-import

...

hooks.

...

Their

...

onOpen

...

event

...

handlers

...

are

...

executed

...

before

...

the

...

solution

...

is

...

actually

...

imported.

...

Similarly,

...

modules

...

whose

...

names

...

start

...

with

...

"after_import"

...

are

...

handled

...

as

...

post-import

...

hooks.

...

Their

...

onOpen

...

event

...

handlers

...

are

...

executed

...

after

...

the

...

solution

...

is

...

actually

...

imported.

...

:= }
Note
title
New
SolutionType

In

the

next

major

version

the

pre_

&

post_import

hook

modules

will

get

their

own

SolutionType,

instead

of

having

to

rely

on

SolutionName

prefixes.

{note}

If

...

multiple

...

modules

...

exists

...

with

...

a

...

name

...

that

...

start

...

with

...

"before_import"

...

or

...

"after_import",

...

they

...

will

...

be

...

all

...

handled

...

in

...

this

...

way,

...

but

...

no

...

handling

...

order

...

is

...

guaranteed.

...

Pre

...

&

...

post

...

import

...

hook

...

modules

...

are

...

to

...

be

...

self

...

contained,

...

meaning

...

that

...

they

...

are

...

not

...

to

...

rely

...

on

...

included

...

modules.

...

:= }
Note
title
Pre
&
post
import
hooks
containing
modules

In

the

next

major

version,

the

inclusion

of

modules

in

the

pre

&

post

import

hooks

will

not

be

allowed.

{note}

During

...

the

...

execution

...

of

...

the

...

onOpen

...

event

...

handlers

...

from

...

the

...

pre

...

&

...

post

...

import

...

hooks,

...

any

...

output

...

printed

...

with

...

application.output(...)

...

will

...

be

...

redirected

...

to

...

the

...

import

...

log,

...

which

...

you

...

can

...

see

...

in

...

the

...

Servoy

...

Admin

...

page.

...

Typical

...

usage

...

scenario

  • Before importing the solution,

...

  • connected

...

  • clients

...

  • are

...

  • notified

...

  • that

...

  • an

...

  • import

...

  • will

...

  • take

...

  • place,

...

  • then

...

  • they

...

  • are

...

  • disconnected

...

  • and

...

  • then

...

  • the

...

  • server

...

  • is

...

  • put

...

  • into

...

  • maintenance

...

  • mode,

...

  • so

...

  • that

...

  • no

...

  • new

...

  • clients

...

  • can

...

  • connect

...

  • during

...

  • the

...

  • import.

...

  • The

...

  • import

...

  • is

...

  • performed

...

  • as

...

  • usual.

...

  • After

...

  • the

...

  • import

...

  • is

...

  • over,

...

  • the

...

  • server

...

  • is

...

  • taken

...

  • out

...

  • of

...

  • maintenance

...

  • mode,

...

  • so

...

  • that

...

  • clients

...

  • can

...

  • connect

...

  • again.

...

All

...

these

...

steps

...

can

...

be

...

automated

...

by

...

creating

...

a

...

pre-import

...

and

...

a

...

post-import

...

hook

...

module.

...

The

...

pre-import

...

hook

...

module

...

can

...

have

...

the

...

following

...

function

...

set

...

as

...

its

...

onOpen

...

event

...

handler:

...

Code Block
JavaScript
JavaScript
function onBeforeImportSolutionOpen()
{
	application.output("Putting server into maintenance mode...");
	plugins.maintenance.setMaintenanceMode(true);
	application.output("Notifying and disconnecting connected clients...");
	plugins.maintenance.sendMessageToAllClients("A solution upgrade will take place on the server. You will be disconnected in 2 minutes.");
	application.sleep(2 * 60 * 1000);
	plugins.maintenance.sendMessageToAllClients("A solution upgrade will take place on the server. You will be disconnected NOW.");
	plugins.maintenance.shutDownAllClients();
	application.output("Proceeding to import...");
}
{code}

This

...

function

...

puts

...

the

...

servoy

...

Application

...

Server

...

into

...

maintenance

...

mode

...

and

...

sends

...

a

...

notification

...

to

...

all

...

connected

...

clients,

...

telling

...

them

...

that

...

in

...

two

...

minutes

...

they

...

will

...

be

...

disconnected.

...

The

...

function

...

waits

...

for

...

two

...

minutes,

...

then

...

it

...

sends

...

another

...

message

...

to

...

the

...

clients,

...

telling

...

them

...

that

...

they

...

will

...

be

...

immediately

...

disconnected.

...

Then

...

all

...

connected

...

clients

...

are

...

killed.

...

From

...

this

...

moment

...

on,

...

no

...

new

...

client

...

will

...

be

...

able

...

to

...

connect

...

to

...

the

...

Server.

...

The

...

post-import

...

hook

...

module

...

can

...

have

...

the

...

following

...

function

...

as

...

its

...

onOpen

...

event

...

handler:

...

Code Block
JavaScript
JavaScript
function onAfterImportSolutionOpen()
{
	application.output("Taking server out of maintenance mode.");
	plugins.maintenance.setMaintenanceMode(false);
	application.output("Clients can now connect to the server.");
}
{code}

This

...

function

...

takes

...

the

...

Server

...

out

...

of

...

maintenance

...

mode,

...

so

...

that

...

clients

...

can

...

again

...

connect

...

to

...

it.

...

Modifying

...

Database

...

Structure

...

and

...

Content

...


Using

...

the

...

Maintenance

...

plugin,

...

it

...

is

...

possible

...

to

...

programmatically

...

modify

...

the

...

database

...

structure.

...

It

...

allows

...

for

...

tables

...

to

...

be

...

created

...

and

...

dropped

...

or

...

modify

...

existing

...

tables

...

by

...

creating

...

and

...

deleting

...

columns.

...

On

...

solution

...

import,

...

Servoy

...

will

...

automatically

...

create

...

all

...

missing

...

tables

...

and

...

columns,

...

based

...

on

...

the

...

metadata

...

confined

...

in

...

the

...

solution

...

export

...

file.

...

When

...

more

...

control

...

is

...

required

...

on

...

how

...

the

...

columns

...

are

...

created

...

and/or

...

columns

...

need

...

to

...

be

...

removed

...

or

...

altered,

...

the

...

pre

...

import

...

hook

...

i.c.w.

...

the

...

Maintenance

...

plugin

...

allows

...

the

...

developer

...

full

...

control.

...

For

...

example

...

the

...

following

...

function,

...

set

...

as

...

handler

...

for

...

the

...

onOpen

...

even

...

of

...

a

...

pre-import

...

hook,

...

will

...

delete

...

a

...

no

...

longer

...

needed

...

column

...

from

...

a

...

table.

...

Code Block
JavaScript
JavaScript
function onSolutionOpenBeforeImport()
{
	var server = plugins.maintenance.getServer("example_data")
	if (server) {
		var table = server.getTable("todo_list")
		if (table) {
			table.deleteColumn("todo_list_suggested_by")
			var result = server.synchronizeWithDB(table)
			if (result)
				application.output("'Suggested By' column removed.")
			else
				application.output("Something went wrong while deleting column.")
		}
		else {
			application.output("Table 'todo_list' cannot be found.")
		}
	}
	else {
		application.output("Server 'example_data' cannot be found.")
	}
}
{code}

The

...

function

...

tries

...

to

...

obtain

...

a

...

reference

...

to

...

the

...

server

...

where

...

the

...

table

...

is

...

stored.

...

If

...

successful,

...

then

...

it

...

tries

...

to

...

obtain

...

a

...

reference

...

to

...

the

...

table

...

which

...

holds

...

the

...

obsolete

...

column.

...

If

...

this

...

step

...

is

...

also

...

successful,

...

then

...

it

...

deletes

...

the

...

column.

...

In

...

order

...

to

...

make

...

the

...

change

...

permanent,

...

the

...

table

...

must

...

be

...

synchronized

...

with

...

the

...

underlying

...

database.

...

In

...

pre-import

...

and

...

post-import

...

hooks,

...

besides

...

changing

...

the

...

database

...

structure,

...

you

...

can

...

also

...

change

...

the

...

database

...

content.

...

This

...

is

...

done

...

in

...

the

...

classical

...

way,

...

by

...

using

...

the

...

foundset

...

API.

...

It's

...

also

...

possible

...

to

...

use

...

the

...

rawSQL

...

plugin

...

to

...

modify

...

both

...

data

...

and

...

the

...

datamodel

...

in

...

the

...

database.

...

If

...

changes

...

are

...

made

...

to

...

the

...

datamodel

...

this

...

way,

...

after

...

completing

...

the

...

changes,

...

the

...

function

...

JSServer.reloadDataModel(...)

...

needs

...

to

...

be

...

called,

...

to

...

make

...

the

...

Servoy

...

Application

...

Server

...

aware

...

of

...

the

...

changes

...

made.

...

:= }
Note
title
Multi
database
SaaS

When

deploying

in

a

multi

database

SaaS

model,

any

operation

done

on

the

Database

Servers

needs

to

be

performed

on

each

clone

of

the

master

Database

Server.

The

[

getDataModelClonesFrom(serverName)

|#getDataModelClonesFrom]

function

can

be

used

to

retrieve

a

list

of

all

Database

Servers

marked

as

clone

of

a

master

Database

Server

(using

the

"

[

Data

model

cloned

from|Database Servers#Data model cloned from]" property{note} {note:title=Maintenance plugin & [Servoy Cluster]}All operations performed by the Maintenance plugin when executed on a Servoy Application Server that is part of a Servoy Cluster will operate on the entire cluster.{note} {note:title=Maintenance plugin availablility}The Maintenance plugin is only available to the code being executed inside the pre and post import hooks. The plugin can not be used in normal clients{note}{sub-section}\\ {table:id=|class=servoy sReturnTypes}{tr:style=height: 30px;}{th}Return Types{th}{tr}{tr}{td}{span:class=sWordList}[JSClientInformation]{span}{span:class=sWordList}[JSServer]{span}{span:class=sWordList}[JSTableObject]{span}{td}{tr}{table}\\ {table:id=|class=servoy sSummery}{colgroup}{column:padding=0px|width=80px}{column}{column}{column}{colgroup}{tr:style=height: 30px;}{th:colspan=2}Method Summery{th}{tr}{tbody}{tr}{td}{td}{td}[#getConnectedClients]() Returns an array of JSClientInformation elements describing the clients connected to the server.{td}{tr}{tbody}{tbody}{tr}{td}[String]\[\]{td}{td}[#getDataModelClonesFrom](serverName) Retrieves a list with names of all database servers that have property DataModelCloneFrom equal to the parameter.{td}{tr}{tbody}{tbody}{tr}{td}[JSServer]{td}{td}[#getServer](serverName, \[mustBeEnabled\], \[mustBeValid\]) Retrieves an instance of JSServer corresponding to the server with the name specified through the "serverName" argument.{td}{tr}{tbody}{tbody}{tr}{td}[String]\[\]{td}{td}[#getServerNames](\[mustBeEnabled\], \[mustBeValid\], \[sort\], \[includeDuplicates\]) Retrieves a list with the names of all available database servers.{td}{tr}{tbody}{tbody}{tr}{td}[Boolean]{td}{td}[#isInMaintenanceMode]() Returns true if the server is in maintenance mode, false otherwise.{td}{tr}{tbody}{tbody}{tr}{td}void{td}{td}[#sendMessageToAllClients](message) Sends a message to all connected clients.{td}{tr}{tbody}{tbody}{tr}{td}void{td}{td}[#sendMessageToClient](clientId, message) Sends a message to a specific client, identified by its clientId.{td}{tr}{tbody}{tbody}{tr}{td}void{td}{td}[#setMaintenanceMode](maintenanceMode) Puts the server into/out of maintenance mode, depending on the boolean parameter that is specified (if the parameter is true, then the server will be put into maintenance mode; if the parameter is false, then the server will be put out of maintenance mode).{td}{tr}{tbody}{tbody}{tr}{td}void{td}{td}[#shutDownAllClients]() Shuts down all connected clients.{td}{tr}{tbody}{tbody}{tr}{td}void{td}{td}[#shutDownClient](clientId) Shuts down a specific client, identified by its clientId.{td}{tr}{tbody}{table}\\ {table:id=function|class=servoy sDetail}{colgroup}{column:padding=0px|width=100%}{column}{colgroup}{tr:style=height: 30px;}{th:colspan=1}Method Details{th}{tr}{tbody:id=getConnectedClients|class=node}{tr:id=name}{td} h6. getConnectedClients{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}{span}{span:id=iets|style=float: left; font-weight: bold;}getConnectedClients{span}{span:id=iets|style=float: left;}(){span}{td}{tr}{tr:id=des}{td}{sub-section:getConnectedClients_des|text=|trigger=button}{sub-section}{sub-section:getConnectedClients_des|trigger=none|class=sIndent}Returns an array of JSClientInformation elements describing the clients connected to the server.{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:getConnectedClients_snc|text=|trigger=button}{sub-section}{sub-section:getConnectedClients_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:getConnectedClients_prs|text=|trigger=button}{sub-section}{sub-section:getConnectedClients_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=ret}{td}*Returns*\\{sub-section:getConnectedClients_ret|text=|trigger=button}{sub-section}{sub-section:getConnectedClients_ret|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:getConnectedClients_see|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:getConnectedClients_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:getConnectedClients_link|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:getConnectedClients_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}{*}Sample* \\ {sub-section:getConnectedClients_sam|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:getConnectedClients_sam|trigger=none}{code:language=javascript} // WARNING: maintenance plugin is only meant to run during solution import using before or after import hook(so not from Smart/Web client) //Returns an array of JSClientInformation elements describing the clients connected to the server. var clients = plugins.maintenance.getConnectedClients(); application.output("There are " + clients.length + " connected clients."); for (var i = 0; i < clients.length; i++) application.output("Client has clientId '" + clients[i].getClientId() + "' and has connected from host '" + clients[i].getHostAddress() + "'."); {code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=getDataModelClonesFrom|class=node}{tr:id=name}{td} h6. getDataModelClonesFrom{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[String]\[\]{span}{span:id=iets|style=float: left; font-weight: bold;}getDataModelClonesFrom{span}{span:id=iets|style=float: left;}(serverName){span}{td}{tr}{tr:id=des}{td}{sub-section:getDataModelClonesFrom_des|text=|trigger=button}{sub-section}{sub-section:getDataModelClonesFrom_des|trigger=none|class=sIndent}Retrieves a list with names of all database servers that have property DataModelCloneFrom equal to the parameter.{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:getDataModelClonesFrom_snc|text=|trigger=button}{sub-section}{sub-section:getDataModelClonesFrom_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}{*}Parameters* \\ {sub-section:getDataModelClonesFrom_prs|text=|trigger=button}{sub-section}{sub-section:getDataModelClonesFrom_prs|trigger=none|class=sIndent}serverName {sub-section}{td}{tr}{tr:id=ret}{td}{*}Returns* \\ {sub-section:getDataModelClonesFrom_ret|text=|trigger=button}{sub-section}{sub-section:getDataModelClonesFrom_ret|trigger=none|class=sIndent}[String]\[]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:getDataModelClonesFrom_see|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:getDataModelClonesFrom_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:getDataModelClonesFrom_link|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:getDataModelClonesFrom_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}{*}Sample* \\ {sub-section:getDataModelClonesFrom_sam|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:getDataModelClonesFrom_sam|trigger=none}{code:language=javascript} // WARNING: maintenance plugin is only meant to run during solution import using before or after import hook(so not from Smart/Web client) //Retrieves a list with names of all database servers that have property DataModelCloneFrom equal to the parameter. var serverNames = plugins.maintenance.getDataModelClonesFrom('my_server'); for (var i=0; i<serverNames.length; i++) application.output("Process server " + i + ": " + serverNames[i]); {code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=getServer|class=node}{tr:id=name}{td} h6. getServer{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[JSServer]{span}{span:id=iets|style=float: left; font-weight: bold;}getServer{span}{span:id=iets|style=float: left;}(serverName, \[mustBeEnabled\], \[mustBeValid\]){span}{td}{tr}{tr:id=des}{td}{sub-section:getServer_des|text=|trigger=button}{sub-section}{sub-section:getServer_des|trigger=none|class=sIndent}Retrieves an instance of JSServer corresponding to the server with the name specified through the "serverName" argument. If the optional argument "mustBeEnabled" is set to true, then the JSServer instance is returned only if the server is active. Similarly, if the "mustBeValid" optional

from" property

Note
titleMaintenance plugin & [Servoy Cluster]

All operations performed by the Maintenance plugin when executed on a Servoy Application Server that is part of a Servoy Cluster will operate on the entire cluster.

Note
titleMaintenance plugin availablility

The Maintenance plugin is only available to the code being executed inside the pre and post import hooks. The plugin can not be used in normal clients


HTML Table
classservoy sReturnTypes
Table Row (tr)
styleheight: 30px;
Table Head (th)
Return Types
Table Row (tr)
Table Cell (td)
Span
classsWordList
JSClientInformation
Span
classsWordList
JSServer
Span
classsWordList
JSTableObject

HTML Table
classservoy sSummery
Colgroup Tag
Column
padding0px
width80px

Column

Table Row (tr)
styleheight: 30px;
Table Head (th)
colspan2
Method Summery
Table Body (tbody)
Table Row (tr)
Table Cell (td)

Table Cell (td)
#getConnectedClients()
Returns an array of JSClientInformation elements describing the clients connected to the server.
Table Body (tbody)
Table Row (tr)
Table Cell (td)
String[]
Table Cell (td)
#getDataModelClonesFrom(serverName)
Retrieves a list with names of all database servers that have property DataModelCloneFrom equal to the parameter.
Table Body (tbody)
Table Row (tr)
Table Cell (td)
JSServer
Table Cell (td)
#getServer(serverName, [mustBeEnabled], [mustBeValid])
Retrieves an instance of JSServer corresponding to the server with the name specified through the "serverName" argument.
Table Body (tbody)
Table Row (tr)
Table Cell (td)
String[]
Table Cell (td)
#getServerNames([mustBeEnabled], [mustBeValid], [sort], [includeDuplicates])
Retrieves a list with the names of all available database servers.
Table Body (tbody)
Table Row (tr)
Table Cell (td)
Boolean
Table Cell (td)
#isInMaintenanceMode()
Returns true if the server is in maintenance mode, false otherwise.
Table Body (tbody)
Table Row (tr)
Table Cell (td)
void
Table Cell (td)
#sendMessageToAllClients(message)
Sends a message to all connected clients.
Table Body (tbody)
Table Row (tr)
Table Cell (td)
void
Table Cell (td)
#sendMessageToClient(clientId, message)
Sends a message to a specific client, identified by its clientId.
Table Body (tbody)
Table Row (tr)
Table Cell (td)
void
Table Cell (td)
#setMaintenanceMode(maintenanceMode)
Puts the server into/out of maintenance mode, depending on the boolean parameter that is specified (if the parameter is true, then the server will be put into maintenance mode; if the parameter is false, then the server will be put out of maintenance mode).
Table Body (tbody)
Table Row (tr)
Table Cell (td)
void
Table Cell (td)
#shutDownAllClients()
Shuts down all connected clients.
Table Body (tbody)
Table Row (tr)
Table Cell (td)
void
Table Cell (td)
#shutDownClient(clientId)
Shuts down a specific client, identified by its clientId.

HTML Table
idfunction
classservoy sDetail
Colgroup Tag
Column
padding0px
width100%

Table Row (tr)
styleheight: 30px;
Table Head (th)
colspan1
Method Details
Table Body (tbody)
idgetConnectedClients
classnode
Table Row (tr)
idname
Table Cell (td)
getConnectedClients
Table Row (tr)
idsig
Table Cell (td)
Span
stylefloat: left; margin-right: 5px;

Span
stylefloat: left; font-weight: bold;
idiets
getConnectedClients
Span
stylefloat: left;
idiets
()
Table Row (tr)
iddes
Table Cell (td)
Returns an array of JSClientInformation elements describing the clients connected to the server.
Table Row (tr)
idsam
Table Cell (td)
Sample
Div
classsIndent
Code Block
languagejavascript

// WARNING: maintenance plugin is only meant to run during solution import using before or after import hook(so not from Smart/Web client)
//Returns an array of JSClientInformation elements describing the clients connected to the server.
var clients = plugins.maintenance.getConnectedClients();
application.output("There are " + clients.length + " connected clients.");
for (var i = 0; i < clients.length; i++)
	application.output("Client has clientId '" + clients[i].getClientId() + "' and has connected from host '" + clients[i].getHostAddress() + "'.");
Table Row (tr)
classlastDetailRow
Table Cell (td)

Table Body (tbody)
idgetDataModelClonesFrom
classnode
Table Row (tr)
idname
Table Cell (td)
getDataModelClonesFrom
Table Row (tr)
idsig
Table Cell (td)
Span
stylefloat: left; margin-right: 5px;
String[]
Span
stylefloat: left; font-weight: bold;
idiets
getDataModelClonesFrom
Span
stylefloat: left;
idiets
(serverName)
Table Row (tr)
iddes
Table Cell (td)
Retrieves a list with names of all database servers that have property DataModelCloneFrom equal to the parameter.
Table Row (tr)
idprs
Table Cell (td)
Parameters
serverName
Table Row (tr)
idret
Table Cell (td)
Returns
String[]
Table Row (tr)
idsam
Table Cell (td)
Sample
Div
classsIndent
Code Block
languagejavascript

// WARNING: maintenance plugin is only meant to run during solution import using before or after import hook(so not from Smart/Web client)
//Retrieves a list with names of all database servers that have property DataModelCloneFrom equal to the parameter.
var serverNames = plugins.maintenance.getDataModelClonesFrom('my_server');
for (var i=0; i<serverNames.length; i++)
	application.output("Process server " + i + ": " + serverNames[i]);
Table Row (tr)
classlastDetailRow
Table Cell (td)

Table Body (tbody)
idgetServer
classnode
Table Row (tr)
idname
Table Cell (td)
getServer
Table Row (tr)
idsig
Table Cell (td)
Span
stylefloat: left; margin-right: 5px;
JSServer
Span
stylefloat: left; font-weight: bold;
idiets
getServer
Span
stylefloat: left;
idiets
(serverName, [mustBeEnabled], [mustBeValid])
Table Row (tr)
iddes
Table Cell (td)
Retrieves an instance of JSServer corresponding to the server with the name specified through the "serverName" argument.
If the optional argument "mustBeEnabled" is set to true, then the JSServer instance is returned only if the server is active.
Similarly, if the "mustBeValid" optional argument is set to true, then the JSServer instance is returned only if the server is valid.
If the specified server is not found, or if it does not meet the requirements imposed by the optional arguments, then null is returned.
By default both optional arguments have the value false.
Table Row (tr)
idprs
Table Cell (td)
Parameters
serverName
[mustBeEnabled]
[mustBeValid]
Table Row (tr)
idret
Table Cell (td)
Returns
JSServer
Table Row (tr)
idsam
Table Cell (td)
Sample
Div
classsIndent
Code Block
languagejavascript

// WARNING: maintenance plugin is only meant to run during solution import using before or after import hook(so not from Smart/Web client)
//Retrieves an instance of JSServer corresponding to the server with the name specified through the "serverName" argument.
//If the optional argument "mustBeEnabled" is set to true, then the JSServer instance is returned only if the server is active.
//Similarly, if the "mustBeValid" optional argument is set to true, then the JSServer instance is returned only if the server is valid.
//If the specified server is not found, or if it does not meet the requirements imposed by the optional arguments, then null is returned.
//By default both optional arguments have the value false.
var server = plugins.maintenance.getServer("example_data");
if (server) {
	var tableNames = server.getTableNames();
	application.output("There are " + tableNames.length + " tables.");
	for (var i=0; i<tableNames.length; i++)
		application.output("Table " + i + ": " + tableNames[i]);
	}
else {
	plugins.dialogs.showInfoDialog("Attention","Server 'example_data' cannot be found.","OK");
}
Table Row (tr)
classlastDetailRow
Table Cell (td)

Table Body (tbody)
idgetServerNames
classnode
Table Row (tr)
idname
Table Cell (td)
getServerNames
Table Row (tr)
idsig
Table Cell (td)
Span
stylefloat: left; margin-right: 5px;
String[]
Span
stylefloat: left; font-weight: bold;
idiets
getServerNames
Span
stylefloat: left;
idiets
([mustBeEnabled], [mustBeValid], [sort], [includeDuplicates])
Table Row (tr)
iddes
Table Cell (td)
Retrieves a list with the names of all available database servers. The returned list will contain only enabled servers if the "mustBeEnabled"
optional argument is set to true. The list will contain only valid servers if the "mustBeValid" argument is set to true. If the "sort" optional
argument is set to true, then the list will be sorted alphabetically. If the "includeDuplicates" optional argument is set to false, then duplicate
servers will appear only once in the list. By default, the "mustBeEnabled" and the "mustBeValid" arguments have the value false, while the "sort"
and "includeDuplicates" arguments have the value true.
Table Row (tr)
idprs
Table Cell (td)
Parameters
[mustBeEnabled]
[mustBeValid]
[sort]
[includeDuplicates]
Table Row (tr)
idret
Table Cell (td)
Returns
String[]
Table Row (tr)
idsam
Table Cell (td)
Sample
Div
classsIndent
Code Block
languagejavascript

// WARNING: maintenance plugin is only meant to run during solution import using before or after import hook(so not from Smart/Web client)
//Retrieves a list with the names of all available database servers. The returned list will contain only enabled servers if the "mustBeEnabled"
//optional argument is set to true. The list will contain only valid servers if the "mustBeValid" argument is set to true. If the "sort" optional
//argument is set to true, then the 
JSServer
list 
instance
will 
is
be 
returned
sorted 
only
alphabetically. 
if
If the 
server
"includeDuplicates" 
is
optional 
valid.
argument 
If
is 
the
set 
specified
to 
server
false, 
is
then 
not found, or if it does not meet the requirements imposed by the optional arguments, then null is returned. By default both optional
duplicate
//servers will appear only once in the list. By default, the "mustBeEnabled" and the "mustBeValid" arguments have the value false, while the "sort"
//and "includeDuplicates" arguments have the value 
false.{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:getServer_snc|text=|trigger=button}{sub-section}{sub-section:getServer_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}{*}Parameters* \\ {sub-section:getServer_prs|text=|trigger=button}{sub-section}{sub-section:getServer_prs|trigger=none|class=sIndent}serverName \[mustBeEnabled\] \[mustBeValid\] {sub-section}{td}{tr}{tr:id=ret}{td}{*}Returns* \\ {sub-section:getServer_ret|text=|trigger=button}{sub-section}{sub-section:getServer_ret|trigger=none|class=sIndent}[JSServer]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:getServer_see|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:getServer_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:getServer_link|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:getServer_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}{*}Sample* \\ {sub-section:getServer_sam|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:getServer_sam|trigger=none}{code:language=javascript} // WARNING: maintenance plugin is only meant to run
true.
var serverNames = plugins.maintenance.getServerNames();
application.output("There are " + serverNames.length + " servers.");
for (var i=0; i<serverNames.length; i++)
	application.output("Server " + i + ": " + serverNames[i]);
Table Row (tr)
classlastDetailRow
Table Cell (td)

Table Body (tbody)
idisInMaintenanceMode
classnode
Table Row (tr)
idname
Table Cell (td)
isInMaintenanceMode
Table Row (tr)
idsig
Table Cell (td)
Span
stylefloat: left; margin-right: 5px;
Boolean
Span
stylefloat: left; font-weight: bold;
idiets
isInMaintenanceMode
Span
stylefloat: left;
idiets
()
Table Row (tr)
iddes
Table Cell (td)
Returns true if the server is in maintenance mode, false otherwise.
Table Row (tr)
idret
Table Cell (td)
Returns
Boolean
Table Row (tr)
idsam
Table Cell (td)
Sample
Div
classsIndent
Code Block
languagejavascript

// WARNING: maintenance plugin is only meant to run during solution import using before or after import hook(so not from Smart/Web client)
//
Retrieves
Returns 
an instance of JSServer corresponding to
true if the server 
with
is 
the
in 
name
maintenance 
specified
mode, 
through
false 
the "serverName" argument. //If the optional argument "mustBeEnabled" is set to true, then the JSServer instance is returned only if the server is active. //Similarly, if the "mustBeValid" optional argument is set to true, then the JSServer instance is returned only if the server is valid. //If the specified server is not found, or if it does not meet the requirements imposed by the optional arguments, then null is returned. //By default both optional arguments have the value false. var server = plugins.maintenance.getServer("example_data"); if (server) { var tableNames = server.getTableNames(); application.output("There are " + tableNames.length + " tables."); for (var i=0; i<tableNames.length; i++) application.output("Table " + i + ": " + tableNames[i]); } else { plugins.dialogs.showInfoDialog("Attention","Server 'example_data' cannot be found.","OK"); } {code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=getServerNames|class=node}{tr:id=name}{td} h6. getServerNames{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[String]\[\]{span}{span:id=iets|style=float: left; font-weight: bold;}getServerNames{span}{span:id=iets|style=float: left;}(\[mustBeEnabled\], \[mustBeValid\], \[sort\], \[includeDuplicates\]){span}{td}{tr}{tr:id=des}{td}{sub-section:getServerNames_des|text=|trigger=button}{sub-section}{sub-section:getServerNames_des|trigger=none|class=sIndent}Retrieves a list with the names of all available database servers. The returned list will contain only enabled servers if the "mustBeEnabled" optional argument is set to true. The list will contain only valid servers if the "mustBeValid" argument is set to true. If the "sort" optional argument is set to true, then the list will be sorted alphabetically. If the "includeDuplicates" optional argument is set to false, then duplicate servers will appear only once in the list. By default, the "mustBeEnabled" and the "mustBeValid" arguments have the value false, while the "sort" and "includeDuplicates" arguments have the value true.{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:getServerNames_snc|text=|trigger=button}{sub-section}{sub-section:getServerNames_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}{*}Parameters* \\ {sub-section:getServerNames_prs|text=|trigger=button}{sub-section}{sub-section:getServerNames_prs|trigger=none|class=sIndent}\[mustBeEnabled\] \[mustBeValid\] \[sort\] \[includeDuplicates\] {sub-section}{td}{tr}{tr:id=ret}{td}{*}Returns* \\ {sub-section:getServerNames_ret|text=|trigger=button}{sub-section}{sub-section:getServerNames_ret|trigger=none|class=sIndent}[String]\[]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:getServerNames_see|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:getServerNames_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:getServerNames_link|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:getServerNames_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}{*}Sample* \\ {sub-section:getServerNames_sam|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:getServerNames_sam|trigger=none}{code:language=javascript} // WARNING: maintenance plugin is only meant to run during solution import using before or after import hook(so not from Smart/Web client) //Retrieves a list with the names of all available database servers. The returned list will contain only enabled servers if the "mustBeEnabled" //optional argument is set to true. The list will contain only valid servers if the "mustBeValid" argument is set to true. If the "sort" optional //argument is set to true, then the list will be sorted alphabetically. If the "includeDuplicates" optional argument is set to false, then duplicate //servers will appear only once in the list. By default, the "mustBeEnabled" and the "mustBeValid" arguments have the value false, while the "sort" //and "includeDuplicates" arguments have the value true. var serverNames = plugins.maintenance.getServerNames(); application.output("There are " + serverNames.length + " servers."); for (var i=0; i<serverNames.length; i++) application.output("Server " + i + ": " + serverNames[i]); {code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=isInMaintenanceMode|class=node}{tr:id=name}{td} h6. isInMaintenanceMode{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[Boolean]{span}{span:id=iets|style=float: left; font-weight: bold;}isInMaintenanceMode{span}{span:id=iets|style=float: left;}(){span}{td}{tr}{tr:id=des}{td}{sub-section:isInMaintenanceMode_des|text=|trigger=button}{sub-section}{sub-section:isInMaintenanceMode_des|trigger=none|class=sIndent}Returns true if the server is in maintenance mode, false otherwise.{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:isInMaintenanceMode_snc|text=|trigger=button}{sub-section}{sub-section:isInMaintenanceMode_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:isInMaintenanceMode_prs|text=|trigger=button}{sub-section}{sub-section:isInMaintenanceMode_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}{*}Returns* \\ {sub-section:isInMaintenanceMode_ret|text=|trigger=button}{sub-section}{sub-section:isInMaintenanceMode_ret|trigger=none|class=sIndent}[Boolean]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:isInMaintenanceMode_see|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:isInMaintenanceMode_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:isInMaintenanceMode_link|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:isInMaintenanceMode_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}{*}Sample* \\ {sub-section:isInMaintenanceMode_sam|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:isInMaintenanceMode_sam|trigger=none}{code:language=javascript} // WARNING: maintenance plugin is only meant to run during solution import using before or after import hook(so not from Smart/Web client) //Returns true if the server is in maintenance mode, false otherwise. if (plugins.maintenance.isInMaintenanceMode()) application.output("Server is in maintenance mode."); else application.output("Server is not in maintenance mode."); {code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=sendMessageToAllClients|class=node}{tr:id=name}{td} h6. sendMessageToAllClients{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}void{span}{span:id=iets|style=float: left; font-weight: bold;}sendMessageToAllClients{span}{span:id=iets|style=float: left;}(message){span}{td}{tr}{tr:id=des}{td}{sub-section:sendMessageToAllClients_des|text=|trigger=button}{sub-section}{sub-section:sendMessageToAllClients_des|trigger=none|class=sIndent}Sends a message to all connected clients.{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:sendMessageToAllClients_snc|text=|trigger=button}{sub-section}{sub-section:sendMessageToAllClients_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}{*}Parameters* \\ {sub-section:sendMessageToAllClients_prs|text=|trigger=button}{sub-section}{sub-section:sendMessageToAllClients_prs|trigger=none|class=sIndent}message {sub-section}{td}{tr}{tr:id=ret}{td}{*}Returns* \\ {sub-section:sendMessageToAllClients_ret|text=|trigger=button}{sub-section}{sub-section:sendMessageToAllClients_ret|trigger=none|class=sIndent}void{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:sendMessageToAllClients_see|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:sendMessageToAllClients_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:sendMessageToAllClients_link|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:sendMessageToAllClients_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}{*}Sample* \\ {sub-section:sendMessageToAllClients_sam|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:sendMessageToAllClients_sam|trigger=none}{code:language=javascript} // WARNING: maintenance plugin is only meant to run during solution import using before or after import hook(so not from Smart/Web client) //Sends a message to all connected clients. plugins.maintenance.sendMessageToAllClients("Hello, all clients!"); {code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=sendMessageToClient|class=node}{tr:id=name}{td} h6. sendMessageToClient{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}void{span}{span:id=iets|style=float: left; font-weight: bold;}sendMessageToClient{span}{span:id=iets|style=float: left;}(clientId, message){span}{td}{tr}{tr:id=des}{td}{sub-section:sendMessageToClient_des|text=|trigger=button}{sub-section}{sub-section:sendMessageToClient_des|trigger=none|class=sIndent}Sends a message to a specific client, identified by its clientId. The clientIds are retrieved by calling the getConnectedClients method.{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:sendMessageToClient_snc|text=|trigger=button}{sub-section}{sub-section:sendMessageToClient_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}{*}Parameters* \\ {sub-section:sendMessageToClient_prs|text=|trigger=button}{sub-section}{sub-section:sendMessageToClient_prs|trigger=none|class=sIndent}clientId message {sub-section}{td}{tr}{tr:id=ret}{td}{*}Returns* \\ {sub-section:sendMessageToClient_ret|text=|trigger=button}{sub-section}{sub-section:sendMessageToClient_ret|trigger=none|class=sIndent}void{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:sendMessageToClient_see|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:sendMessageToClient_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:sendMessageToClient_link|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:sendMessageToClient_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}{*}Sample* \\ {sub-section:sendMessageToClient_sam|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:sendMessageToClient_sam|trigger=none}{code:language=javascript} // WARNING: maintenance plugin is only meant to run during solution import using before or after import hook(so not from Smart/Web client) //Sends a message to a specific client, identified by its clientId. The clientIds are retrieved by calling the getConnectedClients method. var clients = plugins.maintenance.getConnectedClients(); for (var i=0; i<clients.length; i++) plugins.maintenance.sendMessageToClient(clients[i].getClientId(), "Hello, client " + clients[i].getClientId() + "!"); {code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=setMaintenanceMode|class=node}{tr:id=name}{td} h6. setMaintenanceMode{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}void{span}{span:id=iets|style=float: left; font-weight: bold;}setMaintenanceMode{span}{span:id=iets|style=float: left;}(maintenanceMode){span}{td}{tr}{tr:id=des}{td}{sub-section:setMaintenanceMode_des|text=|trigger=button}{sub-section}{sub-section:setMaintenanceMode_des|trigger=none|class=sIndent}Puts the server into/out of maintenance mode, depending on the boolean parameter that is specified (if the parameter is true, then the server will be put into maintenance mode; if the parameter is false, then the server will be put out of maintenance mode).{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:setMaintenanceMode_snc|text=|trigger=button}{sub-section}{sub-section:setMaintenanceMode_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}{*}Parameters* \\ {sub-section:setMaintenanceMode_prs|text=|trigger=button}{sub-section}{sub-section:setMaintenanceMode_prs|trigger=none|class=sIndent}maintenanceMode {sub-section}{td}{tr}{tr:id=ret}{td}{*}Returns* \\ {sub-section:setMaintenanceMode_ret|text=|trigger=button}{sub-section}{sub-section:setMaintenanceMode_ret|trigger=none|class=sIndent}void{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:setMaintenanceMode_see|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:setMaintenanceMode_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:setMaintenanceMode_link|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:setMaintenanceMode_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}{*}Sample* \\ {sub-section:setMaintenanceMode_sam|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:setMaintenanceMode_sam|trigger=none}{code:language=javascript} // WARNING: maintenance plugin is only meant to run during solution import using before or after import hook(so not from Smart/Web client) //Puts the server into/out of maintenance mode, depending on the boolean parameter that is specified (if the parameter is true, then the server will be put into maintenance mode; if the parameter is false, then the server will be put out of maintenance mode). plugins.maintenance.setMaintenanceMode(!plugins.maintenance.isInMaintenanceMode()); {code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=shutDownAllClients|class=node}{tr:id=name}{td} h6. shutDownAllClients{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}void{span}{span:id=iets|style=float: left; font-weight: bold;}shutDownAllClients{span}{span:id=iets|style=float: left;}(){span}{td}{tr}{tr:id=des}{td}{sub-section:shutDownAllClients_des|text=|trigger=button}{sub-section}{sub-section:shutDownAllClients_des|trigger=none|class=sIndent}Shuts down all connected clients. This method returns immediately, it does not wait until the client shuts down.{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:shutDownAllClients_snc|text=|trigger=button}{sub-section}{sub-section:shutDownAllClients_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:shutDownAllClients_prs|text=|trigger=button}{sub-section}{sub-section:shutDownAllClients_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}{*}Returns* \\ {sub-section:shutDownAllClients_ret|text=|trigger=button}{sub-section}{sub-section:shutDownAllClients_ret|trigger=none|class=sIndent}void{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:shutDownAllClients_see|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:shutDownAllClients_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:shutDownAllClients_link|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:shutDownAllClients_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}{*}Sample* \\ {sub-section:shutDownAllClients_sam|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:shutDownAllClients_sam|trigger=none}{code:language=javascript}
otherwise.
if (plugins.maintenance.isInMaintenanceMode())
	application.output("Server is in maintenance mode.");
else
	application.output("Server is not in maintenance mode.");
Table Row (tr)
classlastDetailRow
Table Cell (td)

Table Body (tbody)
idsendMessageToAllClients
classnode
Table Row (tr)
idname
Table Cell (td)
sendMessageToAllClients
Table Row (tr)
idsig
Table Cell (td)
Span
stylefloat: left; margin-right: 5px;
void
Span
stylefloat: left; font-weight: bold;
idiets
sendMessageToAllClients
Span
stylefloat: left;
idiets
(message)
Table Row (tr)
iddes
Table Cell (td)
Sends a message to all connected clients.
Table Row (tr)
idprs
Table Cell (td)
Parameters
message
Table Row (tr)
idret
Table Cell (td)
Returns
void
Table Row (tr)
idsam
Table Cell (td)
Sample
Div
classsIndent
Code Block
languagejavascript

// WARNING: maintenance plugin is only meant to run during solution import using before or after import hook(so not from Smart/Web client)
//Sends a message to all connected clients.
plugins.maintenance.sendMessageToAllClients("Hello, all clients!");
Table Row (tr)
classlastDetailRow
Table Cell (td)

Table Body (tbody)
idsendMessageToClient
classnode
Table Row (tr)
idname
Table Cell (td)
sendMessageToClient
Table Row (tr)
idsig
Table Cell (td)
Span
stylefloat: left; margin-right: 5px;
void
Span
stylefloat: left; font-weight: bold;
idiets
sendMessageToClient
Span
stylefloat: left;
idiets
(clientId, message)
Table Row (tr)
iddes
Table Cell (td)
Sends a message to a specific client, identified by its clientId. The clientIds are retrieved by calling the getConnectedClients method.
Table Row (tr)
idprs
Table Cell (td)
Parameters
clientId
message
Table Row (tr)
idret
Table Cell (td)
Returns
void
Table Row (tr)
idsam
Table Cell (td)
Sample
Div
classsIndent
Code Block
languagejavascript

// WARNING: maintenance plugin is only meant to run during solution import using before or after import hook(so not from Smart/Web client)
//Sends a message to a specific client, identified by its clientId. The clientIds are retrieved by calling the getConnectedClients method.
var clients = plugins.maintenance.getConnectedClients();
for (var i=0; i<clients.length; i++)
	plugins.maintenance.sendMessageToClient(clients[i].getClientId(), "Hello, client " + clients[i].getClientId() + "!");
Table Row (tr)
classlastDetailRow
Table Cell (td)

Table Body (tbody)
idsetMaintenanceMode
classnode
Table Row (tr)
idname
Table Cell (td)
setMaintenanceMode
Table Row (tr)
idsig
Table Cell (td)
Span
stylefloat: left; margin-right: 5px;
void
Span
stylefloat: left; font-weight: bold;
idiets
setMaintenanceMode
Span
stylefloat: left;
idiets
(maintenanceMode)
Table Row (tr)
iddes
Table Cell (td)
Puts the server into/out of maintenance mode, depending on the boolean parameter that is specified (if the parameter is true, then the server will be put into maintenance mode; if the parameter is false, then the server will be put out of maintenance mode).
Table Row (tr)
idprs
Table Cell (td)
Parameters
maintenanceMode
Table Row (tr)
idret
Table Cell (td)
Returns
void
Table Row (tr)
idsam
Table Cell (td)
Sample
Div
classsIndent
Code Block
languagejavascript

// WARNING: maintenance plugin is only meant to
run during solution import using before or after import hook(so not from Smart/Web client) //Shuts down all connected clients. This method returns immediately, it does not wait until the client shuts down
 run during solution import using before or after import hook(so not from Smart/Web client)
//Puts the server into/out of maintenance mode, depending on the boolean parameter that is specified (if the parameter is true, then the server will be put into maintenance mode; if the parameter is false, then the server will be put out of maintenance mode).
plugins.maintenance.
shutDownAllClients(); {code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=shutDownClient|class=node}{tr:id=name}{td} h6. shutDownClient{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}void{span}{span:id=iets|style=float: left; font-weight: bold;}shutDownClient{span}{span:id=iets|style=float: left;}(clientId){span}{td}{tr}{tr:id=des}{td}{sub-section:shutDownClient_des|text=|trigger=button}{sub-section}{sub-section:shutDownClient_des|trigger=none|class=sIndent}Shuts down a specific client, identified by its clientId. The clientIds are retrieved by calling the getConnectedClients method. This method returns immediately, it does not wait until the client shuts down.{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:shutDownClient_snc|text=|trigger=button}{sub-section}{sub-section:shutDownClient_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}{*}Parameters* \\ {sub-section:shutDownClient_prs|text=|trigger=button}{sub-section}{sub-section:shutDownClient_prs|trigger=none|class=sIndent}clientId {sub-section}{td}{tr}{tr:id=ret}{td}{*}Returns* \\ {sub-section:shutDownClient_ret|text=|trigger=button}{sub-section}{sub-section:shutDownClient_ret|trigger=none|class=sIndent}void{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:shutDownClient_see|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:shutDownClient_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:shutDownClient_link|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:shutDownClient_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}{*}Sample* \\ {sub-section:shutDownClient_sam|text=|trigger=button}{sub-section}{div:class=sIndent}{sub-section:shutDownClient_sam|trigger=none}{code:language=javascript}
setMaintenanceMode(!plugins.maintenance.isInMaintenanceMode());
Table Row (tr)
classlastDetailRow
Table Cell (td)

Table Body (tbody)
idshutDownAllClients
classnode
Table Row (tr)
idname
Table Cell (td)
shutDownAllClients
Table Row (tr)
idsig
Table Cell (td)
Span
stylefloat: left; margin-right: 5px;
void
Span
stylefloat: left; font-weight: bold;
idiets
shutDownAllClients
Span
stylefloat: left;
idiets
()
Table Row (tr)
iddes
Table Cell (td)
Shuts down all connected clients. This method returns immediately, it does not wait until the client shuts down.
Table Row (tr)
idret
Table Cell (td)
Returns
void
Table Row (tr)
idsam
Table Cell (td)
Sample
Div
classsIndent
Code Block
languagejavascript

// WARNING: maintenance plugin is only meant to run during solution import using before or after import hook(so not from Smart/Web client)
//Shuts down all connected clients. This method returns immediately, it does not wait until the client shuts down.
plugins.maintenance.shutDownAllClients();
Table Row (tr)
classlastDetailRow
Table Cell (td)

Table Body (tbody)
idshutDownClient
classnode
Table Row (tr)
idname
Table Cell (td)
shutDownClient
Table Row (tr)
idsig
Table Cell (td)
Span
stylefloat: left; margin-right: 5px;
void
Span
stylefloat: left; font-weight: bold;
idiets
shutDownClient
Span
stylefloat: left;
idiets
(clientId)
Table Row (tr)
iddes
Table Cell (td)
Shuts down a specific client, identified by its clientId. The clientIds are retrieved by calling the getConnectedClients method. This method returns immediately, it does not wait until the client shuts down.
Table Row (tr)
idprs
Table Cell (td)
Parameters
clientId
Table Row (tr)
idret
Table Cell (td)
Returns
void
Table Row (tr)
idsam
Table Cell (td)
Sample
Div
classsIndent
Code Block
languagejavascript

// WARNING: maintenance plugin is only meant to run during solution import using before or after import hook(so not from Smart/Web client)
//Shuts down a specific client, identified by its clientId. The clientIds are retrieved by calling the getConnectedClients method. This method returns immediately, it does not wait until the client shuts down.
var clients = plugins.maintenance.getConnectedClients();
for (var i=0; i<clients.length; i++)
	plugins.maintenance.shutDownClient(clients[i].getClientId());
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{table}
Table Row (tr)
classlastDetailRow
Table Cell (td)