כיצד להחיל לוגיקה מותאמת אישית על אזורים לא ממוזגים

Contents
[ ]

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

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

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

ההיגיון שיש להחיל על כל אזור מוגדר בתוך מחלקה שמיישמת את ממשק IFieldMergingCallback. באותו אופן, ניתן להגדיר מטפל Mail Merge כדי לשלוט באופן שבו כל שדה מתמזג, מטפל זה יכול להיות מוגדר לבצע פעולות על כל שדה באזור שאינו בשימוש או על האזור כולו. בתוך מטפל זה, אתה יכול להגדיר את הקוד לשינוי הטקסט של אזור, הסרת צמתים או שורות ותאים ריקים וכו'.

במדגם זה נשתמש במסמך המוצג להלן. הוא מכיל אזורים מקוננים ואזור הכלול בטבלה.

apply-custom-logic-to-unmerged-regions-aspose-words-java

כהדגמה מהירה, אנו יכולים לבצע מסד נתונים לדוגמה במסמך המדגם כאשר הדגל MailMergeCleanupOptions.REMOVE_UNUSED_REGIONS מופעל. מאפיין זה יסיר באופן אוטומטי אזורים לא ממוזגים מהמסמך במהלך mail merge.

מקור הנתונים כולל שני רשומות עבור האזור StoreDetails אבל בכוונה יש כל נתונים עבור הילד ContactDetails אזורים עבור אחד הרשומות. יתר על כן, גם לאזור Suppliers אין שורות נתונים. זה יגרום לאזורים שאינם בשימוש להישאר במסמך. התוצאה לאחר מיזוג המסמך עם מקור נתונים זה נמצאת למטה.

merged-regions-aspose-words-java

כפי שצוין בתמונה ניתן לראות כי אזור ContactDetails עבור הרשומה השנייה ו Suppliers אזורים הוסרו אוטומטית על ידי מנוע Mail Merge מכיוון שאין להם נתונים. עם זאת, יש כמה בעיות שגורמות למסמך הפלט הזה להיראות לא שלם:

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

הטכניקה המוצגת במאמר זה מדגימה כיצד ליישם לוגיקה מותאמת אישית על כל אזורים לא ממוזגים כדי להימנע מבעיות אלה.

הפתרון

כדי להחיל לוגיקה ידנית על כל אזור שאינו בשימוש במסמך אנו מנצלים את התכונות שכבר זמינות ב Aspose.Words.

מנוע Mail Merge מספק תכונה להסרת אזורים שאינם בשימוש באמצעות דגל MailMergeCleanupOptions.RemoveUnusedRegions. זה יכול להיות מושבת כך אזורים כאלה נשארים ללא שינוי במהלך mail merge. זה מאפשר לנו להשאיר את האזורים הלא ממוזגים במסמך ולטפל בהם ידנית בעצמנו במקום.

לאחר מכן נוכל לנצל את המאפיין MailMerge.FieldMergingCallback כאמצעי ליישום ההיגיון המותאם אישית שלנו על אזורים לא ממוזגים אלה במהלך Mail Merge באמצעות שימוש בכיתת מטפל המיישמת את ממשק IFieldMergingCallback.

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

פרויקט מדגם זה מדגים טכניקה זו. זה כולל את השלבים הבאים:

  1. בצע Mail Merge על המסמך באמצעות מקור הנתונים שלך. הדגל MailMergeCleanupOptions.RemoveUnusedRegions מושבת לעת עתה אנו רוצים שהאזורים יישארו כדי שנוכל לטפל בהם באופן ידני. אזורים ללא נתונים יישארו ללא מיזוג במסמך.
  2. התקשר לשיטת ExecuteCustomLogicOnEmptyRegions. שיטה זו מסופקת במדגם זה. הוא מבצע פעולות המאפשרות להפעיל את המטפל שצוין עבור כל אזור לא ממוזג. שיטה זו ניתנת לשימוש חוזר וניתן להעתיק אותה ללא שינוי לכל פרויקט הדורש אותה (יחד עם כל שיטות תלויות).שיטה זו מבצעת את השלבים הבאים:
    1. מגדיר את המטפל שצוין על ידי המשתמש למאפיין MailMerge.FieldMergingCallback.
    2. קורא לשיטת CreateDataSourceFromDocumentRegions שמקבלת את שמות האזורים של המשתמש Document ו ArrayList המכילים. שיטה זו תיצור מקור נתונים דמה המכיל טבלאות עבור כל אזור לא ממוזג במסמך.
    3. מבצע Mail Merge על המסמך באמצעות מקור נתוני הדמה. כאשר Mail Merge מבוצע עם מקור נתונים זה, הוא מאפשר לקרוא למטפל שצוין על ידי המשתמש עבור כל אזור שאינו מתמזג ולוגיקה המותאמת אישית המיושמת

הקוד

היישום של שיטת ExecuteCustomLogicOnEmptyRegions נמצא להלן. שיטה זו מקבלת מספר פרמטרים:

  1. האובייקט Document המכיל אזורים לא ממוזגים אשר יטופלו על ידי המטפל שעבר.
  2. מחלקת המטפל המגדירה את ההיגיון שיש להחיל על אזורים לא ממוזגים. המטפל הזה חייב ליישם את IFieldMergingCallback ממשק.
  3. באמצעות שימוש בעומס יתר המתאים, השיטה יכולה לקבל גם פרמטר שלישי-רשימת שמות אזורים כמחרוזות. אם זה מצוין, רק שמות האזורים שנותרו במסמך שצוין ברשימה יטופלו ידנית. אזורים אחרים בהם נתקלים לא ייקראו על ידי המטפל ויוסרו אוטומטית. כאשר מצוין עומס יתר עם שני פרמטרים בלבד, כל אזור שנותר במסמך נכלל בשיטה שיש לטפל בה באופן ידני.

דוגמה

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

דוגמה

מגדיר את השיטה המשמשת לטיפול ידני באזורים לא ממוזגים.

שיטה זו כוללת מציאת כל האזורים הלא ממוזגים במסמך. זה נעשה באמצעות שיטת MailMerge.GetFieldNames. שיטה זו מחזירה את כל שדות המיזוג במסמך, כולל סמני ההתחלה והסיום של האזור (המיוצגים על ידי שדות מיזוג עם הקידומת TableStart או TableEnd).

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

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

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

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

דוגמה

מראה כיצד לטפל באזורים לא ממוזגים לאחר Mail Merge עם קוד מוגדר על ידי המשתמש.

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

ההיגיון של האזור ContactDetails כולל שינוי הטקסט של כל שדה באזור ContactDetails עם הודעה מתאימה המציינת שאין נתונים. השמות של כל שדה מתאימים בתוך המטפל באמצעות המאפיין FieldMergingArgs.FieldName.

תהליך דומה מוחל על אזור Suppliers בתוספת קוד נוסף לטיפול בטבלה המכילה את האזור. הקוד יבדוק אם האזור נמצא בטבלה (כפי שהוא כבר הוסר). אם כן, הוא יסיר את כל הטבלה מהמסמך, כמו גם את הפסקה שקדמה לה כל עוד היא מעוצבת בסגנון כותרת, למשל “Heading 1”.

דוגמה

מראה כיצד להגדיר לוגיקה מותאמת אישית במטפל המיישם IFieldMergingCallback המבוצע עבור אזורים לא ממוזגים במסמך.

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

apply-custom-logic-to-unmerged-regions-aspose-words-java-2

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

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

הטקסט החלופי ממוזג לשדה הראשון על ידי הגדרת הטקסט שצוין למאפיין FieldMergingArgs.Text. הטקסט ממאפיין זה מוזג לשדה על ידי מנוע Mail Merge.

הקוד מיישם זאת רק עבור השדה הראשון באזור על ידי בדיקת המאפיין FieldMergingArgs.FieldValue. ערך השדה של השדה הראשון באזור מסומן ב " FirstField". זה מקל על יישום סוג זה של לוגיקה באזורים רבים מכיוון שאין צורך בקוד נוסף.

דוגמה

מראה כיצד להחליף אזור שאינו בשימוש בהודעה ולהסיר פסקאות נוספות.

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

apply-custom-logic-to-unmerged-regions-aspose-words-java-3

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

דוגמה

מראה כיצד למזג את כל תאי האב של אזור שאינו בשימוש ולהציג הודעה בטבלה.

המסמך שהתקבל לאחר ביצוע הקוד לעיל מוצג להלן.

apply-custom-logic-to-unmerged-regions-aspose-words-java-4

לבסוף, אנו יכולים לקרוא לשיטת ExecuteCustomLogicOnEmptyRegions ולציין את שמות הטבלה שיש לטפל בהם בשיטת המטפל שלנו, תוך ציון אחרים להסרה אוטומטית.

דוגמה

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

קריאה לעומס יתר זה עם ArrayList שצוין תיצור את מקור הנתונים המכיל רק שורות נתונים עבור האזורים שצוינו. אזורים שאינם אזור ContactDetails לא יטופלו ויוסרו אוטומטית על ידי מנוע Mail Merge במקום זאת. התוצאה של השיחה לעיל באמצעות הקוד המטפל המקורי שלנו מוצג להלן.

apply-custom-logic-to-unmerged-regions-aspose-words-java-5