private PickerEntity GetEntity(SPListItem item)
        {
            GenericEntityPickerPropertyBag propertyBag = new GenericEntityPickerPropertyBag(this.CustomProperty);

            PickerEntity entity       = new PickerEntity();
            string       displayValue = null;

            try
            {
                displayValue = item[propertyBag.LookupFieldInternalName].ToString();
            }
            catch
            {
                //field has been deleted
            }

            if (displayValue != null &&
                item.Fields.GetFieldByInternalName(propertyBag.LookupFieldInternalName).Type == SPFieldType.Calculated &&
                item[propertyBag.LookupFieldInternalName] != null &&
                item[propertyBag.LookupFieldInternalName].ToString().Contains("#"))
            {
                entity.DisplayText = displayValue.ToString().Split('#')[1];
            }
            else
            {
                entity.DisplayText = displayValue ?? "";
            }
            entity.Key         = item.ID.ToString();
            entity.Description = entity.DisplayText;
            entity.IsResolved  = true;

            return(entity);
        }
        //protected override PickerEntity[] ResolveErrorBySearch(string unresolvedText)
        //{
        //    List<PickerEntity> entities = new List<PickerEntity>();

        //    if (propBag == null)
        //    {
        //        propBag = new GenericEntityPickerPropertyBag(this.CustomProperty);
        //    }

        //    using (SPWeb web = SPContext.Current.Site.OpenWeb(propBag.LookupWebID))
        //    {
        //        SPList list = web.Lists[propBag.LookupListID];
        //        SPField field = list.Fields[propBag.LookupFieldInternalName];
        //        string valueType = field.TypeAsString;

        //        if (field.Type == SPFieldType.Calculated)
        //        {
        //            valueType = "Text";
        //        }

        //        SPQuery query = new SPQuery();
        //        query.ViewAttributes = "Scope=\"Recursive\"";
        //        query.Query =
        //            string.Format(
        //                "<Where><Contains><FieldRef Name=\"{0}\"/><Value Type=\"{1}\">{2}</Value></Contains></Where>",
        //                field.InternalName, valueType, unresolvedText);
        //        SPListItemCollection items = list.GetItems(query);

        //        foreach (SPListItem item in items)
        //        {
        //            entities.Add(this.GetEntity(item));
        //        }
        //    }

        //    return entities.ToArray();
        //}

        public override PickerEntity ValidateEntity(PickerEntity needsValidation)
        {
            PickerEntity entity = needsValidation;

            if (propBag == null)
            {
                propBag = new GenericEntityPickerPropertyBag(this.CustomProperty);
            }

            if (!string.IsNullOrEmpty(needsValidation.Key))
            {
                try
                {
                    using (SPWeb web = SPContext.Current.Site.OpenWeb(propBag.LookupWebID))
                    {
                        SPList  list      = web.Lists[propBag.LookupListID];
                        SPField field     = null;
                        string  fieldType = null;

                        if (needsValidation.Key == needsValidation.DisplayText)
                        {
                            field     = list.Fields.GetFieldByInternalName(propBag.LookupFieldInternalName);
                            fieldType = field.TypeAsString;
                        }
                        else
                        {
                            field     = list.Fields[SPBuiltInFieldId.ID];
                            fieldType = field.TypeAsString;
                        }

                        string valueType = field.TypeAsString;
                        if (field.Type == SPFieldType.Calculated)
                        {
                            valueType = "Text";
                        }

                        string queryString = String.Empty;

                        queryString = string.Format(
                            "<Where><Eq><FieldRef Name=\"{0}\"/><Value Type=\"{1}\">{2}</Value></Eq></Where>",
                            field.InternalName, valueType, needsValidation.Key);

                        SPQuery queryByTitle = new SPQuery();
                        queryByTitle.Query          = queryString;
                        queryByTitle.ViewAttributes = "Scope=\"Recursive\"";
                        SPListItemCollection items = list.GetItems(queryByTitle);
                        if (items.Count == 1)
                        {
                            entity = this.GetEntity(items[0]);
                        }
                    }
                }
                catch { }
            }

            return(entity);
        }
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            this.PickerDialogType = typeof(GenericPickerDialog);
            propBag = new GenericEntityPickerPropertyBag(this.CustomProperty);

            if (SPContext.Current.FormContext.FormMode != SPControlMode.Invalid)
            {
                mode = SPContext.Current.FormContext.FormMode;
            }
            else
            {
                try
                {
                    mode = (SPControlMode)int.Parse(Page.Request["mode"]);
                }
                catch { }
            }
        }
Beispiel #4
0
 protected override void OnInit(EventArgs e)
 {
     propBag = new GenericEntityPickerPropertyBag(CustomProperty);
     base.OnInit(e);
 }