2011-06-21 15 views
0

クライアントサイドで提供されているWebServicesを使用してSharePoint 2007システムからレポートを作成しています(これはすべて開発者の制限によるものです。エクササイズはSharePointデザイナーでは非常に簡単です)。XSL、クライアント側のJavaScript変数へのアクセス

現在、私は作業報告書を持っています。 JavaScriptでは、WebサービスへのCAMLクエリを生成するために使用される3つのパラメータ(「開始日」、「終了日」および「ビジネスカテゴリ」)を渡します。 XMLレスポンスが返され、(一部の書式のクリーンアップ後に)XSLTがインポートされ(外部ファイル)、直接適用され、その結果がページのDIVにポンピングされます。すべてうまくいく。

しかし、私は実際に入力パラメータ(日付とカテゴリ)をレポートに表示したいと思います。これを行うには少なくとも2つのkludgyオプションがあります。

1)ディスプレイDIVの外に値を出力します。これはうまくいくでしょうが、それほど有用ではありません。

2)XSLの値のプレースホルダーを表示してから、表示する前に一連の置換を実行します。これはただ気分が...奇妙です。

3)変換前のXMLパケットにノードを手動で追加し、XSLTで通常の値にアクセスします。これは私にとっては一番きれいだと思われますが、荷物もいくつか持っています。

これを行う「正しい」方法はありますか?いずれにせよ、それはどれですか? 、あなたがJavaScriptでXSLTにパラメータを渡すことができ

// Set the URL of the XSL to apply 
reportXSLURL = "BusinessCategoryReport.xsl"; 


    // Set the input variables. 
var CurCategory = DP_QueryString.get("ForCategory", "first"); 
var CurFrom = DP_QueryString.get("ForFrom", "first"); 
var CurTo = DP_QueryString.get("ForTo", "first"); 


* * Soap Call Censored (Too Hot for the Internet) * * 

    // Load the data 
function ProcessResponse(ResponseText) { 

     // Create and load the serviceXML 
    var serviceXML = new DP_XML(); 
    serviceXML.parse(ResponseText); 

     // Create and Load the XSL 
    var reportXSL = new DP_XML(); 
    reportXSL.load(reportXSLURL); 

     // Clean Up 
    CleanSharePointColumn(serviceXML.Doc, "ows_Duration", "CalculatedField"); 
    CleanSharePointColumn(serviceXML.Doc, "ows_Incident_x0020_Manager_x0028_s_x", "UserList"); 
    CleanSharePointColumn(serviceXML.Doc, "ows_Application_x0020__x0028_EAI_x00", "LookupList"); 
    CleanSharePointColumn(serviceXML.Doc, "ows_Business_x0020_Category", "LookupList"); 
    CleanSharePointColumn(serviceXML.Doc, "ows_Incident_x0020_Start", "DateTime_Min"); 
    CleanSharePointColumn(serviceXML.Doc, "ows_Incident_x0020_End", "DateTime_Min"); 

     // Present the Results 
    document.getElementById("DataDisplay").innerHTML = serviceXML.Doc.transformNode(reportXSL.Doc); 

}; 

答えて

0

ちょうどあなたのスタイルシートのルートで

<xsl:param name="myparam" />

を置く:

はここで説明するためにいくつかの(省略)コードです。 javascriptのXSLTProcessorオブジェクトのsetParameterメソッドを調べてください。最初の2を超え

function transform(inputXml, xslt) { 
    var xsltProcessor; 
    var toReturn; 

    if (window.XSLTProcessor) { 
     xsltProcessor = new XSLTProcessor(); 
     xsltProcessor.importStylesheet(xslt); 
     if (arguments.length > 2 && arguments.length % 2 == 0) { 
      for (var i = 0; i < Math.floor((arguments.length)/2)-1; i++) { 
       xsltProcessor.setParameter(null, arguments[2*i+2],arguments[2*i+3]); 
      } 
     } 
     toReturn = xsltProcessor.transformToDocument(inputXml); 
    } 
    else if (window.ActiveXObject) { 
     toReturn = makeDocFromString(inputXml.transformNode(xslt)); 
    } 
    else { 
     toReturn = "Unable to transform"; 
    } 
    return toReturn; 
} 

任意のパラメータは、名前/値ペアがパラメータとしてXSLTに渡されるとして扱われます。ここで私はJavaScriptを使用する方法です。 inputXmlxsltは両方ともXMLドキュメントです。

EDIT:ちょっと気付いたことですが、この関数はヘルパーメソッド 'makeDocFromString'を使用していることを忘れていました。これはXMLドキュメントのソースを文字列入力として受け取り、実際のXMLドキュメントを返します。その関数はその.js内の他の場所で定義しますが、標準ライブラリの一部ではありません。