Previous slide Next slide Toggle fullscreen Open presenter view
Developer Day
Sirenia — Nov 2022
© 2022 SIRENIA ~ CONFIDENTIAL
Introductions
Sirenia
Region Nord
Region Syd
© 2022 SIRENIA ~ CONFIDENTIAL
Upgrade highlights
Login
Hub
Flow restrictions
Dynamic apps and fields
Fields: New editor and field traversal
New approaches to launch
Zookeeper and alerting
Grouped groups
Tips
Progress bars
Dialog changes
© 2022 SIRENIA ~ CONFIDENTIAL
Logging in
New features related to logging into Cuesta
Two-factor authentication using a TOTP code.
Landing page with:
Global search
Three configurable slots
Last edited
Saved custom search (eg ‘my flows’)
Favorites (coming soon!)
© 2022 SIRENIA ~ CONFIDENTIAL
Hub
Designed for local use but with options to allow propagation of flows from a subscribed feed.
So a locally installed hub can be allowed access to a hub covering a larger region (e.g. a country) intermittently to retrieve items.
© 2022 SIRENIA ~ CONFIDENTIAL
Hub
Sharing of flows.
Staging a flow for release.
Inlining externals.
Documenting a flow.
Extension points.
© 2022 SIRENIA ~ CONFIDENTIAL
Flow restrictions
An approach to defining global rules for
What is allowed with regards to module API
Tracking API usage
Linting rules (work in progress )
An example is if you e.g. want to limit Http.get request to certain urls.
© 2022 SIRENIA ~ CONFIDENTIAL
Dynamic applications
New, more lightweight take on app automation.
Defined and instantiated during the execution of a flow
Easier cross-application automations
Dynamically created applications are attached to or launched on-the-fly.
var notepad = new Application ({
titleBarContains : "Notepad" ,
launchWith : "notepad.exe" ,
type : ApplicationTypes .NATIVE
}).launchOrAttach ();
© 2022 SIRENIA ~ CONFIDENTIAL
Fields in dynamic applications
Fields that are instantiated at run-time can belong to a dynamic application.
var content = new Field ("**/(class)RichEditD2DPT" , notepad);
content = notepad.newField ("**/(class)RichEditD2DPT" );
var notepadContent = content.read ();
This approach allows for more self-contained flows by avoiding Flow.runs and stand-alone application definitions.
Great for hybrid applications (web/native, java/native).
© 2022 SIRENIA ~ CONFIDENTIAL
Native access in all app types
A convenient way to access native parts of web/java apps (e.g. print dialogs).
Match all windows on desktop
Always uses a native driver
new Field ('{!Print}**/OK' ).click ();
© 2022 SIRENIA ~ CONFIDENTIAL
Fields
New field editor features
More help for field editing. New tree for browsing the app structure.
Easier field editing
Tree
Automatic field verification (coming soon )
© 2022 SIRENIA ~ CONFIDENTIAL
Field traversal
Generalized path index support
Inspect results now consists of interactive field objects
var structure = Fields ["DetailsPanel" ].inspect ();
var cpr_a = structure.find ('cpr' ).read ();
var cpr_b = Fields ["DetailsPanel" ].find ('cpr' ).read ();
Fields ["PatientList" ].findAll ('Discharge' )[4 ].click ();
© 2022 SIRENIA ~ CONFIDENTIAL
New launch features
Simpler plugin management
No more separate plugin loading flows.
Launch flows
Provide full flexibility for complex launch situations.
© 2022 SIRENIA ~ CONFIDENTIAL
Improved plugin concept
Manatee automatically installs and starts required driver plugins
Based on app group match
Simplified plugin upgrade flow
Plugin specific settings available in Cuesta
No attach criteria required for Kant/Krom plugins
Automatic installation retries
© 2022 SIRENIA ~ CONFIDENTIAL
Launch flows
Start application with a designated flow.
Example use cases
Compute authentication token before launching a web page
Build a complicated dynamic url
Three ways to control app startup
Return string: executable path/url. Application will be launched on return.
Launch application, return { hwnd: windowHandle, pid: processId };
Launch application, return { command: launchCmd, arguments: args };
© 2022 SIRENIA ~ CONFIDENTIAL
Zookeeper and alerting
The Zookeeper aka the Conductor aka Estero is a serverside component that keeps track of running Manatees.
Commands include:
Shutdown
Restart
Run flow
Update settings
…
Events are e.g. when flows are run.
© 2022 SIRENIA ~ CONFIDENTIAL
Real-time zoo
Cuesta interfaces with the Zookeeper to provide
a real-time overview of Manatees,
drill-down via filters/search, and
a details page for each Manatee with access to restart etc
Scenario for use is RPA or as a support tool .
© 2022 SIRENIA ~ CONFIDENTIAL
Alerting (zoo)
Enables alerts for a specific user at a specific machine . It is primarily intended for RPA monitoring.
Alert checks are performed by the Zookeeper to be able to do downtime etc checks.
uptime, downtime queries
run flows
Alert actions are email, chat messages. Hooks into existing service definitions. Also as a built-in notification which looks like .
© 2022 SIRENIA ~ CONFIDENTIAL
Grouped groups
Groups can now include other groups. All included groups are applied to whatever application, flow etc it is attached to.
This means that you can essentially created hierarchies of groups similar to how AD groups are structured.
Should provide a better overview and easier assignment of apps and flows.
© 2022 SIRENIA ~ CONFIDENTIAL
Tips
Information shown in-situ for a field .
Will track the if field is relocated.
Limited support for user interaction (buttons).
Customizable appearance and markdown.
var t = Fields .MiddleButton .tip ({
text : "I am a tip" ,
color : "MistyRose" ,
icon : "BellSolid"
});
© 2022 SIRENIA ~ CONFIDENTIAL
Progress
A new concept for keeping track of simple or complex long-running tasks.
var p = new Progress ("Simple progress" );
p.complete (0.75 );
The Progress object can now be shown in a Sticky (for example):
Sticky .open (
"progressExample" ,
{
items : [{ type : 'PROGRESS' , progress : p }]
}
);
© 2022 SIRENIA ~ CONFIDENTIAL
Nested progress
Also supports recursive nesting .
var step1 = new Progress ("Step 1" );
var step2 = new Progress ("Step 2" );
var step3 = new Progress ("Step 3" );
var main = new Progress ("Main" , [step1, step2, step3]);
Wait .forSeconds (1 );
main.next ();
Wait .forSeconds (1 );
main.next ();
Wait .forSeconds (1 );
main.next ();
Wait .forSeconds (1 );
main.next ();
© 2022 SIRENIA ~ CONFIDENTIAL
Percentages
And partial completion.
step1.complete (0.23 );
step2.complete (0.67 );
step3.complete (0.86 );
And custom colors, icons and indeterminate state.
And can be shown (in a more basic UI) in notifications also.
© 2022 SIRENIA ~ CONFIDENTIAL
Dialogs
Masked input
Dialog .input (
...
m : {
type : "MASKED" ,
mask : "00/00/0000"
},
...
)
© 2022 SIRENIA ~ CONFIDENTIAL
Dialogs
Datetime input
...
dt1 : {
type : "DATETIME" ,
notBefore : new Date ("August 19, 1975 23:15:30" ),
notAfter : new Date ("'August 19, 2025 23:15:30" )
},
dt2 : {
type : "DATETIME" ,
format : "H:mm"
}
...
© 2022 SIRENIA ~ CONFIDENTIAL
Dialogs
Numeric input
...
num1 : {
type : 'NUMERIC' ,
increment : 100
},
num2 : {
type : 'NUMERIC' ,
increment : 10 ,
min : 5 ,
max : 89
},
...
© 2022 SIRENIA ~ CONFIDENTIAL
Dialogs
Function-based input elements can now depend on other function-based input elements.
count : { type : "NUMERIC" },
select : v => ({
type : "SELECT" ,
selectBetween : _.times (v.count )
})
result : v => parseInt (v.select , 10 ) > 5 ? { type : "TEXT" } : null
result implicitly depends on select and
select implicitly depends on count.
© 2022 SIRENIA ~ CONFIDENTIAL
A bit of the rest
Cuesta: ES6 , list of flows, “no certs needed, baby”, inlining for debug, IndexedDb and i18n.
Triggers: Priorities , no-launch option and space in keyboard trigger
Services: : Chat, received-time for emails, OAuth for Exchange.
Tables: Synchronization .
Http: Multipart/form upload, headers, cookies.
Html: Encode/decode
Sticky: UI overhaul
HID: Mouse scroll simulation.
Fs: .cp(...) and .mv(...) may overwrite target files, new .buildPath func.
Env: .sessionType and .connected properties and .kwanza() func.
WindowProxy: .transparency property and perf.
…and markdown and webviews, console-switch + restart (RPA), radio-button and checkbox.
© 2022 SIRENIA ~ CONFIDENTIAL
Breaking changes
New versions of all modules and plugins
Existing modules and plugins will be updated and new versions released.
Web-based applications no longer automatically include invisible elements by default
To get the old behaviour back use includeInvisible in Field constructor, checkbox in field UI or set StellerLegacyInvisibleFieldBehavior setting to true.
© 2022 SIRENIA ~ CONFIDENTIAL
Discussion and feedback
Last minute feature requests (no promises)
Roadmap v2.0 input
Should we setup a space for knowledge sharing RSD and RN?
© 2022 SIRENIA ~ CONFIDENTIAL
© 2022 SIRENIA ~ CONFIDENTIAL
2FA:
1. Log on with los/larsole
2. enable 2FA via preferences
3. show user list icon
4. mention site wide 2FA requirement
Landing page:
1. Log on with los/larsole
2. show landing page
3. show preferences
4. configure stuff
Documentation includes;
- description
- extension points
- application and categories
- attachments
- release notes
Notes for demo:
- use ES5
- remember to publish using a different name (use a short name "Hi")
- show how downloaded flows look like (inlined and non-inlined?)
- make a mistake in first flow
- update to newly published version
- show changelog for original flow
- show how it appears on the hub (incl changelogs)
Feature is not fully implemented
Demo with PatientFeedback app
Generalized indexing: field find row header
Show FieldTraversal flow (PatientFeedback app)
Uses Zookeeper behind the scenes
- show that the tip tries to find a good placement
- show some weird buttons
buttons: [
{ value: "OK", foregroundColor: "White", backgroundColor: "Green", isDefault: true },
{ icon: "SadCrySolid", backgroundColor: "Yellow", isCancel: true }
]
if (t.wait(10000) == "OK") {
// user clicked ok within 10s
}
- show some markdown
- show timeout (default 5m)