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 você tentar definir programaticamente o valor de texto de um nó XML no Microsoft Office InfoPath 2007 ou no Microsoft Office InfoPath 2003, você receberá uma mensagem de erro.
No InfoPath 2007, poderá receber uma mensagem de erro semelhante à seguinte:
O InfoPath não pode concluir esta ação, devido a um erro no código do formulário.
No InfoPath 2003, você receberá uma mensagem de erro semelhante a seguinte mensagem de erro:
Ocorreu um erro de tempo de execução. Você deseja depurar?
Ocorreu o seguinte erro: '#PCDATA' está em conteúdo nil.
Esse erro é gerado quando você tenta definir programaticamente o valor de texto de um nó XML que tenha o xsi: nil = "true" atributo. Quando esse atributo é definido como true , qualquer valor de texto do nó XML produz XML que não é válido. Portanto, o Microsoft Office InfoPath não aceita o valor, e você recebe a mensagem de erro.
Para contornar este problema, adicione código que verifica o xsi: nil = "true" atributo e, em seguida, remove o atributo (se o atributo for encontrado) em tempo de execução antes do código define o valor de texto do nó.
Por exemplo, este erro pode ocorrer quando você usar código semelhante o código a seguir.
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";
}
Para evitar esse erro, você pode usar o seguinte 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";
}
Para reproduzir esse comportamento, você deve criar o formulário e adicione o código no exemplo para o formulário. Em seguida, você deve testar o formulário. Para criar o formulário, execute essas etapas:
Criar o formulário
Inicie o Microsoft Office InfoPath.
Crie um novo formulário em branco.
No painel de tarefas, clique em controles . Verifique se que a caixa de seleção Criar fonte de dados automaticamente está marcada.
Adicione um controle TextBox para o formulário e, em seguida, adicione um controle Button ao formulário.
No painel de tarefas, clique em Fonte de dados .
Na lista Data Source , clique com o botão direito do mouse campo1 e, em seguida, clique em Propriedades .
A caixa de diálogo Propriedades de grupo do campo ou é exibida.
Defina a propriedade Tipo de dados para o campo como decimal (double) e, em seguida, clique em OK . Salve o modelo.
Adicione script para o evento OnClick do botão da seguinte maneira:
Clique com o botão direito do mouse e clique em Propriedades do botão .
A caixa de diálogo Propriedades do botão será exibida.
No InfoPath 2007, clique em Edit Form código . Inicia o Microsoft Visual Studio Tools for Applications.
No InfoPath 2003, clique no botão Editor de scripts Microsoft .
Editor de scripts Microsoft aparece.
No evento OnClick do botão, insira o exemplo de código a seguir.
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";
}
Salvar seu script e feche o Editor de scripts Microsoft.
No InfoPath 2007, clique em Salvar no menu arquivo .
No InfoPath 2003, clique em Salvar no menu arquivo e clique em Salvar na caixa de diálogo Microsoft Office InfoPath .
Na caixa de diálogo Salvar como , digite xmlnode e em seguida, clique em Salvar .
Clique em arquivo e, em seguida, clique em Fechar .
Testar o formulário
Inicie o InfoPath.
No InfoPath 2007, clique duas vezes xmlnode em usados formulários .
No InfoPath 2003, clique em xmlnode em Preencha um formulário .
Clique no botão.
Você receber a mensagem de erro mencionada na seção "Sintomas".
No InfoPath 2007, clique em OK para fechar a mensagem de erro.
No 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 design.
Modificar o evento OnClick do botão. Para fazer isso, execute as seguintes etapas:
Clique com o botão direito do mouse e clique em Propriedades do botão .
A caixa de diálogo Propriedades do botão será exibida.
Clique no botão Editor de scripts Microsoft .
Editor de scripts Microsoft aparece.
Modificar o código para o evento OnClick do botão da seguinte maneira.
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";
}
Visualize o formulário novamente e, em seguida, clique no botão.
Nenhuma mensagem de erro é retornada. O controle TextBox exibe um valor de 10.0 .
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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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/
)
Quanto esforço foi necessário para seguir os procedimentos deste artigo?
Muito baixo
Baixo
Moderado
Alto
Muito alto
O que podemos fazer para melhorar essa informação?
Para proteger sua privacidade, não inclua informações de contato em seus comentários.
Obrigado! Seus comentários são usados para nos ajudar a aperfeiçoar o conteúdo de suporte. Para obter mais opções de ajuda, visite a Home Page de Ajuda e Suporte.