Skip to main content

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 SoftyTables {}
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();

getSF_mode​

Is a function that return the mode of the running user interface

Returns​

TypeDescription
stringReturn string ('test', 'uat', 'prod')

Examples​

let currentMode = this.SF.getSF_mode();

getSF_Version​

Is a function that return the version of the running user interface

Returns​

TypeDescription
stringReturn string ('test', 'uat', 'prod')

Examples​

let currentVersion = this.SF.getSF_Version();

queryParams​

Is a function that return the query parameters

paramsDescription
selectoptional. The fields to select (fields: SF_mode, SF_version, SF_screen)

Parameters​

NameTypeDescription
selectstringThe selected fields

Returns​

TypeDescription
stringReturn string

Examples​

let currentMode = this.SF.getSF_mode('SF_mode SF_version');
console.log(currentMode)
// ?SF_mode=test&SF_version=versionId

startProcess​

Is a function that start specific process

Parameters​

NameTypeDescription
idstringProcess id
bodyobjectJson of process variables

Returns​

TypeDescription
promiseReturn promise

Examples​

let variables = {
"variable1": "value1",
"variable2": 1,
"variable3": true
}
await this.SF.startProcess('processId', variables);

validateCaptcha​

Is a function that validates a Google reCAPTCHA v3 action and returns the generated token.

Parameters​

NameTypeDescription
actionstringThe action name used for reCAPTCHA v3 verification.

Returns​

TypeDescription
Promise<string>Returns a Promise that resolves to the reCAPTCHA token string.

Examples​

let token = await SF.utils.validateCaptcha("login_form");
// returns: '03AFcWeA... (a long token string from Google)'

saveNew​

Is a function that allow to you to save the user interface state

Parameters​

NameTypeDescription
idstringinterface id
bodyobjectJson of interface variables

Returns​

TypeDescription
promiseReturn promise

Examples​

let variables = {
"variable1": "value1",
"variable2": 1,
"variable3": true
}
await this.SF.saveNew('interfaceId', variables);

saveTask​

Is a function that allow to you to save the task interface state

Parameters​

NameTypeDescription
idstringtask id
bodyobjectJson of task variables

Returns​

TypeDescription
promiseReturn promise

Examples​

let variables = {
"variable1": "value1",
"variable2": 1,
"variable3": true
}
await this.SF.saveTask('taskId', variables);

validateTask​

Is a function that allow to validate Task

Parameters​

NameTypeDescription
idstringtask id
bodyobjectJson of task variables

Returns​

TypeDescription
promiseReturn promise

Examples​

let variables = {
"variable1": "value1",
"variable2": 1,
"variable3": true
}
await this.SF.validateTask('taskId', variables);

getUserPendingTask​

Is a function that allow to get pending Task assigned to connected user.

Parameters​

NameTypeDescription
limitstringlimit of result per page.
pagestringnumber of page
dueDatestringrelated date.
fieldsstringfileds.

Returns​

TypeDescription
promiseReturn promise

Examples​

await this.SF.getUserPendingTask('limit', 'page', 'dueDate', 'fields');

uploadImage​

Is a function that uploads an image to the server using a multipart/form-data POST request.

Parameters​

NameTypeDescription
dataFormDataA FormData object containing the image file and any additional metadata.

Returns​

TypeDescription
Promise<object>Returns a Promise that resolves to the response data from the server.

Examples​

const formData = new FormData();
formData.append("profileImage", file);

let response = await SF.utils.uploadImage(formData);
// returns: { success: true, imageUrl: "/uploads/user123.png" }

setListFromCollection​

Is a function that allow to set list of data from a specific collection.

Parameters​

NameTypeDescription
collectionstringcollection ID.
criteriaobjectQuery json.
limitstringlimit of result.
sortstringsort option.

Returns​

TypeDescription
promiseReturn promise

Examples​

let criteria = { 
firstName: new RegExp("p", "i")
}
await this.SF.setListFromCollection('collectionId', criteria, 10, 'sort');

setListFromCollectionAggregation​

Is a function that performs an aggregation operation on a specified collection using the provided aggregation pipeline.

Parameters​

NameTypeDescription
collectionstringThe name or ID of the target collection to aggregate.
aggregArray<object>An array of aggregation pipeline stages (MongoDB aggregation framework).

Returns​

TypeDescription
Promise<Array>Returns a Promise that resolves to the result of the aggregation query.

Examples​

let results = await SF.utils.setListFromCollectionAggregation("users", [
{ $match: { age: { $gte: 18 } } },
{ $group: { _id: "$country", count: { $sum: 1 } } }
]);
// returns: [ { _id: "USA", count: 42 }, { _id: "FR", count: 18 } ]

setListFromReport​

Is a function that performs a dynamic aggregation query on a report collection, using filters, sorting, and limit options.

Parameters​

NameTypeDescription
reportstringThe ID or name of the report collection.
queryobjectAn object representing filter conditions using custom or MongoDB operators.
[limit]number(Optional) Limits the number of returned documents.
[sort]object(Optional) Sorting options with by field and direction (-1 or 1).

Returns​

TypeDescription
Promise<Array>Returns a Promise that resolves to the result of the aggregation.

Examples​

let result = await SF.utils.setListFromReport("monthly_sales", {
SF_createdBy: "admin@example.com",
region: "NA"
}, 10, { by: "createdAt", direction: -1 });
// returns: [ { ... }, { ... } ]

setListFromReportAggregation​

Is a function that performs a custom aggregation on a report instance using a provided aggregation pipeline.

Parameters​

NameTypeDescription
reportstringThe ID or name of the report collection.
aggregArray<object>The aggregation pipeline to execute.

Returns​

TypeDescription
Promise<Array>Returns a Promise that resolves to the result of the aggregation.

Examples​

let data = await SF.utils.setListFromReportAggregation("monthly_reports", [
{ $match: { status: "completed" } },
{ $group: { _id: "$region", total: { $sum: "$amount" } } }
]);
// returns: [ { _id: "Europe", total: 24000 }, { _id: "Asia", total: 18000 } ]

setListFromSQL​

Is a function that allow to set list of data from client database.

Parameters​

NameTypeDescription
clientDatabasestringclientDatabase ID.
querystringQuery table.

Returns​

TypeDescription
promiseReturn promise

Examples​

await this.SF.setListFromSQL('clientDatabaseID', "code='MMA'");

setListFromCustomList​

Is a function that allow to set list of data from CustomList.

Parameters​

NameTypeDescription
CustomListstringCustomList ID.

Returns​

TypeDescription
promiseReturn promise

Examples​

await this.SF.setListFromCustomList('CustomListID');

aggregateQuery​

Is a function that allow to set list of data from CustomList.

Parameters​

NameTypeDescription
typestringtype of the resource (collection, report, users, projects, external databases).
idstringId of the resource.
queryobjectJson of a value to be matched in the resource.

Returns​

TypeDescription
promiseReturn promise

Examples​

await this.SF.aggregateQuery('collection', '610c0343f6ebc7ddcb49cc3b', {value : "it"});

deleteFile​

Is a function that allow to delete a file using it ID.

Parameters​

NameTypeDescription
idstringId of the resource.

Returns​

TypeDescription
promiseReturn promise

Examples​

await this.SF.deleteFile('610c0343f6ebc7ddcb49cc3b');

2 - Projects​


The Projects class has the methods that will allow you to manage the projects.

Usage​

const projects = new Projects({ mode: 'test' });

aggregate​

Aggregation operations process data records and return computed results

Parameters​

NameTypeDescription
aggregationarrayaggregation array

Returns​

TypeDescription
promiseReturn promise

Examples​

let aggregation = [
{
"$match": { "status": "active" }
},
{
"$group": {
"_id": "$category",
"total": { "$sum": 1 }
}
}
]
let results = await projects.aggregate(aggregation);

3 - Users​


The Users class has the methods that will allow you to manage the users.

Usage​

const users = new Users();

create​

Allow to create new user.

Parameters​

NameTypeDescription
dataobjectJson content user data

Returns​

TypeDescription
promiseReturn promise

Data​

This is the allowed user data:

fieldDescription
emailRequired and Unique. The user email (string)
lastNameRequired. The user last name (string)
firstNameRequired. The user first name (string)
groupRequired. The user groups ids (array)
metadataoptional. The user metadata (json)
ideAccessRequired. IDE access right (boolean)
blockedoptional. 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​

Allow to update a user

Parameters​

NameTypeDescription
idstringuser id.
dataobjectUser data.

Returns​

TypeDescription
promiseReturn 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​

Allow to delete a user.

Parameters​

NameTypeDescription
idstringuser id.

Returns​

TypeDescription
promiseReturn promise

Examples​

await users.delete("userId");

findById​

Allow to get a user by id.

Parameters​

NameTypeDescription
idstringuser id.

Returns​

TypeDescription
promiseReturn promise

Examples​

let user = await users.findById("userId");

find​

Allow to list the users.

Parameters​

NameTypeDescription
criteriaobjectQuery json.

Returns​

TypeDescription
promiseReturn promise

Examples​

let criteria = { 
firstName: new RegExp("p", "i")
}
let usersList = await users.find(criteria);

count​

Allow to get the count of users.

Parameters​

NameTypeDescription
criteriaobjectQuery json

Returns​

TypeDescription
promiseReturn promise

Examples​

let criteria = { 
blocked: false
}
let count = await users.count(criteria);

findAndCount​

get a list and the count of users

Parameters​

NameTypeDescription
bodyobjectJson of options.

Returns​

TypeDescription
promiseReturn promise

Options​

This options are optional

OptionDescription
criteriaSpecifies selection filter (default : {})
fieldsSelect specific fields (example: "createdAt email")
limitNumber of instances returned (default : 100/ no limit : 0)
pagePage number depends on the limit (default : 0)
sortbySorts the results by key (default : createdAt)
directionAscending (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​

Aggregation operations process data records and return computed results

Parameters​

NameTypeDescription
aggregationarrayaggregation array

Returns​

TypeDescription
promiseReturn 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​

Add role to user using user ID & group ID.

Parameters​

NameTypeDescription
userIdstringuser ID.
groupidstringgroup ID.
modestringmode of the running user. interface

Returns​

TypeDescription
promiseReturn promise

Examples​

await users.addRole("userId","groupId","SF_mode");

removeRole​

Remove role from user using user ID & group ID.

Parameters​

NameTypeDescription
userIdstringuser ID.
groupidstringgroup ID.
modestringmode of the running user interface

Returns​

TypeDescription
promiseReturn promise

Examples​

await users.removeRole("userId","groupId","SF_mode");

4 - Groups​


The Groups class has the methods that will allow you to manage user groups.

Usage​

const groups = new Groups();

findById​

Find a group by its unique identifier.

Parameters​

NameTypeDescription
idstringGroup ID

Returns​

TypeDescription
promiseReturns group data

Examples​

let group = await groups.findById("groupId123");

find​

Find groups based on a filter criteria.

Parameters​

NameTypeDescription
criteriaobjectSearch criteria object

Returns​

TypeDescription
promiseReturns array of groups

Examples​

let list = await groups.find({ name: /admin/i });

count​

Count the number of groups that match the criteria.

Parameters​

NameTypeDescription
criteriaobjectFilter criteria

Returns​

TypeDescription
promiseReturns count

Examples​

let total = await groups.count({ type: "system" });

findAndCount​

Find groups and return both the results and the total count.

Parameters​

NameTypeDescription
bodyobjectRequest body with filters and pagination

Returns​

TypeDescription
promiseReturns object { data, count }

Examples​

let result = await groups.findAndCount({ limit: 10, offset: 0 });

aggregate​

Aggregation operations process data records and return computed results.

Parameters​

NameTypeDescription
aggregationarrayAggregation pipeline array

Returns​

TypeDescription
promiseReturns aggregation result

Examples​

let aggregation = [
{ $match: { type: "system" } },
{ $group: { _id: "$status", total: { $sum: 1 } } }
];
let stats = await groups.aggregate(aggregation);

create​

Create a new group with provided data.

Parameters​

NameTypeDescription
bodyobjectGroup data

Returns​

TypeDescription
promiseReturns created group

Examples​

let newGroup = await groups.create({ name: "Developers", type: "custom" });

update​

Update an existing group by ID.

Parameters​

NameTypeDescription
idstringGroup ID
bodyobjectUpdate payload

Returns​

TypeDescription
promiseReturns updated group

Examples​

let updated = await groups.update("groupId123", { name: "Admins Updated" });

delete​

Delete a group by ID.

Parameters​

NameTypeDescription
idstringGroup ID

Returns​

TypeDescription
promiseReturns deletion result

Examples​

await groups.delete("groupId123");

groupUsers​

Retrieve the users belonging to a specific group.

Parameters​

NameTypeDescription
idstringGroup ID

Returns​

TypeDescription
promiseReturns array of users in the group

Examples​

let users = await groups.groupUsers("groupId123");

5 - 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

OptionDescription
idRequired. id or name of collection
modeoptional. Specifies mode of collection (default : "test")
const collection = new Collection({ id: 'collectionId', mode: 'test' });

insert​

Allow to insert a json into a collection

Parameters​

NameTypeDescription
dataobjectJson of a value to be inserted in to the collection.

Returns​

TypeDescription
promiseReturn promise

Examples​

await collection.insert({ name: "name1", type : "type1" });

insertMany​

Allow to insert an array of json in to a collection.

Parameters​

NameTypeDescription
dataobjectJson of a value to be inserted in to the collection.

Returns​

TypeDescription
promiseReturn promise

Examples​

await collection.insertMany([{label : "IT", value : "it"}]);

updateMany​

update all the documents that satisfies the specified query criteria .

Parameters​

NameTypeDescription
criteriaobjectQuery json.
dataobjectJson of a new data.
optionsobjectJson of options

Returns​

TypeDescription
promiseReturn promise

Examples​

let criteria = { 
firstName: new RegExp("p", "i")
}
await collection.updateMany(criteria, [{ type : "type2" }], { upsert: true });

update​

Allow to update a document in collection

Parameters​

NameTypeDescription
idstringDocument id.
dataobjectJson of a new data.

Returns​

TypeDescription
promiseReturn promise

Examples​

await collection.update("documentId", { type : "type2" });

delete​

Allow to delete a document from collection

Parameters​

NameTypeDescription
idstringDocument id.

Returns​

TypeDescription
promiseReturn promise

Examples​

await collection.delete("documentId");

findById​

Allow to get a object by id from the collection

Parameters​

NameTypeDescription
idstringDocument id.

Returns​

TypeDescription
promiseReturn promise

Examples​

let document = await collection.findById(id);

find​

Allow to select the documents in a collection

Parameters​

NameTypeDescription
bodyobjectJson of options.

Returns​

TypeDescription
promiseReturn promise

Options​

This options are optional

OptionDescription
criteriaSpecifies selection filter (default : {})
limitNumber of documents returned (default : 100/ no limit : 0)
pagePage number depends on the limit (default : 0)
sortbySorts the results by key (default : createdAt)
directionAscending (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​

Allow to get the count of documents that would match a query for the collection

Parameters​

NameTypeDescription
criteriaobjectQuery json

Returns​

TypeDescription
promiseReturn promise

Examples​

let count = await collection.count({ type: "type1" });

aggregate​

Aggregation operations process data records and return computed results

Parameters​

NameTypeDescription
aggregationarrayaggregation array

Returns​

TypeDescription
promiseReturn promise

Examples​

let aggregation = [
{
"$match": { "type": "type1" }
},
{
"$project" : {
"_id": 1,
"name": 1
}
}
]
let documents = await collection.aggregate([aggregation]);

6 - SQLDatabase​


Manage your external SQL Databases Through the SQLDatabase class.

Usage​

You can instantiate an SQL class with id and mode(optional).

OptionDescription
idRequired. id or name of Database
modeoptional. Specifies mode of Database (default : "test")
const sql = new SQLDatabase({ id: '610c0343f6ebc7ddcb49cc3b', mode: 'test' });

findOne​

Get a table row data

Parameters​

NameTypeDescription
tableNamestringtable name.
Criteriastringquery table.

Returns​

TypeDescription
object

Examples​

let res = await sql.findOne("client", "code='MMA'"))

find​

list multiple rows from sql table

Parameters​

NameTypeDescription
tableNamestringtable name.
optionsstringquery table.

Returns​

TypeDescription
array

Examples​

let res = sql.find("client", "code='MMA'")

count​

Get the row count for a table with a criteria

Parameters​

NameTypeDescription
tableNamestringtable name.
optionsstringquery table.

Returns​

TypeDescription
arrayarray with one element contining count

Examples​

let count = await sql.count("client", "code='MMA'");

execute​

Execute a custom query on the database.

Parameters​

NameTypeDescription
querystringstring of query.

Returns​

TypeDescription
arrayReturn array.

Examples​

sql.execute("INSERT INTO client(code, intitule, representant, codepostal) VALUES('MDSX', 'holder', 'holder', 14000)")

insert​

Insert one row into a table.

Parameters​

NameTypeDescription
tableNamestringtable name.
dataobjectJSON body.

Returns​

TypeDescription
array

Examples​

sql.insert("client", {
code: 'HelloWord',
codepostal: 14000
}

insertMany​

Insert multiple rows into

Parameters​

NameTypeDescription
tableNamestringtable name.
dataarrayJSON body.

Returns​

TypeDescription
array

Examples​

sql.insertMany("client", [
{ code: '#1' },
{ code: '#2' }
])

update​

Update rows.

Parameters​

NameTypeDescription
tableNamestringtable name.
querystringquery table.
dataobjectupdated JSON body.

Returns​

TypeDescription
object

Examples​

 sql.update('client',   "code='MMA'",
{
code: "MQS"
})

delete​

Delete row/rows in your table.

Parameters​

NameTypeDescription
tableNamestringtable name.
querystringquery table.

Returns​

TypeDescription
object

Examples​

sql.delete("client", "id=223")

7 - SoftyTables​


The SoftyTables class provides methods to interact with SoftyTable resources, allowing you to perform CRUD operations, execute queries, and manage table data from the web interface.

Usage​

You can instantiate a SoftyTables class with id and mode options.

OptionDescription
idRequired. id of the SoftyTable
modeoptional. Specifies mode of SoftyTable (default : "test")
const softyTable = new SoftyTables({id: 'tableId', mode: 'test'});

findById​

Retrieve a single row from a SoftyTable by its ID.

Parameters​

NameTypeDescription
rowIdstringThe ID of the row

Returns​

TypeDescription
promiseResolves to the row data

Examples​

const softyTable = new SoftyTables({id: 'tableId', mode: 'test'});
let row = await softyTable.findById('12345');

find​

List rows from a SoftyTable with optional filtering, sorting, and pagination.

Parameters​

NameTypeDescription
bodyobjectJSON of options (criteria, limit, page, sortby, direction)

Returns​

TypeDescription
promiseResolves to an array of table rows

Options​

These options are optional

OptionDescription
criteriaSpecifies selection filter with where clause (default : {})
limitNumber of rows returned (default : 100/ no limit : 0)
pagePage number depends on the limit (default : 0)
sortbySorts the results by field name (default : createdAt)
directionAscending (1) or descending (-1) order (default : -1)

Examples​

const softyTable = new SoftyTables({id: 'tableId', mode: 'test'});

// List all rows
let rows = await softyTable.find({});

// List with filters and pagination
let body = {
criteria: {
where: { status: 'active' }
},
limit: 50,
page: 0,
sortby: 'createdAt',
direction: -1
}
let activeRows = await softyTable.find(body);

count​

Count the number of rows in a SoftyTable with optional filtering.

Parameters​

NameTypeDescription
criteriaobjectQuery criteria with optional where clause

Returns​

TypeDescription
promiseResolves to an object with count property

Examples​

const softyTable = new SoftyTables({id: 'tableId', mode: 'test'});

// Count all rows
let result = await softyTable.count({});
// returns: { count: 150 }

// Count with filter
let result = await softyTable.count({
criteria: { where: { status: 'active' } }
});
// returns: { count: 75 }

findAndCount​

Get both a list of rows and the total count matching the criteria.

Parameters​

NameTypeDescription
bodyobjectJSON of options (criteria, limit, page, sortby, direction)

Returns​

TypeDescription
promiseResolves to object { data, count }

Examples​

const softyTable = new SoftyTables({id: 'tableId', mode: 'test'});

let body = {
criteria: {
where: { status: 'active' }
},
limit: 10,
page: 0,
sortby: 'createdAt',
direction: -1
}
let result = await softyTable.findAndCount(body);
let rows = result.data;
let count = result.count;

insert​

Create a single row in a SoftyTable.

Parameters​

NameTypeDescription
bodyobjectThe data object to insert as a row

Returns​

TypeDescription
promiseResolves to the created row data

Examples​

const softyTable = new SoftyTables({id: 'tableId', mode: 'test'});

let newRow = await softyTable.insert({
name: 'John Doe',
email: 'john@example.com',
age: 30,
status: 'active'
});

insertMany​

Create multiple rows in a SoftyTable at once.

Parameters​

NameTypeDescription
dataarrayArray of data objects to insert

Returns​

TypeDescription
promiseResolves to an array of created rows

Examples​

const softyTable = new SoftyTables({id: 'tableId', mode: 'test'});

let newRows = await softyTable.insertMany([
{ name: 'John Doe', email: 'john@example.com', age: 30 },
{ name: 'Jane Smith', email: 'jane@example.com', age: 25 },
{ name: 'Bob Johnson', email: 'bob@example.com', age: 35 }
]);

update​

Update a single row in a SoftyTable by its ID.

Parameters​

NameTypeDescription
rowIdstringThe ID of the row to update
bodyobjectThe fields and values to update

Returns​

TypeDescription
promiseResolves to the updated row

Examples​

const softyTable = new SoftyTables({id: 'tableId', mode: 'test'});

let updated = await softyTable.update('12345', {
status: 'inactive',
updatedAt: new Date()
});

updateMany​

Update multiple rows in a SoftyTable that match specific criteria.

Parameters​

NameTypeDescription
criteriaobjectQuery criteria with where clause
valueobjectThe fields and values to update
optionsobjectAdditional options (optional)

Returns​

TypeDescription
promiseResolves to update operation result

Examples​

const softyTable = new SoftyTables({id: 'tableId', mode: 'test'});

// Update all rows where status is 'pending'
let result = await softyTable.updateMany(
{ status: 'pending' },
{ status: 'active', processedAt: new Date() }
);

delete​

Delete a single row from a SoftyTable by its ID.

Parameters​

NameTypeDescription
rowIdstringThe ID of the row

Returns​

TypeDescription
promiseResolves to deletion result

Examples​

const softyTable = new SoftyTables({id: 'tableId', mode: 'test'});

await softyTable.delete('12345');

deleteMany​

Delete multiple rows from a SoftyTable that match specific criteria.

Parameters​

NameTypeDescription
criteriaobjectQuery criteria with where clause

Returns​

TypeDescription
promiseResolves to deletion result

Examples​

const softyTable = new SoftyTables({id: 'tableId', mode: 'test'});

// Delete all inactive rows
await softyTable.deleteMany({ status: 'inactive' });

// Delete rows older than a certain date
await softyTable.deleteMany({
createdAt: { $lt: new Date('2024-01-01') }
});

clear​

Clear all rows from a SoftyTable (delete all data).

Returns​

TypeDescription
promiseResolves to deletion result

Examples​

const softyTable = new SoftyTables({id: 'tableId', mode: 'test'});

// Remove all rows from the table
await softyTable.clear();

getOptions​

Retrieve options for select fields in a SoftyTable.

Returns​

TypeDescription
promiseResolves to array of options

Examples​

const softyTable = new SoftyTables({id: 'tableId', mode: 'test'});

let options = await softyTable.getOptions();
// returns: [{ label: 'Active', value: 'active' }, { label: 'Inactive', value: 'inactive' }]

execute​

Execute a custom SQL query on the SoftyTable.

Parameters​

NameTypeDescription
querystringThe SQL query to execute
optionsobjectQuery options with replacements and type

Options Object​

FieldTypeDescription
replacementsobjectValues to replace in parameterized queries
typestringQuery type: 'SELECT', 'INSERT', 'UPDATE', 'DELETE', 'RAW', 'SHOWTABLES'

Returns​

TypeDescription
promiseResolves to the query results

Examples​

const softyTable = new SoftyTables({id: 'tableId', mode: 'test'});

// Execute a SELECT query
let results = await softyTable.execute(
'SELECT * FROM my_table WHERE status = :status',
{
replacements: { status: 'active' },
type: 'SELECT'
}
);

// Execute a custom query
let results = await softyTable.execute(
'UPDATE my_table SET status = "processed" WHERE created_at < NOW() - INTERVAL 30 DAY',
{ type: 'UPDATE' }
);

migrate​

Migrate rows in a SoftyTable (for data migration operations).

Returns​

TypeDescription
promiseResolves to migration result

Examples​

const softyTable = new SoftyTables({id: 'tableId', mode: 'test'});

let result = await softyTable.migrate();

8 - 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)

OptionDescription
idRequired. id of custom list
modeoptional. Specifies mode of custom list (default : "test")
versionIdoptional. id of the version from which to get the custom list
const customList = new CustomList({id: 'id', mode: 'test', versionId: "vId"});

get​

Get a custom list data

Returns​

TypeDescription
promiseReturn promise

Examples​

let customListData = await customList.get();

9 - 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

OptionDescription
idRequired. Specifies mode of custom list (default : "test")
modeoptional. Specifies mode of custom list (default : "test")
const report = new Report({id: 'id', mode: 'test'});

aggregate​

Aggregation operations process data records and return computed results

Parameters​

NameTypeDescription
aggregationarrayaggregation array

Returns​

TypeDescription
promiseReturn promise

Examples​

let aggregation = [
{
"$match": { "SF_status": "Running" }
},
{
"$sort": { "SF_createdAt": -1 }
}
]
let instances = await report.aggregate(aggregation); //report of instances

10 - Instance​


The Instance class has the methods that will allow you to manage the instances

Usage​

const inctance = new Instance();

findById​

Get a instance by id

Parameters​

NameTypeDescription
idstringid of instance.

Returns​

TypeDescription
promiseReturn promise

Examples​

let oneInctance = await inctance.findById(id);

find​

list the instances

Parameters​

NameTypeDescription
criteriaobjectJson of query.

Returns​

TypeDescription
promiseReturn promise

Examples​

let instances = await inctance.find({ status: "Running" });

count​

Allow to get the count of instances that would match a query

Parameters​

NameTypeDescription
criteriaobjectQuery json

Returns​

TypeDescription
promiseReturn promise

Examples​

let count = await inctance.count({ status: "Running" });

findAndCount​

get a list and the count of instances

Parameters​

NameTypeDescription
bodyobjectJson of options.

Returns​

TypeDescription
promiseReturn promise

Options​

This options are optional

OptionDescription
criteriaSpecifies selection filter (default : {})
fieldsSelect specific fields (example: "createdAt name status")
limitNumber of instances returned (default : 100/ no limit : 0)
pagePage number depends on the limit (default : 0)
sortbySorts the results by key (default : createdAt)
directionAscending (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​

Aggregation operations process data records and return computed results

Parameters​

NameTypeDescription
aggregationarrayaggregation array

Returns​

TypeDescription
promiseReturn promise

Examples​

let aggregation = [
{
"$match": { "status": "End" }
},
{
"$project" : {
"_id": 1,
"name": 1
}
}
]
let inctances = await inctance.aggregate([aggregation]);

update​

Update an instance

Parameters​

NameTypeDescription
idstringid of instance.
dataobjectJson of a new data.

Returns​

TypeDescription
promiseReturn promise

Examples​

await inctance.update(id, { status : "End" });

delete​

Delete an instance

Parameters​

NameTypeDescription
idstringid of instance.

Returns​

TypeDescription
promiseReturn promise

Examples​

await inctance.delete(id);

history​

Get instance history.

Parameters​

NameTypeDescription
idstringid of instance.
dataobjectJson of data.

Returns​

TypeDescription
promiseReturn promise

Examples​

await inctance.history(id, { status : "End" });

11 - Task​


The Task class has the methods that will allow you to manage the tasks

Usage​

const task = new Task();

findById​

Get a task by id

Parameters​

NameTypeDescription
idstringid of task.

Returns​

TypeDescription
promiseReturn promise

Examples​

let oneTask = await task.findById(id);

find​

list the tasks

Parameters​

NameTypeDescription
criteriaobjectJson of query.

Returns​

TypeDescription
promiseReturn promise

Examples​

let tasks = await task.find({ instanceId: "instanceId" });

count​

Allow to get the count of tasks that would match a query

Parameters​

NameTypeDescription
criteriaobjectQuery json

Returns​

TypeDescription
promiseReturn promise

Examples​

let count = await task.count({ instanceId: "instanceId" });

findAndCount​

get a list and the count of tasks

Parameters​

NameTypeDescription
bodyobjectJson of options.

Returns​

TypeDescription
promiseReturn promise

Options​

This options are optional

OptionDescription
criteriaSpecifies selection filter (default : {})
assignedToConnectedTo get tasks of connected user (default : false)
fieldsSelect specific fields (example: "createdAt name status")
limitNumber of instances returned (default : 100/ no limit : 0)
pagePage number depends on the limit (default : 0)
sortbySorts the results by key (default : createdAt)
directionAscending (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​

Aggregation operations process data records and return computed results

Parameters​

NameTypeDescription
aggregationarrayaggregation array

Returns​

TypeDescription
promiseReturn promise

Examples​

let aggregation = [
{
"$match": { "status": "End" }
},
{
"$project" : {
"_id": 1,
"name": 1
}
}
]
let tasks = await task.aggregate([aggregation]);

update​

Update an task

Parameters​

NameTypeDescription
idstringid of task.
dataobjectJson of a new data.

Returns​

TypeDescription
promiseReturn promise

Examples​

await task.update(id, { status : "End" });

delete​

Delete an task

Parameters​

NameTypeDescription
idstringid of task.

Returns​

TypeDescription
promiseReturn promise

Examples​

await task.delete(id);

getNextValue​

Get next value of an task.

Parameters​

NameTypeDescription
namestringname of the variable.
[padding]numberPadding of result with 000000.
modestringmode of the running user.

Returns​

TypeDescription
promiseReturn promise

Examples​

await task.getNextValue("name",5,"SF_mode");

history​

Get the history of a task by its ID.

Parameters​

NameTypeDescription
idstringTask ID
bodyobjectQuery parameters (optional)

Returns​

TypeDescription
promiseReturns object { data, count }

Examples​

let log = await task.history("taskId123", {});

12 - Api​


The Api class has the methods that will allow you to manage your Apis.

Usage​

const api = new Api();

invoke​

Invoke an api.

Parameters​

NameTypeDescription
bodyobjectJson of options.

Returns​

TypeDescription
promiseReturn 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);

13 - Email​


The Email class has the methods that will allow you to manage your emails.

Usage​

const email = new Email();

send​

Send an email.

Parameters​

NameTypeDescription
assigneestringAssignee user email.
subjectstringSubject of the email.
variablesobjectJson of options.
mailTemplateobjectEmail template.
mailProviderobjectSoftyflow default provider.
ccstringJson of options.
fromstringSender user email.
replyTostring*

Returns​

TypeDescription
promiseReturn promise

Examples​

await email.send("assignee","subject",{"var1", "var2"},{"mailTemplate"},{"mailProvider"},"mail of user in cc", "senderMail","replyTo");

14 - DataSource​


The DataSource class provides generic data manipulation methods for various sources such as collections, tables, or reports.

Usage​

const ds = new DataSource();

findOne​

Retrieve a single document from a data source.

Parameters​

NameTypeDescription
sourcestringName of the source
optionsobjectQuery options

Returns​

TypeDescription
promiseReturns a single document

Examples​

let doc = await ds.findOne("users", { filter: { email: "user@example.com" } });

list​

List multiple documents from a data source.

Parameters​

NameTypeDescription
sourcestringName of the source
optionsobjectQuery options

Returns​

TypeDescription
promiseReturns an array of documents

Examples​

let docs = await ds.list("users", { filter: { active: true } });

count​

Count the number of documents in a data source.

Parameters​

NameTypeDescription
sourcestringName of the source
optionsobjectQuery options

Returns​

TypeDescription
promiseReturns the count of documents

Examples​

let total = await ds.count("orders", { filter: { status: "delivered" } });

update​

Update documents in a data source.

Parameters​

NameTypeDescription
sourcestringName of the source
optionsobjectQuery conditions
dataobjectData to update

Returns​

TypeDescription
promiseReturns update result

Examples​

await ds.update("products", { filter: { stock: 0 } }, { restock: true });

insert​

Insert a single document into a data source.

Parameters​

NameTypeDescription
sourcestringName of the source
dataobjectDocument to insert
optionsobjectAdditional options

Returns​

TypeDescription
promiseReturns insert result

Examples​

await ds.insert("logs", { action: "login", userId: "abc123" });

insertMany​

Insert multiple documents into a data source.

Parameters​

NameTypeDescription
sourcestringName of the source
dataarrayArray of documents
optionsobjectAdditional options

Returns​

TypeDescription
promiseReturns insert result

Examples​

await ds.insertMany("logs", [{ action: "view" }, { action: "edit" }]);

delete​

Delete documents from a data source.

Parameters​

NameTypeDescription
sourcestringName of the source
optionsobjectDelete criteria

Returns​

TypeDescription
promiseReturns delete result

Examples​

await ds.delete("sessions", { filter: { expired: true } });

execute​

Execute a custom action or command on a data source.

Parameters​

NameTypeDescription
sourcestringName of the source
optionsobjectParameters for execution

Returns​

TypeDescription
promiseReturns execution result

Examples​

await ds.execute("jobs", { action: "resetAll" });

15 - File​

The File class provides methods for generating PDF files from stored HTML templates and variable contexts using API endpoints.


generatePDF​

Generates a PDF file by retrieving the HTML content of a file and posting it along with contextual data.

Parameters​

NameTypeDescription
filenamestring- Desired name for the generated PDF
fidstring- File ID to fetch content from
contextobject- Contextual data for PDF rendering (e.g., variables)

Returns​

TypeDescription
Promise- Resolves with the PDF generation response

Example​

const file = new File();
file.generatePDF("output.pdf", "605c72...", { variables: { user: "Alice" } });

genratePDFWithVar​

Generates PDF content using variables directly by posting to a specific content generation endpoint.

Parameters​

NameTypeDescription
namestring- Name for the output (not directly used in the call)
fidstring- File ID of the template
contextobject- Variable data used for rendering the template

Returns​

TypeDescription
Promise- Resolves with the server response

Example​

const file = new File();
file.genratePDFWithVar("Invoice", "605c72...", { variables: { amount: 100, user: "Alice" } });