Usman ur Rehman Ahmed's blog

Various levels of control for custom module settings

From the DNN's intrinsic html Module settings you will find the ability to apply workflow at various levels of site ranging from module instance to site level. Often this requirement triggers for custom modules in a generic way.

Module_settings
Below please find custom code written to perform this task such that any key/value pair can be stored for any given module refererred by module friendly name.

1- Site Level

        /// -----------------------------------------------------------------------------
        /// <summary>
        /// This method adds the key if not present and if present, updates its value.
        /// Per Site or portal level: meaning all modules instances of type specified by ModuleFriendlyName placed on entire portal will be affected
        /// </summary>
        /// -----------------------------------------------------------------------------      
        public static bool UpdateModuleSettingPerSite(string ModuleFriendlyName, string key, string value, int portalId)
        {
            try
            {
                ModuleController mc = new ModuleController();
                ArrayList existMods = mc.GetModulesByDefinition(portalId, ModuleFriendlyName);

                foreach (DotNetNuke.Entities.Modules.ModuleInfo mi in existMods)
                {
                    if (!mi.IsDeleted)
                    {
                        mc.UpdateTabModuleSetting(mi.TabModuleID, key, value);
                    }
                }

                return true;
            }
            catch
            {
                throw;
            }
        }


2- Page Level

        /// -----------------------------------------------------------------------------
        /// <summary>
        /// This method adds the key if not present and if present, updates its value.
        /// Per Page level: meaning all modules instances of type specified by ModuleFriendlyName placed on this particular page will be affected
        /// </summary>
        /// -----------------------------------------------------------------------------      

        public static bool UpdateModuleSettingPerPage(string ModuleFriendlyName, string key, string value, int tabId, int portalId)
        {
            try
            {
                ModuleController mc = new ModuleController();

                ArrayList existMods = mc.GetModulesByDefinition(portalId, ModuleFriendlyName);

                foreach (DotNetNuke.Entities.Modules.ModuleInfo mi in existMods)
                {
                    if (!mi.IsDeleted && mi.TabID == tabId)
                    {
                        mc.UpdateTabModuleSetting(mi.TabModuleId, key, value);
                    }
                }
                return true;
            }
            catch
            {
                throw;
            }
        }


3- Module Level

        /// -----------------------------------------------------------------------------
        /// <summary>
        /// This method adds the key if not present and if present, updates its value.
        /// Per Module level refers to current module instance, from where settings action was clicked.
        /// </summary>
        /// -----------------------------------------------------------------------------      

        public static bool UpdateModuleSettingPerModule(string ModuleFriendlyName, string key, string value, int TabModuleId)
        {
            try
            {
                //Verified that UpdateModuleSettings() updates the precise module instance only and not the settings common to all instances of that type
                ModuleController objModules = new ModuleController();
                objModules.UpdateTabModuleSetting(TabModuleId, key, value);
                return true;
            }
            catch
            {
                throw;
            }
        }

Filed under: API DNN Dot Net Nuke Module

Make a New World Record using SendKeys

Yesterday, a friend of mine came across an application game (to type a-z in least time http://apps.facebook.com/typea-z) on facebook and it was getting hard for him to manually score better than 5.12 seconds to type all the alphabet keys.

Since he had to win amongst friends, the workaround was simple. I wrote down a simple utility in VB .net to perform clicks using SendKey API. I was able to secure the goal in just 0.03 seconds. I thought to share the code right here.

The point to highlight in this post is, if you would use the send method of the SendKeys class, you will fail miserably, since send method doesn't wait for the message to be processed, however sendWait method makes sure that the keys that are sent are processed by the consumer application.

See if you have a better processing speed than my system to beat this record. :)

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i As Integer = 0
        ''Give a delay so that you can manually click the Facebook browser window to gain focus
        Threading.Thread.Sleep(3000)
        For i = 0 To 5
            SendKeys.SendWait("abcdefghijklmnopqrstuvwxyz")
        Next
    End Sub
End Class

11
To Posterous, Love Metalab