K2 Fast Workflow

Post on 21-Jan-2015

644 views 0 download

Tags:

description

Best practices in workflow development, including little known trips and tricks, from Johnny Fang, managing consultant, K2.

Transcript of K2 Fast Workflow

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 = "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