1
votes

I'm creating an import tool that programatically creates items in Sitecore. The item gets created, but when I view it, it says 'The current item does not have a version in "English : English."' I put in using (new LanguageSwitcher("en-gb")) but that didn't fix it. The way my code works is that it looks for the folder that the item is supposed to be put in (all folders are based on year, e.g. 2016, 2017); if the folder doesn't exist, I create that folder before creating the item. This is my code:

protected void PublishRelease(PressReleaseItem release)
{
    using (new LanguageSwitcher("en-gb"))
    {
        var year = release.ReleaseDate.Year;
        // create year folder if it doesn't exist
        var folderQuery = String.Format(PressReleaseYearFolderFastQuery, year);
        Item folder = _db.SelectItems(folderQuery).ToList().FirstOrDefault();

        if (folder == null)
        {
            var templateId = _templateFactory.GetTemplateId<IPressReleaseYearFolderItem>();
            TemplateID pressReleaseFolderTemplateId = new TemplateID(templateId.ToID());
            folder = _pressReleaseFolder.Add(year.ToString(), pressReleaseFolderTemplateId);
        }

        if (folder == null) return;
        // add item to folder

        var itemTemplateId = _templateFactory.GetTemplateId<IPRNewswirePressReleaseItem>();
        TemplateID pressReleaseTemplateId = new TemplateID(itemTemplateId.ToID());

        item = folder.Add(SanitizeHeadline(release.Headline), pressReleaseTemplateId);

        if (item == null) return;
        item.Fields.ReadAll();
        item.Editing.BeginEdit();

        try
        {
            item.Fields["External ID"].Value = release.ExternalId;
            item.Fields["Active"].Value = release.Active.ToString();
            item.Fields["Image Url"].Value = release.ImageUrl;
            item.Fields["PDF Url"].Value = release.PdfUrl;
            item.Fields["Description"].Value = release.SubHeadline;
            item.Fields["Headline"].Value = release.Headline;
            item.Fields["Date"].Value = release.ReleaseDate.ToString("d");
            item.Fields["Longtext"].Value = release.Body;
            item.Fields["Category"].Value = SetReleaseCategories(release.Category);

        }
        catch (Exception ex)
        {
            item.Editing.EndEdit();
        }

        item.Editing.EndEdit();
    }
} 

When I view the new item in Sitecore, it says it has no version in English; when I click to add a new version, all of the fields are blank.

1
Silly question: is your system language "en-gb" or "en-us"; might want to check the codes the system is looking for match the code you're using. Also, you want a try...finally there, rather than "catch". Always log exceptions.Richard Hauer
additionally check is it exist standard values on your template. Additionally have you tried to use using (new SecurityDisabler()) ?Arbejdsglæde

1 Answers

1
votes

I would have expected the code you have above to default to creating a new version in the en-GB language. Like Richard mentions, validate if your 'english' is set to 'en' or 'en-gb'. If your default English has a different code, you might have to update your language switcher.

Alternatively, have you tried doing something like below to force a version?

var result = item.Versions.AddVersion();

This would at least allow you to test if the version creation is working at all, though you shouldn't need it for a new item.