סיכום
מפתחים יכולים להשתמש באוטומציה ב- Microsoft Office כדי לבנות פתרונות מותאמים אישית המשתמשים ביכולות ובתכונות המוכללות במוצר Office. למרות שניתן ליישם פיתוח תוכניתי כזה במערכת לקוח בקלות יחסית, מספר סיבוכים עשויים להתרחש אם אוטומציה מתרחשת מקוד בצד השרת, כגון Microsoft Active Server Pages (ASP), ASP.NET, DCOM או שירות Windows NT.
מאמר זה מתאר את הסיבוכים שמפתחים עשויים להתמודד אתם. המאמר מציע גם חלופות לאוטומציה שעשויה להאיץ את הביצועים. עם זאת, מפתחים צריכים להיות מודעים לכך שההצעות שמאמר זה מספק מיועדות למטרות מידע בלבד. Microsoft אינה ממליצה או תומכת באוטומציה של Office בצד השרת.הערה: בהקשר זה, מנגנון מסד הנתונים של Access להפצה חוזרת ו- Access Runtime נחשבים לרכיבי Microsoft Office. המונח "צד השרת" חל גם על קוד הפועל בתחנת עבודה של Windows, אם הקוד פועל בתחנת עבודה של Windows שאינה התחנה האינטראקטיבית של המשתמש המחובר. לדוגמה, קוד המופעל על-ידי מתזמן המשימות תחת חשבון המערכת פועל באותה סביבה שבה פועל קוד ASP "בצד השרת" או כקוד DCOM. לכן, רבות מהבעיות שמתאר מאמר זה עלולות להתרחש. לקבלת מידע נוסף אודות תחנות עבודה של Windows ועל COM, עיין בסעיף 'מידע נוסף' ובסעיף 'הפניות'.
מידע נוסף
כל הגירסאות הנוכחיות של Microsoft Office תוכנו, נבדקו ומוגדר לפעול כמוצרי משתמשי קצה בתחנת עבודה של לקוח. הם מניחים שפרופיל שולחן עבודה ופרופיל משתמש אינטראקטיביים. הם אינם מספקים את רמת הכניסה מחדש או האבטחה הדרושה כדי לעמוד בצרכים של רכיבים בצד השרת המיועדים לפעול ללא השגחה.
Microsoft אינה ממליצה בשלב זה, והיא אינה תומכת באוטומציה של יישומי Microsoft Office מכל יישום לקוח או רכיב לקוח ללא השגחה שאינם אינטראקטיביים (כולל ASP, ASP.NET, DCOM ו- NT Services), מכיוון ש- Office עלול לגרום לאי-יציבות של אופן פעולה ו/או מבוי סתום כאשר Office פועל בסביבה זו. אם אתה בונה פתרון שפועל בהקשר בצד השרת, עליך לנסות להשתמש ברכיבים שהופעלו כבטוחים לביצוע ללא התערבות. לחלופין, עליך לנסות למצוא חלופות המאפשרות לפחות חלק מהקוד להפעיל בצד הלקוח. אם אתה משתמש ביישום של Office מפתרון בצד השרת, ליישום לא יהיו רבות מהיכולות הדרושות כדי לפעול בהצלחה. בנוסף, אתה תסתכן ביציבות של הפתרון הכולל שלך.בעיות בשימוש באוטומציה בצד השרת של Office
מפתחים שמנסים להשתמש ב- Office בפתרון בצד השרת צריכים להיות מודעים לחמישה תחומים עיקריים שבהם Office פועל באופן שונה מהצפוי עקב הסביבה. אם הקוד שלך פועל בהצלחה, עליך לטפל בבעיות אלה ולמזער את השפעתן ככל האפשר. שקול בעיות אלה בזהירות בעת בניית היישום. לפתרון אחד אין אפשרות לטפל בכל הבעיות. עיצובים שונים מחייבים אותך לקבוע סדרי עדיפויות שונים של הרכיבים.
-
זהות משתמש: יישומי Office מניחים זהות משתמש בעת הפעלת היישומים, גם כאשר אוטומציה מפעילה את היישומים. היישומים מנסים לאתחל סרגלי כלים, תפריטים, אפשרויות, מדפסות והתוספות מסוימות בהתבסס על הגדרות בכוורת הרישום של המשתמש עבור המשתמש שמפעיל את היישום. שירותים רבים פועלים תחת חשבונות שאין להם פרופילי משתמשים (כגון חשבון SYSTEM או חשבון IWAM_[servername]). לכן, ייתכן ש- Office לא מאותחל כראוי בעת ההפעלה. במצב זה, Office מחזיר שגיאה בפונקציה CreateObject או בפונקציה CoCreateInstance. גם אם ניתן להתחיל את יישום Office, ייתכן שפונקציות אחרות לא יפעלו כראוי אם לא קיים פרופיל משתמש.
-
אינטראקטיביות עם שולחן העבודה: יישומי Office מניחים שהם מופעלים תחת שולחן עבודה אינטראקטיבי. בנסיבות מסוימות, ייתכן שיהיה צורך להציג אפליקציות כדי שפונקציות אוטומציה מסוימות יפעלו כראוי. אם מתרחשת שגיאה בלתי צפויה, או אם נדרש פרמטר שלא צוין כדי להשלים פונקציה, Office נועד לבקש מהמשתמש תיבת דו-שיח מודאלית ה שואלת את המשתמש מה המשתמש רוצה לעשות. אין אפשרות לבטל תיבת דו-שיח מודאלית בשולחן עבודה לא אינטראקטיבי. לכן, רצף תגובות זה מפסיק להגיב (נתקע) לזמן בלתי מוגבל. על אף ששיטות קידוד מסוימות יכולות לסייע בהפחתת הסבירות לבעיה זו, שיטות עבודה אלה אינן יכולות למנוע את הבעיה לחלוטין. עובדה זו לבדה הופכת את הפעלת יישומי Office מתוך סביבה בצד השרת לסכנה שאינה נתמכת.
-
כניסה מחדש ומדרגיות: רכיבים בצד השרת צריכים להיות רכיבים בעלי ריבוי הליכי משנה של COM בעלי תפוקה מינימלית ותפוקה גבוהה עבור לקוחות מרובים. יישומי Office הם כמעט כולם מכבדים את ההיפך המדוייק. יישומי Office הם שרתי אוטומציה מבוססי STA שאינם entrant, המיועדים לספק פונקציונליות מגוונת אך עתירת משאבים עבור לקוח יחיד. היישומים מציעים מדרגיות מועטה יותר כפתרון בצד השרת. בנוסף, ליישומים יש מגבלות קבועות לרכיבים חשובים, כגון זיכרון. אין אפשרות לשנות פריטים אלה באמצעות קביעת התצורה. וחשוב יותר, היישומים משתמשים במשאבים כלליים כגון קבצים ממופים של זיכרון, תוספות או תבניות כלליות ושרתי אוטומציה משותפים. פעולה זו יכולה להגביל את מספר המופעים שעלולים לפעול בו-זמנית ולהוביל למצבי מירוץ אם היישומים מוגדרים בסביבה מרובת לקוחות. מפתחים שבכוונתם להפעיל יותר ממופע אחד של כל יישום Office בו-זמנית צריכים לשקול "מאגר" או עריכה בסידרה של הגישה ליישום Office כדי למנוע מבוי סתום פוטנציאליים או השחתת נתונים.
-
יציבות ויציבות: Office 2000, Office XP, Office 2003 ו- Office 2007 משתמשים בטכנולוגיית Microsoft Windows Installer (MSI) כדי להפוך את ההתקנה והתיקון העצמי לקלים יותר עבור משתמש קצה. MSI מציג את הרעיון של "התקנה בשימוש הראשון". הדבר מאפשר התקנה או קביעת תצורה דינאמית של תכונות בזמן ריצה עבור המערכת, או לעתים קרובות יותר עבור משתמש מסוים. בסביבה בצד השרת, פעולה זו מאטה את הביצועים ומגדילה את הסבירות שתופיע תיבת דו-שיח שמתבקשת מהמשתמש לאשר את ההתקנה או לספק דיסק התקנה. אף על פי שבעיה זו נועדה להגדיל את התאימות של Office כמוצר למשתמשי קצה, יישום יכולות MSI של Office אינו פרודוקטיבי בסביבה בצד השרת. יתר על כן, היציבות של Office באופן כללי אינה מובטחת כאשר Office פועל בצד השרת מכיוון שהוא לא תוכנן או נבדק עבור סוג זה של שימוש. השימוש ב- Office כרכיב שירות בשרת רשת עשוי להפחית את היציבות של מחשב זה, ולכן עשוי להפחית את היציבות של הרשת כולה.
-
אבטחה בצד השרת: יישומי Office מעולם לא נועדו לשימוש בצד השרת. לכן, יישומי Office אינם לוקחים בחשבון את בעיות האבטחה להתמודדות עם רכיבים מבוזרות. Office אינו מאמת בקשות נכנסות. בנוסף, Office אינו מגן עליך מפני הפעלת פקודות מאקרו שלא במתן מכוון, או מפני הפעלת שרת אחר שעשוי להפעיל פקודות מאקרו, מהקוד בצד השרת. אל תפתח קבצים המועלים לשרת מאתר אינטרנט אנונימי. בהתבסס על הגדרות האבטחה שהוגדרו לאחרונה, השרת יכול להפעיל פקודות מאקרו תחת הקשר מנהל מערכת או מערכת עם הרשאות מלאות, ולכן הוא יכול לסכן את הרשת שלך. בנוסף, Office משתמש ברכיבים רבים בצד הלקוח (כגון Simple MAPI, WinInet ו- MSDAIPP) ה יכולים מטמון מידע אימות לקוח כדי להאיץ את העיבוד. אם Office נמצא במצב אוטומטי בצד השרת, מופע אחד עשוי לשרת יותר מלקוח אחד. אם פרטי האימות אוחסנו במטמון עבור הפעלה זו, לקוח אחד יכול להשתמש באישורים המאוחסנים במטמון של לקוח אחר. לכן, הלקוח עשוי לקבל הרשאות גישה שאינן מוענקות על-ידי התחזות למשתמשים אחרים.
מלבד הבעיות הטכניות, עליך לשקול גם בעיות רישוי. קווים מנחים נוכחיים לרישוי מונעים את השימוש ביישומי Office בשרת לבקשות לקוח לשירות, אלא אם ללקוחות אלה יש עותקים של Office עצמם ברשיון. שימוש באוטומציה בצד השרת כדי לספק פונקציונליות של Office לתחנות עבודה ללא רשיון אינו מכוסה על-ידי הסכם הרשיון למשתמש קצה (EULA).
בנוסף לבעיות אלה, אחת מהשגיאות הנפוצות הבאות עשויה להתרחש כאשר אתה מנסה להפוך את Office בצד השרת לאוטומטי:-
הפונקציה CreateObject והפונקציה CoCreateInstance מחזירות אחת מהודעות השגיאה הבאות של זמן ריצה ולא ניתן להפעיל אותן עבור אוטומציה.
הודעה 1
שגיאת זמן ריצה '429': לרכיב ActiveX אין אפשרות ליצור אובייקט
הודעה 2
שגיאת זמן ריצה '70': ההרשאה נדחתה
הודעה 3
CO_E_SERVER_EXEC_FAILURE (0x80080005): ביצוע השרת נכשל
הודעה 4
E_ACCESSDENIED (0x80070005): הגישה נדחתה
-
בעת פתיחת מסמך Office, אתה מקבל אחת מהודעות השגיאה הבאות.
הודעה 1
שגיאת זמן ריצה '5981' (0x800A175D): לא היתה אפשרות לפתוח אחסון מאקרו
הודעה 2
שגיאת זמן ריצה '1004': פעולת השירות '~' של האובייקט '~' נכשלה
-
הפונקציה CreateObject והפונקציה CoCreateInstance מפסיקות להגיב ולעולם לא מסיימות, או לוקחות זמן רב לחזור. בשרתים מסוימים, היצירה מהירה, אך מופיעות 1004 שגיאות ביומן האירועים של Windows שמציינות שהיישום הופסק.
-
פונקציות מסוימות נכשלות באופן בלתי צפוי או מפסיקות להגיב לזמן בלתי מוגבל עקב התראת משתמש או תיבת דו-שיח אחרת הדורשת את תשומת הלב של המשתמש.
-
הפעלת בקשות מרובות או בדיקת מאמץ גורמת לקוד להיכשל, להפסיק להגיב או לקרוס בעת יצירה או סיום של יישום Office. כאשר הדבר מתרחש, התהליך נותר פועל בזיכרון ואין אפשרות לסיים אותו, או כל המופעים של היישום שמתבצעת כעת כשל אוטומטי מנקודה זו פועלים.
בעיות או הודעות אחרות עשויות להופיע בנוסף לבעיות המפורטות כאן, אך בעיות אלה מתרחשות בדרך כלל כתוצאה מחמש הבעיות העיקריות המפורטות לעיל במאמר זה.
חלופות לאוטומציה בצד השרת
Microsoft ממליצה מאוד למפתחים למצוא חלופות לאוטומציה של Office אם עליהם לפתח פתרונות בצד השרת. עקב המגבלות על העיצוב של Office, שינויים בתצורה של Office אינם מספיקים כדי לפתור את כל הבעיות. Microsoft ממליצה בחום על מספר חלופות שאינן דורשות התקנה של Office בצד השרת, וביצוע המשימות הנפוצות ביותר הוא יעיל יותר ובמהירות רבה יותר מאשר אוטומציה. לפני שתערב את Office כרכיב בצד השרת בפרוייקט שלך, שקול להשתמש בחלופות.
רוב משימות האוטומציה בצד השרת כוללות יצירה או עריכה של מסמכים. Office 2007 תומך בתבניות קובץ חדשות של Open XML, כדי לאפשר למפתחים ליצור, לערוך, לקרוא ולהמיר תוכן קבצים בצד השרת. תבניות קובץ אלה משתמשות System.IO.Package.IO שמות ב- Microsoft .NET 3.x Framework כדי לערוך קבצי Office מבלי להשתמש ביישומי הלקוח של Office עצמם. זוהי השיטה המומלצת והשיטה הנתמכת לטיפול בשינויים בקבצי Office מתוך שירות. תבניות הקובץ Open XML הן תקן ציבורי.Microsoft מספקת SDK לטיפול בתבניות קובץ Open XML מ- .NET 3.x Framework. לקבלת מידע נוסף על SDK ועל אופן השימוש ב- SDK כדי ליצור או לערוך קבצי Open XML, בקר באתרי האינטרנט הבאים של Microsoft Developer Network (MSDN):
כיצד לבצע: טיפול בתבניות Office Open XML מסמכים
טיפול בקבצים Word 2007 באמצעות מודל האובייקטים של Open XML (חלק 1 מתוך 3)
טיפול בקבצים Word 2007 באמצעות מודל האובייקטים של Open XML (חלק 2 מתוך 3)
טיפול בקבצים Word 2007 באמצעות מודל האובייקטים של Open XML (חלק 3 מתוך 3)
טיפול בקבצים של Excel 2007 ו- PowerPoint 2007 באמצעות מודל האובייקטים של Open XML (חלק 1 מתוך 2)
טיפול בקבצים של Excel 2007 ו- PowerPoint 2007 באמצעות מודל האובייקטים של Open XML (חלק 2 מתוך 2)
בניית Server-Side יצירת מסמכים באמצעות מודל האובייקטים של Open XML (חלק 1 מתוך 2)
בניית Server-Side יצירת מסמכים באמצעות מודל האובייקטים של Open XML (חלק 2 מתוך 2)
בעת הזרמת קבצי Open XML מ- ASP או מ- ASP.NET, עליך לספק את הסוג הנכון של הרחבת דואר אינטרנט רב-תכליתית (MIME) עבור התוכן שאתה מזרים. לקבלת רשימה של סוגי MIME עבור קבצי Office 2007, בקר באתר האינטרנט הבא:
סוגי MIME בתבנית קובץ של Office 2007 עבור זרימת תוכן HTTP
אם אתה מייעד ללקוחות לפני Office 2007 בלבד, וברצונך לא לדרוש שימוש ב- Open XML בפתרון, באפשרותך להשתמש בתבניות קובץ אחרות שאינן בינאריות של Office, כגון HTML, XML ו- RTF. לאחר מכן תוכל להזרים קבצים אלה ללקוח באמצעות סוג MIME כך שהטקסט המתוצא יופיע ב- Office. ניתן לערוך, לשמור ואף להחזיר את המסמך לשרת באמצעות ASP בשרת.
לקבלת מידע נוסף על אחד מנושאים אלה, ודוגמאות שמציגות כיצד ליישם אותם, לחץ על מספרי המאמרים הבאים כדי להציג את המאמרים מתוך מאגר הידע Microsoft Knowledge Base:198703 כיצד להפוך את Excel מ- VBScript בצד הלקוח לאוטומטי
כיצד לבצע שאילתה ולעדכן נתוני Excel באמצעות ADO מ- ASP
286023 כיצד להשתמש ברכיב ActiveX מסוג VB עבור Word מ- Internet Explorer
אם העסק שלך דורש את היצירה של תבניות הקובץ הבינאריות של Office 97, Office 2000, Office XP ו- Office 2003, ספקים חיצוניים מציעים רכיבים שעשויים לעזור לך. Microsoft אינה מספקת רכיבים אלה, לכן יהיה עליך לבנות פתרון בעצמך או לרכוש פתרון מספק חיצוני. מוצרים רבים של ספקים חיצוניים זמינים. עליך לחקור כל פתרון כדי להתאים באופן הטוב ביותר לספק לצרכים העסקיים שלך.
אם ברצונך לבנות פתרון משלך שעורכים את תבניות הקובץ הבינאריות של Office 97, Office 2000, Office XP ו- Office 2003 ישירות, באפשרותך להשיג את מפרטי תבניות הקובץ ללא תשלום במסגרת התנאים של Microsoft Open Specification Promise (OSP). אין תמיכה טכנית זמינה עבור התיעוד או עבור המוצרים שאתה יוצר, אך התיעוד זמין.
ייתכן גם שפתרונות בצד השרת יאפשרו למשתמשים להעלות קבצים ולאחר מכן לאפשר לשרת לעבד את הקבצים להצגה באינטרנט או באמצעי אחסון אחרים. Microsoft פועלת כעת כדי להציע תכונות אלה ומספקת גירסה מוקדמת של יכולת זו ב- Microsoft Excel Services. Excel Services היא טכנולוגיית שרת חדשה הכלולה ב- Microsoft Office SharePoint Server 2007 ומאפשרת לך לטעון, לחשב ולהציג חוברות עבודה של Excel ב- Office SharePoint Server 2007. לקבלת מידע נוסף אודות Excel Services, בקר באתרי האינטרנט הבאים של Microsoft Developer Network (MSDN):
הדרכה: פיתוח יישום מותאם אישית באמצעות Excel Web Services
יצירת יישומים עסקיים באמצעות תבניות Excel Services ותבניות Office Open XML Word Automation Services הוא יישום שירות חדש ב- SharePoint Server 2010. Word שירותי אוטומציה מספקים המרה ללא התערבות בצד השרת של מסמכים לתבניות הנתמכות על-ידי יישום הלקוח Word Microsoft.
מבט כולל Word על שירותי אוטומציה
היכרות עם Word אוטומציה עליך להעריך אילו מהאפשרויות שמתוארות במאמר זה בהתאם לצרכיך, וכיצד לפרוס את הפתרון בצורה הטובה ביותר. המידע שמאמר זה מספק אינו מובטח לפתרון כל הבעיות עבור כל הלקוחות. מומלץ לבדוק את הפתרון באופן יסודי לפני פריסת הפתרון.