none
EventからのListItemのデータの取得について RRS feed

  • 質問

  • 初めてお世話になります。

    SharePointで作成したListに変更(追加・更新)があった際に、List全体の内容をExcelなど
    外部に出力したいと考えています。

    EventRecieverにより、propertiesからListItemなどは取得できるのですが、
    ListItemが持っている情報(任意で追加した列の値)を取得することができません。
    List毎に異なる列を持っている場合にも対応できるよう、随時ListのFieldを取得して値を取得したいのですが。。。

    この様な動作は可能でしょうか。
    サンプル等交えてお教え頂けると大変助かります。

    また、捕捉の情報が必要であれば、ご指摘頂けるとありがたいです。

    宜しくお願い致します。

    2010年3月24日 10:20

回答

すべての返信

  • ご要件がいまひとつ判りませんので、お役に立てるかは微妙なのですが・・・
    SharePoint標準のWebサービス経由では駄目でしょうか?

    変更をトリガにして、Webサービスをコールすれば、あとは出力先をどうするかだけかな、と思いますが。

    参考:
    SharePointのGetListitemで値を取得する
    http://sharepoint.boo.jp/index.php?e=427

    GetListItemで大量の行列情報をエクスポートする
    http://sharepoint.boo.jp/index.php?e=433

    • 編集済み 中村 和彦 2010年3月25日 3:30 参考情報追加
    • 回答としてマーク FOX-KID 2010年4月8日 7:56
    2010年3月25日 3:29
  • 要領を得ず申し訳ありません。
    少し具体的にお話させて頂きます。

    「品名」「更新日」「金額」「個数」「合計金額」の列を作成したListから、アイテムが追加/更新/削除されたタイミングで
    それぞれの値を取得し、まずはtextファイルにでも書き出したいと考えています。

    Listの列は必ずこの列ではなく、「顧客名」など名称が異なる場合にも対応したいと考えています。

    ListItemを特定して、 string str1 = ListItem[列名].toString(); のような形で値を取得することはできると思うのですが、
    この場合は、列名が事前に分かっていることが前提となると思いますので、変化に対応できません。
    そこで、Listの列名を取得する方法がないかと思い、質問致しました。

    ご回答頂いたwebサービスですが、初心者のため利用方法(記述方法)がわかっていないため、解決できるかまだわかっておりません。
    MSDNのサンプルを見ながら、一度試させて頂きます。

    ありがとうございました。

    2010年3月26日 11:06
  • 追加で質問をさせて頂きたいと思います。
    お教えいただいたGetListItemから、リストの情報を取得することができました。
    まだ、、必要な情報のみに絞ることができておらず、全てのデータを取得していますが。

    帰ってきたXmlNodeから、各項目の情報を配列などで持ちたいのですが
    属性の名前を抽出することができません。

    以下のようなコードでXMLを読み込もうとしているのですが、アドバイスをいただけませんでしょうか。

     StringBuilder output = new StringBuilder();
     ArrayList attlist = new ArrayList();
    
    using (XmlReader reader = XmlReader.Create(new StringReader(strR)))
    {
        XmlWriterSettings ws = new XmlWriterSettings();
        ws.Indent = true;
        ws.ConformanceLevel = ConformanceLevel.Auto;
        using (XmlWriter writer = XmlWriter.Create(output,ws))
        {
            while (reader.Read())
            {
                // Attributesを持っている場合、ArrayListに入れる。
                if (reader.HasAttributes == true)
                {
                    for (int k = 0; k < reader.AttributeCount; k++)
                    {
                        attlist.Add(reader.GetAttribute(k));
                    }
                }
        // Element名に:が使えないので変換
                string newName = "";
                if (reader.Name.Contains(":"))
                {
                    newName = reader.Name.Remove(0,reader.Name.IndexOf(":")+1);
                }
    
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element:
                        writer.WriteStartElement(newName);
                        break;
    
                    case XmlNodeType.Text:
                        writer.WriteString(reader.Value);
                        break;
    
                    case XmlNodeType.XmlDeclaration:
                    case XmlNodeType.ProcessingInstruction:
                        writer.WriteProcessingInstruction(reader.Name, reader.Value);
                        break;
                    case XmlNodeType.Comment:
                        writer.WriteComment(reader.Value);
                        break;
                    case XmlNodeType.EndElement:
                        writer.WriteFullEndElement();
                        break;
                }
            }
        }
    }

    また、読み込みたいXMLNodeは以下のような形です。

    <row ows_ContentTypeId="0x0100372835D459559246979735A52458F470" ows_Title="aaaaaaaaaaaaaaaaaaaaaa" ows__x901a__x756a_="1.00000000000000" ows__x65e5__x4ed8_="2010-03-17T15:00:00Z" ows__x91d1__x984d_="2000.00000000000" ows_ID="1" ows_ContentType="アイテム" ows_Modified="2010-03-31T05:05:19Z" ows_Created="2010-03-17T00:56:20Z" ows_Author="1073741823;#システム アカウント" ows_Editor="1073741823;#システム アカウント" ows_owshiddenversion="76" ows_WorkflowVersion="1" ows__UIVersion="512" ows__UIVersionString="1.0" ows_Attachments="0" ows__ModerationStatus="0" ows_LinkTitleNoMenu="aaaaaaaaaaaaaaaaaaaaaa" ows_LinkTitle="aaaaaaaaaaaaaaaaaaaaaa" ows_SelectTitle="1" ows_Order="100.000000000000" ows_GUID="{8F2BF557-E88D-405D-9996-7F913F8FF9B9}" ows_FileRef="1;#001/Lists/list4/1_.000" ows_FileDirRef="1;#001/Lists/list4" ows_Last_x0020_Modified="1;#2010-03-17T00:56:20Z" ows_Created_x0020_Date="1;#2010-03-17T00:56:20Z" ows_FSObjType="1;#0" ows_PermMask="0x7fffffffffffffff" ows_FileLeafRef="1;#1_.000" ows_UniqueId="1;#{E6CE5E42-4BDC-4AEE-A82C-FF0BCFA33DF6}" ows_ProgId="1;#" ows_ScopeId="1;#{9E7AA433-2E30-46E3-A9EE-CBE023F231E7}" ows__EditMenuTableStart="1_.000" ows__EditMenuTableEnd="1" ows_LinkFilenameNoMenu="1_.000" ows_LinkFilename="1_.000" ows_ServerUrl="/001/Lists/list4/1_.000" ows_EncodedAbsUrl="http://wss/001/Lists/list4/1_.000" ows_BaseName="1_" ows_MetaInfo="1;#" ows__Level="1" ows__IsCurrentVersion="1" xmlns:z="#RowsetSchema">
    
    

    どうか、よろしくお願い致します。 

    2010年3月31日 5:28
  • reader.MoveToNextAttribute());を利用することで、読み込みの件解決いたしました。

    お騒がせし、申し訳ございませんでした。
    ありがとうございました。

    2010年4月8日 7:56