1

LotusNotesサーバーのビューに対してPowershellスクリプトを実行しています。現在、次の方法で出力を生成します。

UserID|Name|Internet Address
user1|John Smith|john.smith@mycompany.com
user2|Joe Smith|joe.smith@mycompany.com
user3|Bill Smith|bill.smith@mycompany.com

注:タイトル行は現在出力の一部ではなく、情報提供のみを目的として表示されています。

現在、出力はテキストファイルに送られますが、XMLに変更する必要があります。データは、次のPowershellスクリプトを使用して抽出されます。

$session = New-Object -ComObject lotus.notessession
$session.initialize()
$session.notesversion

if (Test-Path -Path "c:\myfile.txt") {
    Remove-Item -Path "c:\myfile.txt" 
    }

$db = $session.GetDatabase("lotusServer","names.nsf")
$db.title

$view = $db.GetView('People')
Write-Host "View read : " $view.Name

# Show number of documents 
$nbrDocs = $view.AllEntries.Count 
Write-Host "Num of Docs : " $nbrDocs

# Get First Document in the View 
$doc = $view.GetFirstDocument()

#Read fields for current document 
$delim = "|" 
$i = 0 

    while ($doc -ne $null) {
        $internetAddress = [string] $doc.GetItemValue("InternetAddress") 
        $companyname = [string] $doc.GetItemValue("CompanyName") 
        $fullname = [string] $doc.GetItemValue("FullName")  
        if ( $companyname -eq "My Company") {
            $i = $i + 1
            # format the full name field
            $fullname = $fullname.Substring(3)
            $s = $fullname
            $c1 = $s.LastIndexOf(" ")
            $c2 = $s.IndexOf("/")
            $name = $s.Substring(0,$c2)
            $userID = $s.Substring($c1+1)

            $zOut = $userID + $delim + $name + $delim +  $internetAddress 
            Write-Host $zOut
            Write-Output $zOut| out-file "c:\myfile.txt" -append -width 2000
            } #end if
        $doc = $view.GetNextDocument($doc) 
    }  #end while

出力を次のようなXML形式にしたいと思います。

<?xml version="1.0" ?> 
<Company>
   <UserID>user1
      <Name>John Smith</Name> 
      <InternetAddress>john.smith@mycompany.com</InternetAddress> 
   </UserID> 
</Company>

データに重複があってはならず、(ある時点で)出力に複数の会社が含まれる可能性がありますが、全体的な構造は上記のサンプルと大幅に異なることはありません(NameとInternetAddressはUserIDの子です)。

ただし、現在データを解析している方法($ doc -ne $ null)では、一度に1行しか表示されません。XMLへのエクスポート/書き込みの方法を示す例は、一度に実行し、一度に1行は実行しないことを示しています。出力XMLは、他の場所で使用される前に検証されます。このスクリプトの出力をXMLファイルに書き込むことはできますか?その場合、どのように記述しますか?

任意の考え/提案をいただければ幸いです。

ありがとう!

4

1 に答える 1

3

次の行は、レコード出力を扱います。

$zOut = $userID + $delim + $name + $delim +  $internetAddress 

XMLとして記述できるように、これを変更する必要があります。

例:

$zOut = "<UserID>" + $userID + "</UserID>" ..... (etc)

ビュー内の一連のレコードを反復処理しているため、一度に1つの行しか表示されません。

すべてのデータを一度に取得したい場合は、ビューのURLルックアップで?ReadViewEntries&outputformat=XML設定を使用できます。これを行うには制限があります。詳細はこちら:

http://publib.boulder.ibm.com/infocenter/domhelp/v8r0/topic/com.ibm.designer.domino.main.doc/H_ABOUT_URL_COMMANDS_FOR_OPENING_SERVERS_DATABASES_AND_VIEWS.html

または、XPageで作成するか、DXLにエクスポートしてXSLT経由で変換することもできます。

しかし、これらの選択肢は、あなたが現在持っているものよりも多くの仕事になるでしょう。

于 2013-03-06T19:07:40.787 に答える