Last active
March 25, 2017 00:20
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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