Command Execution Functions
Execute commands and backend operations within your formulas.
doCmd()
Execute a custom command defined in the command library.
Syntax
doCmd(commandName, data)
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
commandName | string | Yes | Name of the command to execute |
data | object | Yes | Data object passed to the command |
Returns
Returns the result of the executed command. The return type depends on the specific command.
Examples
Basic Command Execution
var result = doCmd('SendMailCommand', {
Data: {
subject: 'Welcome Email',
email: ['customer@example.com'],
message: '<h1>Welcome!</h1>',
sender: 'noreply@bank.com'
}
});
Execute with Complex Data
var result = doCmd('CreateDepositAccount', {
Data: {
accountName: 'Savings Account',
clientEncodedKey: context.clientEncodedKey,
productEncodedKey: context.productEncodedKey,
branchEncodedKey: context.branchEncodedKey,
currencyEncodedKey: context.currencyEncodedKey,
initialDeposit: 1000.00
}
});
if (result.IsSuccessful) {
console.log('Account created: ' + result.Data.accountNumber);
}
Chain Commands
// Step 1: Create account
var accountResult = doCmd('CreateDepositAccount', {
Data: accountData
});
// Step 2: Send notification
if (accountResult.IsSuccessful) {
var emailResult = doCmd('SendMailCommand', {
Data: {
subject: 'Account Created',
email: [context.email],
message: 'Your account ' + accountResult.Data.accountNumber + ' is ready',
sender: 'accounts@bank.com'
}
});
}
return accountResult;
Notes
- Commands are loaded from the command library
- Custom formulas within commands can call other commands
- Be cautious of circular dependencies
- Command execution is synchronous within the formula context
doCmd()
Execute a native backend command (BPMCore commands).
Syntax
doCmd(commandName, data)
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
commandName | string | Yes | Name of the native backend command |
data | object | Yes | Data object passed to the command |
Returns
Returns the result of the executed backend command. Structure varies by command.
Examples
Execute Loan Schedule Command
var schedules = doCmd('GetExistingLoanSchedules', {
accountNumber: 'LN00001234'
});
console.log('Total Schedules: ' + schedules.summary.totalSchedules);
console.log('Amount Due: ' + schedules.summary.totalDue);
Execute Account Query
var account = doCmd('GetDepositAccount', {
accountNumber: context.accountNumber
});
if (account && account.accountBalance) {
return {
accountNumber: account.accountNumber,
balance: account.accountBalance,
status: account.accountState
};
}
Execute Transaction Command
var result = doCmd('CreditDepositAccount', {
accountNumber: context.accountNumber,
amount: context.amount,
transactionReference: context.reference,
narration: 'Credit Transfer'
});
if (result.IsSuccessful) {
return {
success: true,
newBalance: result.Data.newBalance,
transactionId: result.Data.transactionId
};
}
Batch Processing
var results = [];
context.accountNumbers.forEach(function(accountNo) {
var result = doCmd('GetDepositAccountBalance', {
accountNumber: accountNo
});
results.push({
accountNumber: accountNo,
balance: result.balance
});
});
return {
totalAccounts: results.length,
accounts: results
};
Available Backend Commands
Common backend commands include:
Account Management:
CreateDepositAccountUpdateDepositAccountCloseDepositAccountGetDepositAccount
Transactions:
CreditDepositAccountDebitDepositAccountTransferBetweenAccounts
Loan Management:
CreateLoanApproveLoanDisburseLoanRepayLoanGenerateLoanSchedulesGetExistingLoanSchedules(NEW)
Till/Vault:
OpenTellerTillCloseTellerTillFundTellerTillCreateBranchVault
Error Handling
try {
var result = doCmd('RepayLoan', {
accountNumber: context.accountNumber,
amount: context.amount
});
return result;
} catch (error) {
return {
success: false,
error: error.message
};
}
Performance Considerations
- Backend commands query the database directly
- Cache frequently accessed data using
$.cachefunctions - Avoid calling backend commands in loops when possible
- Consider batch operations for multiple records
Example: Cached Backend Call
var cacheKey = 'account_balance_' + context.accountNumber;
var balance = $.cache.getOrSet(cacheKey, function() {
var result = doCmd('GetDepositAccountBalance', {
accountNumber: context.accountNumber
});
return result.balance;
}, 60); // Cache for 60 seconds
return balance;
Comparison: doCmd vs doBackend
| Feature | doCmd | doBackend |
|---|---|---|
| Purpose | Execute custom commands | Execute native backend commands |
| Source | Command library | Core system commands |
| Flexibility | Can contain formulas | Fixed implementation |
| Performance | Depends on formula | Optimized |
| Authorization | Command-specific | System-enforced |
| Best For | Business logic, workflows | Direct system operations |
When to Use Each
Use doCmd() when:
- Executing business workflows
- Running multi-step processes
- Using custom logic defined in command library
- Need command-level authorization
Use doCmd() when:
- Performing direct CRUD operations
- Querying system data
- Executing core banking operations
- Need guaranteed system functionality