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.
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.