Using WCF with Infopath
WCF service was used to fill-in the Drop-downs in infopath.
//Read the Service url from config file into LookupServiceUrlField
strServiceUrl = navigator.SelectSingleNode("/my:myFields/my:LookupServiceUrl", NamespaceManager).Value;
if (strServiceUrl != "")
{
EndpointAddress address = new EndpointAddress(strServiceUrl);
BasicHttpBinding binding = new BasicHttpBinding();
ChannelFactory
ILookupItemManager svc = factory.CreateChannel();
LookupItemsByTypeResponse response = new LookupItemsByTypeResponse();
LookupItemsByTypeRequest request = new LookupItemsByTypeRequest();
------------------------------------------------------------------------------------
Programmatically Add Item in the Drop-down
1. Add a Repeating group (parent).
2. Add another Repeating group under the above group with same name as dropdown + row (thats just the way i am doing it).
3. Add two fields dropdown name+ rowvalue and dropdown name + rowdescription under it.
4. Bind the Original Dropdown to a repeating group.(with rowvalue and rowdescription).
Use AddItem method below to dynamically add the values in dropdown
strDropDownName -> Name of the Original Drop-down
root -> RootNavigation
parent -> root.SelectSingleNode("//my:myFields/" + strDropDownName, NamespaceManager); //pointer to repeating group
row -> XPathNavigator row = root.SelectSingleNode("//my:myFields/" + strDropDownName + "/" + strDropDownName + "Row", NamespaceManager); // group inside repeating group
Itemid -> from WCF
ItemName-> from WCF
private void AddItem(string strDropDownName, XPathNavigator root, XPathNavigator parent, XPathNavigator row, int itemId, string itemName)
{
XPathNavigator newNode = row.Clone();
if (itemId == -1)
{
newNode.SelectSingleNode("//my:myFields/" + strDropDownName + "/" + strDropDownName + "Row/" + strDropDownName + "RowValue", NamespaceManager).InnerXml = "";
}
else
newNode.SelectSingleNode("//my:myFields/" + strDropDownName + "/" + strDropDownName + "Row/" + strDropDownName + "RowValue", NamespaceManager).InnerXml = itemId.ToString();
newNode.SelectSingleNode("//my:myFields/" + strDropDownName + "/" + strDropDownName + "Row/" + strDropDownName + "RowDescrip", NamespaceManager).InnerXml = itemName;
parent.AppendChild(newNode);
}
1 comments:
Post a Comment