public UriMtHelper(IOidStrategy oidStrategy, HttpRequestMessage req, PropertyTypeContextFacade propertyContext)
     : this(oidStrategy ,req) {
     assoc = propertyContext.Property;
     spec = propertyContext.OwningSpecification;
     cachedId = "";
     CachedType = spec.DomainTypeName(oidStrategy);
 }
 public UriMtHelper(IOidStrategy oidStrategy, HttpRequestMessage req, PropertyContextFacade propertyContext)
     : this(oidStrategy ,req) {
     assoc = propertyContext.Property;
     objectFacade = propertyContext.Target;
     spec = objectFacade.Specification;
     IOidTranslation oid = oidStrategy.FrameworkFacade.OidTranslator.GetOidTranslation(objectFacade);
     cachedId = oid.InstanceId;
     CachedType = oid.DomainType;
 }
 public UriMtHelper(IOidStrategy oidStrategy, HttpRequestMessage req, PropertyContextFacade propertyContext)
     : this(oidStrategy, req) {
     assoc = propertyContext.Property;
     objectFacade = propertyContext.Target;
     spec = objectFacade.Specification;
     if (objectFacade.Specification.IsParseable) {
         throw new ArgumentException($"Cannot build URI  for parseable specification : {objectFacade.Specification.FullName}");
     }
     IOidTranslation oid = oidStrategy.FrameworkFacade.OidTranslator.GetOidTranslation(objectFacade);
     cachedId = propertyContext.Target.IsTransient ? "" : oid.InstanceId;
     CachedType = oid.DomainType;
 }
示例#4
0
        internal void AddErrorAndAttemptedValue(IObjectFacade nakedObject, string newValue, IAssociationFacade assoc, string errorText, IAssociationFacade parent = null)
        {
            string key = GetFieldInputId(parent, nakedObject, assoc);

            ModelState.AddModelError(key, errorText);
            AddAttemptedValue(key, assoc.Specification.IsParseable ? (object)newValue : GetNakedObjectFromId(newValue));
        }
示例#5
0
 protected void GetUsableAndVisibleFields(IObjectFacade nakedObject, ObjectAndControlData controlData, IAssociationFacade parent, out List <IAssociationFacade> usableAndVisibleFields, out List <Tuple <IAssociationFacade, object> > fieldsAndMatchingValues)
 {
     usableAndVisibleFields  = nakedObject.Specification.Properties.Where(p => p.IsUsable(nakedObject).IsAllowed&& p.IsVisible(nakedObject)).ToList();
     fieldsAndMatchingValues = GetFieldsAndMatchingValues(nakedObject, parent, usableAndVisibleFields, controlData, GetFieldInputId).ToList();
 }
示例#6
0
 public override object GetPropertyValue(IOidStrategy oidStrategy, HttpRequest req, IAssociationFacade property, IObjectFacade target, RestControlFlags flags, bool valueOnly, bool useDateOverDateTime) => Representation.GetPropertyValue(oidStrategy, req, property, target, flags, valueOnly, useDateOverDateTime);
示例#7
0
        public string GetFieldId(IObjectFacade owner, IAssociationFacade assocFacade)
        {
            IAssociationSpec assoc = assocFacade.WrappedSpec();

            return(GetObjectId(owner) + Sep + assoc.Id);
        }
示例#8
0
        public string GetInlineFieldId(IAssociationFacade parentFacade, IObjectFacade owner, IAssociationFacade assocFacade) {
            IAssociationSpec parent = parentFacade.WrappedSpec();
            IAssociationSpec assoc = assocFacade.WrappedSpec();

            return parent.Id + Sep + GetObjectId(owner) + Sep + assoc.Id;
        }
        public override object GetPropertyValue(IOidStrategy oidStrategy, HttpRequestMessage req, IAssociationFacade property, IObjectFacade target, RestControlFlags flags, bool valueOnly, bool useDateOverDateTime) {
            

            // todo minimise this 
            return Representation.GetPropertyValue(oidStrategy, req, property, target, flags, valueOnly, useDateOverDateTime);
        }
 public static string SafeGetTitle(IAssociationFacade property, IObjectFacade valueNakedObject) {
     return valueNakedObject == null ? "" : property.GetTitle(valueNakedObject);
 }
        internal void CheckConcurrency(IObjectFacade nakedObject, IAssociationFacade parent, ObjectAndControlData controlData, Func<IAssociationFacade, IObjectFacade, IAssociationFacade, string> idFunc) {
            var objectSpec = nakedObject.Specification;
            var concurrencyFields = objectSpec == null ? new List<IAssociationFacade>() : objectSpec.Properties.Where(p => p.IsConcurrency).ToList();

            if (!nakedObject.IsTransient && concurrencyFields.Any()) {
                IEnumerable<Tuple<IAssociationFacade, object>> fieldsAndMatchingValues = GetFieldsAndMatchingValues(nakedObject, parent, concurrencyFields, controlData, idFunc);

                foreach (var pair in fieldsAndMatchingValues) {
                    if (pair.Item1.Specification.IsParseable) {
                        var currentValue = pair.Item1.GetValue(nakedObject);
                        var concurrencyValue = pair.Item2 as string;

                        if (concurrencyValue != null && currentValue != null) {
                            if (concurrencyValue != currentValue.InvariantString) {
                                throw new PreconditionFailedNOSException(nakedObject);
                            }
                        }
                        else if (concurrencyValue == null && currentValue == null) {
                            // OK 
                        }
                        else {
                            throw new PreconditionFailedNOSException(nakedObject);
                        }
                    }
                }
            }
        }
示例#12
0
        public string GetConcurrencyActionInputId(IObjectFacade owner, IActionFacade action, IAssociationFacade assocFacade)
        {
            IAssociationSpec assoc = assocFacade.WrappedSpec();

            return(GetActionId(owner, action) + Sep + assoc.Id + Sep + ConcurrencyName);
        }
 public ValueRelType(IAssociationFacade property, UriMtHelper helper) : this(helper) {
     member = property;
 }
示例#14
0
 public string GetInlineConcurrencyFieldInputId(IAssociationFacade parent, IObjectFacade owner, IAssociationFacade assoc)
 {
     return(GetInlineFieldId(parent, owner, assoc) + Sep + ConcurrencyName);
 }
示例#15
0
 public string GetConcurrencyFieldInputId(IObjectFacade owner, IAssociationFacade assoc)
 {
     return(GetFieldId(owner, assoc) + Sep + ConcurrencyName);
 }
示例#16
0
        public string GetInlineFieldInputId(IAssociationFacade parent, IObjectFacade owner, IAssociationFacade assocFacade)
        {
            IAssociationSpec assoc = assocFacade.WrappedSpec();

            return(GetInlineFieldId(parent, owner, assocFacade) + Sep + InputOrSelect(assoc.ReturnSpec));
        }
示例#17
0
 internal void RefreshTransient(IObjectFacade nakedObject, FormCollection form, IAssociationFacade parent = null)
 {
     if (nakedObject.IsTransient)
     {
         var ac = Convert(form);
         Facade.RefreshObject(nakedObject, ac);
     }
 }
 protected void GetUsableAndVisibleFields(IObjectFacade nakedObject, ObjectAndControlData controlData, IAssociationFacade parent, out List<IAssociationFacade> usableAndVisibleFields, out List<Tuple<IAssociationFacade, object>> fieldsAndMatchingValues) {
     usableAndVisibleFields = nakedObject.Specification.Properties.Where(p => p.IsUsable(nakedObject).IsAllowed && p.IsVisible(nakedObject)).ToList();
     fieldsAndMatchingValues = GetFieldsAndMatchingValues(nakedObject, parent, usableAndVisibleFields, controlData, GetFieldInputId).ToList();
 }
        private bool ApplyEdit(IObjectFacade nakedObject, ObjectAndControlData controlData, IAssociationFacade parent = null) {
            var oid = Facade.OidTranslator.GetOidTranslation(nakedObject);

            var usableAndVisibleFields = nakedObject.Specification.Properties.Where(p => p.IsVisible(nakedObject) && p.IsUsable(nakedObject).IsAllowed);
            var fieldsAndMatchingValues = GetFieldsAndMatchingValues(nakedObject, parent, usableAndVisibleFields, controlData, GetFieldInputId).ToList();

            CheckConcurrency(nakedObject, null, controlData, GetConcurrencyFieldInputId);

            fieldsAndMatchingValues.ForEach(pair => AddAttemptedValue(GetFieldInputId(parent, nakedObject, pair.Item1), pair.Item2));

            var ac = new ArgumentsContextFacade {
                Values = fieldsAndMatchingValues.ToDictionary(f => f.Item1.Id, f => GetObjectValue(f.Item1, nakedObject, f.Item2)),
                ValidateOnly = false
            };

            // check mandatory fields first to emulate WPF UI behaviour where no validation takes place until 
            // all mandatory fields are set. 
            foreach (var pair in fieldsAndMatchingValues) {
                var result = pair.Item2;
                var stringResult = result as string;

                if (pair.Item1.IsMandatory && (result == null || (result is string && string.IsNullOrEmpty(stringResult)))) {
                    AddErrorAndAttemptedValue(nakedObject, stringResult, pair.Item1, MvcUi.Mandatory);
                }
            }

            if (!ModelState.IsValid) {
                return false;
            }

            ApplyInlineEdit(nakedObject, controlData, usableAndVisibleFields);

            if (!ModelState.IsValid) {
                return false;
            }

            var res = Facade.PutObject(oid, ac);

            if (HasError(res)) {
                foreach (var parm in res.VisibleProperties) {
                    if (!string.IsNullOrEmpty(parm.Reason)) {
                        ModelState.AddModelError(GetFieldInputId(parent, nakedObject, parm.Property), parm.Reason);
                    }
                }

                if (!(string.IsNullOrEmpty(res.Reason))) {
                    ModelState.AddModelError("", res.Reason);
                }

                return false;
            }

            return true;
        }
 protected static IEnumerable<Tuple<IAssociationFacade, object>> GetFieldsAndMatchingValues(IObjectFacade nakedObject,
                                                                                                        IAssociationFacade parent,
                                                                                                        IEnumerable<IAssociationFacade> associations,
                                                                                                        ObjectAndControlData controlData,
                                                                                                        Func<IAssociationFacade, IObjectFacade, IAssociationFacade, string> idFunc) {
     foreach (var assoc in associations.Where(a => !a.IsInline)) {
         string name = idFunc(parent, nakedObject, assoc);
         object newValue = GetValueFromForm(controlData, name);
         yield return new Tuple<IAssociationFacade, object>(assoc, newValue);
     }
 }
 private object GetValue(string[] values, IAssociationFacade propertySpec, ITypeFacade spec) {
     object domainObject;
     return GetValue(values, spec, false, out domainObject) ? domainObject : Facade.GetTypedCollection(propertySpec, values);
 }
 internal void AddErrorAndAttemptedValue(IObjectFacade nakedObject, string newValue, IAssociationFacade assoc, string errorText, IAssociationFacade parent = null) {
     string key = GetFieldInputId(parent, nakedObject, assoc);
     ModelState.AddModelError(key, errorText);
     AddAttemptedValue(key, assoc.Specification.IsParseable ? (object) newValue : GetNakedObjectFromId(newValue));
 }
示例#23
0
 public string GetCollectionItemId(IObjectFacade owner, IAssociationFacade assocFacade) {
     IAssociationSpec assoc = assocFacade.WrappedSpec();
     return GetObjectId(owner) + Sep + assoc.Id + Sep + "Item";
 }
        internal void AddAttemptedValuesNew(IObjectFacade nakedObject, ObjectAndControlData controlData, IAssociationFacade parent = null) {
            foreach (var assoc in nakedObject.Specification.Properties.Where(p => p.IsUsable(nakedObject).IsAllowed && p.IsVisible(nakedObject) || p.IsConcurrency)) {
                string name = GetFieldInputId(parent, nakedObject, assoc);
                string value = GetValueFromForm(controlData, name) as string;
                if (value != null) {
                    AddAttemptedValue(name, value);
                }
            }

            foreach (var assoc in nakedObject.Specification.Properties.Where(p => p.IsConcurrency)) {
                string name = GetConcurrencyFieldInputId(parent, nakedObject, assoc);
                string value = GetValueFromForm(controlData, name) as string;
                if (value != null) {
                    AddAttemptedValue(name, value);
                }
            }

            foreach (var assoc in (nakedObject.Specification.Properties.Where(p => p.IsInline))) {
                var inlineNakedObject = assoc.GetValue(nakedObject);
                AddAttemptedValuesNew(inlineNakedObject, controlData, assoc);
            }
        }
示例#25
0
        public string GetFieldAutoCompleteId(string id, IObjectFacade owner, IAssociationFacade assocFacade)
        {
            IAssociationSpec assoc = assocFacade.WrappedSpec();

            return(assoc.ReturnSpec.IsParseable ? id : id + Sep + AutoCompleteName);
        }
 internal void RefreshTransient(IObjectFacade nakedObject, FormCollection form, IAssociationFacade parent = null) {
     if (nakedObject.IsTransient) {
         var ac = Convert(form);
         Facade.RefreshObject(nakedObject, ac);
     }
 }
示例#27
0
        protected ParameterRepresentation GetParameter(IAssociationFacade assoc)
        {
            var objectFacade = ActionContext.Target;

            return(ParameterRepresentation.Create(OidStrategy, Req, objectFacade, assoc, ActionContext, Flags));
        }
 protected string GetConcurrencyFieldInputId(IAssociationFacade parent, IObjectFacade nakedObject, IAssociationFacade assoc) {
     return parent == null ? IdHelper.GetConcurrencyFieldInputId(nakedObject, assoc) :
         IdHelper.GetInlineConcurrencyFieldInputId(parent, nakedObject, assoc);
 }
示例#29
0
 public override object GetPropertyValue(IOidStrategy oidStrategy, HttpRequestMessage req, IAssociationFacade property, IObjectFacade target, RestControlFlags flags, bool valueOnly, bool useDateOverDateTime)
 {
     // todo minimise this
     return(Representation.GetPropertyValue(oidStrategy, req, property, target, flags, valueOnly, useDateOverDateTime));
 }
        internal void ValidateAssociation(IObjectFacade nakedObject, IAssociationFacade oneToOneAssoc, object attemptedValue, IAssociationFacade parent = null) {
            string key = GetFieldInputId(parent, nakedObject, oneToOneAssoc);
            try {
                var oid = Facade.OidTranslator.GetOidTranslation(nakedObject);

                var ac = new ArgumentContextFacade {
                    Value = attemptedValue,
                    ValidateOnly = true
                };

                var pcs = Facade.PutProperty(oid, oneToOneAssoc.Id, ac);

                if (!string.IsNullOrEmpty(pcs.Reason)) {
                    ModelState.AddModelError(key, pcs.Reason);
                }
            }
            catch (NakedObjectsFacadeException) {
                ModelState.AddModelError(key, MvcUi.InvalidEntry);
            }
            finally {
                AddAttemptedValue(key, attemptedValue);
            }
        }
示例#31
0
 protected static IEnumerable <Tuple <IAssociationFacade, object> > GetFieldsAndMatchingValues(IObjectFacade nakedObject,
                                                                                               IAssociationFacade parent,
                                                                                               IEnumerable <IAssociationFacade> associations,
                                                                                               ObjectAndControlData controlData,
                                                                                               Func <IAssociationFacade, IObjectFacade, IAssociationFacade, string> idFunc)
 {
     foreach (var assoc in associations.Where(a => !a.IsInline))
     {
         string name     = idFunc(parent, nakedObject, assoc);
         object newValue = GetValueFromForm(controlData, name);
         yield return(new Tuple <IAssociationFacade, object>(assoc, newValue));
     }
 }
 public ChoiceRelType(IAssociationFacade property, UriMtHelper helper) : this(helper) {
     member = property;
 }
示例#33
0
        internal void AddAttemptedValuesNew(IObjectFacade nakedObject, ObjectAndControlData controlData, IAssociationFacade parent = null)
        {
            foreach (var assoc in nakedObject.Specification.Properties.Where(p => p.IsUsable(nakedObject).IsAllowed&& p.IsVisible(nakedObject) || p.IsConcurrency))
            {
                string name  = GetFieldInputId(parent, nakedObject, assoc);
                string value = GetValueFromForm(controlData, name) as string;
                if (value != null)
                {
                    AddAttemptedValue(name, value);
                }
            }

            foreach (var assoc in nakedObject.Specification.Properties.Where(p => p.IsConcurrency))
            {
                string name  = GetConcurrencyFieldInputId(parent, nakedObject, assoc);
                string value = GetValueFromForm(controlData, name) as string;
                if (value != null)
                {
                    AddAttemptedValue(name, value);
                }
            }

            foreach (var assoc in (nakedObject.Specification.Properties.Where(p => p.IsInline)))
            {
                var inlineNakedObject = assoc.GetValue(nakedObject);
                AddAttemptedValuesNew(inlineNakedObject, controlData, assoc);
            }
        }
 public static object GetChoiceValue(IOidStrategy oidStrategy, HttpRequest req, IObjectFacade item, IAssociationFacade property, RestControlFlags flags)
 {
     return(GetChoiceValue(oidStrategy, item, () => new ChoiceRelType(property, new UriMtHelper(oidStrategy, req, item)), flags));
 }
示例#35
0
 protected string GetFieldInputId(IAssociationFacade parent, IObjectFacade nakedObject, IAssociationFacade assoc)
 {
     return(parent == null?IdHelper.GetFieldInputId(nakedObject, assoc) :
                IdHelper.GetInlineFieldInputId(parent, nakedObject, assoc));
 }
 public static string SafeGetTitle(IAssociationFacade property, IObjectFacade valueNakedObject) => valueNakedObject == null ? "" : property.GetTitle(valueNakedObject);
 public static object GetChoiceValue(IOidStrategy oidStrategy, HttpRequestMessage req, IObjectFacade item, IAssociationFacade property, RestControlFlags flags) {
     return GetChoiceValue(oidStrategy, item, () => new ChoiceRelType(property, new UriMtHelper(oidStrategy, req, item)), flags);
 }
        public static object GetPropertyValue(IOidStrategy oidStrategy, HttpRequestMessage req, IAssociationFacade property, IObjectFacade target, RestControlFlags flags, bool valueOnly, bool useDateOverDateTime)
        {
            IObjectFacade valueNakedObject = property.GetValue(target);

            if (valueNakedObject == null)
            {
                return(null);
            }

            if (target.IsTransient && property.IsUsable(target).IsAllowed&& property.IsVisible(target) && property.IsSetToImplicitDefault(target))
            {
                return(null);
            }

            if (property.Specification.IsParseable || property.Specification.IsCollection)
            {
                return(RestUtils.ObjectToPredefinedType(valueNakedObject.Object, useDateOverDateTime));
            }

            if (valueOnly)
            {
                return(RefValueRepresentation.Create(oidStrategy, new ValueRelType(property, new UriMtHelper(oidStrategy, req, valueNakedObject)), flags));
            }

            string title     = RestUtils.SafeGetTitle(property, valueNakedObject);
            var    helper    = new UriMtHelper(oidStrategy, req, property.IsInline ? target : valueNakedObject);
            var    optionals = new List <OptionalProperty> {
                new OptionalProperty(JsonPropertyNames.Title, title)
            };

            if (property.IsEager(target))
            {
                optionals.Add(new OptionalProperty(JsonPropertyNames.Value, ObjectRepresentation.Create(oidStrategy, valueNakedObject, req, flags)));
            }

            return(LinkRepresentation.Create(oidStrategy, new ValueRelType(property, helper), flags, optionals.ToArray()));
        }
 public FieldFacadeAdapter(IAssociationFacade association) {
     this.association = association;
 }
        public static ParameterRepresentation Create(IOidStrategy oidStrategy, HttpRequestMessage req, IObjectFacade objectFacade, IAssociationFacade assoc, ActionContextFacade actionContext, RestControlFlags flags) {
            var optionals = new List<OptionalProperty>();

            if (assoc.IsChoicesEnabled != Choices.NotEnabled && !assoc.GetChoicesParameters().Any()) {
                IObjectFacade[] choices = assoc.GetChoices(objectFacade, null);
                object[] choicesArray = choices.Select(c => RestUtils.GetChoiceValue(oidStrategy, req, c, assoc, flags)).ToArray();
                optionals.Add(new OptionalProperty(JsonPropertyNames.Choices, choicesArray));
            }

            var adapter = new FieldFacadeAdapter(assoc);

            IObjectFacade defaultNakedObject = assoc.GetValue(objectFacade);
            if (defaultNakedObject != null) {
                string title = defaultNakedObject.TitleString;
                object value = RestUtils.ObjectToPredefinedType(defaultNakedObject.Object, true);
                var isValue = defaultNakedObject.Specification.IsParseable || (defaultNakedObject.Specification.IsCollection && defaultNakedObject.ElementSpecification.IsParseable);
                object defaultValue = isValue ? value : CreateDefaultLinks(oidStrategy, req, adapter, actionContext.Action, defaultNakedObject, title, flags);

                optionals.Add(new OptionalProperty(JsonPropertyNames.Default, defaultValue));
            }
        
            if (optionals.Count == 0) {
                return new ParameterRepresentation(oidStrategy, req, objectFacade, adapter, flags);
            }
            return CreateWithOptionals<ParameterRepresentation>(new object[] { oidStrategy, req, objectFacade, adapter, flags }, optionals);
        }
 protected ParameterRepresentation GetParameter(IAssociationFacade assoc) {
     IObjectFacade objectFacade = ActionContext.Target;
     return ParameterRepresentation.Create(OidStrategy, Req, objectFacade, assoc, ActionContext, Flags);
 }
 public UriMtHelper(IOidStrategy oidStrategy, HttpRequestMessage req, IAssociationFacade assoc)
     : this(oidStrategy ,req) {
     cachedId = "";
     if (assoc.IsCollection) {
         CachedType = assoc.IsASet ? PredefinedType.Set.ToRoString() : PredefinedType.List.ToRoString();
     }
     else {
         CachedType = assoc.Specification.DomainTypeName(oidStrategy);
     }
 }
示例#43
0
        public string GetAggregateFieldInputId(IObjectFacade objectFacade, IAssociationFacade propertyFacade) {
            string fieldId;
            INakedObjectAdapter nakedObject = objectFacade.WrappedAdapter();

            var aoid = nakedObject.Oid as IAggregateOid;
            if (aoid != null) {
                IAssociationSpec parent = ((IObjectSpec) aoid.ParentOid.Spec).Properties.SingleOrDefault(p => p.Id == aoid.FieldName);           
                fieldId = parent.Id + Sep + GetObjectId(objectFacade) + Sep + propertyFacade.Id + Sep + InputOrSelect(propertyFacade.WrappedSpec().ReturnSpec);
            }
            else {
                fieldId = GetFieldInputId(objectFacade, propertyFacade);
            }
            return fieldId;
        }
示例#44
0
        public string GetInlineFieldInputId(IAssociationFacade parent, IObjectFacade owner, IAssociationFacade assocFacade) {
            IAssociationSpec assoc = assocFacade.WrappedSpec();

            return GetInlineFieldId(parent, owner, assocFacade) + Sep + InputOrSelect(assoc.ReturnSpec);
        }
示例#45
0
        public string GetFieldId(IObjectFacade owner, IAssociationFacade assocFacade) {
            IAssociationSpec assoc = assocFacade.WrappedSpec();

            return GetObjectId(owner) + Sep + assoc.Id;
        }
示例#46
0
 public string GetInlineConcurrencyFieldInputId(IAssociationFacade parent, IObjectFacade owner, IAssociationFacade assoc) {
     return GetInlineFieldId(parent, owner, assoc) + Sep + ConcurrencyName;
 }
示例#47
0
        public string GetFieldAutoCompleteId(string id, IObjectFacade owner, IAssociationFacade assocFacade) {
            IAssociationSpec assoc = assocFacade.WrappedSpec();

            return assoc.ReturnSpec.IsParseable ? id : id + Sep + AutoCompleteName;
        }
示例#48
0
        public string GetInlineFieldId(IAssociationFacade parentFacade, IObjectFacade owner, IAssociationFacade assocFacade)
        {
            IAssociationSpec parent = parentFacade.WrappedSpec();
            IAssociationSpec assoc  = assocFacade.WrappedSpec();

            return(parent.Id + Sep + GetObjectId(owner) + Sep + assoc.Id);
        }
示例#49
0
 public string GetConcurrencyFieldInputId(IObjectFacade owner, IAssociationFacade assoc) {
     return GetFieldId(owner, assoc) + Sep + ConcurrencyName;
 }
示例#50
0
 public static IAssociationSpec WrappedSpec(this IAssociationFacade associationFacade)
 {
     return(associationFacade == null ? null : ((AssociationFacade)associationFacade).WrappedSpec);
 }
示例#51
0
 public string GetConcurrencyActionInputId(IObjectFacade owner, IActionFacade action, IAssociationFacade assocFacade) {
     IAssociationSpec assoc =  assocFacade.WrappedSpec();
     return GetActionId(owner, action) + Sep + assoc.Id + Sep + ConcurrencyName;
 }
示例#52
0
        public string GetCollectionItemId(IObjectFacade owner, IAssociationFacade assocFacade)
        {
            IAssociationSpec assoc = assocFacade.WrappedSpec();

            return(GetObjectId(owner) + Sep + assoc.Id + Sep + "Item");
        }