private string GenerateHelpTopicId(string helpTopicPrefix)
{
String generatedHelpTopicID;
String tempfieldName = XmlUtils.GetOptionalAttributeValue(ConfigurationNode, "field");
String templabelName = XmlUtils.GetOptionalAttributeValue(ConfigurationNode, "label");
String areaName = m_mediator.PropertyTable.GetStringProperty("areaChoice", null);
string toolName = m_mediator.PropertyTable.GetStringProperty("currentContentControl", null);
int parentHvo = System.Convert.ToInt32(XmlUtils.GetOptionalAttributeValue(ConfigurationNode, "hvoDisplayParent"));
if (tempfieldName == "Targets" && parentHvo != 0)
// Ceoss Reference (entry level) or lexical relation (sense level) subitems
{
var repo = m_cache.ServiceLocator.GetInstance<ILexEntryRepository>();
ILexEntry lex;
repo.TryGetObject(parentHvo, out lex);
if (lex != null) // It must be the entry level
{
generatedHelpTopicID = helpTopicPrefix + "-" + toolName + "-CrossReferenceSubitem";
}
else // It must be the sense level
{
generatedHelpTopicID = helpTopicPrefix + "-" + toolName + "-LexicalRelationSubitem";
}
}
else
{
templabelName = getAlphaNumeric(templabelName);
if (String.IsNullOrEmpty(tempfieldName))
{
// try to use the slice label, without spaces.
tempfieldName = templabelName;
}
generatedHelpTopicID = GetGeneratedHelpTopicId(helpTopicPrefix, tempfieldName);
if (!helpTopicIsValid(generatedHelpTopicID))
{
// try to use the slice label, without spaces if the helpTopicID does not work for the field xml attribute.
generatedHelpTopicID = GetGeneratedHelpTopicId(helpTopicPrefix, templabelName);
if (!helpTopicIsValid(generatedHelpTopicID))
{
if (helpTopicPrefix.Equals("khtpChoose"))
generatedHelpTopicID = "khtpChoose-CmPossibility";
else if (areaName == "lists")
{
generatedHelpTopicID = "khtp-CustomListField"; // If the list isn't defined, use the generic list help topic
}
else
{
generatedHelpTopicID = "khtpNoHelpTopic"; // else use the generic no help topic
}
}
}
}
return generatedHelpTopicID;
}