- - PR -
SharePointの物理パスを取得したい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-01-07 16:42
開発環境
SharePointのバージョン: Windows SharePoint Service 3.0(テスト環境) Microsoft Office SharePoint Server 2007(本番環境) 開発環境: Microsoft Visual Studio 2005 Tools for Applications(以下VSTA) Microsoft Office InfoPath 2007のカスタムインストールでインストールされます。 OS: Microsoft Windows XP Professional Version 2002 Service Pack 2 質問内容 SharePointのドキュメントライブラリに保存してあるエクセルファイルの存在チェック、及び現在開かれているかどうかのチェックを行いたいのですが ドキュメントライブラリ上のURLはわかるものの、物理パスがわからず存在チェックが行えません 上記問題に対して 1.相対パスから物理パスを取得する(Server.MapPathを使用する) 2.SharePoint作成時に一定の法則で物理パスが構成されているのじゃないか?と考え 物理ファイルの存在場所を探った と言う方法を取りました まず、2の方からですが、これは私でなく上司が手隙に簡単に調べただけですが、見つける事が出来ませんでした 上司も多忙であるため深く探ってはもらい辛く 私自身がSharePointが構築してあるPCを触る事が出来ないため、保留してあります そして、私自身で確認が行える1の方法なのですが (できればこれがベストと考える) まず、ASP.NETでない為 Server.MapPathがそのままでは Serverの部分が宣言されていないと言うエラーになり Serverオブジェクトの取得をしようと考えました System.Web.HttpContext.Current.Serverから取得しようとすると CurrentがNothingで返ってき Dim objService As System.Web.Services.WebService = New System.Web.Services.WebService と言う風に無理やりNewし Dim strPath As String = objService.Server.MapPath(URL) とすると 『HttpContextを使用できません。このクラスはASP.NET要求のコンテキストでのみ使用できます。』 と言ったエラーメッセーが表示されました 最初はVSTAと言う環境で使用するクラスを参照の追加を行わないと使用できなかったりと言う事が有ったので、何かを参照すればServerが使用できると考えていたのですが、上記エラーメッセージによりServer.MapPathはASP.NETでしか使用できないのかと考えが出てきました そもそも、空のWebServicesを作った所で無意味だとは思いますが・・・ エラー内容がそういった内容だったのでそうなのかなと ただ、通常のVisual Studio 2005で開発するウィンドウズアプリケーションの場合も、それで言うとServer.MapPathを使用出来ないと言う事になるかとおもいますが、それも使い勝手が悪いし何かしら方法が有るんじゃないかと考え質問させて頂いた次第です 現状Visual Studio 2005(VSTA以外の.NET環境)が使用出来ず Visual Studio 2005ではどうなのかと言う検証が自分ではできてないのですが VSTAも参照さえ追加すれば、Visual Studio 2005とほぼ同等のコードを組めると考えています ですので、VSTAに限らず、Visual Studio 2005の場合でも構わないので何かアドバイスをいただけたら助かります 以上、よろしくお願いいたします | ||||||||
|
投稿日時: 2009-01-07 18:28
Windows Internal Database または SQLServer 内に格納されている筈です。
http://technet.microsoft.com/ja-jp/library/cc288005.aspx チェックアウトなどの機能があるのに、普通の NTFS 上に置くわけがないかと。 SharePoint の API 使ってアクセスするべきでしょう。
| ||||||||
|
投稿日時: 2009-01-08 00:20
ちょっと調べてないけれど、これはおかしい。 なんか web.config の設定がおかしかったり、 ページの変なイベントのタイミングで参照しようとしてたりしませんか? _________________ かるあ のメモ と スニペット | ||||||||
|
投稿日時: 2009-01-08 08:43
まるくさん
未熟者のためイメージでしかおっしゃる意味をつかめていないのですが チェックアウト機能を持つVSSから想像するに、ファイルのデータはExcelファイルでも.xlsで保存されず別の形で保存され、DB上からアクセスすると言う型で考えるとよいのでしょうか SharePointのAPIと言うのも、まだ全然把握できていませんので調べてみようと思います ありがとうございました | ||||||||
|
投稿日時: 2009-01-08 09:07
かるあさん
そもそもweb.configが存在せず、app.configなら後から追加することが出来るのですが VSTAではなく、通常のVS2005ではウィンドウズアプリケーションでもweb.configが追加出来るものなのでしょうか? タイミングは SharePointサイトに発行してあるInfoPathフォームが開かれ、ユーザーのボタンクリックのイベントで行っています その際、ASP.NETとは違い処理をローカルPC上で行っていると思われるのでcurrentがNothingになるのだとは思います SharePointサイト(サーバー側)に置かれたInfoPathフォームを開き、VSTAのロジックをダウンロード、ローカルPC上の.net Framework環境で実行される と言う流れなのではないかと考えます 上記は、MessageBoxなどのクラスを使用可能な事からの推測で、確証があるわけではありませんが・・・ InfoPathの機能にブラウザ互換の機能があり、組んだコードをASP.NETに変換してくれる と言う物が搭載されているようなのですが、今回のシステム上それを行うと今度は 検索画面実装のために追加したWindows フォーム等が使えなくなるのじゃないかと考えます 以上で何か間違った理解している部分などありましたら、またアドバイスいただけると助かります なかなか確証の持てる資料を見つける事が出来ず、またそれを深く探るのに時間をあてることも出来ない状況で開発を行っているため、経験と推測からのお答になってしまいました 確証の持てない返答で申し訳ありません・・・ | ||||||||
|
投稿日時: 2009-01-08 10:27
↑だと思いますね。
もしかして、Windows アプリから Server オブジェクトを使おうとしているのですか? それは無理でしょう。IIS 経由で呼び出されないと。。。 --- あと、一応 SharePoint の API についてリンクを貼っておきます。 [参考1] SharePoint の API 利用について(Microsoft.SharePoint.dllの参照) http://msdn.microsoft.com/ja-jp/library/ms479423.aspx [参考2] チェックアウト状態を取得したい場合 http://msdn.microsoft.com/ja-jp/library/microsoft.sharepoint.spfile.checkoutstatus.aspx --- 私は VSTA 知識無しですが、InfoPath フォームはサーバ側で動作する事から、InfoPath フォームから API 使えば良いと思うんですけど。 Microsoft.SharePoint.dll は、WSS/MOSS インストール環境に存在しますので、VSTA で開発する際に、恐らく Microsoft.SharePoint.dll を開発環境にコピーするなりしないといけないでしょうね。 サーバ上に開発ツールをインストールしてしまうのが手っ取り早いです。 | ||||||||
|
投稿日時: 2009-01-08 11:31
まるくさん
やはりIIS経由でないとServerオブジェクトは使用できないんですね・・・ InfoPathはサーバーに発行してるものの、実際のコード部分はローカル上で実行されているんじゃないかと考えます 理由は先にかるあさんへの返信で述べたのに加え ローカルPCに.net Framework2.0がインストールされていないと実行できない ローカルPCにMicrosofot Officeインストール時に InfoPath .NET プログラミングサポートの、.NET Framework Version 2.0 用 .NET プログラミング サポート をインストールされていないと実行できない と言う点があるからです コードの実行に関してローカルPCの環境に依存している為、InfoPathのデザイン(フォーム)はサーバー上に有るが、コードの実行はローカルPC上で行われていると考え至ったしだいです それで言うとMicrosoft.SharePoint.dllも、各エンドユーザー端末に配布しないといけないのではないかと考えるのですが、そこに至ると私の判断では行動できないので、上司も含め検討してみたいと思います 今回のシステムの為にエンドユーザーにすでにインストール済みのInfoPathに加え、上記の.net Framework2.0やプログラミングサポートを追加インストールする事になっていますので、その時に配布できればそれも可能かもしれません (ライセンスの問題はまた調べて見ます) SharePointのAPIには SPFileクラスなどSharePoint側で使いやすそうな物が提供されている様なので、これを利用する事になれば、更に踏み込んだ開発が行えそうです 参考のURLまでいただきありがとうございました 2009/01/08 11:35 追記 下記URLにてMicrosoft.SharePoint.dllの参照方法が書かれていました http://forums.microsoft.com/msdn-ja/showpost.aspx?postid=2417114&siteid=7 その中に「MOSSサーバーの該当フォルダを参照して直接設定する」と言う手法も書かれていたので、それも踏まえ検討してみたいと思います [ メッセージ編集済み 編集者: エイジ 編集日時 2009-01-08 11:37 ] | ||||||||
|
投稿日時: 2009-01-08 11:53
SharePoint の物理パスの取得は、こんな感じでできたと思います。(たぶん)
昔書いたコードなので具体的に何やっているかはうろ覚えですが…。 (なぜか TryGetValue メソッド使ってますが、そのまま載せてておきます。不要かもしれません。)
InfoPath 側 (というか SharePoint の稼働 PC 以外の PC 上) では正常に動作しないかもしれません。 その場合は、カスタム Web サービスを作って SharePoint 上に配置する必要があるかもしれません。 SPIisSettings.Path プロパティ (Microsoft.SharePoint.Administration) _________________ C#と諸々 [ メッセージ編集済み 編集者: よこけん 編集日時 2009-01-08 11:56 ] |