Saturday, April 9, 2016

BI Publisher for simple personal Email (Hebrew)

בימינו לקוחות מצפים ליחס אישי. בעיני לקוח מודרני פניה כללית ולא מותאמת אליו, היא רמז להתייחסות לא רצינית. באורקל קיים מזה זמן רב מוצר הנקרא BI Publisher. הוא מגיע כמוצר עצמאי או כחלק מחבילות OBIEE או OBI SE1 ובנוי בדיוק בשביל הדברים הללו. כשנושא פניה אישית נדון במפגש באורקל, חשבנו שכדאי להזכיר את זה לכולם ולהמנע מאמרות בנושא סנדלרים יחפים.

כאן נתאר דוגמא פשוטה ומהירה לבניית דוור אישי באמצעות מייל לכמה אנשי אורקל.
ניתן לבצע את כל התהליך תוך פחות משעה.

הכלים המצויים בידי, מלבד פאבלישר, הם טבלה בבסיס הנתונים ובה שישה שדות (שם, מייל, שם פרטי בעברית, מגדר, חודש לידה והאם יש לי תמונה שלו/ה) ובנוסף בדיסק נמצאות תמונות של האנשים (או ליתר דיוק של אילו מהם שהעלו תמונה אישית למערכת העובדים הפנימית).

שלב 1 - הגדרת מקור לנתונים

עכשיו יוצרים בפאבלישר אובייקט הנקרא Data Model ובו בוחרים את הטבלה הנ"ל ומסמנים את כל העמודות שלה.
בלשונית הData בודקים שהנתונים בסדר ושומרים דוגמית לפיתוח מהיר בהמשך.

שלב 2 - כתיבת המכתב האישי

כדי שחלילה לא נעבוד קשה מדי, נשתמש בתוסף (Add-In) לWord הניתן להורדה והתקנה מהפאבלישר. לאחר שהוא מותקן מתחברים דרכו אל השרת:
בוחרים את הdata model שיצרנו בשלב הקודם ויוצרים דוח חדש (create Report ובוחרים שם ומיקום של הדוח החדש שישמש להפצת דואר). עשכיו ניתן לבחור כל אחד משדות המודל ולשלב במכתב.
מה אנו רוצים לקבל? משהו כזה:
מכתב פשוט בו נעשה שימוש בשם ועוד כמה פרטים, פניה נכונה לפי המיגדר, תמונה אישית (אם יש) או הערה על העדר התמונה ולוגו קטן של אורקל למטה.

מה נעשה? הרי לא נרצה להריץ מייל נפרד לכל אחד. פשוט מאד, נכין דוח אחד גדול ובו דף נפרד לכל אדם ואחר כך נשלח לכל אחד את החלק שלו. תהליך הנקרא Bursting.
לכן ניצור לולאה היוצרת דף נפרד לכל אדם (המיוצג על ידי שורה בטבלה שלי) ונכניס שם טקסט חופשי וכמה נוסחאות מותנות. נקנח בתמונה.

כדי ליצור את רכיב החזרה, נבחר בתפריט הפאבלישר Repeating Group ובחלון שנפתח הבחר את הערך היחיד שיש בFor Each, נפריד בין הדפים השונים על פי כתובת דואר ונתחיל עמוד חדש בסוף כל אחד:

מה שנקבל הוא קוד בדף הWord שכולל התחלה וסוף של הבלוק:

נפריד בניהם (באמצעות לחיצה על ENTER):
בין שני החלקים הללו נכתוב את המכתה האישי.

כדי להחליף את XXX בשם הפרטי נלחץ על Field בתפריט ונבחר את First Name

באותה צורה נחליף את YYY בשדה Month_OB.

עכשיו נרצה לעשות פניה מגדרית נכונה. אדגים את הבחירה בין את ואתה. למעשה אני רוצה להחליט אם להוסיף את ה"ה" עבור זכר או לא, עבור נקבה. על כן נכתוב "את" במסמך ונצמיד אליו את שדה המגדר:

הקשה כפולה על GENDER ומעבר ללשונית הAdvanced, מציגה את הנוסחא של השדה בפאבלשר

נמיר אותה בנוסחא:
 <?if@inlines: GENDER = ‘M’?> ה<? end if?>
(אם המגדר הוא 'M', כתוב 'ה'), החלק המעניין כאן הוא בתוספת inlines עם הקידומת '@'. זה פשוט אומר לפאבלישר לא להתחיל שורה חדשה אחרי הנוסחא.
למען הסדר הטוב, בעמודת  Properties, נשנה את הText to display ל'/ה' (זה רק נראה יותר טוב).

בצורה דומה בתעדיף/פי כתבנו:
<?if@inlines: GENDER = ‘M’?> ף<? end if?><?if@inlines: GENDER = ‘F’?> פי<? end if?>

בנוסף יש הודעה שונה לבעלי וחסרי תמונה. כאן נשתמש באפשרות "Conditional Region":
נסמן את הטקסט שנרצה להתנות. נבחר, במקרה שלנו, את השדה PICTURE_Y_N, ונבחר תנאי (שווה לN בדוגמא).

באופן אוטומטי, הטקסט יקבל הגדרות תנאי לפני ואחרי (C ו-EC בתמונה).


לבסוף הגענו להוספת תמונה. תמונה סטטית רגילה, פשוט מוסיפים בWord. אנחנו רצינו תמונה אישית.
מוסיפים תמונה כלשהי, שמגדירה גודל ברירת מחדל (התות במקרה שלנו), לוחצים קליק ימני ובוחרים ב: Format Picture:

כאן, בהתאם לגירסה של Word בוחרים Web או, במקרה שלי 'Alt Text':
כאן כותבים את כתובת התמונה האמיתית שתופיע. זה יכול להיות URL או הפניה קבועה... במקרה שלי יש תמונות במחיצת C:\people, כשלכל אחד קובץ בשמו עם הסיומת jpg. על כן אני משתמש בשדה Name ומשרשר את הערכים הקבועים (concat  היא פונקצית שירשור):
url:{concat('C:\people\',NAME,'.jpg')}

שימו לב, במידה ומפיצים את המייל כמסמך, למשל PDF, התמונה הדינמית הנ"ל מובנית במסמך והכל תקין. אבל אם מפיצים אותו כHTML, התמונה כאמור דינמית. על כן, חשוב שתהייה נגישה לקורא המכתב. שימוש בדיסק מקומי (כמו בדוגמא הנ"ל) או שרת פנימי לתמונות, שאליהן אין בהכרח לקורא המכתב גישה, לא יעבוד.

חלק נוסף לדוברי עברית: תחת Options/Preview, לבחור בעברית.

עכשיו נשמור את הקובץ בWORD (עם סיומת RTF) וניתן לצפות בדוח תחת תפריט Preview במגוון פורמטים:

כחלק מWord ניתן להוסיף עיצובים / Header / Footer...  כך נוסיף את הלוגו, למשל.

כשאנחנו מרוצים, נבחר בתפריט את Upload Template As וניתן לו שם.

עכשיו יש לנו דוח רב עמודים, במגוון פורמטים. בו עמוד אחד לכל אדם. איך נחלק אותו להפצה אוטומטית? באמצעות Bursting.

שלב 3 - Bursting.

בפאבלישר מנגנון Bursting מובנה. הרעיון הוא לכתוב שאלתת SQL נוספת, בה כל הגדרות הפלט והגדרה, על פי מה לחתוך להפצה את הדוח המקורי. למי שירצה להתעמק בנושא, כדאי להתעמק כאן. אני רק אתאר את המקרה המסויים שלנו.
בData Model שתואר בשלב 1, נוסיף בלוק Bursting:

נגדיר שהשאילתה פונה לאותה הטבלה (לא חובה, אפשר לעבוד עם טבלאות שונות) והגדרת הSplit והDeliver על פי עמודת הEMAIL.
נתאר שתי דוגמאות, אחת PDF המצורף למייל ואחד HTML.

HTML :
זה הSQL אותו אסביר עבור כל שורה:
select "O_PEOPLE"."EMAIL" as "KEY",
     'Personal' as TEMPLATE,
     'he-IL' as LOCALE,
         'HTML' OUTPUT_FORMAT,
     'EMAIL' as DEL_CHANNEL,
     "O_PEOPLE"."EMAIL" as PARAMETER1,
     'Tovit_and_Boris@oracle.com' as PARAMETER3,
     concat('הודעה אישית ל',"O_PEOPLE"."FIRST_NAME") as PARAMETER4,
     'false' as PARAMETER6,
     'noreply@oracle.com' as PARAMETER7
 from    "SH"."O_PEOPLE" "O_PEOPLE"

KEY זאת הגדרה האומרת לפי איזה שדה נחתוך להפצה את הדוח (צריך להיות תואם את השדה המקביל בדוח).
TEMPLATE הוא שם החלק שהענקנו כשעשינו Upload Template As בשלב הקודם.
LOCALE הוא שפת הנתונים (לעברית he-IL)
OUTPUT_FORMAT במקרה שלנו HTML, כי רציתי לשלב אותו בדואר בצורה יפה.
DEL_CHANNEL הוא פורמט ההפצה, EMAIL במקרה שלנו (בנוסף יש FAX, FILE, FTP, PRINT, WEBDAV).

הפרמטרים רלוונטיים לפורמט ההפצה. עבור דואר:
PARAMETER1 הוא כתובת הנמען (To של הדואר)
PARAMETER2 (לא השתמשנו) - CC
PARAMETER3 כתובת השולח (שזייפנו בלי בושה)
PARAMETER4 כותרת ההודעה(הודעה אישית לXXX במקרה שלנו)
PARAMETER5 (לא השתמשנו) גוף ההודעה. רלוונטי למקרים שהפרמטר הבא true
PARAMETER6 האם להוסיף את המסמך (Attachment) או לא (עבור output_format=PDF, חייב להיות true).
PARAMETER7 כתובת המענה
PARAMETER8 (לא השתמשנו) - BCC

PDF :

במקרה של PDF, ערך PARAMTER6 הוא כמובן true.
הפעם גם יש דוגמא של ערך PARAMETER5. היתר כמו בHTML.

select "O_PEOPLE"."EMAIL" as "KEY",
     'Mail_Content.Personal' as TEMPLATE,
     'he-IL' as LOCALE,
         'PDF' OUTPUT_FORMAT,
     'EMAIL' as DEL_CHANNEL,
     "O_PEOPLE"."EMAIL" as PARAMETER1,
     'Tovit_and_Boris@oracle.com' as PARAMETER3,
     concat('הודעה אישית ל',"O_PEOPLE"."FIRST_NAME") as PARAMETER4,
     'שלום רב '||"O_PEOPLE"."FIRST_NAME"||' מצורף קובץ עם הודעה אישית אליך'||chr(13)||chr(13)||'בברכה'||chr(13)||'טובית ובוריס' as PARAMETER5,
     'true' as PARAMETER6,
     'noreply@oracle.com' as PARAMETER7
 from    "SH"."O_PEOPLE" "O_PEOPLE"


זה הכל.




עכשיו יוצרים Report Job  חדש.

בוחרים את הדוח שיצרנו.

בלשונית Output, רואים שדלוק הBursting 
ומתזמנים ריצה אחת או יותר


כמובן, כדי שמשהו ישלח בפועל, יש להגדיר חשבון הפצת דואר אמיתי. ההגדרה נמצאת ב-Administration  של הpublisher (תחת Delivery / Email):
אם לא יודעים מה לבחור כאן, בדקו את הגדרות הדואר שלכם.

 

No comments:

Post a Comment