Internet Explorer 8 Part 5 - Search Provider
בפוסטים
הקודמים כתבתי על Web Slice (עדיין נשאר לי לדבר על Authenticated Web Slices)
כולנו מכירים את התיבה מצד ימין למעלה בחלון הדפדפן.
אנחנו יכולים לייצר ספקי חיפוש בעצמנו, למעשה זה פיצ'ר עוד מ IE7, בגרסה 8 של הדפדפן הוסיפו לו כל מיני תכונות מעניינות שנראה אותם בפוסטים הקרובים.
הפעם אני רוצה להראות דוגמא אמיתית ובפוסטים הבאים להרחיב על כל התכונות האפשריות.
כאחראי על צוות התשתיות ב
סלע ביקשו ממני לייצר ספק חיפוש לסילבוסים שלנו.
מה שהחבר'ה בסלע רצו שאני אייצר ספק חיפוש שהם יוכלו לכתוב את קוד הקורס ולחיצת Enter תוביל אותם לקורס המיועד. בנוסף הם אמרו לי שלא תמיד הם זוכרים את הקודים של כל הקורסים (יש מאות) ולכן הם רצו שזה יתנהג כמו גוגל, כלומר ברגע שמתחילים לכתוב משהו, זה מביא את ההצעות הכי קרובות (זה אחד מהתכונות החדשות של IE8 - תמיכה ב - suggestions).
אז איך עושים את זה ?
אנחנו צריכים לייצר שירות כלשהו שמחזיר את התוצאות לחיפוש הספציפי, התוצאות יכולות לחזור במבנה של XML או של JSON, כמובן ש - JSON הוא יותר קטן ולכן יותר יעיל, אבל במבנה XNL אנחנו יכולים לקבל יותר תכונות (כמו תמונה לכל תוצאה - ועוד).
אני בחרתי במבנה JSON, נניח שאני מקבל את המילה Introduction - אני מעוניין לחפש בבסיס הנתונים שלנו את כל הקורסים שבכותרת שלהם יש את המילה Introduction. בתוצאה אני אמור להחזיר מחרוזת במבנה הבא:
["Introduction",
["50150", "WP1"],
["Introduction to C# 3.0", Introduction to Web"],
השורה הראשונה זה מה שיוצג ברשימת התוצאות.
השורה השנייה זה תיאור של כל קורס.
והשורה השלישית היא להיכן לנווט.
יצרתי Handle (קובץ עם סיומת ashx) וכתבתי קוד דומה לזה:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write(Syllabuses(context.Request["searchTerms"]));
}
private string Syllabuses(string searchTerms)
{
if (HttpContext.Current.Cache[searchTerms] == null)
{
SqlCommand cmd = GetCommand(searchTerms);
StringBuilder fullBuilder = Execute(searchTerms, cmd);
SaveInCache(searchTerms, fullBuilder);
}
return HttpContext.Current.Cache[searchTerms].ToString();
}
כדי לחסוך בפניות לבסיס הנתונים אני שומר במטמון תוצאות של חיפושים קודמים.
אני בודק האם התוצאה קיימת במטמון, במידה ולא -
אני יוצר את ה - Command -
מפעיל אותו ומקבל תוצאה שהיא המחרוזת במבנה מתאים -
שומר את התוצאה במטמון -
ומחזיר את התוצאה.
כעת כתבתי דף html שנראה כך:
<a href="#" onclick="window.external.AddSearchProvider('http://www.example.co.il/XMLFile1.xml')">
Add Syllabus Search Provider</a>
קובץ ה - xml נראה כך:
<?xml version="1.0" encoding="utf-8" ?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
xmlns:ie="http://schemas.microsoft.com/Search/2008/">
<ShortName>Syllabus Search</ShortName>
<Url type="text/html"
template="http://www.sela.co.il/syl/syllabus.aspx?CourseCode={searchTerms}&source=IE"/>
<Url type="application/x-suggestions+json"
template="http://www.example.co.il/Handler1.ashx?searchTerms={searchTerms}"/>
</OpenSearchDescription>
ב - URL הראשון אני נותן את הכתובת למי שכותב שם של סילבוס.
בשני את הכתובת ל - handler שלי.
מי שירצה (מצוות המכירות) להוסיף את ספק החיפוש שיצרתי יגלוש לדף שיש בו את הלינק, ילחץ עליו, ויקבל את החלון הבא:
ועכשיו זה נראה כך:
מה שנחמד שצוות המכירות מרוצה עד לב השמיים. (ואני לא מקבל יותר מיילים בנוסח "מה הכתובת של הקורס שמדבר על.....")