public static ProcessInstance ConvertToWFProcessInstance(Client.ProcessInstance origObj, bool loadDataFields)
 {
     if (origObj == null)
     {
         return null;
     }
     ProcessInstance procInst = new ProcessInstance();
     procInst.ID = origObj.ID;
     //procInst.ProcID = origObj.ProcID;
     //procInst.ProcSetID = origObj.ProcSetID;
     procInst.FullName = origObj.FullName;
     //procInst.DisplayName = origObj.DisplayName;
     //procInst.FlowNumber = origObj.FlowNumber;
     procInst.Folio = origObj.Folio;
     procInst.Originator = origObj.Originator.Name;
     ///procInst.Status = (ProcInstStatus)(int)origObj.Status1;
     procInst.Priority = origObj.Priority;
     procInst.ExpectedDuration = origObj.ExpectedDuration;
     procInst.StartDate = origObj.StartDate.ToString("yyyy-MM-dd HH:mm");
     if (loadDataFields)
     {
         if (origObj.DataFields != null)
         {
             Dictionary<string, DataField> dicFields = new Dictionary<string, DataField>();
             foreach (Client.DataField field1 in origObj.DataFields)
             {
                 DataField field = new DataField();
                 field.Name = field1.Name;
                 //field.Type = origObj.DataFields[fieldName].Type.ToString();
                 field.Value = field1.Value;
                 //field.Category = origObj.DataFields[fieldName].Category;
                 dicFields.Add(field.Name, field);
             }
             procInst.DataFields = dicFields;
         }
         if (origObj.XmlFields != null)
         {
             Dictionary<string, XmlField> dicXmlFields = new Dictionary<string, XmlField>();
             foreach (Client.XmlField field1 in origObj.XmlFields)
             {
                 XmlField field = new XmlField();
                 field.Name = field1.Name;
                 field.Value = field1.Value;
                 field.Category = field1.Category;
                 field.Hidden = field1.Hidden;
                 field.MetaData = field1.MetaData;
                 field.Schema = field1.Schema;
                 field.Xsl = field1.Xsl;
                 dicXmlFields.Add(field.Name, field);
             }
             procInst.XmlFields = dicXmlFields;
         }
     }
     return procInst;
 }
        public static WorklistItem ConvertToWFWorklistItem(Client.WorklistItem origObj)
        {
            if (origObj == null)
            {
                return null;
            }
            WorklistItem wlItem = new WorklistItem();
            wlItem.ID = origObj.ID;
            wlItem.ProcInstID = origObj.ProcessInstance.ID;
            wlItem.ActInstDestID = origObj.ActivityInstanceDestination.ID;
            wlItem.ActInstID = origObj.ActivityInstanceDestination.ActInstID;
            //wlItem.ProcID = origObj.ProcID;
            wlItem.ActID = origObj.ActivityInstanceDestination.ActID;
            wlItem.EventID = origObj.EventInstance.ID;
            wlItem.Destination = origObj.AllocatedUser;
            wlItem.AssignedDate = origObj.ActivityInstanceDestination.StartDate.ToString("yyyy-MM-dd HH:mm");
            wlItem.StartDate = origObj.ProcessInstance.StartDate.ToString("yyyy-MM-dd HH:mm");
            //wlItem.FinishDate = origObj.FinishDate;
            wlItem.Status = (WorklistStatus)(int)origObj.Status;
            //wlItem.ProfileID = origObj.ProfileID;
            //wlItem.TenantID = origObj.TenantID;
            wlItem.ActivityName = origObj.ActivityInstanceDestination.Name;
            wlItem.ActivityDispName = origObj.ActivityInstanceDestination.Name;
            wlItem.FullName = origObj.ProcessInstance.FullName;
            wlItem.ProcDispName = origObj.ProcessInstance.Name;
            //wlItem.Originator = origObj.;
            wlItem.Folio = origObj.ProcessInstance.Folio;
            //wlItem.FlowNumber = origObj.ProcessInstance.;
            wlItem.ProcInstStatus = (ProcInstStatus)(int)origObj.ProcessInstance.Status1;
            wlItem.ProcStartDate = origObj.ProcessInstance.StartDate.ToString("yyyy-MM-dd HH:mm");
            wlItem.SN = origObj.SerialNumber;
            wlItem.Data = origObj.Data;

            if (origObj.ProcessInstance != null)
            {
                wlItem.ProcessInstance = ConvertToWFProcessInstance(origObj.ProcessInstance, true);
            }

            foreach (Client.Action origAction in origObj.Actions)
            {
                ApproveAction action = new ApproveAction();
                action.Name = origAction.Name;
                action.MetaData = origAction.MetaData;
                //action.WorklistItem = wlItem;
                wlItem.Actions.Add(action);
            }
            return wlItem;
        }
        private Tasks.Service.Dto.ProcessInstance ToProcessInstance(Client.ProcessInstance inst, bool includeInstanceDataFields = false)
        {
            if (inst == null) return null;

            var procInst = new Tasks.Service.Dto.ProcessInstance();

            procInst.ID = inst.ID;
            procInst.FullName = inst.FullName;
            procInst.Folio = inst.Folio;
            procInst.Originator = K2User.DelApplySecurityLabel(inst.Originator.FQN);
            procInst.Priority = inst.Priority;
            procInst.ExpectedDuration = inst.ExpectedDuration;
            procInst.StartDate = inst.StartDate.ToString("yyyy-MM-dd HH:mm");

            if (includeInstanceDataFields)
            {
                if (inst.DataFields != null)
                {
                    Dictionary<string, Tasks.Service.Dto.DataField> dicFields = new Dictionary<string, Tasks.Service.Dto.DataField>();
                    foreach (Client.DataField field1 in inst.DataFields)
                    {
                        Tasks.Service.Dto.DataField field = new Tasks.Service.Dto.DataField();

                        try
                        {
                            field.Name = field1.Name;
                            field.Value = field1.Value;
                            dicFields.Add(field.Name, field);
                        }
                        catch (Exception)
                        {

                            continue;
                        }

                    }
                    procInst.DataFields = dicFields;
                }

                if (inst.XmlFields != null)
                {
                    Dictionary<string, XmlField> dicXmlFields = new Dictionary<string, XmlField>();
                    foreach (Client.XmlField field1 in inst.XmlFields)
                    {
                        XmlField field = new XmlField();
                        try
                        {
                            field.Name = field1.Name;
                            field.Value = field1.Value;
                            field.Category = field1.Category;
                            field.Hidden = field1.Hidden;
                            field.MetaData = field1.MetaData;
                            field.Schema = field1.Schema;
                            field.Xsl = field1.Xsl;
                            dicXmlFields.Add(field.Name, field);
                        }
                        catch (Exception)
                        {
                            continue;
                        }


                    }
                    procInst.XmlFields = dicXmlFields;
                }
            }

            return procInst;
        }
        private WorklistItem ToWorklistItem(string k2User, Client.WorklistItem item, bool includeInstanceDataFields = false, bool includeActivityDataFields = false, bool includeItemActions = false)
        {
            if (item == null) return null;

            var wlItem = new Tasks.Service.Dto.WorklistItem();

            wlItem.ID = item.ID;
            wlItem.ProcInstID = item.ProcessInstance.ID;
            wlItem.ActInstDestID = item.ActivityInstanceDestination.ID;
            wlItem.ActInstID = item.ActivityInstanceDestination.ActInstID;
            wlItem.ActID = item.ActivityInstanceDestination.ActID;
            wlItem.EventID = item.EventInstance.ID;
            wlItem.Destination = K2User.DelApplySecurityLabel(item.AllocatedUser);
            wlItem.AssignedDate = item.ActivityInstanceDestination.StartDate.ToString("yyyy-MM-dd HH:mm");
            wlItem.StartDate = item.EventInstance.StartDate.ToString("yyyy-MM-dd HH:mm");
            wlItem.Status = (Tasks.Service.Dto.WorklistStatus)(int)item.Status;
            wlItem.ActivityName = item.ActivityInstanceDestination.Name;
            wlItem.ActivityDispName = item.ActivityInstanceDestination.Name;
            wlItem.FullName = item.ProcessInstance.FullName;
            wlItem.ProcDispName = item.ProcessInstance.Name;
            wlItem.Folio = item.ProcessInstance.Folio;
            wlItem.ProcInstStatus = (ProcInstStatus)(int)item.ProcessInstance.Status1;
            wlItem.ProcStartDate = item.ProcessInstance.StartDate.ToString("yyyy-MM-dd HH:mm");
            wlItem.SN = item.SerialNumber;
            wlItem.Data = item.Data;
            wlItem.Originator = K2User.DelApplySecurityLabel(item.ProcessInstance.Originator.FQN);

            if (!item.AllocatedUser.Equals(k2User, StringComparison.OrdinalIgnoreCase))
            {
                wlItem.Data += "&SharedUser=" + item.AllocatedUser;
            }

            if (item.ProcessInstance != null)
            {
                wlItem.ProcessInstance = ToProcessInstance(item.ProcessInstance, includeInstanceDataFields);
            }

            if (includeActivityDataFields)
            {
                var actDataFields = new Dictionary<string, object>();

                foreach (Client.DataField field in item.ActivityInstanceDestination.DataFields)
                {
                    try
                    {
                        if (actDataFields.ContainsKey(field.Name))
                            actDataFields[field.Name] = field.Value;
                        else
                            actDataFields.Add(field.Name, field.Value);
                    }
                    catch (Exception)
                    {
                        continue;
                    }

                }
                wlItem.ActivityDataFields = actDataFields;
            }

            if (includeItemActions)
            {
                foreach (Client.Action act in item.Actions)
                {
                    var action = new ApproveAction();

                    action.Name = act.Name;
                    action.MetaData = act.MetaData;
                    //action.WorklistItem = wlItem;
                    wlItem.Actions.Add(action);
                }
            }

            return wlItem;
        }
        private List<WorklistItem> ToWorklistItems(string k2User, Client.Worklist worklist, bool includeInstanceDataFields = false, bool includeActivityDataFields = false, bool includeItemActions = false)
        {
            var wlItems = new List<WorklistItem>();

            foreach (Client.WorklistItem item in worklist)
            {
                wlItems.Add(ToWorklistItem(k2User, item, includeInstanceDataFields, includeActivityDataFields, includeItemActions));
            }

            return wlItems;
        }
 /// <summary>
 /// Used to convert parameter value types to datafield ones.
 /// </summary>
 /// <param name="val">Value of the parameter</param>
 /// <param name="dType">DataType of the DataField</param>
 /// <returns></returns>
 private object GetDataFieldValue(object val, CLIENT.DataType dType)
 {
     switch (dType)
     {
         case CLIENT.DataType.TypeBinary:
             return Convert.FromBase64String(Convert.ToString(val));
         default:
             return val;
     }
 }
 public static DataField ConvertToWFDataField(Client.DataField origObj)
 {
     if (origObj == null)
     {
         return null;
     }
     DataField field = new DataField();
     field.Name = origObj.Name;
     field.Value = origObj.Value;
     return field;
 }
        public static WorklistItem ConvertToWFWorklistItem(ServiceContext context, Client.WorklistItem origObj)
        {
            if (origObj == null)
            {
                return null;
            }
            WorklistItem wlItem = new WorklistItem();
            wlItem.ID = origObj.ID;
            wlItem.ProcInstID = origObj.ProcessInstance.ID;
            wlItem.ActInstDestID = origObj.ActivityInstanceDestination.ID;
            wlItem.ActInstID = origObj.ActivityInstanceDestination.ActInstID;
            //wlItem.ProcID = origObj.ProcID;
            wlItem.ActID = origObj.ActivityInstanceDestination.ActID;
            wlItem.EventID = origObj.EventInstance.ID;
            wlItem.Destination = origObj.AllocatedUser;
            wlItem.AssignedDate = origObj.ActivityInstanceDestination.StartDate.ToString("yyyy-MM-dd HH:mm");
            wlItem.StartDate = origObj.ProcessInstance.StartDate.ToString("yyyy-MM-dd HH:mm");
            //wlItem.FinishDate = origObj.FinishDate;
            wlItem.Status = (WorklistStatus)(int)origObj.Status;
            //wlItem.ProfileID = origObj.ProfileID;
            //wlItem.TenantID = origObj.TenantID;
            wlItem.ActivityName = origObj.ActivityInstanceDestination.Name;
            wlItem.ActivityDispName = origObj.ActivityInstanceDestination.Name;
            wlItem.FullName = origObj.ProcessInstance.FullName;
            wlItem.ProcDispName = origObj.ProcessInstance.Name;
            //Added By:BingYi 2014-07-17 Fixed:The Originator should be included in worklist item.
            wlItem.Originator = origObj.ProcessInstance.Originator.Name;
            wlItem.Folio = origObj.ProcessInstance.Folio;
            //wlItem.FlowNumber = origObj.ProcessInstance.;
            wlItem.ProcInstStatus = (ProcInstStatus)(int)origObj.ProcessInstance.Status1;
            wlItem.ProcStartDate = origObj.ProcessInstance.StartDate.ToString("yyyy-MM-dd HH:mm");
            wlItem.SN = origObj.SerialNumber;
            wlItem.Data = origObj.Data;
            if (origObj.AllocatedUser.ToLower() != (K2User.ApplySecurityLabel(context.UserName)).ToLower())
            {
                wlItem.Data += "&SharedUser=" + origObj.AllocatedUser;
            }

            if (origObj.ProcessInstance != null)
            {
                wlItem.ProcessInstance = ConvertToWFProcessInstance(origObj.ProcessInstance, true);
            }

            var activityDataFields = new Dictionary<string, object>();
            foreach (Client.DataField item in origObj.ActivityInstanceDestination.DataFields)
            {
                if (activityDataFields.ContainsKey(item.Name))
                    activityDataFields[item.Name] = item.Value;
                else
                    activityDataFields.Add(item.Name, item.Value);
            }
            wlItem.ActivityDataFields = activityDataFields;

            foreach (Client.Action origAction in origObj.Actions)
            {
                ApproveAction action = new ApproveAction();
                action.Name = origAction.Name;
                action.MetaData = origAction.MetaData;
                //action.WorklistItem = wlItem;
                wlItem.Actions.Add(action);
            }
            return wlItem;
        }