Làm th? nào đ? m? hóa và gi?i m? t?p tin đính kèm t?p tin m?t l?p tr?nh b?ng cách s? d?ng Visual C# InfoPath 2003

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 892730 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Microsoft Office InfoPath 2007 ho?c Microsoft Office InfoPath 2003 Service Pack 1 (SP1), b?n có th? s? d?ng m?t T?p tin đính kèm t?p tin ki?m soát đ? đính kèm m?t t?p tin đ? tiêu b?n m?u InfoPath. Trong trư?ng h?p c? th?, b?n có th? m? hóa và sau đó gi?i m? t?p đư?c đính kèm vào các T?p tin đính kèm t?p tin ki?m soát. Trong trư?ng h?p này, b?n có th? s? d?ng Microsoft Visual C# đ? t?o ra m?t M? hóa l?p h?c và m?t B? gi?i m? l?p h?c. Sau đó, b?n có th? s? d?ng các M? hóa l?p h?c và các B? gi?i m? l?p h?c đ? m? hóa và gi?i m? t?p tin t?p tin đính kèm.

GI?I THI?U

Bài vi?t này gi?i thi?u làm th? nào đ? m? hóa và gi?i m? t?p tin đính kèm t?p tin m?t l?p tr?nh b?ng cách s? d?ng Microsoft Visual C# InfoPath 2003. Đ? có thông tin v? làm th? nào đ? làm đi?u này trong InfoPath 2010 ho?c trong InfoPath 2007, xem các trang web sau đây: Làm th? nào đ? m? hóa và gi?i m? m?t t?p tin đính kèm t?p tin l?p tr?nh b?ng cách s? d?ng Visual C# trong InfoPath 2010 ho?c trong InfoPath 2007.

THÔNG TIN THÊM

Microsoft cung c?p l?p tr?nh ví d? đ? minh ho? không có b?o hành ho?c th? hi?n hay ng? ?. Đi?u này bao g?m, nhưng không gi?i h?n đ? b?o đ?m ng? ? kh? năng bán hàng ho?c cho m?t c? th? m?c đích. Bài vi?t này gi? đ?nh r?ng b?n đ? quen thu?c v?i các chương tr?nh ngôn ng? đư?c ch?ng minh và v?i các công c? đư?c s? d?ng đ? t?o ra và g? l?i th? t?c. Microsoft h? tr? các k? sư có th? giúp gi?i thích các ch?c năng c?a m?t th? t?c c? th?, nhưng h? s? không s?a đ?i các Ví d? đ? cung c?p thêm ch?c năng ho?c xây d?ng quy tr?nh đ? đáp ?ng c?a b?n yêu c?u c? th?.

T?o m?t d? án Visual C# InfoPath 2003

  1. B?t đ?u Microsoft Visual Studio.NET 2003.
  2. Trên các T?p tin tr?nh đơn, nh?p vàoM?i, sau đó b?m D? án.
  3. Trong các D? án m?i h?p tho?i h?p, b?m vàoVisual C# các d? án trong các d? án Microsoft Office InfoPath thư m?c.
  4. Trong các Tên h?p, lo?iAttachmentEncoding, sau đó b?mOk.
  5. Trong thu?t s? d? án văn ph?ng c?a Microsoft, b?mT?o ra m?t m?u h?nh th?c m?i, sau đó b?mK?t thúc.

    Thu?t s? d? án văn ph?ng Microsoft t?o m?t m?i Visual Studio.NET 2003 d? án đư?c đ?t tên AttachmentEncoding. M?t InfoPath d?ng m?u c?ng đư?c t?o ra. Các m?u h?nh th?c InfoPath tên là AttachmentEncoding.

T?o m?t l?p Encoder trong Visual Studio.NET 2003

  1. Trong gi?i pháp Explorer, b?m chu?t ph?i vàoAttachmentEncoding, đi?m đ?n Thêm, và sau đó Nh?p vào Thêm m?c m?i.
  2. Trong các Thêm m?c m?i h?p tho?i h?p, b?m vàoL?p h?c trong các Tiêu b?n c?a s?, lo?iInfoPathAttachmentEncoder.cs trong cácTên h?p, và sau đó nh?p vào M?.
  3. Thay th? t?t c? các m? trong InfoPathAttachmentEncoder.cs t?p tin v?i đo?n m? sau.
    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());
    		}
    	}
    }

T?o m?t b? gi?i m? l?p trong Visual Studio.NET 2003

  1. Trong gi?i pháp Explorer, b?m chu?t ph?i vàoAttachmentEncoding, đi?m đ?n Thêm, và sau đó Nh?p vào Thêm m?c m?i.
  2. Trong các Thêm m?c m?i h?p tho?i h?p, b?m vàoL?p h?c trong các Tiêu b?n c?a s?, lo?iInfoPathAttachmentDecoder.cs trong cácTên h?p, và sau đó nh?p vào M?.
  3. Thay th? t?t c? các m? trong InfoPathAttachmentDecoder.cs t?p tin v?i đo?n m? sau.
    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; }
    		}
    	}	
    }
    
    

Thêm m?t đi?u khi?n t?p tin đính kèm và m?t h?p văn b?n ki?m soát m?u InfoPath

  1. Trong m?u h?nh th?c AttachmentEncoding InfoPath, Nh?p vào Đi?u khi?n trong các Công vi?c thi?t k? nhi?m v? ngăn.
  2. Trong các Đi?u khi?nnhi?m v? ngăn, b?m vàoT?p tin T?p tin đính kèm dư?iChèn đi?u khi?n.
  3. Nh?p chu?t ph?i vào các T?p tin đính kèm t?p tin ki?m soát, và sau đó nh?p vào Thu?c tính t?p đính kèm.
  4. Trong các Thu?c tính t?p đính kèm h?p tho?i h?p, lo?i theAttachmentField trong các L?nh v?c Tên h?p, và sau đó nh?p vào Ok.
  5. Trong các Đi?u khi?nnhi?m v? ngăn, b?m vàoH?p văn b?n dư?iChèn đi?u khi?n.
  6. Nh?p chu?t ph?i vào các H?p văn b?n ki?m soát, và sau đó Nh?p vào Thu?c tính h?p văn b?n.
  7. Trong các Thu?c tính h?p văn b?n h?p tho?i, lo?i theAttachmentName trong các L?nh v?c Tên h?p, và sau đó nh?p vào Ok.

Thêm m?t nút đính kèm vào các h?nh th?c InfoPath

  1. Trong các Đi?u khi?nnhi?m v? ngăn, b?m vàoNút dư?iChèn đi?u khi?n.
  2. Nh?p chu?t ph?i vào các m?i Nút ki?m soát, và sau đó b?m Thu?c tính nút.
  3. Trong các Thu?c tính nút h?p tho?i, lo?iĐính kèm trong các Nh?n hi?u h?p, lo?ibtnAttach trong các ID h?p, và sau đó nh?p vàoCh?nh s?a h?nh th?c m?.
  4. Thêm m? sau vào các btnAttach_OnClick phương pháp.
    //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();
    }	
    

Thêm m?t nút lưu m?u InfoPath

  1. Chuy?n sang h?nh th?c AttachmentEncoding InfoPath m?u.
  2. Trong các Đi?u khi?nnhi?m v? ngăn, b?m vàoNút dư?iChèn đi?u khi?n.
  3. Nh?p chu?t ph?i vào các m?i Nút ki?m soát, và sau đó b?m Thu?c tính nút.
  4. Trong các Thu?c tính nút h?p tho?i, lo?iTi?t ki?m trong các Nh?n hi?u h?p, lo?ibtnSave trong các ID h?p, và sau đó nh?p vàoCh?nh s?a h?nh th?c m?.
  5. Thêm m? sau vào các btnSave _OnClick phương pháp.
    //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>");
    }			
    
    Lưu ? Trong m? này, thay th? <Path to="" save="" the="" file=""></Path> v?i v? trí nơi b?n mu?n lưu các t?p tin.

Đ?m b?o r?ng các m?u h?nh th?c InfoPath là hoàn toàn đáng tin c?y

Trư?c khi b?n có th? th? nghi?m m?u đơn này, InfoPath d?ng m?u ph?i đư?c hoàn toàn đáng tin c?y. B?n có th? s? d?ng m?t trong nh?ng phương pháp sau đây đ? đ?m b?o tiêu b?n m?u InfoPath là hoàn toàn đáng tin c?y:
  • S? d?ng Microsoft.Ti?n ích c?u h?nh NET Framework 1.1 đ? c?p quy?n truy c?p đ?y đ? tin tư?ng ch? đ?n m? c?a b?n Visual C#.
  • S? d?ng ti?n ích RegForm t? ph?n m?m InfoPath Phát tri?n Kit (SDK) đ? th?c hi?n dư?i h?nh th?c m?t h?nh th?c hoàn toàn đáng tin c?y. Đi?u này cho phép đ?y đ? Tin tư?ng cho phép đ?n Visual C# m? c?a b?n.
  • S? d?ng m?t ch?ng ch? k? m? đ? k? đi?n t? m?u b?n m?u t?p tin (.xsn). Khi b?n s? d?ng m?t ch?ng ch? k? m? đ? k? đi?n t? t?p tin m?u h?nh th?c, ngư?i dùng s? đư?c nh?c đ? tin tư?ng các h?nh th?c khi h? m? các h?nh th?c. Đi?u này làm cho các h?nh th?c hoàn toàn tin tư?ng. V? v?y, tin tư?ng đ?y đ? quy?n truy c?p c?p cho Visual C# m? c?a b?n.
  • S? d?ng các IPFullTrust v? mô t? SDK InfoPath đ? làm cho các h?nh th?c hoàn toàn đáng tin c?y h?nh th?c. Các IPFullTrust macro t? đ?ng cài đ?t t?p kê (.xsf) và các h?nh th?c t?p tin m?u trong d? án InfoPath cho đ?y đ? s? tin tư?ng, và sau đó các IPFullTrust macro t? đ?ng đăng k? m?u h?nh th?c.

    Cho thêm thông tin v? làm th? nào đ? cài đ?t và s? d?ng v? mô, truy c?p vào sau đây Trang Web m?ng nhà phát tri?n c?a Microsoft (MSDN):
    http://msdn2.Microsoft.com/en-US/Library/aa202736 (office.11) .aspx
  • S? d?ng bên ngoài t? đ?ng hóa trong InfoPath đ? g?i các RegisterSolution phương pháp. Tóm l?i, phương pháp này ch? đư?c s? d?ng cho s? phát tri?n h?nh th?c b?i v? m?t h?nh th?c đăng k? ch? đăng k? cho m?t máy tính cá nhân. Đ?i v?i b?t k? các h?nh th?c khác, nh?ng ngư?i dùng khác ph?i đăng k? các h?nh th?c b? sung riêng c?a h? máy vi tính. Chúng tôi không khuyên b?n nên phương pháp này cho các h?nh th?c khác. Chúng tôi đ? ngh? b?t k? m?t trong nh?ng phương pháp trư?c khi b?n xu?t b?n các h?nh th?c.
B?i v? h?nh th?c này là dư?i h?nh th?c phát tri?n, b?n có th? s? d?ng các phương pháp cu?i cùng. Đ? th?c hi?n vi?c này, xác đ?nh v? trí các h?nh th?c AttachmentEncoding InfoPath m?u, và sau đó làm theo các bư?c sau:
  1. Trên các Công c? tr?nh đơn, nh?p vào H?nh th?c Tùy ch?n.
  2. B?m vào các An ninh tab.
  3. Nh?n vào đây đ? xóa các T? đ?ng xác đ?nh b?o m?t c?p d?a trên thi?t k? c?a h?nh th?c (khuy?n cáo) h?p ki?m.

    Lưu ? InfoPath không th? t? đ?ng phát hi?n logic kinh doanh mà yêu c?u quy?n truy c?p đ?y đ? tin c?y. V? v?y, b?n ph?i r? ràng c?p đ?y đ? Tin tư?ng cho phép.
  4. Nh?p vào Đ?y đ? ni?m tin, sau đó b?mOk.
  5. Đóng AttachmentEncoding InfoPath d?ng m?u. N?u b?n b? nh?c lưu các thay đ?i, h?y nh?p vào .

    Lưu ? Đ?ng đóng Visual Studio.NET 2003 d? án.
  6. Trong ph?ng thu tr?c quan.NET 2003, b?m đúp vào cácManifest.xsf t?p tin trong gi?i pháp Explorer. Các t?p tin Manifest.xsf s? m? ra.
  7. T?i nút g?c, xác đ?nh v? trí các publishUrl thu?c tính. Lo?i b? các publishUrl thu?c tính và giá tr? c?a các publishUrl thu?c tính.
  8. Lưu các thay đ?i, và sau đó đóng Manifest.xsf t?p tin.
  9. Nh?p vào B?t đ?u, b?m Ch?y, lo?i Notepad, sau đó b?mOk.
  10. Thêm m? sau vào t?p tin văn b?n tr?ng.
    oApp = WScript.CreateObject("InfoPath.ExternalApplication");
    strAbsolutePath = "<project_folder_url>\\Manifest.xsf";
    oApp.RegisterSolution(strAbsolutePath,"overwrite"); 
    
    Lưu ? Trong m? này, thay th?<project_folder_url></project_folder_url> v?i đư?ng d?n c?a các Manifest.xsf t?p tin trong thư m?c d? án c?a b?n. H?y nh? đ? thoát kh?i con đư?ng c?a các Manifest.xsf t?p tin. T?t c? các backslashes duy nh?t (\) trong con đư?ng ph?i đư?c thay th? b?ng hai backslashes (\).
  11. Lưu các t?p tin Manifest.xsf trên máy tính như các Register.js t?p tin.
  12. Đ? g?i các RegisterSolution phương pháp, b?m đúp vào các Register.js t?p tin mà b?n t?o ra.

Ki?m tra các h?nh th?c

  1. Trong ph?ng thu tr?c quan AttachmentEncoding.NET 2003 d? án, Nh?p vào B?t đ?u trên các G? l?i tr?nh đơn. Đi?u này b?t đ?u các h?nh th?c InfoPath trong ch? đ? xem trư?c.
  2. V? h?nh th?c InfoPath, nh?p đư?ng d?n t?p tin đó b?n mu?n đính kèm trong h?p văn b?n, và sau đó nh?p vàoĐính kèm.

    Lưu ? B?m đúp vào các T?p tin đính kèm t?p tin ki?m soát đ? xác minh r?ng các t?p tin đư?c m? hóa m?t cách chính xác.
  3. Nh?p vào Ti?t ki?m. Xác đ?nh v? trí con đư?ng mà b?n đư?c cung c?p trong các "thêm m?t Ti?t ki?m nút InfoPath m?u" keá tieáp.
  4. Đ? k?t thúc bài ki?m tra, nh?p vào Đóng Xem trư?c.

THAM KH?O

Đ? bi?t thêm v? các tiêu đ? t?p tin đính kèm t?p tin đ?nh d?ng, h?y truy c?p MSDN Web site sau:
G?n tác ph?m trong InfoPath 2003
http://msdn2.Microsoft.com/en-US/Library/aa168351 (office.11) .aspx

Thu?c tính

ID c?a bài: 892730 - L?n xem xét sau cùng: 05 Tháng Ba 2012 - Xem xét l?i: 0.1
Áp d?ng
  • Microsoft Office InfoPath 2003
T? khóa: 
kbcode kbscript kbsample kbxml kbprogramming kbhowto kbmt KB892730 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:892730

Cung cấp Phản hồi

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com