InfoPath 2007 Dataconnection未执行(适用于C#,而不是VB.NET)
您好 我有一个InfoPath 2007表单,表单的某些部分(主要是更改的事件)的编程是用C#完成的。我正在尝试将这些转换为VB,但是,我在DataConnection.Execute()方面遇到了问题 原始C#代码如下所示:InfoPath 2007 Dataconnection未执行(适用于C#,而不是VB.NET),.net,infopath,.net,Infopath,您好 我有一个InfoPath 2007表单,表单的某些部分(主要是更改的事件)的编程是用C#完成的。我正在尝试将这些转换为VB,但是,我在DataConnection.Execute()方面遇到了问题 原始C#代码如下所示: XPathNavigator main = MainDataSource.CreateNavigator(); XPathNavigator mainStart = main.SelectSingleNode("*xPath*", NamespaceManager); s
XPathNavigator main = MainDataSource.CreateNavigator();
XPathNavigator mainStart = main.SelectSingleNode("*xPath*", NamespaceManager);
string strWO = mainStart.Value.ToString();
DataSource ds = DataSources["Discrepancies"];
XPathNavigator xnds = ds.CreateNavigator();
xnds.SelectSingleNode("*xPath*", NamespaceManager).SetValue(strWO);
DataConnection dc = ds.QueryConnection;
dc.Execute();
XPathNavigator nvgFaults = DataSources["Discrepancies"].CreateNavigator();
XPathNodeIterator faultNodes = nvgFaults.Select("*xpath*", NamespaceManager);
while (faultNodes.MoveNext())
{
string nodeSequence = faultNodes.Current.SelectSingleNode("ACTION_SEQUENCE", NamespaceManager).Value;
string nodeFault = faultNodes.Current.SelectSingleNode("FAULT_NOTES", NamespaceManager).Value;
string nodeAction = faultNodes.Current.SelectSingleNode("ACTION_NOTES", NamespaceManager).Value;
writer.WriteStartElement("group4", myNameSpace);
writer.WriteElementString("txtSequence", myNameSpace, nodeSequence);
writer.WriteElementString("txtFault", myNameSpace, nodeFault);
writer.WriteElementString("txtAction", myNameSpace, nodeAction);
writer.WriteEndElement();
}
正确执行,按预期填写表单,但下面显示的VB代码没有:
Dim main As XPathNavigator = MainDataSource.CreateNavigator()
Dim mainStart As XPathNavigator = main.SelectSingleNode("*xPath*", NamespaceManager)
Dim strWO As String = mainStart.Value.ToString
Dim dsresult As DataSource = DataSources("Discrepancies")
Dim xNav As XPathNavigator = dsresult.CreateNavigator()
xNav.SelectSingleNode("*xPath*", NamespaceManager).SetValue(strWO)
Dim dataConn As DataConnection = dsresult.QueryConnection()
dataConn.Execute()
Dim navFaults As XPathNavigator = DataSources("Discrepancies").CreateNavigator()
Dim faultNodes As XPathNodeIterator = navFaults.Select("*xPath*", NamespaceManager)
Dim myNameSpace As String = NamespaceManager.LookupNamespace("my")
While faultNodes.MoveNext()
Dim nodeSequence As String = faultNodes.Current.SelectSingleNode("ACTION_SEQUENCE", NamespaceManager).Value
Dim nodeFault As String = faultNodes.Current.SelectSingleNode("FAULT_NOTES", NamespaceManager).Value
Dim nodeAction As String = faultNodes.Current.SelectSingleNode("ACTION_NOTES", NamespaceManager).Value
Using writer As XmlWriter = MainDataSource.CreateNavigator(). _
SelectSingleNode("/my:myFields/my:group1", NamespaceManager).AppendChild()
writer.WriteStartElement("group2", myNameSpace)
writer.WriteElementString("txtSequence", myNameSpace, nodeSequence)
writer.WriteElementString("txtFault", myNameSpace, nodeFault)
writer.WriteElementString("txtAction", myNameSpace, nodeAction)
writer.WriteEndElement()
writer.Close()
End Using
End While
我已经运行了几个测试(示例中没有说明),以证明我实际上得到了正确的变量,例如“strWO”。然后将此变量传递给数据源“差异”,这是一个存储过程
如果我通过WebMethod(也转换为VB)调用SP差异,它实际上会返回它应该返回的信息。这一切都很好。我得到了我所期望的信息
但是,VB版本不执行查询。对节点计数进行简单测试时,我得到“0”。而我正在测试的特定项应返回低40的节点计数。有数据要处理,但我无法执行查询。这让我快发疯了
有些变量名不同于c#到vb,还有一些infoPath xpath,为了便于阅读,我将其简化为xpath。有些XPath很长。但是,我确信任何变量名的更改都是一致的
感谢您的帮助
谢谢。很抱歉这么说,我想你已经设置了数据源离散度来接收数据了?Nathan,是的,它设置为接收数据,但是,在确保我告诉你的是正确的之后;我注意到在两个“版本”之间的模式中有一个小的差异(不要与数据源名称的差异混淆),这就是我的错误发生的地方以及它没有执行的原因。一旦修好了,一切都很好。