Ako na kódovanie a dekódovanie priloženého súboru pomocou programovania pomocou Visual C# v programe InfoPath 2003

Preklady článku Preklady článku
ID článku: 892730 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

SUHRN

V programe Microsoft Office InfoPath 2007 alebo v programe Microsoft Office InfoPath 2003 Service Pack 1 (SP1), môžete použiť Príloha súboru kontrola na Priloženie súboru k šablóne formulára InfoPath. Za osobitných okolností, možno budete chcieť kódovanie a dekódovanie potom súbor, ktorý je pripojený k Príloha súboru Ovládací prvok. V tomto prípade môžete použiť program Microsoft Visual C# vytvoriť Kódovač triedy a Dekodér trieda. Potom môžete použiť Kódovač triedy a Dekodér triedy na kódovanie a dekódovanie súbor Príloha.

ÚVOD

Tento článok prináša informácie ako na kódovanie a dekódovanie priloženého súboru pomocou programovania pomocou Microsoft Visual C# v programe InfoPath 2003. Informácie o tom, ako to urobiť v programe InfoPath 2010 alebo v programe InfoPath 2007 nájdete v nasledujúcej webovej stránke: Ako zakódovat a dekódovať priloženého súboru pomocou programovania pomocou nástroja Visual C# v programe InfoPath 2010 alebo v programe InfoPath 2007.

DALSIE INFORMACIE

Spoločnosť Microsoft poskytuje príklady programovacieho základňa, bez záruky, vyjadrené alebo implicitné. To zahŕňa, ale neobmedzuje sa na implicitných záruk obchodovateľnosti alebo vhodnosti na konkrétny účel. Tento článok predpokladá, že ste oboznámení s plánovaním jazyk, ktorý je preukázané a nástroje, ktoré sa používajú na vytvorenie a ladenie procedúr. Pracovníci technickej podpory spoločnosti Microsoft môžu pomôcť vysvetliť funkčnosť osobitného konania, ale bude nebude meniť tieto Príklady poskytovať pridanú funkčnosť alebo výstavbe postupy na splnenie vášho špecifické požiadavky.

Vytvoriť projekt Visual C# programu InfoPath 2003

  1. Spustenie nástroja Microsoft Visual Studio.NET 2003.
  2. Na Súbor v ponuke kliknite na položkuNové, a potom kliknite na tlačidlo Projekt.
  3. V Nový projekt dialógové okno, kliknite na tlačidloVisual C# projekty program Microsoft Office InfoPath projektov priečinok.
  4. V meno zadajteAttachmentEncoding, a potom kliknite na tlačidlook.
  5. V Microsoft Office Project Wizard kliknite na tlačidloVytvorenie novej šablóny formulára, a potom kliknite na tlačidloDokončiť.

    Microsoft Office Projektov? sprievodca vytvorí nový program Visual Studio.NET 2003 projekt, ktorý sa nazýva AttachmentEncoding. An Šablóna formulára programu InfoPath je tiež vytvoril. Šablóna formulára programu InfoPath s názvom AttachmentEncoding.

Vytvoriť Encoder triedy v Visual Studio.NET 2003

  1. V roztoku Prieskumník kliknite pravým tlačidlom myšiAttachmentEncoding, ukážte na položku Pridať, a potom kliknite na tlačidlo Doplniť nový bod.
  2. V Doplniť nový bod dialógové okno, kliknite na tlačidloTrieda v Šablóna na table typuInfoPathAttachmentEncoder.cs vmeno a potom kliknite na Otvorené.
  3. Nahradenie všetkých kód v InfoPathAttachmentEncoder.cs súbor s nasledujúcim kódom.
    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());
    		}
    	}
    }

Vytvoriť dekodér triedy v Visual Studio.NET 2003

  1. V roztoku Prieskumník kliknite pravým tlačidlom myšiAttachmentEncoding, ukážte na položku Pridať, a potom kliknite na tlačidlo Doplniť nový bod.
  2. V Doplniť nový bod dialógové okno, kliknite na tlačidloTrieda v Šablóna na table typuInfoPathAttachmentDecoder.cs vmeno a potom kliknite na Otvorené.
  3. Nahradenie všetkých kód v InfoPathAttachmentDecoder.cs súbor s nasledujúcim kódom.
    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; }
    		}
    	}	
    }
    
    

Pridať ovládací prvok prílohy súboru a ovládací prvok textového poľa do formulára programu InfoPath

  1. V šablóne formulára programu AttachmentEncoding InfoPath kliknite na tlačidlo Ovládacie prvky v Projektovej dokumentácie úloha tabla.
  2. V Ovládacie prvkykliknite na položku Pracovná tablaSúbor Príloha podľaVložiť ovládacie prvky.
  3. Kliknite pravým tlačidlom myši Príloha súboru kontroly, a potom kliknite na tlačidlo Vlastnosti súboru prílohu.
  4. V Vlastnosti súboru prílohu dialógové okno zadajte theAttachmentField v Pole meno a potom kliknite na ok.
  5. V Ovládacie prvkykliknite na položku Pracovná tablaBlok textu podľaVložiť ovládacie prvky.
  6. Kliknite pravým tlačidlom myši Blok textu kontrolu, a potom kliknite na tlačidlo Blok textu-vlastnosti.
  7. V Blok textu-vlastnosti dialógovom okne typ theAttachmentName v Pole meno a potom kliknite na ok.

Pridať tlačidlo priložiť do formulára programu InfoPath

  1. V Ovládacie prvkykliknite na položku Pracovná tablaTlačidlo podľaVložiť ovládacie prvky.
  2. Kliknite pravým tlačidlom na nové Tlačidlo kontrolu, a kliknite na tlačidlo Vlastnosti tlačidla.
  3. V Vlastnosti tlačidla dialógové okno, typuPripojiť v Štítok zadajtebtnAttach v IDENTIFIKÁCIA a potom kliknite naUpraviť kód formulára.
  4. Pridať nasledujúci kód do btnAttach_OnClick metóda.
    //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();
    }	
    

Pridajte uložiť tlačidlo do formulára programu InfoPath

  1. Prepnite sa do formulára programu AttachmentEncoding InfoPath šablóna.
  2. V Ovládacie prvkykliknite na položku Pracovná tablaTlačidlo podľaVložiť ovládacie prvky.
  3. Kliknite pravým tlačidlom na nové Tlačidlo kontrolu, a kliknite na tlačidlo Vlastnosti tlačidla.
  4. V Vlastnosti tlačidla dialógové okno, typuUložiť v Štítok zadajtebtnSave v IDENTIFIKÁCIA a potom kliknite naUpraviť kód formulára.
  5. Pridať nasledujúci kód do btnSave _OnClick metóda.
    //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>");
    }			
    
    Poznámka V tomto kódexe, nahradiť <Path to="" save="" the="" file=""></Path> s umiestnením, kam chcete uložiť súbor.

Skontrolujte, či je šablóna formulára programu InfoPath úplnou dôveryhodnosťou

Predtým, než môžete otestovať tohto formulára, šablóna formulára programu InfoPath musí byť úplne dôveryhodný. Môžete použiť jednu z nasledujúcich metód sa uistite sa, že šablóna formulára programu InfoPath je úplne dôveryhodný:
  • Použite Microsoft.NET rámec 1.1 Konfiguračná pomôcka poskytnúť úplnú dôveryhodnosť povolenia iba na kóde Visual C#.
  • Použite pomôcku RegForm od programu InfoPath softvér Development Kit (SDK) aby forme formulárov s úplnou dôveryhodnosťou. To zaručuje úplné Dôverovať povolenia kódu Visual C#.
  • Použiť certifikát podpisovanie kódu na digitálne podpísanie formulára súbor šablóny (.xsn). Keď použijete certifikát podpisovanie kódu na digitálne podpisovanie súboru šablóny formulára používateľom sa zobrazí výzva dôverovať formu pri otváraní formulár. To robí formulár úplne dôveryhodný. Preto sú úplne dôveryhodný povolenia poskytuje kódu Visual C#.
  • Použitie IPFullTrust makro z programu InfoPath SDK skontrolujte formulára, úplnou dôveryhodnosťou formulár. The IPFullTrust makro automatizuje nastavenie zjavne súbor (.xsf) a forma súbor šablóny programu InfoPath projektu pre úplnú dôveryhodnosť a potom IPFullTrust makro automaticky zaregistruje šablónu formulára.

    Pre Ďalšie informácie o inštalácii a používaní makier, navštívte nasledujúce Webová lokalita spoločnosti Microsoft Developer Network (MSDN):
    http://msdn2.Microsoft.com/en-us/library/aa202736 (office.11) .aspx
  • Používanie externých automatizácie v programe InfoPath zavolať RegisterSolution metóda. Zvyčajne táto metóda sa používa iba pri vývoji formulárov pretože zapísaná, tvoria iba registre samostatný počítač. Pre akúkoľvek ďalšie formy, ostatní používatelia musia zaregistrovať ďalšie formy na vlastnú päsť počítače. Neodporúčame tento spôsob pre ďalšie formy. Odporúčame niektorý z predchádzajúcich metód pri publikovaní forme.
Pretože tento formulár je vyvíjajú formulára, môžete použiť Posledná metóda. To chcete urobiť, vyhľadajte formulára programu AttachmentEncoding InfoPath šablóny, a potom postupujte podľa týchto krokov:
  1. Na Nástroje v ponuke kliknite na položku Formulár Možnosti.
  2. Kliknite na tlačidlo Bezpečnosť karta.
  3. Kliknutím zrušte začiarknutie políčka Automaticky určiť zabezpečenia úroveň založenú na návrh formulára (odporúča sa) začiarkavacie políčko.

    Poznámka Program InfoPath nemôže automaticky zistiť logiky, vyžaduje úplnú dôveryhodnosť povolenia. Preto musíte explicitne prideliť plný Dôverovať povolenia.
  4. Kliknite na tlačidlo Úplnú dôveryhodnosť, a potom kliknite na tlačidlook.
  5. Zatvorte šablónu formulára programu AttachmentEncoding InfoPath. Ak sa zobrazí výzva na uloženie zmien, kliknite na tlačidlo áno.

    Poznámka Nezatvárajte Visual Studio.NET 2003 projekt.
  6. V programu Visual Studio.NET 2003, dvakrát kliknite na ikonuManifest.xsf súbor v programe Prieskumník roztoku. Súbore Manifest.xsf otvorí.
  7. Koreňový uzol, vyhľadajte publishUrl atribút. Odstrániť publishUrl atribút a hodnotu publishUrl atribút.
  8. Uložte zmeny a zavrite súbor Manifest.xsf súbor.
  9. Kliknite na tlačidlo Štart, kliknite na tlačidlo Spustiť, typ Poznámkový blok, a potom kliknite na tlačidlook.
  10. Pridajte nasledovný kód do prázdny textový súbor.
    oApp = WScript.CreateObject("InfoPath.ExternalApplication");
    strAbsolutePath = "<project_folder_url>\\Manifest.xsf";
    oApp.RegisterSolution(strAbsolutePath,"overwrite"); 
    
    Poznámka V tomto kódexe, nahradiť<project_folder_url></project_folder_url> s cestu Súbor Manifest.xsf v priečinku projektu. Nezabudnite únikové cesty Súbor Manifest.xsf. Všetky jednoduché obrátené lomky (\) v ceste musí byť nahradený dve spätné lomky (\).
  11. Uložte súbor Manifest.xsf v počítači ako Register.js súboru.
  12. Zavolať RegisterSolution metódu, dvakrát kliknite na ikonu Register.js súbor, ktorý ste vytvorili.

Skúška forme

  1. V AttachmentEncoding Visual Studio.NET 2003 projektu, kliknite na tlačidlo Štart na Ladenie ponuka. Spustí program InfoPath formulár v režime náhľadu.
  2. Vo formulári programu InfoPath zadajte cestu k súboru, chcete priložiť do textového poľa a potom kliknite na tlačidloPripojiť.

    Poznámka Dvakrát kliknite na ikonu Príloha súboru kontroly Skontrolujte, či správne zakódované v súbore.
  3. Kliknite na tlačidlo Uložiť. Nájdite cestu, v "pridať Uložiť tlačidlo do formulára programu InfoPath" sekcia.
  4. Ak chcete test skončiť, kliknite na tlačidlo Zavrieť Ukážka.

ODKAZY

Ďalšie informácie o zabavenie hlavička súboru formáte na ?írku, nájdete na nasledovnej webovej lokalite MSDN:
Prikladaní súborov v programe InfoPath 2003
http://msdn2.Microsoft.com/en-us/library/aa168351 (office.11) .aspx

Vlastnosti

ID článku: 892730 - Posledná kontrola: 5. marca 2012 - Revízia: 0.1
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft Office InfoPath 2003
Kľúčové slová: 
kbcode kbscript kbsample kbxml kbprogramming kbhowto kbmt KB892730 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:892730

Odošlite odozvu

 

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