• GAWDS
  • Nik Makris is a Learning Tree .NET Enterprise Application Development Certified Professional
    .NET Enterprise Application Development
    Certified Professional
    Learning Tree International
  • Nik Makris is certified under the CCNA® program
    Nik Makris is certified under the CCNA® program
  • Nik Makris is Google Analytics Qualified
    Nik Makris has obtained the Google Analytics Individual Qualification
Blog

Debugging Alterian CMC / Immediacy Plug-ins

9. November 2010 13:20

Debugging an Alterian CMC/Immediacy plug-in isn’t that straight forward because when they don’t work there isn’t an easy way for a developer to determine the problem.

In the Editor you generally get an unhelpful pop-up message like this:

immediacy editor error

Which also means none of the plug-ins will be available for use.

There is an CMC log file that can be viewed by navigating to the following path on your web server.

C:\Program Files\Alterian\CMC 6.2\CMS\Logging\ViewLogFile.xml

immediacy-logs

But this isn’t as helpful as it may seem because if a plug-in has errors then they won’t generally get logged here or anywhere else it seems.

The other tool you have at your disposal is a special plug-ins page that enumerates the plug-ins installed or throws an error when one has broken.  This error can sometimes lead you to a fix for the problem.

Open Internet Explorer on your web server and navigate to:

http://localhost/_immediacy/editor/plugins.ashx

Note: This will only work locally on the web server, and will return some XML defining the properties for each installed plug-in.

immediacy-plugins

Tags: , , ,

Filed under: Web Development

Ambiguous DLLs

8. November 2010 17:00

We’ve just been testing an upgrade our CMS and come across a few problems concerning newer versions of assemblies interfering with older versions stored in the GAC.

The solution is to use a binding redirect in Web.Config to tell the framework to use the latest version.  For more info see Redirecting Assembly Versions.

   1: <runtime>
   2:   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
   3:     <dependentAssembly>
   4:       <assemblyIdentity name="Immediacy.Web" publicKeyToken="b35b2a186fcebe46"/>
   5:       <bindingRedirect oldVersion="6.1.0.0" newVersion="6.2.0.0"/>
   6:     </dependentAssembly>
   7:   </assemblyBinding>
   8: </runtime>

To get the publicKeyToken for the DLL you need to open a Visual Studio command prompt and navigate to the folder containing the DLL and type:

SN –T assemblyname.dll

This will give you the publicKeyToken to put in the assembly identity.

Alternatively you could remove the old version of the DLL from the GAC by using this command with the Global Assembly Cache Tool

gacutil /u Immediacy.Web, Version=6.1.0.0, Culture="en",PublicKeyToken=b35b2a186fcebe46

Tags:

Filed under: Web Development | Web Servers

Developing Scheduled Tasks for Immediacy Management Console (Alterian CMC)

15. September 2010 19:31

Immediacy Management Console Scheduled Tasks are useful for running tasks that need to occur automatically on a frequent basis which are independent of website visitor actions.

immediacy-mc

These scheduled tasks have the advantage of being able to hook up to the Immediacy API, allowing developers to perform tasks on Immediacy pages etc.

Scheduled tasks can have public properties if required, which are entered via a Plug-in Settings dialog box.

immediacy-mc-settings

Plug-in Development

Immediacy Management Console plug-ins are simply a .NET class library. The project should contain a C# or VB.NET file containing the plug-in and a separate class which defines the Plug-in Settings dialog.

The plug-in class needs to reference the following Immediacy namespaces.

Immediacy.Configuration;
Immediacy.Service.Interfaces;

Your plug-in class needs to inherit from:

Immediacy.Service.Interfaces.Plugin

And your class needs to have a few class attributes for Immediacy (CMC) to recognise your plug-in:

    [SettingsControlTypeAttribute(typeof(SiteMapSettings))]
    [GuidAttribute("XXXX8D90-XXXX-XXXX-XXXX-A3341127XXXX")]
    [PluginDetailsType("Name of Plug-in", "Description")]

Your plug-in class constructor needs to pass the settings to the base class as follows:

public Sitemap(ImcFile imcFile, StringDictionary settings) : base(imcFile, settings) { }

To build your plug-in you need to override the Execute() method and put your code in here.

Plug-in Settings Dialog Development


The plug-in settings dialog is created by another class, which inherits from Immediacy.Service.Interfaces.SettingsControl

This class is essentially a Windows Form code file without the form designer, so you’ll need to import the  System.Windows.Forms namespace.

You’ll need to add Windows.Forms Labels and TextBoxes to the dialog box to capture the public properties from the user who configures the plug-in while scheduling it.

Implement the abstract class like the example below:

 

namespace ImmPlugins.Sitemap

{

    public class SettingTest : Immediacy.Service.Interfaces.SettingsControl

    {

        private System.Windows.Forms.TextBox txtUrl;

  private System.Windows.Forms.Label lblUrl;

 

  private System.ComponentModel.Container components = null;

 

        public SiteMapSettings(Type pluginType)

            : base(pluginType)

        {

            InitializeComponent();

        }

 

        public override System.Collections.Specialized.StringDictionary Settings

        {

            get

            {

                StringDictionary retVal = new StringDictionary();

                retVal.Add("url", txtUrl.Text);

                return retVal;

            }

            set

            {

                txtUrl.Text = (string)value["url"];

            }       

  }

 

        public override bool SettingsAreValid

        {

            get {

                  if (txtUrl.Text == “”)

                  {

return false;

                  }

                  else

                  {

                        return true;

                  }

}

        }

 

        public override string SettingsAreValidVerbose

        {

            get {

string errorText = string.Empty;

                  if (txtUrl.Text == "")

                  {

errorText += "Please specify a URL \r\n";                 

}

return errorText;
}

        }

 

        private void InitializeComponent()

        {

            this.lblUrl = new System.Windows.Forms.Label();

            this.txtUrl = new System.Windows.Forms.TextBox();

 

            this.txtUrl.Location = new System.Drawing.Point(202, 59);

            this.txtUrl.Name = "txtUrl";

            this.txtUrl.Size = new System.Drawing.Size(160, 20);

            this.txtUrl.TabIndex = 2;

 

            this.lblUrl.Location = new System.Drawing.Point(8, 59);

            this.lblUrl.Name = "lblUrl";

            this.lblUrl.Size = new System.Drawing.Size(188, 16);

            this.lblUrl.TabIndex = 1;

            this.lblUrl.Text = "URL:";

 

this.ClientSize = new System.Drawing.Size(374, 183);

            this.Controls.Add(this.lblUrl);

            this.Controls.Add(this.txtUrl);

            this.Name = "PluginSettings";

            this.ResumeLayout(false);

            this.PerformLayout();

        }

 

        protected override void Dispose(bool disposing)

        {

            if (disposing)

            {

                if (components != null)

                {

                    components.Dispose();

                }

            }

            base.Dispose(disposing);

        }

    }

}

Plug-in Installation


Immediacy Management Console plug-ins are installed in the Immediacy CMS folder path.

Simply compile your .NET class library to a DLL and copy it to this directory.

e.g. C:\Program Files\Immediacy\CMS\6.1\Service\Plugins

(Note: This path maybe slightly different on your installation depending on Immediacy version, drive path etc)

If all has gone well your plug-in should show up in the list of tasks which can be scheduled in the Immediacy Management Console.

Tags: , ,

Filed under: Web Development | Web Servers | Software Development

Adsense for Domains - Fasthosts Setup

7. September 2010 18:57

Until recently you couldn't take advantage of Adsense for Domains if you registered a domain name with Fasthosts.  However, with the new Fasthosts control panel which now allows you to edit DNS settings, domain name owners can now earn revenue from domain names they don't currently use.

If you're familiar with Google Adsense, you may have seen the "Adsense for Domains" link on the "Adsense Setup" tab on the Adsense navigation.  Unfortunately the "Quick start guide" Google provides doesn't include instructions for Fasthosts setup and following the generic instructions doesn’t work either.

The solution

Log-in to your Fasthosts control panel and click on the “DNS” button for the domain you wish to use to park with Adsense for Domains.

Find your "unique identifier" from the Adsense for Domains page within Adsense and create a CNAME as follows:

Host Name: www

Points to: your adsense unique identifier e.g pub-xxxxxxxxxxxxxxafd.ghs.google.com.

Next create an A record as follows:

Host Name: leave blank

Points to: 216.239.32.21

See the screenshot below for a finished example…

fasthosts

Tags: ,

Filed under: Google | eBusiness

EatonWeb: A Blog Directory to Avoid

16. August 2010 16:57

When you start blogging its a good idea to put the word out and let people know your new blog exists, one way to do this is get listed in online blog directories.

Some directories charge a fee to review your blog, which help pay for the upkeep of the directory and also helps to ensure quality listings.

Expect the Unexpected

The EatonWeb directory charges a review fee, but blogger BEWARE!

paypal

The other day I had an email out-of-the-blue from PayPal saying I’d made an automatic payment for a subscription I’d set-up.  First I thought it was just SPAM.

I didn’t recall ever setting up a subscription using PayPal, but reading the invoice from PayPal, it turns out that I had been duped into signing up to a recurring annual subscription fee to EatonWeb blog directory, when at the time I assumed it was a one-off fee to list my blog!

What’s even worse is the fact I never got my blog listed!

Looking at the EatonWeb submission page (below), it’s not very clear that you are signing up to a recurring annual subscription either, or whether you pay the annual subscription whether they list you or not.

eaton-web

There are no website terms and conditions and after emailing EatonWeb about this issue I’ve had no reply whatsoever, so I thought I write this post to alert other bloggers to this dodgy practice.

My advice is to avoid The EatonWeb blog directory!

Tags:

Filed under: Blogging | Search Engine Marketing