Skip to main content

Hi,


We have some workflow application developed with K2.Net 2003 version and Blackpearl. During Blackpearl workflow development we have found the SmartObjects is so useful and we used them in our applications. Soemtimes we thought instead of adding datafields it is better to pull the information from Smartobjects so that we can reduce the no'of datafields used for each workflow. So that way we can minimize the no's of rows in _ProcInstData. This may also improve the performance. But it looks like calling smartobjects from workflow seems to be taling more time while pulling the data diff sources like SharePoint lists, Databases etc.


So my question is using SmartObjects over datafields will really helpful in improving the performance? I know that SmartObjects puporse is not only to replace the DataFields, but just wanted to confirm that our assumption makes any sense.


Please if you feel that there are some good ways to improve the performance, please provide me your suggestions.


Thanks in advance!


Srinivas

I think SmartObject would be slower since it has more abstraction layers to go through.


When you need to change the underlying data source (might be never), you won't need to change your workflow process.


I think that would depend on the number and types of datafields you are using and the underlying data store. A SmartObject that connects to a web service will not perform as fast as one connected to a database. SmartObject joins of disparate systems will perform slower because the infrastructure is doing all of the heavy lifting for you.


BUT, consider the other advantages of SmartObjects:


·     They allow you to store application data with system of record. That way there is never a question of "what is the current and correct data value?"


·     Storing data in a SmartObject that uses a database makes it easy to report on later and easy to move to another data store.


·     If the underlying data store changes, anything that consumes the SmartObject will not necessarily have to be changed.


In a workflow application that involves humans, the slowest element of the process is the humans!  Shaving off a few milliseconds from the process won’t matter much when the person receiving the task doesn’t action it for hours.


 


Thanks Peter, I agree..


Hi David,


First thanks alot for the answer!.


I 100% agree with your points related to SmartObjects Advantages. That is the reason we have started building our blackpearl workflows with a few DataFields and utlizing the advantages of SmartObjects. But sometimes the issues are like this. Let's say I have an activity, which have a client event and also has 3 level remenders. The reminder values like days, hours, mins (input parmaters - RequestID, ReqType, ActType..) will be brought from a maintenace screen data using SmartObjects. So in the reminder setup in the workflow for each value  the mapping will be like this:


InDays -- soReminders.GetValues(ReqType,ReqId,ActType,Days)


InHours -- soReminders.GetValues(ReqType,ReqId,ActType,hours)


InMins -- soReminders.GetValues(ReqType,ReqId,ActType,hours)


Email To Field - soReminders.GetValues(ReqType,ReqId,ActType,Approvers)


Email CC Field - soReminders.GetValues(ReqType,ReqId,ActType,Managers)


This made me to ask myself q eustion that, do we really need to call the smartobject function this many times to bring the values. Instead of this if we map all these values from DataFields (Fields values will be filled from input screens like Asp.Net forms), the performance may good. I ahve also observed one thing that, there are few scenarios where the workflow gone into error state with the reason of connection timeout issue.


So that is the reason I have started this post to discuss about smartobjects and datafields.


Your answer really help me to think that I am not doing too much wrong. Thanks DavidL.


Reply