Professional Documents
Culture Documents
Appian I QA
Appian I QA
Appian I QA
Introduction Template:
My name XXXXXXXX am from Hyderabad and Did my schooling +2 and engineering from so and so
school and college.
Am having 4+ years IT experience and in apian 2+ years of experience.
Initially I was joined as Nest developer then was cross skilled to appian.
The Client(Apex Ireland) has couple of appian applications and was initially put up in support,
There used to work on
1.Create appian users.
2.Grant and Change business access roles and responsibilities.
3.Monitoring the application instances. If any failure instance, find the root cause and analyse the
issue and retrigger them.
4.Work on incident tickets raised by users via ticketing tool(salesforce/ServiceNow).
From last 2+ year am working as Appian developer and been part of Development, currently am
working on Customer On boarding application.
We have daily scrum calls, stand-up call with Scrum Master and product owner. To discuss on
progress and tell if any challenges.
As part of this app, have worked on
• Process Models
• Expression rules
• Interfaces
• Sites
• Records
• Integrations ( have worked ? which ? Sharepoint )
General Flow:
1. Collect Details from User
2. Save Details
3. Send details to the Process Model (Map form, map rule inputs to the process)
4. Send details to Data Base
Rule Inputs :
UserForm
{
FirstName : "Ram" -------------> rueinputs---> ri!firstName
}
rules :
Call one rule into another rule : rule!yourRuleName()
A(
"Hi this is A" )
B
(
rule!A()---------//"Hi this is A"
)
>We can use start process smart service node over sub proces smart service node
because start process will have good performance when compared to sub process.
>We can use alerts settings to notify error information to the groups.
>We can also use Exceptions and Escaliations.
--Exceptions is for To skip the node or to execute exceptional flow in the process
where we want to skip activity we
--Escliations is used to re assign the task or send notification to user where assigne
isdelaying the task
>Best practice is to create upto 30 to 50 nodes but there is no limit in process model
nodes and can use 50 varibles but there is no limit but to maintain the memmory
efficient processmodel we will use 50 variables
for example : if we give archival as 3 days for any process model, once process is
completed or cancelled that process instance will be removed from system & It will keep
in backend side memory.
for example : if we give deletion as 3 days for any process model, once process is
completed or cancelled that process instance will be removed from system & It will not be
stored in the back end
if we use archival we can restore archived process instance using unarchive command
in backend side or else we can raise a ticket with Appian they can help us to get back
archived process instance
4.Activity chaining: To override the sub sequent tasks to the same user... who have
accepted first task , same person can complete sub sequent tasks
But there will be a Limit, it is upto 50. if it is more than 50 we can use parallel
processing but i didn't see that scenario
Using AND gate way we can configure paralell processing in process model.
OR: It is like if and if condition the condition that become true those outgoing paths willbe
executed hence there can be multiple out going paths executed.
XOR: It is like if else conditon when conditon is true from all the multiple outgoing paths
only one outgoing path will be executed based on condition.
Sub Process : Synchronous --sub process: sub -- parent & child run on same
enginestart Process -- Asynchronous -- good with performance becz parent &
child process wil run on different engine
Dsitribution will happen while executing so load balancing will happend in the backend
Synchronous --parent will wait for child process to continue and in this we can send input -
get -ouput from parent to child to parent
Scenario : on boarding an employee there is one main pocess which has sub process to
complete BG verification once verification is completed then only employee on board
processwill be completed
Asynchronous--parent will not wait for child process and here we can send input from
parent to child but we cannot get -ouput varible values from child to parent
Scenario : on boarding an employee there is one main pocess which has sub process to
complete Bank account creation there is no depredency on sub process ...Parent On
board process will be completed irrespective of the sub process completion
Rule Event :
At any time in a process model when there are certain conditions that need to be met
before the process flow proceeds, an intermediate rule event should be used
A process can have multiple End Events.process is reached to end event other flows in
the process model will not be effected means other flows will be active in the process
model
Example : If we have multiple indivisual flows we can use end evnt for each flow
Example : Customer On Boarding in bank where we can start different flows for onborded
customer
Terminate event can be used to stop all flows of a process,Process is reached to
Terminate event other flows in the process model will be effected & Terminated
Example : If we have multiple dependent flows we can use Terminated event for few flows
Example : Customer On Boarding in bank where we can start different flows for onborded
customer but in this his credit score verification flow says he has less than expected
credit score we can cancel on boarding process to the customer
Pass as a reference :
We will use this option from parent process to sub process flow in the sub process smart
service we have option called pass by reference
we can get updated values in parent process if we update in sub
processIt is not a best practice to use as we can not expect behaviour of
variables pass by value :
only we can send values to sub process but we can not get updated values in parent
processif we update in sub process
MNI :
multiple node instances
to assign same task to group of users we can use MNI but it is not best practie due
toperformance we can't use MNI
Limit is 1000
user input
task
instead of MNI , looping is better in process model to execute sigle node in multiple times
SCENARIO:
If we want to send feed back form to all users in the group all the group members can
submitindivual feed back
Process varaibles :
Creating a Process Variable
In the Process Modeler, select File > Properties.
Click the Variables tab.
Click Add Variable
Parameter: Select this checkbox if you want the variable value to be entered when
theprocess starts using a Process Start Form
Required: Select this checkbox if you want to require the parameter to have a value before
theprocess starts. You can specify a default value if the user input should be optional.
Multiple: Select this checkbox if you want to store an array of values.
When typing a process variable's default value directly in the field, use commas to
separatethe items. For example, "a","b","c","d".
Hidden: Select this checkbox if you do not want the variable's values to be used in reports
that use this process or process model as the context or available for mapping to parent
processes when the process model is used in a Sub-Process Activity. You can not make a
variable hidden if it is a parameter.
Changes to hidden variables do not appear in the process history.
To expose the process variable within newly started process instances, clear the Hidden
checkbox.
a!startProcess(function): Asynchronous process--when I use this function we can start
the process from an interface Use this for unattended activities related to a specific piece
of information from the the interface.
a!startProcessLink: Synchronous -- when I use this function we can start the process
from an interface to the initial chained forms in interface . Use this for taking the user to a
process related to a specific piece of information on an interface and come bac to the same
interface.
Function: a!startProcessLink()
Defines a link to start a process. Users are shown the start form or first chained
attendednode and any subsequent chained forms
Example:
a!linkField(
links: {
a!startProcessLink(
label: "Update Customer Details",
processModel:
cons!UPDATE_CUSTOMER_DETAILS_PM,
processParameters: {
customerId: ri!customer.id
},
bannerMessage: "Updated details for " & ri!customer.name
)
}
)
Escalation Scenario :
In any real time scenario /business-flow if user should approve the task or complete
thetask based on flow but he is delaying it in such cases if any escalations are configured
on top of it the perticular approval task will be reassigned to other person orelse we can
notify with email there are four options to configure escalationson top of node
Exception Scenario :
For example in the business flow if user should approve the task or any integration or
elseany automated activity is taking more time in such cases if we want to skip that
flow and execute other flow or else to run same foow with looping there we can configure
Exceptions Exceptions we can configure with two options one is rule condition or timer
condition on topof node
Sub process ASynchronous scenario :
In the real time scenario if we have sub flow example if we want to send an email about
approval status which is configured in sub process which is not dependent on parent
processflow there we can configure sub process flow as asynchronous
Example : Customer request --- send email notification to customer about request
confirmation ( sub process flow )
Triggers :
we can configure triggers in process model start node .For example Team wants to send
an email report to all team members daily or weekly basis so you want scheduled
process model which will run automatically without user interaction there we can
configure Triggers we have option Triggers on start node there Timer option would be
there to setup trigger onstart process model based on given time
Proces properties :
Deafult varibles in process model which will give you process runtime properties like
processid & process start time
Process Model Varibles :
Deafult varibles in process model which will give you Process model properties like
processmodel name & who created process model
INTEGRATIONS
Integraton :
we can use to get data from outside system and we can have differnt authentication to
connect third party system for connecting to external system we will use Connected
system object then we can useconnected system in Integration object
Once we call integration in our Process model using Call Integration smart service using
Get method we can get output data from that service then we can convert output data to
specified CDT format then we can use formated out put data to display to report or
anywherein Appian
Similarly we can update data in third party system using post service in Integration object
here we can send data in Json format once we send data to Integration object We will
getoutput that can be validated based on result data and status code like 200 --- Successfull,
404 - Error ,503- Server Error
Web API :
From Appian side we can publish or expose data like Appianprocess data or
expressionresult data or DB data using Web API
once we create web API using start process function we will get one URL and we have
to create one system account to access Appian Web API
we have to share URL and Authntication details to third party people they can access
fromthier system
here Third party people can update data or create new data or query data using our
ProvidedWEB API URL
Type of integration methods:
Get : to get the data from outside system
Post : to update/send data to the outside system
We have Put /delete patch but I don't have much exp on it
what Smart services We can use for Integration & web API
WEB API : to expose Appian data to outside system in the form of Rest API we can use
WebAPI
once we create we will get URL we have to give to the outside system they can use web
Apiwith proper Authentication which is defined by admin to connect the third party
applicatons
RECORDS
Record Type: Shows the data related to Specific entity or from multiple entity to give
moredetails to the end user.
There are 3types of records:
1.Entity Record get data from DB table --isnurance details & rqeuest detals
records
2.Process Backed records from process data source
Scenario:
to get running process details
to get update on running instance for process in the running flow we want to update & add
documents
3.Expression(or)Service backed -- to get data from outside system like third
partyapplications we have to use integration to get data.
Folder :
rule
process
knowldge center
document folder
Object Search :
we can search object using global search option from right side
menuor else you can use filter with left side object search
Dynamic Link - Defines a link that triggers updates to one or more variables.
Start Process Link - Defines a link to start a process and navigates the user through any
initialchained forms.
Process Task Link - Defines a link to a process task
Paging grid - displays the data in a tabular format with pagination at the bottom right
cornerof the grid and all the fields are read only. Designer can configure selection on the
pagination. Paging gridcan be created by a!gridField.
Editable grid – displays the data in a tabular format allowing the user to edit the field’s
inline.It will not have a pagination.
SECURITY
Security :
we can give security for each object in Appian for few objects we can't give security
example CDT why becz That is depends on another objet security like Inteface but in
interfaces we cannot provide seuirty to cdt as it we can inherit security from parent objets
Security Roles : for all objects
Viewer --end user datastore & process model & folder & record type
Editor ---
Admin
Deny
Initiator -- He can start the process but he can not have access to the process
reports
Viewer -- He can start the processs but he can have access to the process reports
Manager -- almost similar to editor
Editor -- He can edit the details but he can’t delete
Admin -- Admin can do all operations
For Developers we can give Editor rights for end userd Viewer & Initiater
We can export Application or patch file from Application and we can import in Target
system(Prod/Test)
while exporting we need to check depedents & missing precedents objects if anything
ismissing we can add to the patch then export it
while importing we need to verify inspect to check for any error if all are good then
onlyimport in Target system
example : constant value is 10 in Dev environment but we can use different value in
Production or Test
In real time we can use for Connected system / Integration URL we can definebased
on environemnt specification
Validations :
we can use validation to validate entered data in form we have two types one
ison component level we can use validation option with conditions
a!textField(
label: "5 Characters",
instructions: "Character count: " & len(local!varA) & "/5",
value: local!varA,
saveInto: local!varA,
refreshAfter:
"KEYPRESS",
validations: if(len(local!varA)<=5, null, "Enter no more than 5 characters")
validationGroup:if(local!isNumberValid,"Future_Hire","")
),
Validation Group :
We can validate all components conditions at a time based on button click where we
define validation group name is same
a!buttonWidgetSubmit(
label: "Onboard Employee Now",
value: false,
saveInto: local!isFutureHire,
validationGroup: "Future_Hire"
)
FUNCTIONS & UI
Load variables will be initialized once the form is loaded
We can use load variables in
SaveInto and a!Save()
With variables will be recalculated each time when the expression is re-evaluated.
We can not use with variables in SaveInto
anda!Save()
Start Form: before process starting If we can conigure a form this will not take memory
initialy as process model wil not be started when we are configure start form as it is
avaiable to use before process instance is started
User Input Form: This will be used to configure a form after process started only the form
willbe avaible to user
!forEach(items: {100, 200, 300}, expression: fv!item + 1) returns {101, 201, 301}
!forEach(
items: {"1"},"2""3},
expression: union(fv!item,append(fv!item))
)
* It will give us 1,2,3 as out put here each one item will be display from array
Where() Returns the indices where the values in the input array are true.
Where({true,false,true})—1,3 true indexs
Wherecontains() Receives one or more values and returns an array of indices that indicate
theposition of the values within the array.
examle:Wherecontains(20,{40,20,30})—2
ToString() Converts a value to Text. If an array is passed in, its values will be
concatenated toform one string. To preserve the original array structure, use
touniformstring.Tostring({1,2,3})--"1, 2, 3"
ToUniformString() Converts a value to Text, preserving the original scalar or array
structure. To concatenate the array into one string, see tostring.
touniformstring("John Doe 1060 West Addison Chicago", "IL",15)-- John Doe
1060 WestAddison
Chicago; IL; 15
Query: Data stores used to make a connection from the appian to external relational
databasewe can map CDT to the table using Data Stores
Query Types :
queryEntity( entity:cons!YO
UR_ENTITY() query:query()
fetchTotalCount:
)
AppianPerformance Medium
Retrieves all rows
retrun type is an Array of CDTs or a DataSubset of CDTs
Different example where we use write to datastore smart service and multiple write
multiple to datastore smart service and best practices of using them
To send one CDT /Entity details to the Data base table we use write to datastore smart
service where as for updating mutiple entities/tables to the data base we use multiple
data store entity smart service
a!queryEntity()
Performance Fastest
specified columns
Retrieves
retrun type DataSubset of Dictionaries
Will it be possible to get data from Database based on the grouping of a certain
column?
Yes we can use isgrouping attribute in Query Aggregation column.
a!queryAggregationColumn(
field: "department",
isGrouping: true
)
What are the different ways to get the data into Appian from Database?
aggregation:
a!queryAggregation(aggregationColumns: {
a!queryAggregationColumn( fie
ld: "department",
isGrouping: true
)
}
),
a!queryEntity(
entity: cons!EMPLOYEE_ENTITY,
query: a!query(
selection:
a!querySelection(columns: {
a!queryColumn(
field: "phoneNumber"
)
}
),
logicalexpression:
a!queryLogicalExpression(operator: "AND",
filters:
{ a!queryFilter(
field: "id",
operator: "=",
value: 8
)
}
),
pagingInfo:
a!pagingInfo(startIndex: 1,
batchSize: 1
)
)
).data
)
DEBUGGING
Debugging :
When we get error in running process instance first we have to check with name or
process idin monitoring tab
once we found that proces instance open that and there is two options one is monitoring
mode & another one Edit mode...........open with edit mode to edit runtime process
instance
do changes as per error details and save the process using apply changes option from
file menu
once we do apply changes all modified changes are effected in running process instance
thenstart the instance from where it got strucked
if we have 1000 s of instances in such case cases we have to use IFM manager smart
servicebut I don't have much exp on it
Challeges :
Whever we were using bigger processes initially we have divided in into smaller proceses
at that time I was given major contribuion to create new flows with existing process
design thathelped to our project to improve & re use the process models
And while migrating old project with new design due to performance issues we have
faced somany issues like query entity was taking more time at that time I have designed
modifed process migr
We have updated CDT in the middle of the development at that time I was updated Data
basetable and CDT with XSD mapping
Agile :
We can get work from Jira tool where we get assigned with user stories each story can
havemultiple data points based on that I can work and once work is completed I will
submit for PeerReview to validate design code.
Once peer review completed We can design document and give final review
deploy changes Or patch file in Production
once deployment is completed will do cycle -- testing like regression & smoke testing
12 sprint every 2 weeks sprint one deployed
per sprint vice -- per two weeks we can deploye latest changes.
While deploying we will import customization file to give environent specific details for
eachenvionment
ac : with in the node for cache varibles for mapping in data base i can add column later add
in cdt using xsdthem to datastore to table
Team Size: 7 mem they will assign work with Jeera tickets based on user stories i
cancomplete my work & submit to my team.
Excel Reading :
We will use excel reading using excel tool plugin this is external plugin we have to
download from Appian Market
Deploy using admin help then all functions & smart services are available for
useThen we can use this for reading excel file using readexcel function
and we can get data and convert that data to excel file
excel can support 1 Lac records
based on busines flows we can decide if it is required we can chnage default settings 7
days process instances completed & cancelled
properlysub process instances which are completed we can delete
immidiately
synchronous process instances in the flow we can delete immidiatley yes we ca we
canemail & DB flows
Debugging :
When we get error in running process instance first we have to check with name or
process idin monitoring tab
once we found that proces instance open that and there is two options one is monitoring
mode & another one Edit mode...........open with edit mode to edit runtime process
instance
do changes as per error details and save the process using apply changes option from
file menu
once we do apply changes all modified changes are effected in running process instance
thenstart the instance from where it got strucked
if we have 1000 s of instances in such case cases we have to use IFM manager smart
servicebut I don't have much exp on it
Challeges :
datasubsetdownloadlink()
SQL to export & Excel
tools
While creating one process model I have to use other process design in same process at
thattime complex expression data we are fetching with logic so I have simplified with
exact flos with conditions
I have modified existing process with re usable process when we were using lots of
nodes and process data I have completely removed and updated with latest design with
all best [practice of the process hen It was very helpful to users to get better business
flows
While using grids faced issues like need to fetch data from two tables at that time I have
created view based on existing two tables after that I have mapped CDT for created view
then use view data in grids It was bit complex for me at that time but I did mysef I got
good feedback from my manager & client
Whever we were using bigger processes initially we have divided in into smaller proceses
at that time I was given major contribuion to create new flows with existing process
design thathelped to our project to improve & re use the process models
And while migrating old project with new design due to performance issues we have
faced somany issues like query entity was taking more time at that time I have designed
modifed process migr
coding & data base data we are getting lot of rows at the time I have re modfied code
togetdata
We have updated CDT in the middle of the development at that time I was updated Data
basetable and CDT with XSD mapping