
1. Architecture
1.1. Platform
1.1.1. Environments
1.1.1.1. Agent Groups
1.1.1.1.1. Agent/Runtime
1.1.1.1.2. Group executes a shared set of integrations
1.1.1.1.3. Agent Group settings
1.1.2. Databases
1.1.2.1. Shared State Store on SQL
1.1.2.1.1. Needed for Schedule/Filewatcher
1.1.2.1.2. If not configured: SQLLite per agent
1.1.2.1.3. DatabaseInitializer.exe
1.1.2.1.4. Use SQL Cluster/Always on
1.1.2.2. Log data cache
1.1.2.3. Config data
1.1.3. Log Service
1.2. Control panel/Frends UI
1.2.1. Managed Service
1.2.2. Dashboard
1.2.2.1. Widgets/user based
1.3. Management API
1.3.1. Need permission ManagementApi.Admin
1.3.2. OAUTH Client credentials flow - contact frends support
2. Monitoring
2.1. Monitoring rules
2.1.1. #msgs < threshold
2.1.2. Also works on promoted variables
2.1.2.1. Watch out with <>= operators, promoted variable needs to be numeric
2.1.3. Time intervals start at the interval 1h => 13:00, 10h => 10:00/20:00
2.1.4. One mail per rule per hour
2.1.4.1. SMTP settings in deploymentsettings.json
2.1.5. Able to trigger a "errorhandling" process
2.1.5.1. Can use error metadata: #trigger.data.monitoringRule.error
3. Tracking
3.1. Frends Log Service
3.1.1. 60 days retention
3.1.1.1. PurgeProcessHistory stored proc in DB
3.1.2. Index rebuild
3.1.3. Can query which processes generate most tracking data
4. Connectors
4.1. Open Source
4.1.1. Curated Standard
4.1.1.1. REST
4.1.1.2. HTTP
4.1.1.3. File
4.1.1.4. SQL
4.1.1.5. SFTP/FTPS/FTP
4.1.1.6. SB
4.1.1.7. XML/JSON/CSV/FF
4.1.2. Community Created/Shared - MIT License
4.1.2.1. AWS
4.1.2.2. Email
4.1.2.3. RabbitMQ
4.1.2.4. Blob
4.1.2.5. LDAP
4.1.2.6. HTML2PDF
4.1.2.7. Excel Convert
4.1.2.7.1. ExcelDataReader 3.6
5. Integrations
5.1. Environments
5.1.1. Variables
5.1.1.1. #env.VariableName
5.1.1.2. Used for secrets - not exposed in UI
5.1.2. Variable Group
5.1.2.1. #env.Group["VariableName"]
5.2. Processes
5.2.1. Triggers
5.2.1.1. RabbitMQ
5.2.1.2. File
5.2.1.2.1. Directory/Poll interval/Filter
5.2.1.2.2. Delete file after processing -> performance+
5.2.1.2.3. #trigger.data.filePaths
5.2.1.2.4. #trigger.data.files
5.2.1.3. Schedule
5.2.1.4. HTTP
5.2.1.4.1. HTTP trigger on port x, without API spec
5.2.1.4.2. Public/Private(for agent calling only)
5.2.1.5. API
5.2.1.5.1. Created via the api management module
5.2.1.5.2. #trigger.data.httpBody
5.2.1.5.3. #trigger.data.body
5.2.1.5.4. #trigger.data.httpClientlp
5.2.1.5.5. #trigger.data.httpMethod
5.2.1.5.6. #trigger.data.header
5.2.1.5.7. #trigger.data.query
5.2.1.5.8. #trigger.data.path
5.2.1.5.9. #trigger.data.httpRequestUri
5.2.1.6. Manual
5.2.1.7. Conditional
5.2.1.7.1. Call subproces until result- condition
5.2.1.7.2. poll interval
5.2.1.8. Queue
5.2.1.8.1. AMQP1.0
5.2.1.9. SB
5.2.1.9.1. Queue/Subscription
5.2.1.9.2. Connection string
5.2.1.9.3. Max concurrent connections
5.2.1.9.4. Message prefetch count
5.2.1.9.5. Consume message inmediately
5.2.1.9.6. #trigger.data.properties["BrokerProperties.sessionId"]
5.2.1.9.7. #trigger.data.properties["BrokerProperties.Locktoken"]
5.2.1.9.8. #trigger.data.properties["BrokerProperties.CorrelationId"]
5.2.2. Promoted variables
5.2.3. Tasks and elements
5.2.3.1. Elements toolbar
5.2.3.1.1. Data store reference element
5.2.3.1.2. Data object reference element
5.2.3.1.3. Foreach element
5.2.3.1.4. While element
5.2.3.1.5. Scope element
5.2.3.1.6. Catch element
5.2.3.1.7. Shared state element
5.2.3.1.8. Statement element
5.2.3.1.9. Expression element
5.2.3.1.10. Subproces element
5.2.3.1.11. Task element
5.2.3.1.12. Intermediate return element
5.2.3.2. Parameters
5.2.3.2.1. {{handlebar}}
5.2.3.2.2. Free text
5.2.3.2.3. SQL
5.2.3.2.4. XML/JSON
5.2.3.2.5. Password
5.2.3.2.6. Expression
5.2.3.3. Output
5.2.3.3.1. #result[TaskName].content
5.2.3.3.2. #result.Content
5.2.3.3.3. Can be used in mappings:{(#result[GetBody])}
5.2.4. References
5.2.4.1. #process
5.2.4.2. #trigger
5.2.4.2.1. "adapter meta"
5.2.4.3. #env
5.2.4.4. #var
5.2.4.4.1. variables in current process scope
5.2.5. Process template
5.2.5.1. Reusable template for an integration
5.2.5.2. import/export json
5.2.5.3. View usage
5.2.5.4. Create from scratch or from existing process
5.2.6. Subprocesses
5.2.6.1. Run on other agent
5.2.6.2. "Call subproces" task
5.2.6.3. Oauth token handling
5.2.6.4. Move some of the "heavier" logic to another agent group
5.2.6.5. Define input params
5.2.6.6. Encapsulate/reuse logic
5.2.7. Process editor
5.2.7.1. Code snippets
5.2.7.1.1. Language
5.2.7.1.2. #snippet.name
5.2.7.2. Canvas
5.3. Versioning
5.3.1. Build version is increased automatically
5.3.2. On each version update, add a description (like a commit message)
5.4. Deployment
5.4.1. Nuget package
5.4.1.1. Nuget store on Blob or File share
5.5. API
5.5.1. API Passthroughs
5.5.1.1. No process, just API gateway
5.5.1.2. API Operation: /api/time/v1/time/{locale}/{format} Request: /api/time/v1/time/fi/5 Target: https://domain.com/timeapi/{{#api.OperationPath.locale}}?format={{#api.OperationPath.format}} Resolved Target: https://domain.com/timeapi/fi?format=5
5.5.1.3. Change headers
5.5.1.4. Need cross platform agent
5.5.2. API Editor
5.5.2.1. OAS JSON only, no YAML
5.5.2.2. Attach to a path
5.5.2.3. Make a process to handle request and return a response
5.5.2.4. Security
5.5.2.4.1. Create API Keys
5.5.2.4.2. Oauth/Cert/Basic/No Auth