Jak kódování a dekódování souboru přílohy programově pomocí aplikace Visual C# v aplikaci InfoPath 2003

Překlady článku Překlady článku
ID článku: 892730 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

V aplikaci Microsoft Office InfoPath 2007 nebo Microsoft Office InfoPath 2003 Service Pack 1 (SP1) můžete použít Soubor jako příloha řízení připojení souboru k šabloně formuláře aplikace InfoPath. Za určitých okolností je vhodné k zakódování a dekódování klepněte na soubor, který je připojen k Soubor jako příloha ovládací prvek. V takovém případě můžete Microsoft Visual C# vytvoření Kodér Třída a Dekodér Třída. Pak můžete použít Kodér Třída a Dekodér Třída pro kódování a dekódování souboru Příloha.

ÚVOD

Tento článek uvádí způsob kódování a dekódování souboru přílohy programově pomocí jazyka Microsoft Visual C# v aplikaci InfoPath 2003. Informace o tom, jak v aplikaci InfoPath 2010 nebo aplikace InfoPath 2007 naleznete na následující webové stránce: Kódování a dekódování souboru přílohy programově pomocí aplikace Visual C# v roce 2010 aplikace InfoPath nebo v aplikaci InfoPath 2007.

Další informace

Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci, bez žádné záruky výslovně uvedené nebo předpokládané. To zahrnuje, ale není omezen ke mlčky předpokládaných záruk obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá znalost programování jazyk, který je předmětem ukázky a s nástroji, které slouží k vytvoření a ladění skriptu. Pracovníci podpory společnosti Microsoft mohou vysvětlit funkce určitého postupu, ale nemohou tyto Příklady poskytují přidané funkce nebo konstrukce podle vašeho zvláštní požadavky.

Vytvoření projektu Visual C# aplikace InfoPath 2003

  1. Spusťte aplikaci Visual Studio.NET 2003.
  2. V Soubor nabídky, klepněte na tlačítkoNovýa klepněte na tlačítko Projekt.
  3. V Nový projekt Dialogové okno, klepněte na tlačítkoVisual C# projekty v projektech aplikace Microsoft Office InfoPath složka.
  4. V Název pole TypAttachmentEncodinga klepněte na tlačítkoOK.
  5. Průvodce Microsoft Office Project klepněte na tlačítkoVytvoření nové šablony formulářea klepněte na tlačítkoDokončit.

    Průvodce aplikace Microsoft Office Project vytvoří nové Visual Studio.NET 2003 projekt s názvem AttachmentEncoding. Aplikace Šablona formuláře aplikace InfoPath je také vytvořen. Šablona formuláře aplikace InfoPath s názvem AttachmentEncoding.

Třída kodér vytvořte v aplikaci Visual Studio.NET 2003

  1. V aplikaci Solution Explorer klepněte pravým tlačítkem myšiAttachmentEncoding, přejděte na příkaz Přidata pak Klepněte na tlačítko Přidat novou položku.
  2. V Přidat novou položku Dialogové okno, klepněte na tlačítkoTřída v Šablony podokno typuInfoPathAttachmentEncoder.cs vNázev pole a klepněte na tlačítko Otevřít.
  3. Nahraďte všechny kód InfoPathAttachmentEncoder.cs soubor s následujícím kódem.
    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());
    		}
    	}
    }

Vytvoření třídy dekodér v aplikaci Visual Studio.NET 2003

  1. V aplikaci Solution Explorer klepněte pravým tlačítkem myšiAttachmentEncoding, přejděte na příkaz Přidata pak Klepněte na tlačítko Přidat novou položku.
  2. V Přidat novou položku Dialogové okno, klepněte na tlačítkoTřída v Šablony podokno typuInfoPathAttachmentDecoder.cs vNázev pole a klepněte na tlačítko Otevřít.
  3. Nahraďte všechny kód InfoPathAttachmentDecoder.cs soubor s následujícím kódem.
    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; }
    		}
    	}	
    }
    
    

Přidat ovládací prvek Soubor jako příloha a ovládací prvek textové pole do formuláře aplikace InfoPath

  1. V šabloně formuláře aplikace AttachmentEncoding InfoPath Klepněte na tlačítko Ovládací prvky v Navrhnout úkoly úkol podokno.
  2. V Ovládací prvkypodokno úloh, klepněte na tlačítkoSoubor Příloha ve skupinovém rámečkuVložit ovládací prvky.
  3. Klepněte pravým tlačítkem myši Soubor jako příloha řízení, a potom klepněte na tlačítko Vlastnosti přiloženého souboru.
  4. V Vlastnosti přiloženého souboru Dialogové okno pole Typ theAttachmentField v Pole Název pole a klepněte na tlačítko OK.
  5. V Ovládací prvkypodokno úloh, klepněte na tlačítkoTextové pole ve skupinovém rámečkuVložit ovládací prvky.
  6. Klepněte pravým tlačítkem myši Textové pole ovládací prvek a potom Klepněte na tlačítko Vlastnosti textového pole.
  7. V Vlastnosti textového pole Dialogové okno Zadejte tento příkaz theAttachmentName v Pole Název pole a klepněte na tlačítko OK.

Přidání tlačítka připojit k formuláři aplikace InfoPath

  1. V Ovládací prvkypodokno úloh, klepněte na tlačítkoTlačítko ve skupinovém rámečkuVložit ovládací prvky.
  2. Klepněte pravým tlačítkem myši nový Tlačítko ovládací prvek, a Klepněte na tlačítko Vlastnosti tlačítka.
  3. V Vlastnosti tlačítka Dialogové okno, typPřipojit v Popisek pole TypbtnAttach v ID pole a klepněte na tlačítkoUpravit kód formuláře.
  4. Přidejte následující kód do btnAttach_OnClick Metoda.
    //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();
    }	
    

Formuláře aplikace InfoPath přidat tlačítko Uložit

  1. Přepnout do formuláře aplikace AttachmentEncoding InfoPath Šablona.
  2. V Ovládací prvkypodokno úloh, klepněte na tlačítkoTlačítko ve skupinovém rámečkuVložit ovládací prvky.
  3. Klepněte pravým tlačítkem myši nový Tlačítko ovládací prvek, a Klepněte na tlačítko Vlastnosti tlačítka.
  4. V Vlastnosti tlačítka Dialogové okno, typUložit v Popisek pole TypbtnSave v ID pole a klepněte na tlačítkoUpravit kód formuláře.
  5. Přidejte následující kód do btnSave _OnClick Metoda.
    //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ódu nahradit <Path to="" save="" the="" file=""></Path> umístění, kam chcete uložit soubor.

Ujistěte se, že je plně důvěryhodné šablony formuláře aplikace InfoPath

Můžete otestovat před tento formulář šablony formuláře aplikace InfoPath musí být plně důvěryhodné. Zda můžete použít jednu z následujících metod: Šablona formuláře aplikace InfoPath je plně důvěryhodný:
  • Pomocí aplikace Microsoft.NET Framework 1.1 Configuration utility udělit oprávnění Úplná důvěryhodnost pouze pro kód jazyka Visual C#.
  • Pomocí nástroje RegForm ze softwaru aplikace InfoPath Development Kit (SDK), aby formulář plně důvěryhodný formulář. Tímto uděluje plnou Důvěřujte oprávnění kódu Visual C#.
  • Podpis kódu slouží k digitálnímu podepsání formuláře soubor šablonu (XSN). Pokud používáte digitálně podepsat podpis kódu soubor šablony formuláře jsou uživatelé vyzváni k důvěryhodné formuláře při otevření formulář. Díky plně důvěryhodné formuláře. Proto jsou oprávnění Úplná důvěryhodnost poskytuje kódu Visual C#.
  • Použít IPFullTrust makra z SDK aplikace InfoPath tak, aby plně důvěryhodné formuláře formulář. Na IPFullTrust Makro automatizuje nastavení souboru manifestu (XSF) a formuláři soubor šablony aplikace InfoPath projektu pro úplný vztah důvěryhodnosti a pak IPFullTrust makra automaticky zaregistruje šablonu formuláře.

    Pro Další informace o instalaci a použití makra, navštivte následující Webu Microsoft Developer Network (MSDN):
    http://msdn2.microsoft.com/en-us/library/aa202736 (office.11) .aspx
  • Použít externí automatizaci v aplikaci InfoPath k volání RegisterSolution Metoda. Obvykle tato metoda se používá pouze pro vývoj formulářů protože registrované formuláře zaregistruje pouze pro jednotlivé počítače. Pro všechny Další formuláře ostatním uživatelům musí registrovat další formuláře na své vlastní počítače. Nedoporučujeme používat tuto metodu pro další formuláře. Doporučujeme žádný z předchozích metod při publikování formuláře.
Tento formulář je ve vývoji formuláře, můžete použít Poslední metoda. To provedete vyhledání formuláře aplikace AttachmentEncoding InfoPath šablony a pak postupujte takto:
  1. V Nástroje nabídky, klepněte na tlačítko Formulář Možnosti.
  2. Klepněte Zabezpečení na kartě.
  3. Zrušte zaškrtnutí políčka Automaticky zjistit zabezpečení úroveň na základě návrhu formuláře (doporučeno) Zaškrtávací políčko.

    Poznámka: Aplikaci InfoPath nelze automaticky rozpoznat obchodní logiky, vyžaduje oprávnění Úplná důvěryhodnost. Proto musí explicitně udělit úplné Oprávnění důvěryhodnosti.
  4. Klepněte na tlačítko Úplná důvěryhodnosta klepněte na tlačítkoOK.
  5. Zavřete šablonu formuláře aplikace AttachmentEncoding InfoPath. Pokud se zobrazí výzva k uložení změn, klepněte na tlačítko Ano.

    Poznámka: Visual Studio nelze zavřít.NET 2003 projekt.
  6. V aplikaci Visual Studio.NET 2003, poklepejteManifest.xsf soubor v aplikaci Solution Explorer. Soubor Manifest.xsf otevře.
  7. Vyhledejte v kořenový uzel publishUrl atribut. Odebrat publishUrl atribut a hodnota publishUrl atribut.
  8. Uložte změny a zavřete soubor Manifest.xsf soubor.
  9. Klepněte na tlačítko Spustit, klepněte na tlačítko Spustit, Zadejte tento příkaz Poznámkový bloka klepněte na tlačítkoOK.
  10. Přidejte následující kód do prázdného textového souboru.
    oApp = WScript.CreateObject("InfoPath.ExternalApplication");
    strAbsolutePath = "<project_folder_url>\\Manifest.xsf";
    oApp.RegisterSolution(strAbsolutePath,"overwrite"); 
    
    Poznámka: V tomto kódu nahradit<project_folder_url></project_folder_url> cestou Soubor manifest.xsf ve složce projektu. Nezapomeňte únikové cesty Soubor manifest.xsf. Nutné nahradit všechny jednoduchá zpětná (\) v cestě dvě zpětná lomítka (\).
  11. Uložení souboru Manifest.xsf v počítači, jako Soubor register.js.
  12. Volání RegisterSolution Metoda, poklepejte Register.js soubor, který jste vytvořili.

Testování formuláře

  1. V AttachmentEncoding Visual Studio.NET 2003 projektu Klepněte na tlačítko Spustit v Ladění nabídka. Spustí formulář aplikace InfoPath v režimu náhledu.
  2. Formuláře aplikace InfoPath, zadejte cestu k souboru, který Chcete-li připojit do textového pole a klepněte na tlačítkoPřipojit.

    Poznámka: Poklepejte Soubor jako příloha k řízení Ověřte, že správně kódovaný soubor.
  3. Klepněte na tlačítko Uložit. Vyhledejte cestu, v "přidat Uložit tlačítko do formuláře aplikace InfoPath" sekce.
  4. Zkoušku ukončíte klepnutím na tlačítko Zavřít Náhled.

Odkazy

Další informace o záhlaví souboru přílohy formátovat, naleznete na následujícím webu MSDN:
Připojení souborů v aplikaci InfoPath 2003
http://msdn2.microsoft.com/en-us/library/aa168351 (office.11) .aspx

Vlastnosti

ID článku: 892730 - Poslední aktualizace: 5. března 2012 - Revize: 4.1
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Office InfoPath 2003
Klíčová slova: 
kbcode kbscript kbsample kbxml kbprogramming kbhowto kbmt KB892730 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:892730

Dejte nám zpětnou vazbu

 

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