Thursday, April 9, 2015

Auto submit/skip items into different workflow states depending on language/condition

Scenario:

Auto submit/Skip workflow states to specific language items

Solution:

Add "Auto Submit Lang Items Action" of type "Auto Submit Action"inside the __OnSave command.
Then, I have choosen to skip/auto submit "en" language items directly into "Approved" state.




Code :
public class AutoSubmitLangItemsAction
{
    public void Process(WorkflowPipelineArgs args)
    {
        Assert.ArgumentNotNull(args, "args");
       
        ProcessorItem processorItem = args.ProcessorItem;
        if (processorItem == null || args.DataItem == null)
        {
            return;
        }
           
        Item innerItem = processorItem.InnerItem;
 

        string langName = innerItem["role name"];
        if (!langName.Equals(args.DataItem.Language.Name, StringComparison.CurrentCultureIgnoreCase))
        {
            return;
        }

        ID iD = MainUtil.GetID(innerItem["next state"], null);
        if (iD.IsNull)
        {
            return;
        }

        args.NextStateId = iD;
    }
}



Possible Improvements : 

I have used the "Role Name" field to specify the language. But, one can create a custom template with "Auto Submit Language" field of type "TreelistEx" with DataSource pointing to language items



Update : I have make this into a Sitecore Marketplace Module. 




Wednesday, April 1, 2015

How to Populate WFFM form Fields using QueryString Parameters

Sometimes you might need to populate a Sitecore WFFM form fields by using Query String parameter values comes from URL. 





Following is the process or configuration to do that.

When you try to add a WFFM form using default WFFM "Form" webcontrol, you will see a checkbox with name "ReadQueryString" (refer below image). 

If you have this checkbox is clicked, and if you pass any url parameters with a name of a fields in the WFFM form, sitecore will automatically populate that value (as you see in the above image)


Tuesday, March 31, 2015

Evaluation of condition failed for rule item error on Log files in Sitecore 8.0

Sitecore Version :

Sitecore 8.0 rev. 150223

Error :

Following error repeated in the error logs

ManagedPoolThread #1 07:41:22 ERROR Evaluation of condition failed. Rule item ID: {871B4104-9CFA-4DE3-AF38-DF1E144B3DF0}, condition item ID: {4640D86A-9B01-4B04-9BEB-03E06E5AC722}
Exception: System.InvalidOperationException
Message: Tracker.Current.Session.Interaction is not initialized
Source: Sitecore.Kernel
   at Sitecore.Diagnostics.Assert.IsNotNull(Object value, String message)
   at Sitecore.Analytics.Rules.Conditions.EngagementValuePointsCondition`1.Execute(T ruleContext)
   at Sitecore.Rules.Conditions.WhenCondition`1.Evaluate(T ruleContext, RuleStack stack)
   at Sitecore.Rules.RuleList`1.Run(T ruleContext, Boolean stopOnFirstMatching, Int32& executedRulesCount)

Reason :

When an Engagement plan condition has a timeout value set, this error occrs
Quote : Sitecore SupportWhen the state processing is performed by timeout, the interaction does not exist. That's why the excepion occurs in you log files, additionaly the contact does not move to the next state even if the condition was satisfied.

Solution :

Remove the timeout value from the Engagement plan Condition

Note : This has been registered as a bug (ref. 430511)

Quick Search Index Rebuild Error due to Large Item Names

Environment Summary: Sitecore 8.0 rev. 150223 (Update-2)

Issue : Quick Search Index Rebuilding error

When we try to run the "Quick Search Index" rebuild, we get the following error

Job started: RebuildSearchIndex|System.ArgumentException: it doesn't make sense to have a field that is neither indexed nor stored
   at Lucene.Net.Documents.Field..ctor(String name, Boolean internName, String value_Renamed, Store store, Index index, TermVector termVector)
   at Sitecore.Search.Crawlers.BaseCrawler.CreateDataField(String name, String value)
   at Sitecore.Search.Crawlers.DatabaseCrawler.AddSpecialFields(Document document, Item item)
   at Sitecore.Search.Crawlers.DatabaseCrawler.IndexVersion(Item item, Item latestVersion, IndexUpdateContext context)
   at Sitecore.Search.Crawlers.DatabaseCrawler.AddItem(Item item, IndexUpdateContext context)
   at Sitecore.Search.Crawlers.DatabaseCrawler.AddTree(Item root, IndexUpdateContext context)
   at Sitecore.Search.Crawlers.DatabaseCrawler.AddTree(Item root, IndexUpdateContext context)
   at Sitecore.Search.Crawlers.DatabaseCrawler.AddTree(Item root, IndexUpdateContext context)
   at Sitecore.Search.Crawlers.DatabaseCrawler.AddTree(Item root, IndexUpdateContext context)
   at Sitecore.Search.Crawlers.DatabaseCrawler.AddTree(Item root, IndexUpdateContext context)
   at Sitecore.Search.Crawlers.DatabaseCrawler.AddTree(Item root, IndexUpdateContext context)
   at Sitecore.Search.Crawlers.DatabaseCrawler.AddTree(Item root, IndexUpdateContext context)
   at Sitecore.Search.Index.Rebuild()
   at Sitecore.Shell.Applications.Search.RebuildSearchIndex.RebuildSearchIndexForm.Builder.Build()|Job ended: RebuildSearchIndex (units processed: 5802)



Reason :

Quote : Sitecore Support 
When an item name length exceeds 128 characters this issue occurs. You can use the following SQL script in order to perform the check of your Core, Master databases:
SELECT [ID]
      ,[Name]
      ,[TemplateID]
      ,[MasterID]
      ,[ParentID]
      ,[Created]
      ,[Updated]
  FROM [dbo].[Items]
  WHERE LEN([NAME]) > 120 
 

Temporarily Fix :

Rename the items with name length greater than 120 characters to within 120 characters

Wednesday, March 18, 2015

WebEdit.UsePopupContentEditor - Setting of the Day

In the /App_Config/Includes/Sitecore.ExperienceEditor.config file, you will see following setting

<!--  WEB EDIT USE POPUP EDITOR
            Indicates whether WebEdit uses the popup content editor.
            Default value: false
-->
<setting name="WebEdit.UsePopupContentEditor" value="false" />


In the Experience Editor (Page Editor) mode, when you click "Edit related item" option for any component



when "WebEdit.UsePopupContentEditor" setting set to "false" (i.e. Default value), Content Editor will open at the top of the same page (see the image below)



When "WebEdit.UsePopupContentEditor" setting set to "true", Content Editor will open as a popup window (see the image below)









Subscription notification email checkbox not present in Sitecore 8 WFFM Save Action

With Web Forms for Marketers 8.0 (WFFM) module, "Subscribe to recipient list" save action was replaced with new save action, "Add Contact To Contact List"

In "Subscribe to recipient list" save action in older WFFM module, there was a "send confirmation email" checkbox. When this checkbox was clicked, sitecore will send a subscription confirmation email to the user.

But, in the latest WFFM 8.0, "Add Contact To Contact List" save action does not have that checkbox option.

WFFM Older Versions - Subscribe to Recipient List save action
WFFM 8.0 - Add Contact to Contact List save action


So, the way to achieve this in Sitecore 8.0 is to use Send Email Campaign Message action with the "Add the Contact to Contact List" save action. (Sitecore Support has helped/confirm this after reporting the issue)



Hope this helps to someone!

Monday, March 16, 2015

Look into Sitecore Development Basics – March Meetup – Event Report - SUGSL

After looking into functional side of Sitecore CMS in our first few meetups, it was time to look into the Sitecore development.
Since most of the members/participants in Sri Lanka are fairly new to Sitecore, our SUGSL March meetup was a timely one.
This time, we extend our meetup to two session. sitecoreug.org
6:30 PM – 7:15 PM  – Sitecore Development Basics by Chaturanga Ranatunga (Senior Sitecore Developer, Codehouse)
7:30 PM – 9:00 PM  – Sitecore Development: Getting Started by Matthew Kenny (Sitecore Architect | Sitecore Technology MVP, Codehouse)
Following are the recordings of the event

The participants were thankful to SUGSL since the presentation done by Matthew Kenny covered most of the required things to be considered in the initial development stages.

Event was powered by Codehouse Ltd, a Sitecore Certified Partner.
Hope to see you all in our April Meetup!