Web modeler SDK
The web modeler SDK Description
The web modeler SDK is available in the web modeler, It allows users access resources from user interface and execute complexe computational in the user interface run time.
The SDK has the following classes
class SoftyFlow {}
class Collection {}
class SQLDatabase {}
class CustomList {}
class Report {}
class Instance {}
class Task {}
class Api {}
class Email {}
class File {}
In the following sections we will explicit each class and the allowed methods.
1 - SoftyFlow
The SoftyFlow class has the SoftyFlow system methods
Usage
This class is instantiated by default as object named SF when the user interface is loaded, so you can use methods directly by calling them via object "SF"
//using SF object
let currentMode = this.SF.getSF_mode();
// instantiate new object
const softyflow = new SoftyFlow();
getSF_mode
Description
Is a function that return the mode of the running user interface
/**
* @return {string} Return string ('test', 'uat', 'prod')
*/
Examples
let currentMode = this.SF.getSF_mode();
getSF_Version
Description
Is a function that return the version of the running user interface
/**
* @return {string} Return string ('test', 'uat', 'prod')
*/
Examples
let currentVersion = this.SF.getSF_Version();
queryParams
Description
Is a function that return the query parameters
params | Description |
---|---|
select | optional. The fields to select (fields: SF_mode, SF_version, SF_screen) |
/**
* @param {string} select The selected fields
*
* @return {string} Return string
*/
Examples
let currentMode = this.SF.getSF_mode('SF_mode SF_version');
console.log(currentMode)
// ?SF_mode=test&SF_version=versionId
startProcess
Description
Is a function that start specific process
/**
*@param {string} id Process id
*@param {object} body Json of process variables
*
* @return {promise} Return promise
*/
Examples
let variables = {
"variable1": "value1",
"variable2": 1,
"variable3": true
}
await this.SF.startProcess('processId', variables);
saveNew
Description
Is a function that allow to you to save the user interface state
/**
*@param {string} id interface id
*@param {object} body Json of interface variables
*
* @return {promise} Return promise
*/
Examples
let variables = {
"variable1": "value1",
"variable2": 1,
"variable3": true
}
await this.SF.saveNew('interfaceId', variables);
saveTask
Description
Is a function that allow to you to save the task interface state
/**
*@param {string} id task id
*@param {object} body Json of task variables
*
* @return {promise} Return promise
*/
Examples
let variables = {
"variable1": "value1",
"variable2": 1,
"variable3": true
}
await this.SF.saveTask('taskId', variables);
validateTask
Description
Is a function that allow to validate Task
/**
*@param {string} id task id
*@param {object} body Json of task variables
*
* @return {promise} Return promise
*/
Examples
let variables = {
"variable1": "value1",
"variable2": 1,
"variable3": true
}
await this.SF.validateTask('taskId', variables);
getUserPendingTask
Description
Is a function that allow to get pending Task assigned to connected user.
/**
*@param {string} limit limit of result per page.
*@param {string} page number of page
*@param {string} dueDate related date.
*@param {string} fields fileds.
*
* @return {promise} Return promise
*/
Examples
await this.SF.getUserPendingTask('limit', 'page', 'dueDate', 'fields');
setListFromCollection
Description
Is a function that allow to set list of data from a specific collection.
/**
*@param {string} collection collection ID.
*@param {object} criteria Query json.
*@param {string} limit limit of result.
*@param {string} sort sort option.
*
* @return {promise} Return promise
*/
Examples
let criteria = {
firstName: new RegExp("p", "i")
}
await this.SF.setListFromCollection('collectionId', criteria, 10, 'sort');
setListFromSQL
Description
Is a function that allow to set list of data from client database.
/**
*@param {string} clientDatabase clientDatabase ID.
*@param {string} query Query table.
*
* @return {promise} Return promise
*/
Examples
await this.SF.setListFromSQL('clientDatabaseID', "code='MMA'");
setListFromCustomList
Description
Is a function that allow to set list of data from CustomList.
/**
*@param {string} CustomList CustomList ID.
*
* @return {promise} Return promise
*/
Examples
await this.SF.setListFromCustomList('CustomListID');
aggregateQuery
Description
Is a function that allow to set list of data from CustomList.
/**
*@param {string} type type of the resource (collection, report, users, projects, external databases).
*@param {string} id Id of the resource.
*@param {object} query Json of a value to be matched in the resource.
*
* @return {promise} Return promise
*/
Examples
await this.SF.aggregateQuery('collection', '610c0343f6ebc7ddcb49cc3b', {value : "it"});
deleteFile
Description
Is a function that allow to delete a file using it ID.
/**
*@param {string} id Id of the resource.
*
* @return {promise} Return promise
*/
Examples
await this.SF.deleteFile('610c0343f6ebc7ddcb49cc3b');
2 - Users
The Users class has the methods that will allow you to manage the users.
Usage
const users = new Users();
create
Description
Allow to create new user.
/**
* @param {object} data Json content user data
*
* @return {promise} Return promise
*/
Data
This is the allowed user data:
field | Description |
---|---|
Required and Unique. The user email (string) | |
lastName | Required. The user last name (string) |
firstName | Required. The user first name (string) |
group | Required. The user groups ids (array) |
metadata | optional. The user metadata (json) |
ideAccess | Required. IDE access right (boolean) |
blocked | optional. User blocking (boolean) |
Examples
let user = {
email: "email@softydev.com",
lastName : "last name",
firstName: "first name",
group: [],
metadata: {},
ideAccess: true,
blocked: false
}
await users.create(user);
update
Description
Allow to update a user
/**
* @param {string} id user id.
* @param {object} data User data.
*
* @return {promise} Return promise
*/
Data
The same allowed data in creation of user. The fields are optional.
Examples
let newData = {
ideAccess: false
}
await users.update("userId", newData);
delete
Description
Allow to delete a user.
/**
* @param {string} id user id.
*
* @return {promise} Return promise
*/
Examples
await users.delete("userId");
findById
Description
Allow to get a user by id.
/**
* @param {string} id user id.
*
* @return {promise} Return promise
*/
Examples
let user = await users.findById("userId");
find
Description
Allow to list the users.
/**
* @param {object} criteria Query json.
*
* @return {promise} Return promise
*/
Examples
let criteria = {
firstName: new RegExp("p", "i")
}
let usersList = await users.find(criteria);
count
Description
Allow to get the count of users.
/**
* @param {object} criteria Query json
*
* @return {promise} Return promise
*/
Examples
let criteria = {
blocked: false
}
let count = await users.count(criteria);
findAndCount
Description
get a list and the count of users
/**
* @param {object} body Json of options.
*
* @return {promise} Return promise
*/
Options
This options are optional
Option | Description |
---|---|
criteria | Specifies selection filter (default : {}) |
fields | Select specific fields (example: "createdAt email") |
limit | Number of instances returned (default : 100/ no limit : 0) |
page | Page number depends on the limit (default : 0) |
sortby | Sorts the results by key (default : createdAt) |
direction | Ascending (1) or descending (-1) order (default : -1) |
Examples
let body = {
criteria: {
firstName: new RegExp("p", "i")
},
limit: 10,
page: 0,
sortBy: "createdAt",
direction: -1
}
let res = await users.findAndCount(body);
let usersList = res.data;
let count = res.count;
aggregate
Description
Aggregation operations process data records and return computed results
/**
* @param {array} aggregation aggregation array
*
* @return {promise} Return promise
*/
Examples
let aggregation = [
{
"$match": { "firstName": new RegExp("z", "i") }
},
{
"$project" : {
"_id": 1,
"firstName": 1,
"lastName": 1,
"email": 1
}
}
]
let usersList = await users.aggregate([aggregation]);
addRole
Description
Add role to user using user ID & group ID.
/**
* @param {string} userId user ID.
*
* @param {string} groupid group ID.
*
* @param {string} mode mode of the running user. interface
*
* @return {promise} Return promise
*/
Examples
await users.addRole("userId","groupId","SF_mode");
removeRole
Description
Remove role from user using user ID & group ID.
/**
* @param {string} userId user ID.
*
* @param {string} groupid group ID.
*
* @param {string} mode mode of the running user interface
*
* @return {promise} Return promise
*/
Examples
await users.removeRole("userId","groupId","SF_mode");
3 - Collection
The collection class has the methods that will allow you to manage your collection
Usage
You can instantiate a Collection class with id or name of collection. You can add mode option
Option | Description |
---|---|
id | Required. id or name of collection |
mode | optional. Specifies mode of collection (default : "test") |
const collection = new Collection({ id: 'collectionId', mode: 'test' });
insert
Description
Allow to insert a json into a collection
/**
* @param {object} data Json of a value to be inserted in to the collection.
*
* @return {promise} Return promise
*/
Examples
await collection.insert({ name: "name1", type : "type1" });
insertMany
Description
Allow to insert an array of json in to a collection.
/**
* @param {object} data Json of a value to be inserted in to the collection.
*
* @return {promise} Return promise
*/
Examples
await collection.insertMany([{label : "IT", value : "it"}]);
updateMany
Description
update all the documents that satisfies the specified query criteria .
/**
* @param {object} criteria Query json.
* @param {object} data Json of a new data.
* @param {object} options Json of options
*
* @return {promise} Return promise
*/
Examples
let criteria = {
firstName: new RegExp("p", "i")
}
await collection.updateMany(criteria, [{ type : "type2" }], { upsert: true });
update
Description
Allow to update a document in collection
/**
* @param {string} id Document id.
* @param {object} data Json of a new data.
*
* @return {promise} Return promise
*/
Examples
await collection.update("documentId", { type : "type2" });
delete
Description
Allow to delete a document from collection
/**
* @param {string} id Document id.
*
* @return {promise} Return promise
*/
Examples
await collection.delete("documentId");
findById
Description
Allow to get a object by id from the collection
/**
* @param {string} id Document id.
*
* @return {promise} Return promise
*/
Examples
let document = await collection.findById(id);
find
Description
Allow to select the documents in a collection
/**
* @param {object} body Json of options.
*
* @return {promise} Return promise
*/
Options
This options are optional
Option | Description |
---|---|
criteria | Specifies selection filter (default : {}) |
limit | Number of documents returned (default : 100/ no limit : 0) |
page | Page number depends on the limit (default : 0) |
sortby | Sorts the results by key (default : createdAt) |
direction | Ascending (1) or descending (-1) order (default : -1) |
Examples
let body = {
criteria: {
name: new RegExp("p", "i"),
type: "type1"
},
limit: 10,
page: 0,
sortBy: "createdAt",
direction: -1
}
let documents = await collection.find(body);
count
Description
Allow to get the count of documents that would match a query for the collection
/**
* @param {object} criteria Query json
*
* @return {promise} Return promise
*/
Examples
let count = await collection.count({ type: "type1" });
aggregate
Description
Aggregation operations process data records and return computed results
/**
* @param {array} aggregation aggregation array
*
* @return {promise} Return promise
*/
Examples
let aggregation = [
{
"$match": { "type": "type1" }
},
{
"$project" : {
"_id": 1,
"name": 1
}
}
]
let documents = await collection.aggregate([aggregation]);
4 - SQLDatabase
Manage your external SQL Databases Through the SQLDatabase class.
Usage
You can instantiate an SQL class with id and mode(optional).
Option | Description |
---|---|
id | Required. id or name of Database |
mode | optional. Specifies mode of Database (default : "test") |
const sql = new SQLDatabase({ id: '610c0343f6ebc7ddcb49cc3b', mode: 'test' });
findOne
Description
Get a table row data
/**
* @param {string} tableName table name.
*
* @param {string} Criteria query table.
*
* @return {object}
*/
Examples
let res = await sql.findOne("client", "code='MMA'"))
find
Description
list multiple rows from sql table
/**
* @param {string} tableName table name.
*
* @param {string} options query table.
*
* @return {array}
*/
Examples
let res = sql.find("client", "code='MMA'")
count
Description
Get the row count for a table with a criteria
/**
* @param {string} tableName table name.
*
* @param {string} options query table.
*
* @return {array} array with one element contining count
*/
Examples
let count = await sql.count("client", "code='MMA'");
execute
Description
Execute a custom query on the database.
/**
* @param {string} query string of query.
*
* @return {array} Return array.
*/
Examples
sql.execute("INSERT INTO client(code, intitule, representant, codepostal) VALUES('MDSX', 'holder', 'holder', 14000)")
insert
Description
Insert one row into a table.
/**
* @param {string} tableName table name.
*
* @param {object} data JSON body.
*
* @return {array}
*/
Examples
sql.insert("client", {
code: 'HelloWord',
codepostal: 14000
}
insertMany
Description
Insert multiple rows into
/**
* @param {string} tableName table name.
*
* @param {array} data JSON body.
*
* @return {array}
*/
Examples
sql.insertMany("client", [
{ code: '#1' },
{ code: '#2' }
])
update
Description
Update rows.
/**
* @param {string} tableName table name.
*
* @param {string} query query table.
*
* @param {object} data updated JSON body.
*
* @return {object}
*/
Examples
sql.update('client', "code='MMA'",
{
code: "MQS"
})
delete
Description
Delete row/rows in your table.
/**
* @param {string} tableName table name.
*
* @param {string} query query table.
*
* @return {object}
*/
Examples
sql.delete("client", "id=223")
5 - CustomList
The CustomList class has the methods that will allow you to manage your Custom List
Usage
You can instantiate a CustomList class with id of custom list. You can add other options (mode, versionId)
Option | Description |
---|---|
id | Required. id of custom list |
mode | optional. Specifies mode of custom list (default : "test") |
versionId | optional. id of the version from which to get the custom list |
const customList = new CustomList({id: 'id', mode: 'test', versionId: "vId"});
get
Description
Get a custom list data
/**
* @return {promise} Return promise
*/
Examples
let customListData = await customList.get();
6 - Report
The Report class will allow you to manipulate specific report
Usage
You can instantiate a Report class with id of report. You can add mode option
Option | Description |
---|---|
id | Required. Specifies mode of custom list (default : "test") |
mode | optional. Specifies mode of custom list (default : "test") |
const report = new Report({id: 'id', mode: 'test'});
aggregate
Description
Aggregation operations process data records and return computed results
/**
* @param {array} aggregation aggregation array
*
* @return {promise} Return promise
*/
Examples
let aggregation = [
{
"$match": { "SF_status": "Running" }
},
{
"$sort": { "SF_createdAt": -1 }
}
]
let instances = await report.aggregate(aggregation); //report of instances
7 - Instance
The Instance class has the methods that will allow you to manage the instances
Usage
const inctance = new Instance();
findById
Description
Get a instance by id
/**
* @param {string} id id of instance.
*
* @return {promise} Return promise
*/
Examples
let oneInctance = await inctance.findById(id);
find
Description
list the instances
/**
* @param {object} criteria Json of query.
*
* @return {promise} Return promise
*/
Examples
let instances = await inctance.find({ status: "Running" });
count
Description
Allow to get the count of instances that would match a query
/**
* @param {object} criteria Query json
*
* @return {promise} Return promise
*/
Examples
let count = await inctance.count({ status: "Running" });
findAndCount
Description
get a list and the count of instances
/**
* @param {object} body Json of options.
*
* @return {promise} Return promise
*/
Options
This options are optional
Option | Description |
---|---|
criteria | Specifies selection filter (default : {}) |
fields | Select specific fields (example: "createdAt name status") |
limit | Number of instances returned (default : 100/ no limit : 0) |
page | Page number depends on the limit (default : 0) |
sortby | Sorts the results by key (default : createdAt) |
direction | Ascending (1) or descending (-1) order (default : -1) |
Examples
let body = {
criteria: {
status: "Running"
},
limit: 10,
page: 0,
sortBy: "createdAt",
direction: -1
}
let res = await inctance.findAndCount(body);
let instances = res.data;
let count = res.count;
aggregate
Description
Aggregation operations process data records and return computed results
/**
* @param {array} aggregation aggregation array
*
* @return {promise} Return promise
*/
Examples
let aggregation = [
{
"$match": { "status": "End" }
},
{
"$project" : {
"_id": 1,
"name": 1
}
}
]
let inctances = await inctance.aggregate([aggregation]);
update
Description
Update an instance
/**
* @param {string} id id of instance.
* @param {object} data Json of a new data.
*
* @return {promise} Return promise
*/
Examples
await inctance.update(id, { status : "End" });
delete
Description
Delete an instance
/**
* @param {string} id id of instance.
*
* @return {promise} Return promise
*/
Examples
await inctance.delete(id);
history
Description
Get instance history.
/**
* @param {string} id id of instance.
* @param {object} data Json of data.
*
* @return {promise} Return promise
*/
Examples
await inctance.history(id, { status : "End" });
8 - Task
The Task class has the methods that will allow you to manage the tasks
Usage
const task = new Task();
findById
Description
Get a task by id
/**
* @param {string} id id of task.
*
* @return {promise} Return promise
*/
Examples
let oneTask = await task.findById(id);
find
Description
list the tasks
/**
* @param {object} criteria Json of query.
*
* @return {promise} Return promise
*/
Examples
let tasks = await task.find({ instanceId: "instanceId" });
count
Description
Allow to get the count of tasks that would match a query
/**
* @param {object} criteria Query json
*
* @return {promise} Return promise
*/
Examples
let count = await task.count({ instanceId: "instanceId" });
findAndCount
Description
get a list and the count of tasks
/**
* @param {object} body Json of options.
*
* @return {promise} Return promise
*/
Options
This options are optional
Option | Description |
---|---|
criteria | Specifies selection filter (default : {}) |
assignedToConnected | To get tasks of connected user (default : false) |
fields | Select specific fields (example: "createdAt name status") |
limit | Number of instances returned (default : 100/ no limit : 0) |
page | Page number depends on the limit (default : 0) |
sortby | Sorts the results by key (default : createdAt) |
direction | Ascending (1) or descending (-1) order (default : -1) |
Examples
let body = {
criteria: {
status: "Running"
},
assignedToConnected: true,
limit: 10,
page: 0,
sortBy: "createdAt",
direction: -1
}
let res = await task.findAndCount(body);
let tasks = res.data;
let count = res.count;
aggregate
Description
Aggregation operations process data records and return computed results
/**
* @param {array} aggregation aggregation array
*
* @return {promise} Return promise
*/
Examples
let aggregation = [
{
"$match": { "status": "End" }
},
{
"$project" : {
"_id": 1,
"name": 1
}
}
]
let tasks = await task.aggregate([aggregation]);
update
Description
Update an task
/**
* @param {string} id id of task.
* @param {object} data Json of a new data.
*
* @return {promise} Return promise
*/
Examples
await task.update(id, { status : "End" });
delete
Description
Delete an task
/**
* @param {string} id id of task.
*
* @return {promise} Return promise
*/
Examples
await task.delete(id);
getNextValue
Description
Get next value of an task.
/**
* @param {string} name name of the variable.
* @param {number} [padding] Padding of result with 000000.
* @param {string} mode mode of the running user.
*
* @return {promise} Return promise
*/
Examples
await task.getNextValue("name",5,"SF_mode");
9 - Api
The Api class has the methods that will allow you to manage your Apis.
Usage
const api = new Api();
invoke
Description
Invoke an api.
/**
* @param {object} body Json of options.
*
* @return {promise} Return promise
*/
Examples
let body = {
const myElement = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
myElement.innerHTML = "Geolocation is not supported by this browser.";
}
}
function showPosition(position) {
myElement.innerHTML = "Latitude: " + position.coords.latitude +
"<br>Longitude: " + position.coords.longitude;
}
}
await api.invoke(body);
10 - Email
The Email class has the methods that will allow you to manage your emails.
Usage
const email = new Email();
send
Description
Send an email.
/**
* @param {string} assignee Assignee user email.
* @param {string} subject Subject of the email.
* @param {object} variables Json of options.
* @param {object} mailTemplate Email template.
* @param {object} mailProvider SoftyFlow default provider.
* @param {string} cc Json of options.
* @param {string} from Sender user email.
* @param {string} replyTo
*
* @return {promise} Return promise
*/
Examples
await email.send("assignee","subject",{"var1", "var2"},{"mailTemplate"},{"mailProvider"},"mail of user in cc", "senderMail","replyTo");