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.
Se tentar definir programaticamente o valor de texto de um nó XML no Microsoft Office InfoPath 2007 ou no Microsoft Office InfoPath 2003, poderá receber uma mensagem de erro.
No InfoPath 2007, poderá receber uma mensagem de erro semelhante o seguinte:
O InfoPath não consegue concluir esta acção, devido a um erro no código do formulário.
No InfoPath 2003, poderá receber uma mensagem de erro semelhante a seguinte mensagem de erro:
Ocorreu um erro de tempo de execução. Pretende depurar?
Ocorreu o seguinte erro: '#PCDATA' está a ser conteúdo nil.
Este erro é gerado quando tentar definir programaticamente o valor de texto de um nó XML que tenha o xsi: nil = "true" atributo. Quando este atributo está definido como true , qualquer valor de texto do nó XML produz XML não é válido. Por conseguinte, o Microsoft Office InfoPath não aceita o valor e receberá a mensagem de erro.
Para contornar este problema, adicione código que verifica a existência de xsi: nil = "true" atributo e, em seguida, remove o atributo (se for encontrado o atributo) em tempo de execução antes do código define o valor de texto do nó.
Por exemplo, este erro pode ocorrer quando utilizar código semelhante o seguinte código.
O InfoPath 2007
//Create a Navigator object to access the main DOM.
XPathNavigator xnDoc = this.MainDataSource.CreateNavigator();
//Create a Navigator object for the field that you want to set.
XPathNavigator xnmyDate = xnDoc.SelectSingleNode("/my:myFields/my:myDate", this.NamespaceManager);
//Set the value of the myDate field.
xnmyDate.SetValue("2006-10-12");
//Clean up.
xnDoc = null;
xnmyDate = null;
InfoPath 2003
{
// Receive a reference to the element to be filled.
var objDataElement = XDocument.DOM.selectSingleNode("/my:myFields/my:field1");
//Set the value of the element.
objDataElement.text = "10.0";
}
//Create a Navigator object to access the main DOM.
XPathNavigator xnDoc = this.MainDataSource.CreateNavigator();
//Create a Navigator object for the field that you want to set.
XPathNavigator xnmyDate = xnDoc.SelectSingleNode("/my:myFields/my:myDate", this.NamespaceManager);
//Remove the "nil" attribute.
if (xnmyDate.MoveToAttribute("nil", "http://www.w3.org/2001/XMLSchema-instance"))
xnmyDate.DeleteSelf();
//Set the value of the myDate field.
xnmyDate.SetValue("2006-10-12");
//Clean up.
xnDoc = null;
xnmyDate = null;
InfoPath 2003
{
// Receive a reference to the element to be filled.
var objDataElement = XDocument.DOM.selectSingleNode("/my:myFields/my:field1");
//Determine whether the xsi:nil attribute is set for this
//element. If so, remove the xsi:nil attributes so that
//the value can be set.
if (objDataElement.getAttribute("xsi:nil"))
objDataElement.removeAttribute("xsi:nil");
//Set the value of the element.
objDataElement.text = "10.0";
}
Para reproduzir este comportamento, tem de criar o formulário e adicione o código de exemplo para o formulário. Em seguida, tem de testar o formulário. Para criar o formulário, siga estes passos:
Criar o formulário
Inicie o Microsoft Office InfoPath.
Estrutura um novo formulário em branco.
No painel de tarefas, clique em controlos . Verifique se a caixa de verificação criar automaticamente origem de dados está seleccionada.
Adicione um controlo de caixa de texto ao formulário e, em seguida, adicione um controlo de botão ao formulário.
No painel de tarefas, clique em Origem de dados .
Na lista Origem de dados , clique com o botão direito do rato campo1 e, em seguida, clique em Propriedades .
A caixa de diálogo Propriedades de grupo ou campo aparece.
Defina a propriedade Tipo de dados para o campo como decimal (duplo) e, em seguida, clique em OK . Guarde o modelo.
Adicionar script para o acontecimento AoFazerClique do botão da seguinte forma:
Clique com o botão direito do rato e, em seguida, clique em Propriedades do botão .
A caixa de diálogo Propriedades do botão é apresentada.
No InfoPath 2007, clique em Edit Form código . Inicia o Microsoft Visual Studio Tools for Applications.
No InfoPath 2003, clique no botão Microsoft Script Editor .
Aparece o Editor de scripts.
No evento AoFazerClique do botão, insira o seguinte exemplo de código.
o InfoPath 2007
//Create a Navigator object to access the main DOM.
XPathNavigator xnDoc = this.MainDataSource.CreateNavigator();
//Create a Navigator object for the field that you want to set.
XPathNavigator xnmyDate = xnDoc.SelectSingleNode("/my:myFields/my:myDate", this.NamespaceManager);
//Set the value of the myDate field.
xnmyDate.SetValue("2006-10-12");
//Clean up.
xnDoc = null;
xnmyDate = null;
InfoPath 2003
{
// Receive a reference to the element to be filled.
var objDataElement = XDocument.DOM.selectSingleNode("/my:myFields/my:field1");
//Set the value of the element.
objDataElement.text = "10.0";
}
Guarde o script e feche o Editor de scripts.
No InfoPath 2007, clique em Guardar no menu ficheiro .
No InfoPath 2003, clique em Guardar no menu ficheiro e em seguida, clique em Guardar na caixa de diálogo Microsoft Office InfoPath .
Na caixa de diálogo Guardar como , escreva xmlnode e, em seguida, clique em Guardar .
Clique em ficheiro e, em seguida, clique em Fechar .
Testar o formulário
Inicie o InfoPath.
No InfoPath 2007, clique duas vezes xmlnode em recém-utilizados formulários .
No InfoPath 2003, clique em xmlnode em preenchimento de um formulário .
Clique no botão.
Recebe a mensagem de erro mencionada na secção "Sintomas".
No InfoPath 2007, clique em OK para fechar a mensagem de erro.
Na InfoPath 2003, clique em ' Não ' e, em seguida, clique em OK para fechar a mensagem de erro.
Abra o formulário no modo de estrutura.
Modificar o acontecimento AoFazerClique do botão. Para o fazer, siga estes passos:
Clique com o botão direito do rato e, em seguida, clique em Propriedades do botão .
A caixa de diálogo Propriedades do botão é apresentada.
Clique no botão Microsoft Script Editor .
Aparece o Editor de scripts.
Modifique o código para o acontecimento AoFazerClique do botão da seguinte forma.
o InfoPath 2007
//Create a Navigator object to access the main DOM
XPathNavigator xnDoc = this.MainDataSource.CreateNavigator();
//Create a Navigator object for the field we want to set
XPathNavigator xnmyDate = xnDoc.SelectSingleNode("/my:myFields/my:myDate", this.NamespaceManager);
//Set the value of the myDate field
xnmyDate.SetValue("2006-10-12");
//Clean up
xnDoc = null;
xnmyDate = null;
InfoPath 2003
{
// Receive a reference to the element to be filled.
var objDataElement = XDocument.DOM.selectSingleNode("/my:myFields/my:field1");
//Determine whether the xsi:nil attribute is set for this
//element. If so, remove the xsi:nil attributes so that
//the value can be set.
if (objDataElement.getAttribute("xsi:nil"))
objDataElement.removeAttribute("xsi:nil");
//Set the value of the element.
objDataElement.text = "10.0";
}
Pré-visualize o formulário novo e, em seguida, clique no botão.
Nenhuma mensagem de erro é devolvida. O controlo de caixa de texto apresenta um valor de 10.0 .
Para obter informações adicionais sobre como depurar scripts, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
827002
(http://support.microsoft.com/kb/827002/
)
Como depurar um script para um formulário do Microsoft Office InfoPath 2003
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: 826998
(http://support.microsoft.com/kb/826998/en-us/
)
Qual foi o esforço que despendeu pessoalmente para utilizar este artigo?
Muito baixo
Baixo
Moderado
Elevado
Muito elevado
Diga-nos porquê e o que podemos fazer para melhorar estas informações
Obrigado! Os seus comentários são utilizados para ajudar-nos a melhorar o conteúdo do nosso suporte. Para obter mais opções de assistência, visite a Home Page de Ajuda e Suporte.