How to remove broken links in Sitecore - sitecore

We've got a Sitecore site where several items have broken links to an old workflow state that is no longer with us. I know that you can remove links when you delete an item, but I'm not seeing an interface to simple remove a broken link on an item, when the missing item is already gone.
What's the best way to remove broken links in this case? Thanks.

There is Sitecore admin page that allows removing broken links. You can find it here:
http://localhost/sitecore/admin/RemoveBrokenLinks.aspx
You just select the database and execute the action. You can also serialize all items changed during this process.
You may need to change timeout settings in web.config:
<setting name="DefaultSQLTimeout" value="10:00:00" />
<setting name="DataProviderTimeout" value="00:00:00" />

Sitecore maintains a table named Links in the database specified in the LinkDatabase section of web.config. You can get all broken links in following way:
Sitecore.Data.Database db = Sitecore.Context.Database;
Sitecore.Links.LinkDatabase linkDb = Sitecore.Globals.LinkDatabase;
Sitecore.Links.ItemLink[] brokenLinks = linkDb.GetBrokenLinks(db);

Related

Is it possible to change the validation of user names in sitecore10.1?

In previous versions of Sitecore, username validation was defined with setteing name=AccountNameValidation.
In Sitecore 10.1, when I look at the results of ShowConfig, I don't see any definition of AccountNameValidation.
How can I redefine the username validation in Sitecore 10.1?
Thank you for your help.
I have checked the Sitecore.Kernel.dll in dotpeek.
The same setting is still available. It is just not shown in showconfig.aspx since it is not part of any config file.
Below is the code of Sitecore.Configuration.KnownSettings.CoreSettings class.
So if you want to override the default validation, you can put the same setting in Sitecore.config or create a patch config file.
<setting name="AccountNameValidation" value="^\w[\w\s]*$"/>
Good to read.
https://support.sitecore.com/kb?id=kb_article_view&sysparm_article=KB0259229

What would be the SQL script to generate Sitecore Broken Link Report

I'm helping our Editors to clean up broken links and have been looking for answers to the following:
The Broken Link Report cannot be exported or sorted so it's not very useful (we have many broken links ~2000). Is there a SQL script that I can run to create the same report?
If an Editor fix a link, Rerun the report doesn't seem to take the item off the report. Does she have to Rebuild Link Database every time?
The Links button in the menu is helpful, but it is listing All Versions of referrers. Is there a SQL script to find only the lastest version?
When delete or archive an item and let Sitecore remove broke links, will all the affected items be published?
We are dealing with a large report (~2000 items) due to not maintaining it diligently. The goal is to reduce the number to 100~200 and keep it under control from now on. Any general advice on how to clean up broken links report is appreciated.
For your first (and partly third) questions:
In the Core database you can check what gets executed on the click of the Broken Link Report (the item that defines it is located in : /sitecore/content/Documents and settings/All users/Start menu/Right/Reporting Tools/Scan for Broken Links.
The application that gets started is /Applications/Tools/Broken Links.aspx, so if we look at *webroot*/sitecore/shell/Applications/Tools/Broken Links/Broken links.xml, we can see that the code used for it is Sitecore.Shell.Applications.Tools.BrokenLinks.BrokenLinksForm in the Sitecore.Client assembly.
Using Reflector you can see what it's executing. For your requirements, what I would say would be the easiest is to create your own version of the BrokenLinksForm, possibly simply adding an export functionality on it, or modify the code so it only takes the latest version. From looking at it very quickly I think the code to change (which is actually in the nested Scanner class) is:
...
foreach (ItemLink link in Globals.LinkDatabase.GetBrokenLinks(database))
{
list.Add(link);
}
...
You could possibly check whether the link item is the latest version, possibly by using something like
...
var version = link.GetSourceItem();
if (version.Versions.GetLatestVersion().Version == link.SourceItemVersion)
{
list.Add(link);
}
...
While you're at it you could of course also put in some sorting functionality :-)
It doesn't translate 1-on-1 with the Links button in the menu, but it should give you some pointers in the right direction.
As to your 2nd question: I believe that yes, the Link database does need to be rebuilt. I don't know if Sitecore has a schedule set up by default, but you could create your own agent in the <scheduling> node in the web.config to do this after X time.
Your last question: If you delete or archive an item and have Sitecore remove the broken links the affected items will, by default, not be published. If you have an auto-publish set up it'll show up of course.

How is a custom Sitecore ContentSearch index created?

As the titles states, how is a custom Sitecore ContentSearch index created? I end up with [ConfigurationErrorsException: Index has no configuration.]
Sitecore.ContentSearch.LuceneProvider.LuceneIndex.Initialize() +374 each time I try to add in a custom index.
EDIT:
Looking for a basic sample standalone configuration. Copying / Pasting sitecore_master_index or sitecore_web_index indexes results in the error.
This problem occurs because sitecore_master_index and sitecore_web_index configuration do not contain <Configuration> section.
Add in those indexes definition following node and you should not get this error
(*Sitecore.ContentSearch.Lucene.Index.Core.config, Sitecore.ContentSearch.Lucene.Index.Master.config,
Sitecore.ContentSearch.Lucene.Index.Web.config*):
<Configuration ref="contentSearch/configuration/defaultIndexConfiguration"/>
I don't know why it is like that, but it looks like Sitecore's provided index samples do not like it when you try to add your own custom index configuration.
Have a look at Autohaus on Github. Its a custom Sitecore website built by Alex Shyba and Tim Ward. It has a custom index in there to search all the vehicles so you should be able to follow that and see how its done.
On an overview, they have created a new config and referenced the new index name and created an ISearchIndex object using Sitecore.ContentSearch.ContentSearchManager.GetIndex("index_name");. How are you creating your ISearchIndex object?

Umbraco error in Document Types

A long time ago I first setup a website in Umbraco. This seemed to be working fine.
I have now come back to it about a year later, and was initially getting the following error when selecting a Document Type (any document type in the Settings tab):
A bit weird, because earlier I didn't have this issue, but fine. I do what it says, and add <identity impersonate="true"/> to the <system.web> node in web.config.
While it does fix the initial issue, I now have the following on all document types:
When trying to create a new Document Type, I get the same kind of error, but then the ReturnUrl part is ReturnUrl=/umbraco/create.aspx?nodeId=init&nodeType=inittemplates&nodeName=Templates&rnd=20.2&rndo=21.2&nodeId=init&nodeType=inittemplates&nodeName=Templates&rnd=20.2&rndo=21.2' - but only if I tick the box 'Create template for this item'. The same happens when I try and create a Template.
After Googleing I came up with this: our.umbraco post with similar issue. One (unconfirmed) solution is that there's an illegal name in a document type/ template - but I haven't changed anything, and might be fixed by going into the database.
I did check the /masterpages folder, the only 'strange' characters in there are - and _.
In my Document Types I have on named 'Textpage (Two col)' and another named 'News & Events list'. I'm a bit hesitant to just delete them, since I don't have enough Umbraco knoledge to be sure this will fix my issue...
Is there any known solution for this, or will I also have to go into the database (and if so, whereabouts?)
I'm running Umbraco 4.7.2, assembly version 1.0.4500.21031.
I've hosted this site with GoDaddy.com - I don't know if that would be relevant.
[Update 1]
As per Tom Maton's comment:
The requirepermissions should be set to false, and have been.
in Appsettings I've set this:
<add key="umbracoUseMediumTrust" value="true" />
And I've added Trusted_Connection=yes to the connectionstring.
the problem remains.
[Update 2]
Tried the solution amelvin provided, but no dice. Doctypes and templates still give the error. I'm getting more certain it's some security issues. Which folder would correspond to the Templates? Would that be the masterpages folder? If so, what kind of permissions does that one need?
It could be that you don't have full trust on your Go Daddy environment?
Check this post out http://our.umbraco.org/forum/getting-started/installing-umbraco/17856-Umbraco-on-GoDaddy-Shared-Hosting
Could help resolve your issue.
The error could be a knock on from permissions errors as yet unsolved.
But the error is thrown if the content page does not have a template assigned or if Umbraco thinks it doesn't have a template. If absolutely nothing has changed to the site then it could be that the umbraco.config file has somehow got corrupted (it will contain all the doctype/template cross reference info). This can be fixed by right clicking on the top 'content' node and choose 'republish entire website'.
Secondly navigate to the settings | document types (if you can now) and check the templates dropdown on the first tab of the appropriate document type. If its set to 'please select' then this error will get thrown when any page tries to render without a valid template assigned. If a default template is assigned - then go to that template and re-publish it - Umbraco may have lost it.
If this does not work then check if the template is assigned properly. Go to the same place in the content tree as the problem page and try to add a node with the desired doctype. If no choices are offered then it could be that the parent tab no longer allows the correct doctypes as children nodes, so go back to the doctypes and check the allowed children (second tab) of the parent node.
If none of this works without odd errors being thrown then its a mystery!
Here are a list of Permissions required for Umbraco http://our.umbraco.org/wiki/reference/files-and-folders/permissions
Or you could use one of the steps below to check all the folder permissions.
http://our.umbraco.org/wiki/reference/files-and-folders/permissions/perform-permissions-check
Or install this package. http://our.umbraco.org/projects/backoffice-extensions/ugolive this will allow you to check the permissions are correctly setup.

Sitecore Workbox Generating Odd Error

I've run into a problem in the Wokbox that seems like a Sitecore bug. When the "Items per Page" drop down is set to anything but "All", I'm able to expand the "Draft" and "Awaiting Approval" lists in the Workflow.
But when the "Items per Page" is set to "All", I get the following error:
Exception in MyWebSite: /sitecore/shell/default.aspx?xmlcontrol=Workbox&mo=preview
Message: Operation is not valid due to the current state of the object.
StackTrace: at System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding)
at System.Web.HttpRequest.FillInFormCollection()
And at this point, I'm "stuck" - and unable to revert my view back to anything less than "All" in the "Items per Page" drop-down. So, because I cannot revert back, I cannot do anything on the page, and any attempt to expand the Workflow lists (or do anything on the page) generates the above error.
Any thoughts on what is happening and how to fix this?
I followed up on this to keep from leaving this question unanswered. It turns out that this issue was related to another known issue. For the benefit of those who might be getting a similar issue, here's what fixed this:
The problem can occur when Sitecore CMS is installed on systems that have Microsoft security update MS11-100 installed.
Please refer to the similar known issue on SDN:
The Template Builder may fail when saving templates with many fields
The solution:
Try to add the following node to the section of the web.config file:
<add key="aspnet:MaxHttpCollectionKeys" value="5000" />