This article was created in response to a support issue logged with K2. The content may include typographical errors and may be revised at any time without notice This article is not considered official documentation for K2 software and is provided “as is” with no warranties.
When a workflow runs through an event that uses a Person/Group column value from a SharePoint List/Library Item reference we see that we will get presented with either one of the following errors depending on how it is used:
SmartObject property UserIds is a required property for selected method GetK2EmailsForSharePointUsers. Value must be set
28083 ServerEvent: Object must implement IConvertible. Server stack trace: at SourceCode.Workflow.Runtime.Extenders.WinWFExtender.OnExecute(Object context, XmlElement data, ResolverManager resolverManager) at SourceCode.Workflow.Runtime.Extenders.ResolverExtenderBase.Execute(Object context, String data) at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object args, Object server, Object& outArgs) at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg)
This is seen when we have not set a value for a Person/Group column within Sharepoint and then attempting to use that Person/Group column's smartobject property like Value, Name, or Email within a workflow event. Currently we do not handle null values for these properties from sharepoint well because we need to run the GetK2EmailsForSharePointUsers method in order to get the Value, Name, or Email properties from that column. That specific method does require UserIds parameter to be set, and if the column is blank that will not get thrown into this method, thus causing our error to happen.
Our Object must implement IConvertible is specifically due to using this null value within an expression on the workflow that checks for a null value in this column. E.G. If (Person (Value) = Empty String())
This has been identified as a known issue and will be resolved in Appit 1.5 Update 4.
Workaround: Currently the workaround for this issue previous to Update 4 will be to avoid using the values that require this method and also preventing a sharepoint column that will be null to then be used within K2 workflows. Those Value, Name, or Email properties all run this method.
As a workaround we can prevent the user from being able to submit a form with a picker control not populated via validation on the smartform level. This can be done via the SmartForms Condition: "If form Passes Validation"
If we do not want to do validation at the form level, we can drag in the full SmartObject property for that Column instead of its subproperties Value, Name, or Email within the workflow. Do note that this will supply an ID value for the user such as '11' based on what we get back from SharePoint so we will need to account for this within our design. Within our previous expression If (Person (Value) = Empty String()) we then made it look like so If (Person = Empty String()) and this now did not error.