أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية تشفير وفك تشفير ملف مرفق برمجياً باستخدام Visual C# في InfoPath 2003

انتهاء دعم Office 2003

لقد أنهت شركة Microsoft دعم Office 2003 في 8 أبريل، 2014. وقد أثر هذا التغيير على تحديثات البرامج لديك وخيارات الأمان الخاصة بك. تعرف على ما يعنيه ذلك فيما يتعلق بك وكيفية الحفاظ على حمايتك.

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية892730
الموجز
في Microsoft Office InfoPath 2007 أو في Microsoft Office InfoPath 2003 Service Pack 1 (SP1)، يمكنك استخدام ملف مرفق التحكم إرفاق ملف بقالب نموذج InfoPath. في ظروف محددة، قد تحتاج إلى ترميز ومن ثم فك تشفير الملف المرفق به ملف مرفق عنصر التحكم. في هذه الحالة، يمكنك استخدام Microsoft Visual C# لإنشاء أداة ترميز فئة و a وحدة فك ترميز فئة. وبعد ذلك، يمكنك استخدام أداة ترميز فئة و وحدة فك ترميز فئة ترميز وفك ترميز الملف مرفق.
مقدمة حول
يقدم هذا المقال كيفية ترميز وفك ترميز ملف مرفق برمجياً باستخدام Microsoft Visual C# في InfoPath 2003. للحصول على معلومات حول كيفية القيام بذلك في InfoPath 2010 أو في InfoPath 2007، راجع التالي على الويب: كيفية تشفير وفك تشفير ملف مرفق برمجياً باستخدام Visual C# في InfoPath 2010 أو في InfoPath 2007.
معلومات أخرى
تقدم Microsoft الأمثلة البرمجية التوضيح فقط، دون أي ضمان صريح أو ضمني. وهذا يتضمن، ولكن غير محدودة للضمانات الضمنية الخاصة بالتسويق أو الملاءمة لمعينه الغرض. تفترض هذه المقالة أنك معتاد مع البرمجة اللغة التي يتم شرحها والأدوات التي يتم استخدامها لإنشاء الإجراءات وتصحيحها. مهندسي دعم Microsoft تساعد تفسير وظيفة إجراء محدد، ولكن لن يقوموا بتعديل هذه الأمثلة على توفير الوظيفة الإضافية أو إنشاء إجراءات تستوفي الخاص بك المتطلبات المحددة.

إنشاء مشروع Visual C# InfoPath 2003

  1. بدء تشغيل Microsoft Visual Studio.NET 2003.
  2. على ملف القائمة، انقر فوقجديد، ثم انقر فوق المشروع.
  3. في مشروع جديد مربع الحوار، انقر فوقمشاريع visual C# في Microsoft Office InfoPath المشاريع مجلد.
  4. في اسم ، اكتبأتتاتشمينتينكودينج، ثم انقر فوقموافق.
  5. في معالج Project Microsoft Office، انقر فوقإنشاء قالب نموذج جديد، ثم انقر فوقتاريخ الانتهاء.

    ينشئ معالج Microsoft Office Project جديد Visual Studio.NET 2003 مشروع يسمى أتتاتشمينتينكودينج. ما يتم أيضا إنشاء قالب نموذج InfoPath. قالب نموذج InfoPath يسمى أتتاتشمينتينكودينج.

إنشاء فئة وحدة ترميز في Visual Studio.NET 2003

  1. في "مستكشف الحلول"، انقر نقراً مزدوجاً فوقأتتاتشمينتينكودينج، أشر إلى إضافة، وبعد ذلك انقر فوق إضافة عنصر جديد.
  2. في إضافة عنصر جديد مربع الحوار، انقر فوقفئة في قالب جزء، نوعInfoPathAttachmentEncoder.cs فياسم مربع، ومن ثم انقر فوق فتح.
  3. استبدال كافة التعليمات البرمجية في InfoPathAttachmentEncoder.cs ملف التعليمات البرمجية التالية.
    using System;using System.IO;using System.Text;using System.Security.Cryptography;namespace InfoPathAttachmentEncoding{	/// <summary>	/// InfoPathAttachment encodes file data into the format expected by InfoPath for use in file attachment nodes.	/// </summary>	public class InfoPathAttachmentEncoder	{		private string base64EncodedFile = string.Empty;		private string fullyQualifiedFileName;		/// <summary>		/// Creates an encoder to create an InfoPath attachment string.		/// </summary>		/// <param name="fullyQualifiedFileName"></param>		public InfoPathAttachmentEncoder(string fullyQualifiedFileName)		{			if (fullyQualifiedFileName == string.Empty)				throw new ArgumentException("Must specify file name", "fullyQualifiedFileName");			if (!File.Exists(fullyQualifiedFileName))				throw new FileNotFoundException("File does not exist: " + fullyQualifiedFileName, fullyQualifiedFileName);			this.fullyQualifiedFileName = fullyQualifiedFileName;		}		/// <summary>		/// Returns a Base64 encoded string.		/// </summary>		/// <returns>String</returns>		public string ToBase64String()		{			if (base64EncodedFile != string.Empty)				return base64EncodedFile;			// This memory stream will hold the InfoPath file attachment buffer before Base64 encoding.			MemoryStream ms = new MemoryStream();			// Get the file information.			using (BinaryReader br = new BinaryReader(File.Open(fullyQualifiedFileName, FileMode.Open, FileAccess.Read, FileShare.Read)))			{				string fileName = Path.GetFileName(fullyQualifiedFileName);				uint fileNameLength = (uint)fileName.Length + 1;				byte[] fileNameBytes = Encoding.Unicode.GetBytes(fileName);				using (BinaryWriter bw = new BinaryWriter(ms))				{					// Write the InfoPath attachment signature. 					bw.Write(new byte[] { 0xC7, 0x49, 0x46, 0x41 });					// Write the default header information.					bw.Write((uint)0x14);	// size					bw.Write((uint)0x01);	// version					bw.Write((uint)0x00);	// reserved					// Write the file size.					bw.Write((uint)br.BaseStream.Length);					// Write the size of the file name.					bw.Write((uint)fileNameLength);					// Write the file name (Unicode encoded).					bw.Write(fileNameBytes);					// Write the file name terminator. This is two nulls in Unicode.					bw.Write(new byte[] {0,0});					// Iterate through the file reading data and writing it to the outbuffer.					byte[] data = new byte[64*1024];					int bytesRead = 1;					while (bytesRead > 0)					{						bytesRead = br.Read(data, 0, data.Length);						bw.Write(data, 0, bytesRead);					}				}			}			// This memorystream will hold the Base64 encoded InfoPath attachment.			MemoryStream msOut = new MemoryStream();			using (BinaryReader br = new BinaryReader(new MemoryStream(ms.ToArray())))			{				// Create a Base64 transform to do the encoding.				ToBase64Transform tf = new ToBase64Transform();				byte[] data = new byte[tf.InputBlockSize];				byte[] outData = new byte[tf.OutputBlockSize];				int bytesRead = 1;				while (bytesRead > 0)				{					bytesRead = br.Read(data, 0, data.Length);					if (bytesRead == data.Length)						tf.TransformBlock(data, 0, bytesRead, outData, 0);					else						outData = tf.TransformFinalBlock(data, 0, bytesRead);					msOut.Write(outData, 0, outData.Length);				}			}			msOut.Close();						return base64EncodedFile = Encoding.ASCII.GetString(msOut.ToArray());		}	}}

إنشاء فئة وحدة فك ترميز في Visual Studio.NET 2003

  1. في "مستكشف الحلول"، انقر نقراً مزدوجاً فوقأتتاتشمينتينكودينج، أشر إلى إضافة، وبعد ذلك انقر فوق إضافة عنصر جديد.
  2. في إضافة عنصر جديد مربع الحوار، انقر فوقفئة في قالب جزء، نوعInfoPathAttachmentDecoder.cs فياسم مربع، ومن ثم انقر فوق فتح.
  3. استبدال كافة التعليمات البرمجية في InfoPathAttachmentDecoder.cs ملف التعليمات البرمجية التالية.
    using System;using System.IO;using System.Text;namespace InfoPathAttachmentEncoding{	/// <summary>	/// Decodes a file attachment and saves it to a specified path.	/// </summary>	public class InfoPathAttachmentDecoder	{		private const int SP1Header_Size = 20;		private const int FIXED_HEADER = 16;		private int fileSize;		private int attachmentNameLength;		private string attachmentName;		private byte[] decodedAttachment;		/// <summary>		/// Accepts the Base64 encoded string		/// that is the attachment.		/// </summary>		public InfoPathAttachmentDecoder(string theBase64EncodedString)		{			byte [] theData = Convert.FromBase64String(theBase64EncodedString);			using(MemoryStream ms = new MemoryStream(theData))			{				BinaryReader theReader = new BinaryReader(ms);							DecodeAttachment(theReader);			}		}		private void DecodeAttachment(BinaryReader theReader)		{			//Position the reader to get the file size.			byte[] headerData = new byte[FIXED_HEADER];			headerData = theReader.ReadBytes(headerData.Length);			fileSize = (int)theReader.ReadUInt32();			attachmentNameLength = (int)theReader.ReadUInt32() * 2;						byte[] fileNameBytes = theReader.ReadBytes(attachmentNameLength);			//InfoPath uses UTF8 encoding.			Encoding enc = Encoding.Unicode;			attachmentName = enc.GetString(fileNameBytes, 0, attachmentNameLength - 2);			decodedAttachment = theReader.ReadBytes(fileSize);		}		public void SaveAttachment(string saveLocation)		{			string fullFileName = saveLocation;			if(!fullFileName.EndsWith(Path.DirectorySeparatorChar))			{				fullFileName += Path.DirectorySeparatorChar;			}			fullFileName += attachmentName;			if(File.Exists(fullFileName))				File.Delete(fullFileName);						FileStream fs = new FileStream(fullFileName, FileMode.CreateNew);			BinaryWriter bw = new BinaryWriter(fs);			bw.Write(decodedAttachment);			bw.Close();			fs.Close();		}		public string Filename		{			get{ return attachmentName; }		}		public byte[] DecodedAttachment		{			get{ return decodedAttachment; }		}	}	}

إضافة عنصر تحكم "الملف المرفق" وعنصر تحكم "مربع نص" إلى نموذج InfoPath

  1. في قالب نموذج InfoPath أتتاتشمينتينكودينج، انقر فوق عناصر التحكم في مهام التصميم المهمة الجزء.
  2. في عناصر التحكمجزء المهام، انقر فوقملف مرفق ضمنإدراج عناصر التحكم.
  3. زر الماوس الأيمن ملف مرفق عنصر تحكم، ومن ثم انقر فوق خصائص ملحق الملف.
  4. في خصائص ملحق الملف حوار ، اكتب theAttachmentField في حقل اسم مربع، ومن ثم انقر فوق موافق.
  5. في عناصر التحكمجزء المهام، انقر فوقمربع نص ضمنإدراج عناصر التحكم.
  6. زر الماوس الأيمن مربع نص عنصر تحكم، وبعد ذلك انقر فوق خصائص مربع النص.
  7. في خصائص مربع النص مربع الحوار نوع theAttachmentName في حقل اسم مربع، ومن ثم انقر فوق موافق.

إضافة زر إرفاق نموذج InfoPath

  1. في عناصر التحكمجزء المهام، انقر فوقزر ضمنإدراج عناصر التحكم.
  2. انقر نقراً مزدوجاً فوق الجديدة زر عنصر تحكم، و ثم انقر فوق خصائص الزر.
  3. في خصائص الزر مربع الحوار، نوعإرفاق في تسمية ، اكتببتناتاتش في معرف مربع، ومن ثم انقر فوقتحرير التعليمات البرمجية للنموذج.
  4. إضافة التعليمة البرمجية التالية داخل btnAttach_OnClick أسلوب.
    //Get a reference to the attachment node.IXMLDOMNode theAttachmentNode = thisXDocument.DOM.selectSingleNode("my:myFields/my:theAttachmentField");//Get a reference to the filename node.IXMLDOMNode fileNameNode = thisXDocument.DOM.selectSingleNode("my:myFields/my:theAttachmentName");//Get the text of the node.String fileName = fileNameNode.text;if(fileName.Length > 0){	//Encode the file and assign it to the attachment node.	InfoPathAttachmentEncoding.Encoder myEncoder = new InfoPathAttachmentEncoding.Encoder(fileName);	if(theAttachmentNode.attributes.getNamedItem("xsi:nil") != null)		theAttachmentNode.attributes.removeNamedItem("xsi:nil");	theAttachmentNode.text = myEncoder.ToBase64String();}	

إضافة زر حفظ إلى نموذج InfoPath

  1. قم بالتبديل إلى نموذج InfoPath أتتاتشمينتينكودينج قالب.
  2. في عناصر التحكمجزء المهام، انقر فوقزر ضمنإدراج عناصر التحكم.
  3. انقر نقراً مزدوجاً فوق الجديدة زر عنصر تحكم، و ثم انقر فوق خصائص الزر.
  4. في خصائص الزر مربع الحوار، نوعحفظ في تسمية ، اكتببتنسافي في معرف مربع، ومن ثم انقر فوقتحرير التعليمات البرمجية للنموذج.
  5. إضافة التعليمة البرمجية التالية داخل _OnClick بتنسافي أسلوب.
    //Get a reference to the attachment node.IXMLDOMNode n = thisXDocument.DOM.selectSingleNode("my:myFields/my:theAttachmentField");//Get the text of the node.String theAttachment = n.text;if(theAttachment.Length > 0){	InfoPathAttachmentEncoding.Decoder myDecoder = new InfoPathAttachmentEncoding.Decoder(theAttachment);	myDecoder.SaveAttachment(@"<Path to save the file>");}			
    ملاحظة في هذه التعليمات البرمجية، استبدل <Path to="" save="" the="" file=""></Path> باستخدام الموقع حيث تريد حفظ ملف.

تأكد من أن قالب نموذج InfoPath موثوق به ثقة كاملة

قبل يمكنك اختبار هذا النموذج قالب نموذج InfoPath يجب أن تكون موثوق به ثقة كاملة. يمكنك استخدام إحدى الطرق التالية للتأكد يتم قالب نموذج InfoPath كامل الثقة:
  • استخدم Microsoft.الأداة المساعدة لتكوين NET Framework 1.1 لمنح أذونات "ثقة كاملة" فقط للتعليمات البرمجية Visual C#.
  • استخدام الأداة المساعدة RegForm من برنامج InfoPath تطوير Kit (SDK) لجعل النموذج نموذج ذو ثقة كاملة. يمنح ذلك كامل الثقة بأذونات للتعليمات البرمجية Visual C#.
  • استخدام شهادة توقيع التعليمات البرمجية للنموذج رقمياً ملف قالب (.xsn). عند استخدام شهادة توقيع التعليمات البرمجية للتوقيع الرقمي ملف قالب النموذج، تتم مطالبة المستخدمين بالثقة بالنموذج عند قيامهم بفتح النموذج. هذا يجعل النموذج موثوق به ثقة كاملة. ولذلك، تكون الأذونات "الثقة الكاملة" منح للتعليمات البرمجية Visual C#.
  • استخدام IPFullTrust ماكرو من SDK InfoPath لجعل النموذج ثقة النموذج. علامة IPFullTrust أتمتة الماكرو إعداد ملف البيان (.xsf) والنموذج ملف قالب في المشروع InfoPath لثقة كاملة، وبعد ذلك IPFullTrust تسجيل ماكرو تلقائياً في قالب النموذج.

    من أجل مزيد من المعلومات حول كيفية تثبيت واستخدام الماكرو، قم بزيارة التالي موقع ويب Microsoft Developer Network (MSDN):
  • استخدام الأتمتة الخارجية في InfoPath للاتصال RegisterSolution أسلوب. نموذجياً، يتم استخدام هذا الأسلوب فقط لتطوير النموذج لأن نموذج مسجلة تسجيلات فقط على كمبيوتر فردي. لأي نماذج إضافية، يجب تسجيل المستخدمين الآخرين نماذج إضافية بمفردها أجهزة الكمبيوتر. لا ننصح هذا الأسلوب لنماذج إضافية. من المستحسن أي من الطرق السابقة عندما تقوم بنشر النموذج.
لأن هذا النموذج قيد التطوير النموذج، يمكنك استخدام أسلوب آخر. للقيام بذلك، حدد نموذج InfoPath أتتاتشمينتينكودينج قالب، ثم اتبع الخطوات التالية:
  1. على أدوات القائمة، انقر فوق نموذج خيارات.
  2. انقر فوق أمان من علامة التبويب.
  3. انقر لإلغاء تحديد تحديد الأمان تلقائياً مستوى استناداً إلى تصميم النموذج (مستحسن) خانة الاختيار.

    ملاحظة يتعذر على InfoPath تلقائياً اكتشاف منطق تسلسل العمل التي يتطلب أذونات "ثقة كاملة". ولذلك، يجب أن وضوح منح كامل الثقة بالأذونات.
  4. انقر فوق ثقة كاملة، ثم انقر فوقموافق.
  5. قم بإغلاق قالب نموذج InfoPath أتتاتشمينتينكودينج. إذا تم مطالبتك بحفظ التغييرات، انقر فوق نعم.

    ملاحظة لم يتم إغلاق Visual Studio.NET 2003 المشروع.
  6. في Visual Studio.NET 2003، انقر نقراً مزدوجاً فوقManifest.xsf الملف في "مستكشف الحلول". الملف Manifest.xsf فتح.
  7. في عقده الجذر، حدد موقع publishUrl سمة. إزالة publishUrl السمة والقيمة publishUrl سمة.
  8. حفظ التغييرات الخاصة بك، ثم قم بإغلاق Manifest.xsf ملف.
  9. انقر فوق بدء تشغيل، انقر فوق تشغيل, نوع برنامج "المفكرة"، ثم انقر فوقموافق.
  10. إضافة التعليمة البرمجية التالية إلى ملف نص فارغ.
    oApp = WScript.CreateObject("InfoPath.ExternalApplication");strAbsolutePath = "<project_folder_url>\\Manifest.xsf";oApp.RegisterSolution(strAbsolutePath,"overwrite"); 
    ملاحظة في هذه التعليمات البرمجية، استبدل<project_folder_url></project_folder_url> باستخدام المسار الملف Manifest.xsf في مجلد المشروع الخاص بك. تذكر للهروب المسار الملف Manifest.xsf. يجب استبدال كل واحد مائلة عكسية () في المسار باستخدام شرطتين مائلتين عكسيتين (\).
  11. حفظ الملف Manifest.xsf على الكمبيوتر كما الملف Register.js.
  12. للاتصال RegisterSolution أسلوب، انقر نقراً مزدوجاً فوق Register.js الملفات التي يمكنك إنشاء.

اختبار النموذج

  1. في أتتاتشمينتينكودينج Visual Studio.NET 2003 المشروع، انقر فوق بدء تشغيل على تصحيح الأخطاء القائمة. يؤدي هذا إلى تشغيل نموذج InfoPath في وضع المعاينة.
  2. في نموذج InfoPath، اكتب مسار الملف الذي الذي تريد إرفاقه في مربع النص، ثم انقر فوقإرفاق.

    ملاحظة انقر نقراً مزدوجاً فوق ملف مرفق عنصر التحكم تحقق من أن يتم ترميز الملف بشكل صحيح.
  3. انقر فوق حفظ. تحديد موقع المسار الذي قمت المتوفرة في "إضافة حفظ زر لنموذج InfoPath " مقطع.
  4. لإنهاء الاختبار، انقر فوق إغلاق معاينة.
مراجع
لمزيد من المعلومات حول رأس الملف المرفق تنسيق، قم بزيارة موقع "msdn على ويب" التالية:
IP2003

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 892730 - آخر مراجعة: 03/05/2012 16:56:00 - المراجعة: 0.1

Microsoft Office InfoPath 2003

  • kbcode kbscript kbsample kbxml kbprogramming kbhowto kbmt KB892730 KbMtar
تعليقات
html>/html>ppendChild(m); dy>