Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

第12回 CACHÉクラスライブラリの利用

SQLも使えるオブジェクトデータベース「CACHE'」を知る 12

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

Cache'は、オブジェクト指向の開発環境を提供しますが、その構成要素には、データベースエンジンを含んだオブジェクト指向言語のCache' ObjectScriptとスタジオなどの開発ツール、および今回紹介するクラスライブラリがあります。

はじめに

 Caché(キャシエ)は、オブジェクト指向の開発環境を提供しますが、その構成要素には、データベースエンジンを含んだオブジェクト指向言語のCaché ObjectScriptとスタジオなどの開発ツール、および今回紹介するクラスライブラリがあります。

 クラスライブラリをうまく利用することにより、アプリケーションの開発を楽にすることができます。現在では、Cachéの機能のかなりの部分がクラスライブラリの形で提供されていますが、今後ともさまざまな機能がクラスライブラリとして提供されていきます。

Cachéクラスライブラリの概要

 Cachéが提供するクラスライブラリは多岐に渡り、ここですべてを紹介することはできません。

 提供しているクラスライブラリの詳細は、Cachéドキュメントのクラスライブラリから参照することができます。次のように、キューブからドキュメントを選択し、ブラウザに表示されたドキュメントホームページからクラスリファレンス情報を選択してください。

 
 

 ここでは、プログラミング上の有用性という観点からいくつか便利なクラスライブラリを紹介します。

%SYSTEMクラスライブラリ

 システムが提供するさまざまな機能をクラスメソッドの形態で提供します。このクラスライブラリが提供する機能は、比較的単純で、単体での利用が可能なものが多数含まれます。

 以下は、バージョン情報を提供するクラスの利用例です。

バージョン情報を取得し、表示する
>write ##class(%SYSTEM.Version).GetVersion()

 また、%SYSTEMクラスライブラリは、特殊変数$SYSTEMを使用して、##class構文を省略することが可能です。上記と同等のことを$SYSTEM変数を使用すると、次のように記述できます。

>write $SYSTEM.Version.GetVersion()

%Fileライブラリ

 各種デバイスへの入出力処理は、Cachéの入出力コマンド(Open、Use、Read、Write、Close)で実現可能ですが、デバイスごとの特性に応じて処理を実行していかなければならず、プログラミングが煩雑になりがちです。

 利用機会の多いファイルの入出力処理に関しては、%Fileライブラリを使用することにより、より簡単で分かりやすい入出力処理を実現することができます。

 ここでは、%Fileライブラリを使用した簡単なシーケンシャルファイルへの入出力を紹介します(以下のコード例は、変数の値割り当てなどの処理を省略しているため、このままでは、動作しません)。

ファイルからの入力処理の例
if ##class(%Library.File).Exists(file) {
   set fs=##class(%Library.FileCharacterStream).%New()
   set fs.Filename=file

   while 'fs.AtEnd{
      set x=fs.ReadLine()

      set F1=$piece(x,$c(09),1)
      set F2=$piece(x,$c(09),2)
      set ^test(F1,F2) = ""
   }
}
ファイルからの出力処理の例
Set fs = ##class(%File).%New(file)
Do fs.Open("WSN")
Set tab = $Char(9)
For i = 1:1:count {
    set title = $List(titlelist,$R($LL(titlelist))+1)
    set author = $List(authorlist,$R($LL(authorlist))+1)
    set publish = $List(publishlist,$R($LL(publishlist))+1)
    set amount = $R(1000) * 100
    set record = title_tab_author_tab_amount_tab_publish
    Set status = fs.WriteLine(record)
}

%Netライブラリ

 インターネットの世界には、TCP/IPをベースにしたさまざまなプロトコルがあります。

 もちろんCachéのTCP/IPソケットデバイスの入出力機能を使用して、それらのプロトコルを実装することは、技術的には可能ですが、煩雑なプログラミングを行なわなければなりません。

 Cachéの%Netライブラリでは、それらのプロトコルの中で、よく使用されるものを抽象化してライブラリの形で提供し、簡単にその機能を実現できるようにしています。

 ここでは、アプリケーションの組み込み機能として利用機会の多いメール機能の実装例を紹介します。

メール送信の実装例
Set s=##class(%Net.SMTP).%New()
Set s.smtpserver="xxxx.xxxx.com"
Set auth=##class(%Net.Authenticator).%New()
Set auth.UserName="xxxx"
Set auth.Password="xxxxx"
Set s.authenticator=auth
Set m=##class(%Net.MailMessage).%New()
Set m.Charset="iso-2022-jp"
Set m.From="xxxx@xxxx.com"
Do m.To.Insert("xxx@xxxx.com")
Set m.Subject="Cach[&:eacute;] Solution Page"
Set crlf=$C(13,10)
Do m.TextData.WriteLine(
  "このたびは、Cache'ソリューションページへのユーザーご登録")
Do m.TextData.WriteLine("誠にありがとうございます。")
Do m.TextData.WriteLine(
  "お客様のユーザー名、パスワードは、次のようになっています。")
Do m.TextData.WriteLine("ユーザー名: "_Username)
Do m.TextData.WriteLine("パスワード: "_Password)
Do m.TextData.WriteLine("今後ともCache'をご愛顧いただきますよう、")
Do m.TextData.WriteLine("よろしくお願い申し上げます。")
Do m.TextData.WriteLine("インターシステムズジャパン株式会社")
Do m.TextData.WriteLine(
  "※本メールの一部、または全部の無断転載を禁じます。")
Set status=s.Send(m)
If $$$ISERR(status) Quit $System.Status.GetErrorText(status)

まとめ

 クラスライブラリを利用すると、自分で実装すると非常に煩雑なことが、非常に簡単に実現できることがよくあります。

 何かを実装する前に既にクラスライブラリで似たようなことが実現されていないか、ぜひ探索してみてください。



  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

バックナンバー

連載:SQLも使えるオブジェクトデータベース「CACHE'」を知る

もっと読む

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5