valdis
Jun 9, 2012
  3111
(1 votes)

Community Attribute Builder final

If you are working with Relate+ platform most probably you are using entities attributes to attach some additional info to particular entity type. This is a great way to extend built-in functionality but however involved a bit of manual work:

  1. You have to define attribute for each of the entity in Relate+ administrative UI (which honestly speaking could be made more user friendly).
  2. You have to refer to the attribute via stringly-typed interface.

 

Latter for me is most embarrassing.

 

instance.SetAttributeValue("attributeName", attributeValue);

 

This approach could give you few real scenarios where such is unacceptable:

  1. When you will margin for a grammar error when typing attribute name – that could be discovered only during runtime.
  2. You cannot use static code analysis tools. Like to search for all attribute usages.
  3. You cannot use some of the refactoring tools –> like rename attribute name.
  4. You can easily change type of the attribute and forget about code that uses that, effect –> runtime error(s).
  5. Use cannot leverage all the power of Visual Studio (for instance to provide Intellisense over available attributes)

 

So therefore I created package that should relief tasks with Community entity’s attributes – Community Attribute Builder.

There were already some posts on this topic here, here and there. Latest version (1.0) is out and this is just a summary of what’s supported.

 

1. Describe community entity’s attributes in code. Those attributes defined in metadata class are synced during application start-up and added to the target entity:

 

[CommunityEntity(TargetType = typeof(IUser))]
public class SampleAttributeMetadata
{
    [CommunityEntityMetadata]
    public virtual IList<SampleType> SampleAttribute { get; set; }
}

 

2. Limit scanning of the assemblies:

 

<configuration>
  <configSections>
    <section name="entityAttributeBuilder" type="Geta.Community.EntityAttributeBuilder.EntityAttributeBuilderConfiguration, Geta.Community.EntityAttributeBuilder" />
  </configSections>

  <entityAttributeBuilder>
    <scanAssembly>
      <add assembly="EntityAttributes" />
      <remove assembly="RemoveAssembly" />
    </scanAssembly>
  </entityAttributeBuilder>
 
</configuration>

 

3. You can set or get entity’s attribute value(s) using strongly-typed interface.

 

var metadata = instance.AsAttributeExtendable<SampleAttributeMetadata>();
metadata.SampleAttribute = null;

 

4. Support for strongly typed queries

 

var query = new UserQuery();
var qmetadata = query.AsMetadataQuery<SampleAttributeMetadata>();
qmetadata[m => m.SampleAttribute] = new StringCriterion { Value = "the attribute value" };

 

5. Added support for IList<T> type attributes. You can assign via local variable assignment and modification or using line modifications.

 

var entity = instance.AsAttributeExtendable<SampleAttributeMetadata>();

// getter
var collection = entity.SampleAttribute;
collection.Add(new SampleType(100));
// setter
entity.SampleAttribute = collection;

 

or you can use more convenient syntax:

 

var entity = instance.AsAttributeExtendable<SampleAttributeMetadata>();
entity.SampleAttribute.Add(new SampleType(100));

 

 

Rename, deletion and content migration for the community entity attributes need to me done manually.

Can be found here (or search by “community” in NuGet package manager).

 

I somebody is really curious how to implement interfaces like these – strongly-typed interface over stringly-typed one, some basics could be found here.

Source could be found in GitHub.

 

 

Hope this helps!

Jun 09, 2012

Comments

Jun 13, 2012 12:41 PM

Very useful, nice work! Now we got PTB and CAB :)

Please login to comment.
Latest blogs
The 1001st Piece in your 1000 Piece Puzzle: .NET Default Interface Functions

I was recently working with a client who wanted a reasonably large subsystem added to Optimizely that would add automated management to their...

Greg J | Nov 28, 2022 | Syndicated blog

Video Demonstration, creating a CMS12 Alloy Sample Site

Hey All Below you will find a quick video demonstration on how to install a local version of Alloy Sample based on CMS12 / .Net 6. As you will see ...

Minesh Shah (Netcel) | Nov 28, 2022

How to create an admin user I Optimizely CMS – with Episerver CLI

In this blog post I’ll show how to create an admin user for Optimizely CMS in a new environment where you don’t have access to the admin interface.

Ove Lartelius | Nov 28, 2022 | Syndicated blog

Optimizely shortcuts in CMS 12 will get a trailing slash appended!

Not all URLs will work when the trailing slash is added, and that could cause problems. Hopefully it will be fixed soon.

Tomas Hensrud Gulla | Nov 26, 2022 | Syndicated blog

One week left of the beta certification period

Today it's one week until the last beta certification day. Do you exam no later than Wednesday the 30th.  Here are the reference and exam guides:...

Karen McDougall | Nov 23, 2022

Unbelievable FREE Heatmapping With Optimizely Web

Within this guide, you will learn how to integrate a free heat mapping tool to Optimizely Web so you can turbocharge your A/B testing capabilities....

Jon Jones | Nov 22, 2022 | Syndicated blog