Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
No InfoPath 2007 do Microsoft Office ou Microsoft Office o InfoPath 2003 Service Pack 1 (SP1), você pode usar um Anexo de arquivo controle para anexar um arquivo ao modelo de formulário do InfoPath. Em determinadas circunstâncias, convém codificar e decodificar em seguida, o arquivo anexado para o Anexo de arquivo controle. Nesse caso, você pode usar Microsoft Visual C# para criar um Codificador classe e um Decodificador classe. Em seguida, você pode usar o Codificador classe e a Decodificador classe para codificar e decodificar o arquivo
anexo.
A Microsoft fornece exemplos de programação apenas para ilustração,
sem garantia expressa ou implícita. Isso inclui, mas não está limitado
a garantias implícitas de comercialização ou adequação para um determinado
finalidade. Este artigo presume que você esteja familiarizado com a programação
idioma que está sendo demonstrado e com as ferramentas usadas para criar
e depurar procedimentos. Engenheiros de suporte da Microsoft podem ajudar a explicar a
funcionalidade de um determinado procedimento, mas eles não modificarão esses
exemplos para fornecer funcionalidade adicional ou construir procedimentos para atender às suas
requisitos específicos.
Sobre o Arquivo menu, clique emNovoe clique em Projeto.
No Novo projeto caixa de diálogo, clique emProjetos do Visual C# em projetos do InfoPath de Microsoft Office
pasta.
No Nome caixa, digiteAttachmentEncodinge clique emOK.
No Assistente de projeto Microsoft Office, clique emCriar um novo modelo de formulárioe clique emConcluir.
O Assistente de projeto Microsoft Office cria um
novo Visual Studio.NET 2003 projeto chamado AttachmentEncoding. Uma
Modelo de formulário do InfoPath também é criado. É o modelo de formulário do InfoPath
denominado AttachmentEncoding.
Crie uma classe de codificador no Visual Studio.NET 2003
No Solution Explorer, clique com o botão direitoAttachmentEncoding, aponte para Adicionare depois
Clique em Adicionar Novo Item.
No Adicionar Novo Item caixa de diálogo, clique emClasse no Modelo painel, tipoInfoPathAttachmentEncoder.cs noNome caixa e clique Aberto.
Substituir todos os códigos de InfoPathAttachmentEncoder.cs
arquivo com o código a seguir.
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());
}
}
}
Adicionar um botão Anexar ao formulário do InfoPath
No Controlespainel de tarefas, clique emBotão emInserir controles.
Botão direito do mouse o novo Botão controle, e
Clique em Propriedades do botão.
No Propriedades do botão caixa de diálogo, digiteAnexar no Rótulo caixa, digitebtnAttach no IDENTIFICAÇÃO caixa e cliqueEditar código do formulário.
Adicione o seguinte código para o btnAttach_OnClick método.
//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();
}
Adicionar um botão Salvar ao formulário do InfoPath
Alterne para o formulário do AttachmentEncoding InfoPath
modelo.
No Controlespainel de tarefas, clique emBotão emInserir controles.
Botão direito do mouse o novo Botão controle, e
Clique em Propriedades do botão.
No Propriedades do botão caixa de diálogo, digiteSalvar no Rótulo caixa, digitebtnSave no IDENTIFICAÇÃO caixa e cliqueEditar código do formulário.
Adicione o seguinte código para o btnSave _OnClick método.
//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>");
}
Observação Nesse código, substitua <Path to="" save="" the="" file=""></Path> com o local onde deseja salvar o
arquivo.
Certifique-se de que o modelo de formulário do InfoPath é totalmente confiável
Antes você pode testar esse formulário, o modelo de formulário do InfoPath
deve ser totalmente confiável. Você pode usar um dos seguintes métodos para certificar-se
que o modelo de formulário do InfoPath é totalmente confiável:
Use o Microsoft.NET Framework 1.1 Configuration utility
Para conceder permissões de confiança total somente para seu código Visual C#.
Use o utilitário RegForm do InfoPath Software
Development Kit (SDK) para tornar o formulário um formulário totalmente confiável. Isso concede completo
Permissões para seu código Visual C# de confiança.
Usar um certificado de assinatura de código para assinar digitalmente o formulário
arquivo de modelo (. xsn). Quando você usa um certificado de assinatura de código para assinar digitalmente
o arquivo de modelo de formulário, os usuários são solicitados a confiar no formulário quando abrem o
formulário. Isso torna o formulário totalmente confiável. Portanto, são permissões de confiança total
concedido para seu código Visual C#.
Use o IPFullTrust macro do SDK do InfoPath para tornar o formulário totalmente confiável
formulário. O IPFullTrust macro automatiza a configuração de formulário e o arquivo de manifesto (. xsf)
arquivo de modelo do projeto do InfoPath para confiança total e o IPFullTrust macro registra automaticamente o modelo de formulário.
Para
mais informações sobre como instalar e usar a macro, visite o seguinte
Web site da Microsoft Developer Network (MSDN):
Usar a automação externa no InfoPath para chamar o RegisterSolution método. Normalmente, esse método é usado somente para desenvolvimento de formulários
porque um formulário registrado registra somente para um computador individual. Para qualquer
formulários adicionais, outros usuários devem registrar os formulários adicionais em sua própria
computadores. Não recomendamos esse método para formulários adicionais. Recomendamos
qualquer um dos métodos anteriores, quando você publicar o formulário.
Este formulário está em desenvolvimento do formulário, você pode usar o
último método. Para fazer isso, localize o formulário AttachmentEncoding InfoPath
modelo e, em seguida, siga estas etapas:
Sobre o Ferramentas menu, clique em Formulário
Opções.
Clique no Segurança guia.
Clique para limpar a Determinar automaticamente a segurança
nível com base no design do formulário (recomendado) caixa de seleção.
Observação O InfoPath não pode detectar automaticamente lógica de negócios que
requer permissões de confiança total. Portanto, você deve explicitamente conceder completo
Permissões de confiança.
Clique em Confiança totale clique emOK.
Feche o modelo de formulário AttachmentEncoding InfoPath.
Se você for solicitado para salvar as alterações, clique em Sim.
Observação Não feche o Visual Studio.NET 2003 projeto.
Em Visual Studio.NET 2003, clique duas vezes oManifest. xsf arquivo no Solution Explorer. O arquivo manifest. xsf
é aberta.
No nó raiz, localize a publishUrl atributo. Remover o publishUrl atributo e o valor da publishUrl atributo.
Salvar as alterações e feche o manifest. xsf
arquivo.
Clique em Início, clique em Executar,
tipo Bloco de notase clique emOK.
Adicione o seguinte código ao arquivo de texto em branco.
Observação Nesse código, substitua<project_folder_url></project_folder_url> com o caminho para o
Arquivo manifest. xsf na pasta do projeto. Lembre-se de escape o caminho para o
Arquivo manifest. xsf. Barras todos os única invertidas (\) no caminho devem ser substituídas por
duas barras invertidas (\).
Salve o arquivo manifest. xsf no computador como o
Arquivo Register.js.
Para chamar a RegisterSolution método, clique duas vezes o Register.js arquivo
você criou.
Em Visual Studio AttachmentEncoding.NET 2003 projeto,
Clique em Início sobre o Depuração menu. Isso inicia
o formulário do InfoPath no modo de visualização.
No formulário do InfoPath, digite o caminho do arquivo que
você deseja anexar na caixa de texto e clique emAnexar.
Observação Clique duas vezes o Anexo de arquivo controle
Verifique se que o arquivo está codificado corretamente.
Clique em Salvar. Localize o caminho que você
fornecidas no "adicionar um Salvar botão para o formulário do InfoPath"
seção.
Para finalizar o teste, clique em Fechar
Visualização.
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 892730
(http://support.microsoft.com/kb/892730/en-us/
)
Quanto esforço foi necessário para seguir os procedimentos deste artigo?
Muito baixo
Baixo
Moderado
Alto
Muito alto
O que podemos fazer para melhor estas informações?
Para proteger a sua privacidade, não inclua as informações de contacto nos comentários.
Obrigado! Os seus comentários serão utilizados para nos ajudar a melhorar o conteúdo do suporte. Para obter mais opções de assistência, visite a Home Page da Ajuda e Suporte.