Sharepoint domyślnie umożliwia użytkownikowi pracę nad formularzami InfoPath 2007 poprzez wbudowaną przeglądarkę. Minusem korzystania z tego rozwiązania jest to, że przeglądarka działa w trybie pełnoekranowym.
Aby użytkownik nie musiał przełączać się do widoku pełnoekranowego formularza InfoPath, można w prosty sposób zmienić sposób jego pracy. Dzięki rozwiązaniu podanemu poniżej można łatwo stworzyć webpart który pozwoli na połączenie z listą typu Form Library i edycję pliku InfoPath 2007.

XMLFormView jest dostępna w bibliotece Microsoft.Office.InfoPath.Server.dll.
Poniżej najważniejsze elementy rozwiązania:
const string defaultxmlloc = "";
const string defaultxsnloc = "";
private string xmlloc = defaultxmlloc;
private string xsnloc = defaultxsnloc;
public XmlFormView XMLFormViewer;
public Label Label_Error;
#region PublicProperties
[Personalizable(PersonalizationScope.Shared)]
[WebBrowsable(true), WebDisplayName("XML Location")]
[WebDescription("URL of web-enabled InfoPath form")]
[Category("Miscellaneous")]
public string XML_Location
{
get
{return xmlloc;
}
set
{xmlloc = value;
}
}
[Personalizable(PersonalizationScope.Shared)]
[WebBrowsable(true)]
[WebDisplayName("XSN template URL")]
[WebDescription("URL of infopath form template")]
[Category("Miscellaneous")]
public string XSN_Location
{
get
{return xsnloc;
}
set
{xsnloc = value;
}
}
#endregion
#region SharepointLibraryConnection
[ConnectionConsumer("XML_Location")]
public void GetConnectionInterface(IWebPartField providerPart)
{FieldCallback callback = new FieldCallback(this.ReceiveField);
if (providerPart != null)
{
providerPart.GetFieldValue(callback);
}
}
public void ReceiveField(object field)
{
if (field != null)
{ xmlloc = field.ToString(); }
}
protected override void CreateChildControls()
{Label_Error = new Label();
XMLFormViewer = new XmlFormView();
if ((xsnloc.Length > 0) || (xmlloc.Length > 0))
{XMLFormViewer.EditingStatus = XmlFormView.EditingState.Editing;
Controls.Add(XMLFormViewer);
if ((xmlloc.Length > 0))
{XMLFormViewer.XmlLocation = xmlloc;
XMLFormViewer.XsnLocation = "";
}
else if ((xsnloc.Length > 0))
{XMLFormViewer.XmlLocation = "";
XMLFormViewer.XsnLocation = xsnloc;
}
try
{ XMLFormViewer.DataBind(); }
catch (System.ArgumentNullException exc)
{ Label_Error.Text = exc.Message; }
}
else
{ Label_Error.Text = Messages.ViewerNotConfigured; }
Controls.Add(Label_Error);
}
}
Poniżej link do screencasta z VI spotkania Polish Sharepoint Group na którym XMLFormView został stworzony:
MS-GROUPS>PSG>SPOTKANIE 06>Programowanie Forms Servers.zip
Autorem porady jest Michał Bojko.