2011年11月23日水曜日

Firefox Googleツールバー代替方法

Firefox5.0以降、 Googleツールバーが標準では使えなくなってしまいました。
いろいろなサイトで代替方法を紹介してありますが、自分的にはFirefox標準の検索バーをGoogleツールバーなみに強化出来れば十分なので、その方法を紹介します。

1.検索バーの横に履歴表示ボタンを追加する
userChrome.cssに以下のコードを追加します。なければ新規に作成します。

/* 検索バーの右側に履歴を出すボタンを表示 */
#searchbar .autocomplete-history-dropmarker {
    display: -moz-box !important;
    -moz-binding: url("chrome://global/content/bindings/autocomplete.xml#history-dropmarker");
}


userChrome.cssは以下の場所にあります。
Windows 2000, XP %APPDATA%\Mozilla\Firefox\Profiles\(英数字の羅列).(プロファイル名)\chrome\userChrome.css
Windows Vista, 7 %USERPROFILE%\AppData\Roaming\Mozilla\Firefox\Profiles\(英数字の羅列).(プロファイル名)\Chrome\userChrome.css

履歴表示

2.アドオン「Searchbar Autocomplete Order」を導入する
こちらのアドオンで検索履歴を検索順に並べかえることが出来るようになります。
https://addons.mozilla.org/ja/firefox/addon/searchbar-autocomplete-order/
Searchbar Autocomplete Order

3.アドオン「SearchWP」を導入する
このアドオンで、検索バーから「ページ内検索」と「ハイライト表示」が出来るようになります。
https://addons.mozilla.org/ja/firefox/addon/searchwp/
SearchWP

4.アドオン「SearchBox Sync」を導入する
このアドインで検索バーと検索エンジンのキーワードを同期することが出来るようになります。
https://addons.mozilla.org/ja/firefox/addon/searchbox-sync/
SearchBox Sync

2011年11月22日火曜日

ログオンスクリプトでスクリーンセイバーの伝言板を統一する方法

企業内でスクリーンセイバーの伝言板を統一したいというニーズは有るかと思います。
それに対応するためのVBスクリプトを書きました。
サーバーに共有フォルダを作成し、「伝言板.txt」を保存することで、表示する文字列を簡単に変更することが可能です。

Dim WshShell

'コンフィルファイル名
configname="\\Server\伝言板.txt"

'値を代入する変数と、検索するキーと、デフォルト値
Value = readconf("TXT","0")
'Wscript.echo Value

Set WshShell=WScript.CreateObject("WScript.Shell")
WshShell.RegWrite "HKCU\Control Panel\Screen Saver.Marquee\Text",Value, "REG_SZ"
'終了
WScript.quit

'読みとり関数
Private Function readconf(key,def)

  Dim c,conf,LD

  Set c=CreateObject("Scripting.FileSystemObject")
  Set conf=c.OpenTextFile(configname)

  readconf=def
  key=key & "="

  Do While conf.AtEndOfStream <> True

    LD = conf.readline
    If (left(trim(LD),1)<>"#") and (Len(Trim(LD))<>0) then
      If len(key) < len(LD) then
        If left(LD,len(key))=key then
          readconf=right(LD,len(LD)-Len(key))
        End if
      End if
    End if

  Loop

  conf.close
  set c = nothing

End Function

伝言板.txtの書き方

TXT=こんにちは

VB.NETからNotesDBへアクセスするサンプルコード

自分の環境では「参照の追加」は不要ですが、環境によっては必要かもしれませんので、ご注意を。

        Dim session As Object
        Dim db As Object
        Dim view As Object
        Dim doc As Object

        Dim strDominoServer As String
        Dim strDBName As String
        Dim strViewName As String

        Dim NSubject As Object
        Dim strSubject As String

        ' ***NotesDBからの読み込み
        ' *** セッションの確立
        session = CreateObject("Notes.NotesSession")

        ' *** ノーツDBの取得
        db = session.GetDatabase(strDominoServer, strDBName)
        If (Not db.IsOpen()) Then
            ' *** エラーメッセージの表示
            MsgBox("データベースが見つかりませんでした", vbOKOnly + vbCritical)
            GoTo load_exit
        End If

        ' *** ビューの取得
        view = db.GetView(strViewName)
        If (view Is Nothing) Then
            ' *** エラーメッセージの表示
            MsgBox("ビューが見つかりませんでした", vbOKOnly + vbCritical)
            GoTo load_exit
        End If

        ' *** ビューより最初の文書を取得
        doc = view.GetFirstDocument()

        ' *** ビューより全文書を読み込むまでループ
        Do While (Not (doc Is Nothing))
            'タイトル
            NSubject = doc.GetItemValue("Subject")
            strSubject = NSubject(0).ToString

            doc = view.GetNextDocument(doc)
        Loop

load_exit:

        ' *** オブジェクトの破棄
        db = Nothing
        session = Nothing

2011年11月10日木曜日

IE8のメニューバーをIE6風にアドレスバーの上に表示するVBスクリプト

IE1IE2

Dim WshShell

Set WshShell=WScript.CreateObject("WScript.Shell")
WshShell.RegWrite "HKCU\Software\Microsoft\Internet Explorer\Toolbar\WebBrowser\ITBar7Position",1, "REG_DWORD"

WScript.Echo("変更終了")

WScript.quit

上記のVBスクリプトを拡張子「vbs」(例:ie.vbs)で保存するとそのまま使えます。

2011年11月9日水曜日

LotusScriptでSQLServerへアクセスする方法

Sub Click(Source As Button)
    Dim cn As Variant
    Dim rs As Variant
    Dim strSQL As String
    Dim strEmployeeID As String
    Dim ws As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument

    Set uidoc = ws.CurrentDocument
    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")

    On Error Goto ConnectionErr
    'SQLServer接続文字列
    cn.ConnectionString = "Provider=SQLOLEDB ;" & _
    "Password='' ; User ID=sa;Initial Catalog=Northwind;Data Source=SQLServer"
    strEmployeeID = Trim(uidoc.FieldGetText("EmployeeID"))

    'SQL文
    strSQL = "SELECT EmployeeID, LastName " & _
    "FROM dbo.Employees " & _
    "WHERE (EmployeeID = " & strEmployeeID & ")"

    '接続開始
    Call cn.Open
    'SQL文発行
    Call rs.Open(strSQL,cn)
    '取得した値をフィールドにセット
    Call uidoc.FieldSetText("LastName",Trim(rs.Fields("LastName").Value))
    'Recordsetクローズ
    Call rs.Close
    'Connectionクローズ
    Call cn.Close
    '文書を更新する
    Call uidoc.Refresh

ConnectionExit:
    Exit Sub

ConnectionErr:
    Resume  ConnectionExit
End Sub

2011年11月8日火曜日

iTextsharpを利用してASP.NETでPDFファイルを作成する

先日JAVAのサンプルコードを公開致しましたが、そのASP.NET(VB.NET)版です。
iTextsharpは、JAVAのiTextの.NET版ですので、書き方は大きな違いはありません。

iTextsharpのライブラリを以下のサイトよりダウンロードして下さい。
http://sourceforge.net/projects/itextsharp/files/itextsharp/
日本語を表示させるには「iTextAsian.dll」も必要です。
http://sourceforge.net/projects/itextsharp/files/extras/

1.ソリューションエクスプローラーのプロジェクトのところで右クリックをし、「参照の追加」をクリック。
1.参照の追加

2.「itextsharp.dll」を選択。
2.iTextsharp_dll

3.「itextasian.dll」を選択。
3.iTextAsian_dll

4.以下の様に表示されればOKです。
4.追加後

5.以下のソースを実行してブラウザ内の別タブ(別窓)でPDFファイルが表示されればOKです。

'iTextSharp関連の名前空間
Imports iText = iTextSharp.text
Imports iPdf = iTextSharp.text.pdf
Imports iFont = iTextSharp.text.Font
Imports iBaseColor = iTextSharp.text.BaseColor

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Button1_Click (ByVal sender As Object, _
                                      ByVal e As System.EventArgs) Handles Button1.Click

        Dim strPDFName As String = "Sample.pdf"

        'iText ドキュメントを作成
        Dim doc As iText.Document = _
               New iText.Document(iText.PageSize.A4, 50, 50, 50, 50)
        Dim iPDFWriter As iPdf.PdfWriter = _
               iPdf.PdfWriter.GetInstance (doc, New IO.FileStream _
                        (Request.MapPath("") & "/" & strPDFName, IO.FileMode.Create))

        Dim pageSize As iText.Rectangle = doc.PageSize
        iPDFWriter.SetBoxSize("art", _
                    New iText.Rectangle(36, 50, pageSize.Width() - 50, _
                                                   pageSize.Height() - 36))

        'フォントを設定
        Dim font As iFont = New iText.Font(DefaultBaseFont(), 12, iFont.NORMAL)
        Dim font_RED As iFont = _
              New iText.Font(DefaultBaseFont(), 12, iFont.NORMAL, iBaseColor.RED)

        'ヘッダー・フッターの設定
        Dim events As New HeaderFooterPage()
        iPDFWriter.PageEvent = events

        '出力開始
        doc.Open()

        '出力するPDFに説明を付与
        doc.AddAuthor("作成者")
        doc.AddSubject("iTextサンプル")

        '文書に要素を追加
        doc.Add(New iText.Paragraph("おはよう", font))
        doc.Add(New iText.Paragraph("こんにちは", font_RED))

        '出力終了
        doc.Close()

        '別タグに表示
        Dim sbScript As System.Text.StringBuilder = New System.Text.StringBuilder

        With sbScript
            .Append("<script language='javascript'>" & vbCrLf)
            .Append(vbTab & "window.open('" & strPDFName & "')" & vbCrLf)
            .Append("</script>")
        End With

        ClientScript.RegisterClientScriptBlock _
                                              (Me.GetType(), "openwin", sbScript.ToString)
    End Sub

    Public Function DefaultBaseFont() As iPdf.BaseFont
        'フォントのファイル名からフルパスを得る
        Dim base As iPdf.BaseFont
        base = iPdf.BaseFont.CreateFont(Microsoft.Win32.Registry.CurrentUser. _
               OpenSubKey("Software"). _
               OpenSubKey("Microsoft"). _
               OpenSubKey("Windows"). _
               OpenSubKey("CurrentVersion"). _
               OpenSubKey("Explorer"). _
               OpenSubKey("Shell Folders"). _
               GetValue("Fonts").ToString() + "\msgothic.ttc, 1", _
                                   iPdf.BaseFont.IDENTITY_H, iPdf.BaseFont.EMBEDDED)
        DefaultBaseFont = base
    End Function
End Class

'ヘッダー・フッター設定
Public Class HeaderFooterPage
    Inherits iPdf.PdfPageEventHelper

    Public Overrides Sub OnEndPage _
                  (ByVal writer As iPdf.PdfWriter, ByVal document As iText.Document)
        MyBase.OnEndPage(writer, document)

        ' 初期化
        Dim cb As iPdf.PdfContentByte
        cb = writer.DirectContent

        Dim pageNo As String = writer.PageNumber.ToString()
        Dim pageSize As iText.Rectangle = document.PageSize

        'ヘッダー出力
        cb.BeginText()

        cb.SetFontAndSize(HeaderFooterBaseFont, 8)
        cb.SetTextMatrix(pageSize.GetLeft(40), pageSize.GetTop(30))
        cb.ShowTextAligned(iText.Element.ALIGN_RIGHT, _
                                   "ヘッダー", pageSize.Width - 20, pageSize.GetTop(30), 0)

        cb.EndText()

        ' フッター出力
        cb.BeginText()

        cb.SetFontAndSize(HeaderFooterBaseFont, 8)
        cb.SetTextMatrix(pageSize.GetLeft(40), pageSize.GetBottom(30))
        cb.ShowTextAligned(iText.Element.ALIGN_CENTER, _
                                   pageNo, pageSize.Width / 2, pageSize.GetBottom(30), 0)

        cb.EndText()
    End Sub

    Public Function HeaderFooterBaseFont() As iPdf.BaseFont
        'フォントのファイル名からフルパスを得る
        Dim base As iPdf.BaseFont
        base = iPdf.BaseFont.CreateFont(Microsoft.Win32.Registry.CurrentUser. _
               OpenSubKey("Software"). _
               OpenSubKey("Microsoft"). _
               OpenSubKey("Windows"). _
               OpenSubKey("CurrentVersion"). _
               OpenSubKey("Explorer"). _
               OpenSubKey("Shell Folders"). _
               GetValue("Fonts").ToString() + "\msgothic.ttc, 1", _
                                   iPdf.BaseFont.IDENTITY_H, iPdf.BaseFont.EMBEDDED)
        HeaderFooterBaseFont = base
    End Function
End Class

2011年11月2日水曜日

OpenXMLを使用して、サーバーサイドでExcelファイルを生成(4)

データ読み込み編

Imports System.IO
Imports OfficeOpenXml

Protected Sub Button1_Click (ByVal sender As Object, _
                                   ByVal e As System.EventArgs) Handles Button1.Click

       Dim strFileName As String = "existingFile.xlsx"
       Dim strFilePath As String = Server.MapPath(strFileName)
       Dim existingFile As FileInfo = New FileInfo(strFilePath)

       Using xlPackage As New ExcelPackage(existingFile)
           Dim worksheet As ExcelWorksheet = xlPackage.Workbook.Worksheets(1)
           Dim intCol As Integer = 1

           For intRow As Integer = 1 To 5
               Label1.Text &= worksheet.Cells(intRow, intCol).Value & "<br />"
           Next intRow
       End Using

End Sub

サンプルは単純にラベルへ書き込んでいますが、DataGridView等へデータを流すことも可能かと思います。
それから、計算式そのものを参照したいときは、「Formula」を使用します。「Value」では計算結果の値が返されます。

OpenXMLを使用して、サーバーサイドでExcelファイルを生成(3)

テンプレート使用編

Imports System.IO
Imports OfficeOpenXml

Protected Sub Button1_Click(ByVal sender As Object, _
                                    ByVal e As System.EventArgs) Handles Button1.Click
        'テンプレートファイルの場所
        Dim strFileTemplate As String = Server.MapPath("templateFile.xlsx")
        Dim strFileName As String = "newFile.xlsx"
        Dim strFilePath As String = Server.MapPath(strFileName)
        Dim templateFile As New FileInfo(strFileTemplate)
        Dim newFile As New FileInfo(strFilePath)

        Dim strData() As String = _
               {"鉛筆", "消しゴム", "ボールペン", "サインペン", "修正ペン"}

        If newFile.Exists Then
            newFile.Delete()
            'ファイルが存在する場合は削除します。
            newFile = New FileInfo(strFilePath)
        End If

        'ExcelPackage クラスを利用してデータセットのデータをシートにマッピング
        Using xlPackage As ExcelPackage = _
            New ExcelPackage(newFile, templateFile)

            Dim worksheet As ExcelWorksheet = _
                                        xlPackage.Workbook.Worksheets("Sheet1")

            Dim ColumnIndex As Integer = 0
            Dim rowIndex As Integer = 0

            For i = 1 To strData.Length
                worksheet.Cells(i + 1, 1).Value = strData(i - 1)
            Next i

            xlPackage.Save()
        End Using

        Response.Redirect(strFileName)

End Sub

テンプレートファイル
templateFile

プログラム実行後
templateFile2

2011年11月1日火曜日

OpenXMLを使用して、サーバーサイドでExcelファイルを生成(2)

EPPlusを使用した、Webアプリのサンプルプログラム(新規作成編)

Imports System.IO
Imports OfficeOpenXml

Protected Sub Button1_Click(ByVal sender As Object, _
                                    ByVal e As System.EventArgs)  Handles Button1.Click
        'ファイルの場所
        Dim strFileName As String = "newFile.xlsx"
        Dim strFilePath As String = Server.MapPath(strFileName)
        Dim newFile As FileInfo = New FileInfo(strFilePath)

        Dim strData() As String = _
               {"品名", "鉛筆", "消しゴム", "ボールペン", "サインペン", "修正ペン"}

        Dim i As Integer

        If newFile.Exists Then
            newFile.Delete()
            'ファイルが存在する場合は削除します。
            newFile = New FileInfo(strFilePath)
        End If

        'ExcelPackage クラスを利用してデータセットのデータをシートにマッピング
        Using xlPackage As ExcelPackage = New ExcelPackage(newFile)

            Dim worksheet As ExcelWorksheet = _
                   xlPackage.Workbook.Worksheets.Add("Sheet1")

            For i = 1 To strData.Length
                worksheet.Cells(i, 1).Value = strData(i - 1)
            Next  i

            'ヘッダーとなる項目を装飾する
            Using r As ExcelRange = worksheet.Cells(1, 1)
                '塗りつぶしの色を指定
                r.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid
                r.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.SkyBlue)

                '中央揃え
                r.Style.HorizontalAlignment = Style.ExcelHorizontalAlignment.Center
            End Using

            xlPackage.Save()

        End Using

        Response.Redirect(strFileName)

End Sub

このサンプルは単純ですが、当然ADO.NETやLINQを使用して、DBからデータを取得することも可能です。

newFile

OpenXMLを使用して、サーバーサイドでExcelファイルを生成(1)

イントラ環境において、サーバーサイドでExcelファイルを生成したいというニーズは結構あります。
DataGridViewで対応していたのですが、Excel2007で開きますと、開くことは出来るのですが、以下のメッセージが表示が出てしまいどうも気持ち悪いです。

ExcelError

また、OpenOfficeでは開くことも出来ないです。

そこで注目したは『OpenXML』です。以前、VSUGのセミナーにてMSエバンジェリスト小高氏がセッションで紹介していたのを記憶していました。
「System.IO.Packing API」や「Open XML Format SDK」を使う手法を紹介していましたが、それ以外に「ExcelPackage」というのがCodePlexにあります。
その派生版?の「EPPlus」のというライブラリもありまして、こちらの方が使い勝手が良いのでご紹介致します。

EPPlus-Create advanced Excel 2007 spreadsheets on the server

Excel2003等の過去のバージョンでも互換機能パックを入れる事により、開くことが出来ます。
http://www.microsoft.com/downloads/details.aspx?FamilyID=941b3470-3ae9-4aee-8f43-c6bb74cd1466&displayLang=ja

サンプルソースがC#なので、VB.NETのコードを順次アップしています。

2011年10月31日月曜日

InPrivate フィルターを IE 起動時にオンする方法

1.レジストリをいじる。

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Safety\PrivacIE]
"StartMode"=dword:00000001
(StartModeはなければ作成する)

2.IEを起動するのに使用するショートカットを別途作成し、「-private」のスイッチを追加する。
InPrivate
リンク先を以下の様にする

"C:\Program Files\Internet Explorer\iexplore.exe" -private

2011年10月27日木曜日

iTextを利用してJAVAでPDFファイルを作成する

現在のWebシステムにおいて帳票の出力を行う場合、PDF形式を用いるのがベターな選択肢と思います。
一般的なオープンソースのライブラリとして「iText」が有名で、「JAVA iText」で検索するとたくさんのサンプルソースがヒットします。
しかしながら、2011年現在ではそのサンプルソースが古くなってしまい、そのままコピーペーストしても動かないことがあります。
2011年現在で動作するサンプルコードを掲載致します。

iTextのライブラリを以下のサイトよりダウンロードして下さい。
http://itextpdf.com/
日本語を表示させるには「iTextAsian.jar」も必要です。
http://itext.svn.sourceforge.net/viewvc/itext/book/lib/itext-asian.jar?view=log

1.[WEB-INF]-[lib]にライブラリをコピーして下さい。
itext2

2.[プロジェクト]-[プロパティ]から[Javaのビルド・パス]を選択して、[ライブラリー]タブから[外部JARの追加]ボタンをクリックし、上記のライブラリを追加して下さい。
itext1

3. 以下のソースを実行してブラウザ内でPDFファイルが表示されればOKです。

package testServlet;

import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfWriter;

public class hello extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();

        try {
            // 出力先を指定し、文書をPDFとして出力
            Document doc = new Document(PageSize.A4, 50, 50, 50, 50);
            PdfWriter pdfwriter = PdfWriter.getInstance(doc, byteOut);

            Rectangle pageSize = doc.getPageSize();
            pdfwriter.setBoxSize(
                    "art",
                    new Rectangle(36, 50, pageSize.getWidth() - 50, pageSize
                            .getHeight() - 36));

            // 日本語フォントの設定
            Font font = new Font(BaseFont.createFont("HeiseiKakuGo-W5",
                    "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED),18);

            Font font_red = new Font(BaseFont.createFont("HeiseiKakuGo-W5",
                    "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED), 18);
            font_red.setColor(BaseColor.RED);

            // ヘッダー・フッター設定
            pdfwriter.setPageEvent(new PdfPageEventHelper() {
                //ヘッダーのフォント
                Font font_header = new Font(BaseFont.createFont(
                        "HeiseiKakuGo-W5", "UniJIS-UCS2-H",
                        BaseFont.NOT_EMBEDDED), 10, Font.ITALIC);

                //フッターのフォント
                Font font_page = new Font(BaseFont.createFont(
                        "HeiseiKakuGo-W5", "UniJIS-UCS2-H",
                        BaseFont.NOT_EMBEDDED), 9, Font.NORMAL);

                @Override
                public void onEndPage(PdfWriter writer, Document document) {
                    Rectangle rect = writer.getBoxSize("art");

                    //ヘッダー表示
                    Phrase header = new Phrase("ヘッダー", font_header);

                    ColumnText.showTextAligned(writer.getDirectContent(),
                            Element.ALIGN_LEFT, header, rect.getLeft(),
                            rect.getTop(), 0);

                    //フッター(ページ)表示
                    Phrase page = new Phrase(String.format("- %d -",
                            writer.getPageNumber()), font_page);

                    ColumnText.showTextAligned(writer.getDirectContent(),
                            Element.ALIGN_CENTER, page,
                            (rect.getLeft() + rect.getRight()) / 2,
                            rect.getBottom(), 0);

                }

            });

            // 出力開始
            doc.open();

            // 出力するPDFに説明を付与
            doc.addAuthor("作成者");
            doc.addSubject("iTextサンプル");

            // 文書に要素を追加
            doc.add(new Paragraph("おはよう", font));
            doc.add(new Paragraph("こんにちは", font_red));

            // 出力終了
            doc.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        }

        // ブラウザへの出力
        response.setContentType("application/pdf");
        response.setContentLength(byteOut.size());
        OutputStream out = response.getOutputStream();
        out.write(byteOut.toByteArray());
        out.close();
    }
}

2011年10月25日火曜日

SQLServer2005のDataフォルダを規定値から変更したい

後から変更出来ますが、インストール時にあらかじめ設定しておいた方が気持ちが良いです。
「インストールするコンポーネント」ダイアログで「詳細設定」をクリックすることで、参照先を変更可能。
その際、変にフォルダを作らず単純に「D:\」を選択。
そうすると、「D:\MSSQL.1\MSSQL」と作成されます。

ASP.NET セキュリティ例外エラー

--------開発環境--------
開発言語:Visual Studio 2008/2005 VB
Microsoft .Net Framework 2.0
OS: Windows Server 2003 R2
DB:SQL Server 2005
Team Foundation Server 2008をインストール済み
このような環境下で自作のWebアプリをアップすると以下の様なエラーが発生してしました。
----------------------------------
セキュリティ例外
説明: このアプリケーションはセキュリティ ポリシーで許可されていない操作を実行しようとしました。このアプリケーションで必要なアクセス許可を取得するには、システム管理者に相談するか、構成ファイルでアプリケーションの信頼レベルを変更してください。
例外の詳細: System.Security.SecurityException: 型 'System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' のアクセス許可の要求に失敗しました。
----------------------------------
Team Foundation Server 2008が入っていないサーバーだと問題ない・・・。
いろいろと調べていたら、SharePointServiceをインストールされている環境だと発生するらしいことが判明。

対処方法
アプリケーションのweb.config
<system.web>内に
<trust level="Full" originUrl=""/>

IISのリダイレクト

開発環境と本番環境が別サーバーになっていて、アンカータグを絶対パスで書いてしまった場合、そのまま本番環境へ持って行くと、リンクをクリックした際、開発サーバーへ飛ばされてしまう。

アンカータグを相対パスで書き直せば良いが、数が多いと大変。
苦肉の策として、IISのリダイレクト機能で対処する事が出来る。

IISの設定方法
IISで新規にWebサイトや仮想ディレクトリを作る。

その作成したWebサイトや仮想ディレクトリのプロパティを開き、「ホームディレクトリ」を以下の様に設定する。

IIS

重要なのはリダイレクト先のパラメータ

$S
URLをリダイレクト先に反映。

$P
パラメータをリダイレクト先に反映。

パラメータがなければ?$PはなくてもOK。

$Sと$Pの間には?が必要なので注意。

詳しくはMSのサイト参照の事。
http://support.microsoft.com/kb/324000/ja

2011年10月20日木曜日

EclipseでのJDBCドライバを使用したSQLserver2005接続方法

【1】「Microsoft SQL Server 2005 JDBC Driver 1.2」のダウンロード
 1. Microsoft Download Centerからダウンロードします。ダウンロードサイトはこちら
 2. ファイルの解凍先を「C:\Program Files\Microsoft SQL Server 2005 JDBC Driver」に変更して[Unzip]をクリック。

【2】eclipseにて、プロジェクトにjarファイルを追加
 1. [パッケージ・エクスプローラー]でプロジェクトを右クリックし、[プロパティー]から[プロパティー]ダイアログ表示。
WS000005

 2. [Javaのビルド・パス]を選択して、[ライブラリー]タブから[外部JARの追加]ボタンをクリックし、[JARの選択]ダイアログ表示。
WS000010

 3. 「C:\Program Files\Microsoft SQL Server 2005 JDBC Driver\sqljdbc_1.2\jpn\sqljdbc.jar」を選択して[開く]ボタンをクリック。
WS000011

 4. [ビルド・パス上のJARおよびクラス・フォルダー]の一覧に「sqljdbc.jar」が追加されたことを確認して[OK]。
WS000012

 5..[WEB-INF]-[lib]にライブラリをコピーして下さい。
SQL_JDBC

【3】 データベースの接続確認
* メインメソッドに以下を記述し実行して、コンソールに「接続成功!!」が表示されたら成功。

   //データベース名、ユーザー名、パスワード
   String strServerName = "SQLServer";
   String strDBName = "TestDB";
   String strUser = "sa";
   String strPassword = "";

   //コンソールに「接続開始」を表示
   System.out.println("接続開始");
   try
   {
   //JDBCドライバを指定
   Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
   //接続開始
   Connection objCon = DriverManager.getConnection(
                    "jdbc:sqlserver://" + strServerName + ":1433;" +
                    "databaseName=" + strDBName + ";" +
                    "user=" + strUser + ";" +
                    "password=" + strPassword);

   //コンソールに「接続成功」を表示
   System.out.println("接続成功!!");
   }
  catch(Exception objEx)
  {
    //コンソールに「接続エラー内容」を表示
    System.err.println(objEx.getClass().getName() + ":" + objEx.getMessage());
  }

2011年10月19日水曜日

証明書サービス、インストール時の注意点

はまったのでメモ。

ADのグローバルカタログを設定していないと、「エンタープライズルートのCA」がグレーアウトして選択出来ない。

Search Server 2008 ExpressによるNotesDBの検索

社内にNoetsDBとファイルサーバーを横断的に検索出来るサイトが欲しい!!
出来ることなら無償のソフトがないかなと思っていたところ、「Search Server 2008 Express」にたどり着きました。
http://www.microsoft.com/japan/enterprisesearch/default.aspx

NotesDBの検索方法については、こちらで紹介されています。
http://technet.microsoft.com/ja-jp/office/sharepointserver/cc952469.aspx#NotesDomino_with_Search

Office SharePoint Server 2007のドキュメントですが、Search Server 2008はこれのサブセットなので、問題なく動作します。
ただ、注意しなければならないのは、検索キャッシュです。
例えば、「機密情報Field、Managerロールには見せるがだが、ロールなしには見せない。」と言ったケース。
機密情報Fieldもしっかりキャッシュされるので、権限がない人間はFormで機密情報見られなくても、キャッシュで見れてします。

その辺を上手く運用でカバー出来れば非常に面白いソフトではないでしょうか。

プロセッサ: 2.5 ギガヘルツ (GHz) (最小)
メモリ: 2 ギガバイト (GB) RAM (最小)
とシステム要件が少々高いのが難点です。(今時だとこのくらい大したことないのかな?)

2011年10月18日火曜日

JAVAからAccessへの接続 (2)

JAVAでAccessに接続するにはJDBC-ODBCブリッジを使用します。

JAVAはunicode、ODBCはMS932(S-JIS)の文字コードがデフォルトですので、
一工夫しないと日本語文字が表示されなかったり、文字化けしたりします。

接続構文と日本語対応構文を組み合わせて載せておきます。

//JDBCドライバのロード
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

//日本語対応処理
java.util.Properties prop = new java.util.Properties();
prop.put("charSet", "SJIS");

//データベースに接続
Connection con = DriverManager.getConnection("jdbc:odbc:Test",prop);
Statement smt = con.createStatement();
ResultSet rst = smt.executeQuery("SELECT * FROM test");

//データベースを切断
rst.close();
smt.close();
con.close();

JAVAからAccessへの接続 (1)

Windows環境では、JAVAからAccessへ接続する際、まず「ODBCデータソースアドミニストレータ」へ登録する必要があります。(それ以外の環境では不明です)

【1】スタートメニューからコントロールパネルを開き、「管理ツール」を開きます。WS000000

【2】データソース(ODBC)を開きます。
WS000001

【3】「追加」をクリックします
WS000002

【4】「Microsoft Access Driver (*.mdb)」を選択し、「完了」をクリックします。
WS000003

【5】データソース名に「Test」と入力します。
*このデータソース名をJavaプログラムの中で使います
WS000004

【6】データベースの「選択」をクリックします。
WS000006

【7】プログラムで使用したいmdbファイルを選択したら、「OK」をクリックします。
WS000007

【8】データベースに使用したいmdbファイルが選択されていることを確認したら、「OK」をクリックします。
WS000008

【9】ユーザーデータソースに「Test」が追加されたのを確認したら、「OK」をクリックします。
WS000009

【10】管理ツールを閉じて終了です。

2011年10月16日日曜日

JAVA認定資格取得への挑戦 No.1

この度、自分自身の時間が出来、だらだら過ごすのにはあまりにもったいないと考え、OJC-Pの勉強を始めました。
まずはこちらの本を購入しました。

2697B

いままでちゃんとオブジェクト指向のことを勉強したことがなかったので、最初の「オブジェクト指向の基礎」を読み終えたとき、漠然としか分かっていなかったことがきちんと整理整頓された感じになりました。

【雑感】ThinkPadX40にWindows7を入れてみて

Aeroは動かないにしても、やはりPentiumM1.00GHzのThinkPad X40にはWindows7は荷が重いです。
すこしでも体感速度を向上させるため、ビジュアル効果は最低限にし、UIもXP風にして利用しています。

ThinkPad X40 デスクトップ

スタートメニューは「Classic Shell」というソフトを使ってカスタマイズ。
http://www.forest.impress.co.jp/docs/review/20100219_350140.html

タスクバーはこちらを参考にクイック起動を復活
http://pasofaq.jp/windows/taskbar/7quicklaunch.htm

タスクバーのアイコンの大きさを小さくすることにより、XPとほとんど一緒になりました。

何とか実用に耐えられなくも無いのですが、一つ一つの動作にパワー不足を感じます。
ですので、結局今はXPに戻して使っています。

ThinkPad X40にWindows7(無線LAN編)

Access Connectionsも使えますが、問題は無線LANのドライバがMS標準なので、Fn+F5での制御出来ません。
外へ持ち歩くとき、無線LANをオフにしたい時って結構あるかと思います。
その都度、デバイスマネージャを開いて、オフにするのは面倒です。
そこで思いついたのは、Devconによる制御です。

参考にしたのは、こちら
http://blogs.technet.com/junichia/archive/2009/04/30/3233230.aspx

Windows Driver Kit7.0.0をインストールする必要があります。
ToolのみでOKです。
http://www.microsoft.com/japan/whdc/DevTools/WDK/WDKpkg.mspx

それで、以下のバッチファイルを作成。

 Devcon disable "PCI\VEN_168C&DEV_1014&SUBSYS_833117AB&REV_01"

ダブルコーテーションで囲ってある部分は各マシン毎に違います。

これのバッチファイルで無線LANをオフに出来ます。
オンにするときは、Access Connectionsから接続すれば、自動でオンになります。

ThinkPad X40にWindows7(グラフィックドライバ編)

ビデオドライバは残念ながら自動ではインストールされません。
こちらを参考にインストールしました。

http://www.thinkpad-club.net/modules/xhnewbb/viewtopic.php?topic_id=3243&amp;start=0

若干パフォーマンスが良くなった気がします。(あくまでも主観ですのあしからず)

ThinkPad X40 デバイスマネージャー

ThinkPad X40にWindows7

物は試しでインストールしてみました。
強引にSSD(MTRON MSD-PATA3018-ZIF2)へ交換していることもあり意外と使えそうです。
起動はXPの時より速い感じです。XPの時はAccess Connectionsの起動が異常に遅かったのですが、とても速くなりました。

ThinkPad X40 パフォーマンス

ビデオドライバ以外は、標準ドライバが用意されています。
無線LAN等、一部のドライバはWindows Updateで入手出来ます。

2011年10月15日土曜日

NotesSQLに関するドキュメントとサンプルコード

NotesDB に格納されている文書を集計したいときなど、SQL文が使えると便利なんだろうなって思うときが時々あります。
いろいろと調べていたら、NotesSQLというソフトの存在を知りました。
しかし、いざ使ってみようと思うと日本語の情報が全然ない・・・。
あるとき、Microsoft Office SharePoint Server 2007のサイトを見ていましたら
Microsoft Office SharePoint Server 2007 自習書 Notes/Domino アプリケーション資産の活性化
というのを発見。早速PDFをダウンロードしてみたら、日本語でNotesSQLの使い方が懇切丁寧に書いてありました。
しかも使い方だけでなくダウンロード方法も解説してあります。
ConnectionStringの書き方に少々苦戦しましたが、無事VB.NETからアクセス出来ました!!
ちょっと凝ったSQL文を書くと、すぐにこけるのでNotes側のViewで工夫することがポイント。(特にINNER JOIN等での結合は出来なかった。)

まさか、ライバルから情報を入手出来るとは夢にも思っていませんでした。

サンプルコードは非接続型で、GridViewにバインドするコードです。
WindowsForm、WebFormどちらでも可。もちろん、接続型でももちろん接続可能。

サンプルコード(VB.NET)

Dim strConn As String = "DRIVER={Lotus NotesSQL Driver (*.nsf)}; " & _
                                                                          "Server=ServerName; " & _
                                                                          "Database=DbName.nsf; " & _
                                                                          "Uid=UserID; " & _
                                                                          "Pwd=password; "

Dim strSQL As String
Dim dtAdapter As Odbc.OdbcDataAdapter
Dim dtSet As DataSet

strSQL = "SELECT * FROM ViewName" ' 単純なWHERE句なら指定可能

dtAdapter = New Odbc.OdbcDataAdapter(strSQL, strConn)
dtSet = New DataSet
dtAdapter.Fill(dtSet, "board")

GV_Board.DataSource = dtSet.Tables("board")
GV_Board.DataBind()

ブログ再起動

JUSTBlogから始めたブログ。突然の停止後、Windows Liveの方へ引っ越ししたが、こちらも停止。

Windows Liveの移行先のWordPressにはなじめず、bloggerへやってきました。

4つ目のブログなので、4.0

MicrosoftのOSも4.0から使い物になるという俗説があるが、自分のブログははたしてどうなることやら。

.NETとDomino/Notes以外にJAVAも始めたので、その辺の備考録もアップ予定。

頓挫しないよう、頑張らねば。