Recebe uma mensagem de erro se tentar definir programaticamente o valor de texto de um nó XML no InfoPath

Traduções de Artigos Traduções de Artigos
Artigo: 826998 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

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.

Causa

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.

Como contornar

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ó.

Exemplo de código que pode causar este erro

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";
}

Exemplo de código que pode evitar este erro

O InfoPath 2007

Para evitar este erro, pode utilizar example.
//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";
}

Mais Informação

Passos para reproduzir o comportamento

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

  1. Inicie o Microsoft Office InfoPath.
  2. Estrutura um novo formulário em branco.
  3. No painel de tarefas, clique em controlos . Verifique se a caixa de verificação criar automaticamente origem de dados está seleccionada.
  4. Adicione um controlo de caixa de texto ao formulário e, em seguida, adicione um controlo de botão ao formulário.
  5. No painel de tarefas, clique em Origem de dados .
  6. 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.
  7. Defina a propriedade Tipo de dados para o campo como decimal (duplo) e, em seguida, clique em OK . Guarde o modelo.
  8. Adicionar script para o acontecimento AoFazerClique do botão da seguinte forma:
    1. 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.
    2. 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.
    3. 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";
      }
    4. Guarde o script e feche o Editor de scripts.
  9. 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 .
  10. Na caixa de diálogo Guardar como , escreva xmlnode e, em seguida, clique em Guardar .
  11. Clique em ficheiro e, em seguida, clique em Fechar .

Testar o formulário

  1. Inicie o InfoPath.
  2. 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 .
  3. Clique no botão.

    Recebe a mensagem de erro mencionada na secção "Sintomas".
  4. 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.
  5. Abra o formulário no modo de estrutura.
  6. Modificar o acontecimento AoFazerClique do botão. Para o fazer, siga estes passos:
    1. 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.
    2. Clique no botão Microsoft Script Editor .

      Aparece o Editor de scripts.
    3. 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";
      }
  7. 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 .

Referências

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:
827002Como depurar um script para um formulário do Microsoft Office InfoPath 2003

Propriedades

Artigo: 826998 - Última revisão: 2 de maio de 2007 - Revisão: 4.1
A informação contida neste artigo aplica-se a:
  • Microsoft Office InfoPath 2007
  • Microsoft Office InfoPath 2003
  • Microsoft Office InfoPath 2003, Service Pack 1 (SP1)
Palavras-chave: 
kbmt kbprb kberrmsg KB826998 KbMtpt
Tradução automática
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

Submeter comentários

 

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