Skip to content

Instantly share code, notes, and snippets.

@pietroleggero
Last active March 25, 2017 00:20
Show Gist options
  • Save pietroleggero/8a1c8f29d4db65d564b84abe7c78cb78 to your computer and use it in GitHub Desktop.
Save pietroleggero/8a1c8f29d4db65d564b84abe7c78cb78 to your computer and use it in GitHub Desktop.
Snippet of code that shows how to create and parse a Knova DialogRequest to the get the Articles List
GetArticleRequest json sample:
{
"query":"Something to query",
"userID":"NAR130",
"kmBrand": "UMBN_NEWHOLLANDAG_1_1",
"kmModelId":"SG_ST720DISCANDRIPPER_1_3",
"kmMarket":"UMMR_NORTHAMERICAREGION_1_2",
"kmItemForPage": 50,
"kmStartFromItem":1,
"lang":"EN"
}
public static string createArticlesListRequest(GetArticlesRequest request)
{
string sessionID = DateTime.Now.ToString("yyyyMMddHHmmssfff");
string kmMs = "MS_CHINESECUSTOMERMICROSITE_1_1";
string sortField = "relevance";
string sortOrder = "0";
string query = request.Query;
string numKCs = request.KmItemForPage.ToString();
string startKC = request.KmStartFromItem.ToString();
string userID = request.UserID;
string kmBrand = request.KmBrand;
string kmModelId = request.KmModelId;
string kmMarket = request.KmMarket;
string kmLanguage = LanguageHandler.GetLanguageCode(request.Lang);
StringBuilder dialogRequest = new StringBuilder();
dialogRequest.Append(string.Format("<DialogRequest AppContext=\"KSS\" DebugLevel=\"0\" Entitlements=\"SAL_Public\" MS=\"{0}\" MaxDocLimit=\"250\" NumKCs=\"{1}\" StartKCNum=\"{2}\" Published=\"-KCP_RWCase,-KCP_Threaded,-KCP_Feedback,KCP_Publish\" RequestType=\"Search\" Segments = \"UMAS_ARCHIVESTATE_ACTIVE_1_1\" SessionID=\"{3}\" SortField=\"{4}\" SortOrder=\"{5}\" UserID=\"{6}\">",
kmMs, numKCs, startKC, sessionID, sortField, sortOrder, userID));
dialogRequest.Append("<Constraints>");
dialogRequest.Append(string.Format("<Or><Under><Node id=\"{0}\"/></Under></Or>", kmLanguage));
dialogRequest.Append("</Constraints>");
if (string.IsNullOrEmpty(query))
dialogRequest.Append("<UserQuery/>");
else
dialogRequest.Append(string.Format("<UserQuery>{0}</UserQuery>", query));
if (!string.IsNullOrEmpty(kmBrand))
dialogRequest.Append(string.Format("<Filter ids = \"{0}\" root = \"UMBN_root\" type = \"Standard\"/>", kmBrand));
if (!string.IsNullOrEmpty(kmModelId))
dialogRequest.Append(string.Format("<Filter ids = \"{0}\" root = \"SG_root\" type = \"Standard\"/>", kmModelId));
if (!string.IsNullOrEmpty(kmMarket))
dialogRequest.Append(string.Format("<Filter ids = \"{0}\" root = \"UMMR_root\" type = \"Standard\"/>", kmMarket));
dialogRequest.Append(string.Format("<ConfirmedNodes><ConfirmedNode><Node NodeID = \"MODE_user_text\"/></ConfirmedNode><ConfirmedNode><Node NodeID = \"{0}\"/></ConfirmedNode></ConfirmedNodes>", kmLanguage));
dialogRequest.Append("</DialogRequest>");
return dialogRequest.ToString();
}
public static List<Article> parseArticleListResponse(string xml)
{
string nodePath = "VisibleState/KCs/KC";
string secondaryNodePath = "VisibleState/KCs/BestBet";
List<Article> articles = new List<Article>();
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(xml);
XmlNodeList nodeList = xDoc.SelectNodes(nodePath);
if (nodeList.Count == 0)
{
nodeList = xDoc.SelectNodes(secondaryNodePath);
}
foreach (XmlNode a in nodeList)
{
Article article = new Article(a);
articles.Add(article);
}
return articles;
}
public class Article
{
public string Id { get; set; }
public string Title { get; set; }
public string Synopsis { get; set; }
public Article() { }
public Article(XmlNode node)
{
XmlNode kcTitleNode = node.SelectSingleNode("KCTitle");
XmlNode titleNode = node.SelectSingleNode("Title");
XmlNode kcSynopsisNode = node.SelectSingleNode("KCSynopsis");
XmlNode synopsisNode = node.SelectSingleNode("Synopsis");
XmlNode externalIdNode = node.Attributes["ExternalID"];
XmlNode idNode = node.Attributes["id"];
Title = kcTitleNode != null ? kcTitleNode.InnerText : titleNode != null ? titleNode.InnerText : "";
Synopsis = kcSynopsisNode != null ? kcSynopsisNode.InnerText : synopsisNode != null ? synopsisNode.InnerText : "";
Id = externalIdNode != null ? externalIdNode.Value : idNode != null ? idNode.Value : "";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment