infopathでgetListItemsつかってみた。infopathのデータ接続だと、クエリのxmlをhtmlエンコードしてしまうようで上手くつかえません。ので、直接jscriptで実装する事にしました。実装そのものは取り立てて特別な事をしていませんが、xslをセカンダリにロードしてマッピングするところがポイントです。
まず、infopathのコントローラの繰り返しテーブルを使って、ルートからmyField,myGroup1,myGroup2、さらにTitle,Created,Authorを用意して表組にします。で、getListItemsで取れたows_Title,ows_Created,ows_Authorアトリビュートをxslでマッピングするという仕組みです。
infopathのほうで表組が済んだら、セカンダリに以下のstlyleSheet.xslをロードしておきます。このxslには、getListItemsのレスポンスのxmlnsも書いておく必要があります。(例:xmlns:soap 等 )
styleSheet.xsl
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2009-09-30T00:14:38" xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:moss="http://schemas.microsoft.com/sharepoint/soap/" xmlns:rs='urn:schemas-microsoft-com:rowset' xmlns:z='#RowsetSchema' version="1.0"> <xsl:template match="/soap:Envelope"> <my:myGroup1> <xsl:apply-templates select="soap:Body/moss:GetListItemsResponse/moss:GetListItemsResult/moss:listitems/rs:data/z:row"/> </my:myGroup1> </xsl:template> <xsl:template match="z:row"> <my:myGroup2> <my:Title><xsl:value-of select="@ows_Title"/></my:Title> <my:Created><xsl:value-of select="@ows_Created"/></my:Created> <my:Author><xsl:value-of select="@ows_Author"/></my:Author> </my:myGroup2> </xsl:template> </xsl:stylesheet>
jscript
XDocument.DOM.setProperty("SelectionNamespaces", 'xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2009-09-30T00:14:38"');
var xmlHttpInst = null;
function getListItems()
{
try {
xmlHttpInst = new ActiveXObject( "Microsoft.XMLHTTP" );
if( xmlHttpInst ){
xmlHttpInst.open( "POST", "http://moss/_vti_bin/Lists.asmx", false );
xmlHttpInst.setRequestHeader( 'Content-Type','text/xml; charset=utf-8' );
xmlHttpInst.setRequestHeader( 'SOAPAction', 'http://schemas.microsoft.com/sharepoint/soap/GetListItems' );
xmlHttpInst.onreadystatechange = function(){
if ( xmlHttpInst.readyState == 4 ){
loadItems( xmlHttpInst.responseText );
}
};
xmlHttpInst.send( '<?xml version="1.0" encoding="utf-8"?><soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"><soap12:Body><GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">' +
'<listName>F569FAF0-F246-40DB-B78D-06682F0BBBFA</listName>' +
'<query><Query><Where><Geq><FieldRef Name="ID" /><Value Type="Counter">1</Value></Geq></Where></Query></query>' +
'<rowLimit>100</rowLimit>' +
'</GetListItems></soap12:Body></soap12:Envelope>'
);
}
}
catch ( e ){
XDocument.UI.Alert( "Cannot send request. " + e.message );
}
}
function loadItems( data ){
try
{
var xmlDoc = XDocument.CreateDOM();
xmlDoc.loadXML(data);
// セカンダリのDOMをロード
var xsltXmlDoc =XDocument.GetDOM( "styleSheet" );
// 適用
var transformedXml = xmlDoc.transformNode( xsltXmlDoc );
var transformedXmlDoc = XDocument.CreateDOM();
transformedXmlDoc.loadXML( transformedXml );
var documentNode = XDocument.DOM.selectSingleNode( "/my:myField/my:myGroup1" );
// 親ノードに昇ってリプレイス。
documentNode.parentNode.replaceChild( transformedXmlDoc.documentElement, documentNode );
}
catch ( e )
{
XDocument.UI.Alert( "Cannot read." + e.message);
}
}
function CTRL5_5::OnClick( eventObj )
{
getListItems();
}










