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("FolderProcessName")
$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 = "system@domain.com"
$emailTo = "admin1@domain.com", "admin2@domain.com"
$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

K2 Fast Workflow

  • 1.
    JOHNNY FANG Managing Consultant,K2 APAC ANATOMY OF A GOOD WORKFLOW
  • 2.
    How Do IBuild Good Workflows?
  • 3.
    ANATOMY OF BUILDINGAPPLICATIONS DATA REPORTS FORMS WORKFLOW
  • 4.
    ANATOMY OF BUILDINGAPPLICATIONS DATA REPORTS FORMS WORKFLOW
  • 5.
    ANATOMY OF BUILDINGAPPLICATIONS
  • 6.
    ANATOMY OF BUILDINGAPPLICATIONS
  • 7.
    ANATOMY OF BUILDINGAPPLICATIONS
  • 8.
    ANATOMY OF BUILDINGAPPLICATIONS
  • 10.
    BEST PRACTICES  GOOD/CLEANDESIGN 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
  • 11.
    SECURITY  HAVE ASEPARATE 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!)
  • 12.
  • 13.
    WHAT THEY DON’TTELL YOU IN SCHOOL  FORM TO WORKFLOW MAPPINGS
  • 14.
    FORM TO WORKFLOWMAPPING  1 TO 1
  • 15.
    FORM TO WORKFLOWMAPPING  1 TO 1
  • 16.
    FORM TO WORKFLOWMAPPING  MANY TO SOME
  • 17.
    FORM TO WORKFLOWMAPPING  MANY TO SOME
  • 18.
    FORM TO WORKFLOWMAPPING • Standardize URLs • Standardize Notifications • Minimize flow exceptions Getting it to work • Non-dynamic Templates (SmartObject Events) Things that don’t work so well
  • 19.
    WHAT THEY DON’TTELL YOU IN SCHOOL  FORM TO WORKFLOW MAPPINGS  HANDLING LOG FILES
  • 20.
    HANDLING LOG FILES COMMONPROBLEM#1 HELP! MY LOG FILE HAS GROWN TOO LARGE TO BE OPENED!
  • 21.
    HANDLING LOG FILES COMMONPROBLEM#1 HELP! MY LOG FILE HAS GROWN TOO LARGE TO BE OPENED! TIP Use GVIM or ULTRAEDIT for very large log files
  • 22.
    HANDLING LOG FILES COMMONPROBLEM#1 HELP! MY LOG FILE HAS GROWN TOO LARGE TO BE OPENED! TIP 2 Large logs usually indicate issues. Do regular checks!
  • 23.
    HANDLING LOG FILES COMMONPROBLEM#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)
  • 24.
    HANDLING LOG FILES COMMONPROBLEM#2 MY LOG FILE IS CLUTTERED WITH A TON OF ENTRIES. HOW DO I MAKE SENSE OF IT?
  • 25.
    HANDLING LOG FILES COMMONPROBLEM#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
  • 26.
  • 27.
  • 28.
    HANDLING LOG FILES COMMONPROBLEM#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/
  • 29.
    HANDLING LOG FILES *http://peterblommendaal.wordpress.com/2014/01/24/create-a-k2-host-server-log-viewer-with-k2-smartforms/
  • 30.
    WHAT THEY DON’TTELL YOU IN SCHOOL  FORM TO WORKFLOW MAPPINGS  HANDLING LOG FILES  AVOID INFOPATH ATTACHMENTS
  • 31.
    INFOPATH FORM ATTACHMENTSSIDE 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)
  • 32.
    INFOPATH FORM ATTACHMENTSSIDE 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
  • 33.
    INFOPATH FORM ATTACHMENTSSIDE 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)
  • 34.
    WHAT THEY DON’TTELL YOU IN SCHOOL  FORM TO WORKFLOW MAPPINGS  HANDLING LOG FILES  AVOID INFOPATH ATTACHMENTS  WORKFLOW AND CASES
  • 35.
    WORKFLOW AND CASES DETERMINE IF THE WORKFLOW IS STARTING POINT OR THE CASE IS THE STARTING POINT Case
  • 36.
    WORKFLOW AND CASES DETERMINE IF THE WORKFLOW IS STARTING POINT OR THE CASE IS THE STARTING POINT  AVOID GETTING INTO THIS!
  • 37.
    WHAT THEY DON’TTELL YOU IN SCHOOL  FORM TO WORKFLOW MAPPINGS  HANDLING LOG FILES  AVOID INFOPATH ATTACHMENTS  WORKFLOW AND CASES  SQL SERVER BROKER AND SCHEMAS
  • 38.
    SQL SERVER BROKERAND SCHEMAS  HELP! IT TAKES FOREVER TO REFRESH MY SQL BROKER INSTANCE!  HMM…. MY TEAM BUILT 1000+ TABLES AND STORED PROCEDURES…
  • 39.
    SQL SERVER BROKERAND SCHEMAS  SCHEMAS IS A GREAT WAY TO MAINTAIN SQL SERVER BROKER PERFORMANCE
  • 40.
    SQL SERVER BROKERAND SCHEMAS  SCHEMAS IS A GREAT WAY TO MAINTAIN SQL SERVER BROKER PERFORMANCE
  • 41.
    SQL SERVER BROKERAND SCHEMAS  SCHEMAS IS A GREAT WAY TO MAINTAIN SQL SERVER BROKER PERFORMANCE
  • 42.
    WHAT THEY DON’TTELL YOU IN SCHOOL  FORM TO WORKFLOW MAPPINGS  HANDLING LOG FILES  AVOID INFOPATH ATTACHMENTS  WORKFLOW AND CASES  SQL SERVER BROKER AND SCHEMAS  PERFORMANCE TWEAKS
  • 43.
    GENERATEPUBLISHEREVIDENCE TAG  NORMALLYSET WHEN NO INTERNET CONNECTION FROM THE SERVER
  • 44.
    GENERATEPUBLISHEREVIDENCE TAG  NORMALLYSET WHEN NO INTERNET CONNECTION FROM THE SERVER
  • 45.
    GENERATEPUBLISHEREVIDENCE TAG  NORMALLYSET WHEN NO INTERNET CONNECTION FROM THE SERVER
  • 46.
    GENERATEPUBLISHEREVIDENCE TAG  NORMALLYSET WHEN NO INTERNET CONNECTION FROM THE SERVER
  • 47.
    WHAT THEY DON’TTELL 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
  • 48.
    POWERSHELL AND K2 GREAT WHEN YOU DON’T HAVE .NET DEVELOPMENT TOOLS HANDY
  • 49.
    POWERSHELL AND K2 GREAT WHEN YOU DON’T HAVE .NET DEVELOPMENT TOOLS HANDY  INBUILT ISE (POWERSHELL_ISE) – DEVELOPMENT/DEBUGGING
  • 50.
    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")
  • 51.
    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("FolderProcessName") $conn.StartProcessInstance($pi) $conn.Close
  • 52.
    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 = "system@domain.com" $emailTo = "admin1@domain.com", "admin2@domain.com" $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
  • 53.
  • 54.