Exemplo n.º 1
0
        private Item GetContact(Guid userid, ADQueryResult subject)
        {
            try
            {
                // try to get an existing contact by name
                var contact = UserContext.Items.
                              Include("FieldValues").
                              Single(i => i.UserID == userid && i.ItemTypeID == SystemItemTypes.Contact && i.Name == subject.Name);

                // ensure that if a facebook ID exists, it matches the FBID of the subject just retrieved
                var fbid = contact.GetFieldValue(FieldNames.FacebookID);
                var ids  = subject.IDs.Where(id => id.Source == Sources.Facebook).ToList();
                if (ids.Count > 0 && fbid != null && fbid.Value != ids[0].Value)
                {
                    return(null);
                }

                return(contact);
            }
            catch (Exception)
            {
                // contact not found
                return(null);
            }
        }
Exemplo n.º 2
0
        private Item MakeContact(WorkflowInstance workflowInstance, Item item, ADQueryResult subject)
        {
            DateTime now = DateTime.UtcNow;

            /*
             * FieldValue contactsField = GetFieldValue(item, TargetFieldName, true);
             * Guid listID = contactsField.Value != null ? new Guid(contactsField.Value) : Guid.NewGuid();
             *
             * // if the contacts sublist under the item doesn't exist, create it now
             * if (contactsField.Value == null)
             * {
             *  Item list = new Item()
             *  {
             *      ID = listID,
             *      Name = TargetFieldName,
             *      IsList = true,
             *      FolderID = item.FolderID,
             *      ItemTypeID = SystemItemTypes.Reference,
             *      ParentID = item.ID,
             *      UserID = item.UserID,
             *      Created = now,
             *      LastModified = now,
             *  };
             *  contactsField.Value = listID.ToString();
             *  UserContext.Items.Add(list);
             *  UserContext.SaveChanges();
             *
             *  // add a Suggestion with a RefreshEntity FieldName to the list, to tell the UI that the
             *  // workflow changed the Item
             *  SignalEntityRefresh(workflowInstance, item);
             * }
             */
            // try to find an existing contact using matching heuristic
            var contact = GetContact(item.UserID, subject);

            // if the contact wasn't found, create the new contact (detached) - it will be JSON-serialized and placed into
            // the suggestion value field
            if (contact == null)
            {
                contact = new Item()
                {
                    ID           = Guid.NewGuid(),
                    Name         = subject.Name,
                    FolderID     = item.FolderID,
                    ItemTypeID   = SystemItemTypes.Contact,
                    ParentID     = null /*listID*/,
                    UserID       = item.UserID,
                    FieldValues  = new List <FieldValue>(),
                    Created      = now,
                    LastModified = now,
                };
            }

            // add various FieldValues to the contact if available
            try
            {
                // add sources
                string sources = String.Join(",", subject.IDs.Select(id => id.Source));
                contact.GetFieldValue(FieldNames.Sources, true).Value = sources;
                // add birthday
                if (subject.Birthday != null)
                {
                    contact.GetFieldValue(FieldNames.Birthday, true).Value = ((DateTime)subject.Birthday).ToString("d");
                }
                // add facebook ID
                string fbID = subject.IDs.Single(id => id.Source == ADQueryResultValue.FacebookSource).Value;
                if (fbID != null)
                {
                    contact.GetFieldValue(FieldNames.FacebookID, true).Value = fbID;
                }
            }
            catch (Exception) { }

            return(contact);
        }