Upload
k2
View
648
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Best practices in workflow development, including little known trips and tricks, from Johnny Fang, managing consultant, K2.
Citation preview
JOHNNY FANG Managing Consultant, K2 APAC
ANATOMY OF A GOOD WORKFLOW
How Do I Build Good Workflows?
ANATOMY OF BUILDING APPLICATIONS
DATA
REPORTS
FORMS
WORKFLOW
ANATOMY OF BUILDING APPLICATIONS
DATA
REPORTS
FORMS
WORKFLOW
ANATOMY OF BUILDING APPLICATIONS
ANATOMY OF BUILDING APPLICATIONS
ANATOMY OF BUILDING APPLICATIONS
ANATOMY OF BUILDING APPLICATIONS
BEST PRACTICES
GOOD/CLEAN DESIGN LAYOUTS
COLOR CODING YOUR PROCESS
EXTERNALIZE DATA USING REFERENCES
DATA ON DEMAND AND KEEP AUDIT
EXCESSIVE ESCALATIONS
REDUCE GOTOACTIVITY USAGE
AVOID SUPER SIZED PROCESSES
NAMING CONVENTIONS (HTTP://HELP.K2.COM/EN/K2LS-QRS023.ASPX)
http://help.k2.com/en/kb000352.aspx
SECURITY
HAVE A SEPARATE INSTALLER ACCOUNT WITH APPROPRIATE
PERMISSIONS (SQL/SHAREPOINT/WINDOWS)
INSTALL BEFORE OS HARDENING (DO BACKUPS BEFORE OS HARDENING)
PROCESS PERMISSIONS – VIEW PARTICIPATE VS VIEW (PERFORMANCE
IMPACT)
WORKSPACE SECURITY LOCKDOWN
SMARTOBJECT ACCESS LOCKDOWN
LOCKING DOWN WORKSPACE SECURITY/SMARTOBJECT PUBLISHING
(HTTP://HELP.K2.COM/EN/K2LS-QRS002.ASPX)
LIMIT IMPERSONATION RIGHTS TO THE RIGHT ACCOUNTS (THIS IS A
POWERFUL RIGHT!)
What Else
Is There?
WHAT THEY DON’T TELL YOU IN SCHOOL
FORM TO WORKFLOW MAPPINGS
FORM TO WORKFLOW MAPPING 1 TO 1
FORM TO WORKFLOW MAPPING 1 TO 1
FORM TO WORKFLOW MAPPING MANY TO SOME
FORM TO WORKFLOW MAPPING MANY TO SOME
FORM TO WORKFLOW MAPPING
• Standardize URLs
• Standardize Notifications
• Minimize flow exceptions
Getting it to work
• Non-dynamic Templates (SmartObject Events)
Things that don’t work so well
WHAT THEY DON’T TELL YOU IN SCHOOL
FORM TO WORKFLOW MAPPINGS
HANDLING LOG FILES
HANDLING LOG FILES COMMON PROBLEM#1
HELP! MY LOG FILE HAS GROWN TOO LARGE TO BE OPENED!
HANDLING LOG FILES COMMON PROBLEM#1
HELP! MY LOG FILE HAS GROWN TOO LARGE TO BE OPENED!
TIP
Use GVIM or ULTRAEDIT for very large log files
HANDLING LOG FILES COMMON PROBLEM#1
HELP! MY LOG FILE HAS GROWN TOO LARGE TO BE OPENED!
TIP 2
Large logs usually indicate issues. Do regular checks!
HANDLING LOG FILES COMMON PROBLEM#2
MY LOG FILE IS CLUTTERED WITH A TON OF ENTRIES. HOW DO I MAKE
SENSE OF IT?
SOLUTION
LOG FILES
Excel to parse (rename to .csv)
HANDLING LOG FILES COMMON PROBLEM#2
MY LOG FILE IS CLUTTERED WITH A TON OF ENTRIES. HOW DO I MAKE
SENSE OF IT?
HANDLING LOG FILES COMMON PROBLEM#2
MY LOG FILE IS CLUTTERED WITH A TON OF ENTRIES. HOW DO I MAKE
SENSE OF IT?
TIP
RENAME TO .CSV AND USE EXCEL
HANDLING LOG FILES
HANDLING LOG FILES
HANDLING LOG FILES COMMON PROBLEM#2
MY LOG FILE IS CLUTTERED WITH A TON OF ENTRIES. HOW DO I MAKE
SENSE OF IT?
TIP
RENAME TO .CSV AND USE EXCEL
TIP2
USE SQL LOGGING AND SMARTFORMS*
* http://peterblommendaal.wordpress.com/2014/01/24/create-a-k2-host-server-log-viewer-with-k2-smartforms/
HANDLING LOG FILES
* http://peterblommendaal.wordpress.com/2014/01/24/create-a-k2-host-server-log-viewer-with-k2-smartforms/
WHAT THEY DON’T TELL YOU IN SCHOOL
FORM TO WORKFLOW MAPPINGS
HANDLING LOG FILES
AVOID INFOPATH ATTACHMENTS
INFOPATH FORM ATTACHMENTS SIDE EFFECTS
0
10
20
30
40
50
60
70
80
90
1 3 5 7 9 11 1 3 5 7 9 11 1 3 5 7 9 11 1 3 5 7 9 11 1 3 5 7 9 11
2011 2012 2013 2014 2015
K2ServerLog (GB)
INFOPATH FORM ATTACHMENTS SIDE EFFECTS
0
10
20
30
40
50
60
70
80
90
1 3 5 7 9 11 1 3 5 7 9 11 1 3 5 7 9 11 1 3 5 7 9 11 1 3 5 7 9 11
2011 2012 2013 2014 2015
K2ServerLog (GB)
Where it all started
INFOPATH FORM ATTACHMENTS SIDE EFFECTS
WHAT SHOULD YOU DO?
1) INFOPATH IS DEAD! USE SMARTFORMS!
2) EXTERNALIZE ATTACHMENTS USING SMARTOBJECTS (E.G. TO SQL
OR SHAREPOINT)
3) DO ARCHIVAL
4) LAST RESORT – BUMP UP YOUR HARDWARE (IOPS – MAGIC
NUMBER 2 X TARGETED GB)
WHAT THEY DON’T TELL YOU IN SCHOOL
FORM TO WORKFLOW MAPPINGS
HANDLING LOG FILES
AVOID INFOPATH ATTACHMENTS
WORKFLOW AND CASES
WORKFLOW AND CASES DETERMINE IF THE WORKFLOW IS STARTING POINT OR THE CASE IS THE
STARTING POINT
Case
WORKFLOW AND CASES DETERMINE IF THE WORKFLOW IS STARTING POINT OR THE CASE IS THE
STARTING POINT
AVOID GETTING INTO THIS!
WHAT THEY DON’T TELL YOU IN SCHOOL
FORM TO WORKFLOW MAPPINGS
HANDLING LOG FILES
AVOID INFOPATH ATTACHMENTS
WORKFLOW AND CASES
SQL SERVER BROKER AND SCHEMAS
SQL SERVER BROKER AND SCHEMAS HELP! IT TAKES FOREVER TO REFRESH MY SQL BROKER INSTANCE!
HMM…. MY TEAM BUILT 1000+ TABLES AND STORED PROCEDURES…
SQL SERVER BROKER AND SCHEMAS SCHEMAS IS A GREAT WAY TO MAINTAIN SQL SERVER BROKER
PERFORMANCE
SQL SERVER BROKER AND SCHEMAS SCHEMAS IS A GREAT WAY TO MAINTAIN SQL SERVER BROKER
PERFORMANCE
SQL SERVER BROKER AND SCHEMAS SCHEMAS IS A GREAT WAY TO MAINTAIN SQL SERVER BROKER
PERFORMANCE
WHAT THEY DON’T TELL YOU IN SCHOOL
FORM TO WORKFLOW MAPPINGS
HANDLING LOG FILES
AVOID INFOPATH ATTACHMENTS
WORKFLOW AND CASES
SQL SERVER BROKER AND SCHEMAS
PERFORMANCE TWEAKS
GENERATEPUBLISHEREVIDENCE TAG NORMALLY SET WHEN NO INTERNET CONNECTION FROM THE SERVER
GENERATEPUBLISHEREVIDENCE TAG NORMALLY SET WHEN NO INTERNET CONNECTION FROM THE SERVER
GENERATEPUBLISHEREVIDENCE TAG NORMALLY SET WHEN NO INTERNET CONNECTION FROM THE SERVER
GENERATEPUBLISHEREVIDENCE TAG NORMALLY SET WHEN NO INTERNET CONNECTION FROM THE SERVER
WHAT THEY DON’T TELL YOU IN SCHOOL
FORM TO WORKFLOW MAPPINGS
HANDLING LOG FILES
AVOID INFOPATH ATTACHMENTS
WORKFLOW AND CASES
SQL SERVER BROKER AND SCHEMAS
PERFORMANCE TWEAKS
HAVING FUN WITH POWERSHELL AND K2
POWERSHELL AND K2 GREAT WHEN YOU DON’T HAVE .NET DEVELOPMENT TOOLS HANDY
POWERSHELL AND K2 GREAT WHEN YOU DON’T HAVE .NET DEVELOPMENT TOOLS HANDY
INBUILT ISE (POWERSHELL_ISE) – DEVELOPMENT/DEBUGGING
POWERSHELL AND K2 SAMPLE#1 – TIMING OPEN/CLOSE CONNECTION SPEED
[System.Console]::WriteLine("Open Connection")
Add-Type -AssemblyName ('SourceCode.Workflow.Client, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=16a2c5aaaa1b130d')
$conn = New-Object -TypeName SourceCode.Workflow.Client.Connection
$s=Get-Date;
$conn.Open("localhost")
$conn.Close()
$e=Get-Date;
[System.Console]::WriteLine("Close Connection")
[System.Console]::WriteLine("Time: " + ($e - $s).TotalSeconds.toString() + "
secs")
POWERSHELL AND K2 SAMPLE#2 – STARTING A PROCESS INSTANCE
[System.Console]::WriteLine("Sample code to start a K2 process")
Add-Type -AssemblyName ('SourceCode.Workflow.Client, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=16a2c5aaaa1b130d')
$conn = New-Object -TypeName SourceCode.Workflow.Client.Connection
$conn.Open("localhost")
$pi = $conn.CreateProcessInstance("Folder\ProcessName")
$conn.StartProcessInstance($pi)
$conn.Close
POWERSHELL AND K2 SAMPLE#3 – GENERATING NOTIFICATIONS FOR ERRORS
[System.Console]::WriteLine("Starting to check for Process Errors")
Add-Type -AssemblyName ('SourceCode.Workflow.Management, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=16a2c5aaaa1b130d')
$wms = New-Object -TypeName SourceCode.Workflow.Management.WorkflowManagementServer("localhost", 5555)
$wms.Open()
$el = $wms.GetErrorLogs($wms.GetErrorProfile("All").ID)
if($el.Count -gt 0){
[System.Console]::WriteLine("Error Count is " + $el.Count)
$emailFrom = "[email protected]"
$emailTo = "[email protected]", "[email protected]"
$smtpServer = <your SMTP mail server>
$subject = "K2 Process Errors"
$body = "{0} Process Errors found`n`n" -f $el.Count
foreach ($els in $el){
$body +=
"Folio:{0}`nProcInstID:{1}`nStartDate:{2:D}`nProcess:{3}`nErrorDate:{4:D}`nSource:{5}`nMessage:{6}`n`n" -f $els.Folio,
$els.ProcInstID, $els.StartDate, $els.ProcessName, $els.ErrorDate, $els.ErrorItemName, $els.Description
}
Send-MailMessage -To $emailTo -From $emailFrom -Subject $subject -Body $body -SmtpServer $smtpServer
}
else{
[System.Console]::WriteLine("No Errors Found")
}
http://www.k2underground.com/blogs/johnny/archive/2013/12/03/using-powershell-and-task-scheduler-to-notify-for-k2-errors.aspx
DEMO TIME
THANK YOU