データを保存し表示した電話番号に電話する

2011年10月28日(金)
PROJECT KySS

ロジックコードを記述する

リスト2 (MainPage.xaml.vb)

Imports System.Xml.Linq
Imports System.IO
Imports System.Windows.Documents
Imports System.Windows.Input
Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Shapes
Imports Microsoft.Phone.Controls

電話の発信、メールを送信する写真を撮るなど、ユーザーに一連の一般的なタスクを提供するクラスの含まれる、Microsoft.Phone.Task名前空間をインポートします。PhoneCallTaskを使用するため、この名前空間が必要です。
Imports Microsoft.Phone.Tasks

personalInfoクラス内に、文字列型の「氏名」、「電話」プロパティを定義しています。
Public Class personalInfo
  Property 氏名 As String
  Property 電話 As String
End Class

Partial Public Class MainPage
  Inherits PhoneApplicationPage

XML要素を表すXElementクラス型のメンバ変数、myDocとreadXmlを宣言しています。
  Dim myDoc As XElement
  Dim readXml As XElement

  ' Constructor
  Public Sub New()
    InitializeComponent()
  
    ' Set the data context of the listbox control to the sample data
    DataContext = App.ViewModel
  End Sub
 
  ' Load data for the ViewModel Items

ページが読み込まれた時の処理

サーバーからperonalInfo.xmlを読み込み、その内容を表示するDownLoadXmlDataプロシージャを実行します。
  Private Sub MainPage_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles Me.Loaded
    DownloadXmlData()
  End Sub

[OK]ボタンがクリックされた時の処理。

「氏名」や「電話」が未入力の場合は、警告メッセージを表示するErrorMessageプロシージャを実行します。
新しいWebClientのインスタンスmyWebClientオブジェクトを生成します。WebClientクラスは、データの送受信用のメソッドを提供するクラスです。
String またはUriとして指定したリソースをダウンロードする、DownloadStringAsyncメソッドで、サーバー上のpersonalInfo.xmlをダウンロードします。キャッシュから読み込まないように、常に新しいデータを読み込むよう、引数に現在の時間、分、秒を指定しています。
「サーバーのURI」には読者の利用しているサーバーにTelephone_NET(ASP.NET)ファイルをアップし、IISの設定を行ってください。
AddHandlerステートメントで、非同期のリソース ダウンロード操作の完了時に発生する、DwonloadStringCompletedイベントに、イベントハンドラを追加します。イベントハンドラ内では以下の処理を実行します。
XElement.Parseメソッドでダウンロードした結果を読み込みます。読み込んだ結果はmyDocメンバ変数に格納されます。
<情報>要素を生成し、子要素として<氏名>要素を生成し、内容テキストにnameTextBoxの値を指定します。次に<電話>要素を生成し、内容テキストにtelTextBoxの値を指定します。生成したXMLをAddメソッドでmyDocに追加します。

  Private Sub okButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles okButton.Click
 
    ErrorMessage()
    Dim myWebClient As New WebClient
 
    AddHandler myWebClient.DownloadStringCompleted, Sub(resultSender As Object, resultArgs As DownloadStringCompletedEventArgs)
                 If resultArgs.Error Is Nothing = False Then
                             MessageBox.Show("XMLファイルが見つかりません")
                             Exit Sub
                 Else
                   myDoc = XElement.Parse(resultArgs.Result)
                   readXml = New XElement("情報",
                             New XElement("氏名", nameTextBox.Text),
                             New XElement("電話", telTextBox.Text))
                       myDoc.Add(readXml)
                   End If
            End Sub
 
    myWebClient.DownloadStringAsync(New Uri(String.Format("サーバーのURI/Telephone_NET/SaveData/personalInfo.xml?myTime={0}", DateTime.Now.ToLongTimeString), UriKind.Absolute))
  End Sub

[保存]ボタンがクリックされた時の処理

「氏名」や「電話」が未入力の場合は、警告メッセージを表示するErrorMessageプロシージャを実行します。
生成したXMLを変数saveXmlDataに格納しておきます。
新しいWebClientのインスタンスmyWebClientオブジェクトを生成します。WebClientクラスは、データの送受信用のメソッドを提供するクラスです。
EncodingプロパティにUTF8を指定し、HeadersのContent-Typeに”text/xml;charset=utf-8”と指定します。
UploadStringAsyncメソッドで、生成したXML(saveXmlDataの値)をサーバーにアップロードし、サーバー上のDefault.aspx(後ほど作成方法を解説)を実行します。アップするサーバーのURIは各自のURIに変更してください。UploadStringAsyncメソッドは、指定したリソースに指定した文字列(この場合、生成したXMLデータ)をアップロードします。引数に現在の時間、分、秒を指定し、常に新しいデータをアップロードします。
AddHanderステートメントで、非同期の文字列アップロード操作の完了時に発生する、UploadStringCompletedイベントに、イベントハンドラを追加します。イベントハンドラ内では、保存した旨のメッセージを表示し、サーバーからperonalInfo.xmlを読み込み、その内容を表示するDownLoadXmlDataプロシージャを実行します。[保存]ボタンの選択を不可とします。
※サーバーに配置した、Telephone_NETのASP.NETファイルのアクセス許可やIISの設定等については、各自が行ってください。

  Private Sub saveButton_Click(sender As Object, e As System.Windows.RoutedEventArgs) Handles saveButton.Click
 
    ErrorMessage()
 
      Dim saveXmlData As String
      saveXmlData = myDoc.ToString
        Dim myWebClient As New WebClient
      With myWebClient
          .Encoding = System.Text.Encoding.UTF8
          .Headers("content-type") = "text/xml; charset=utf-8"
      End With
 
      AddHandler myWebClient.UploadStringCompleted, Sub(resultSender As Object, resultArgs As UploadStringCompletedEventArgs)
                 MessageBox.Show("保存しました")
                 DownloadXmlData()
      End Sub
 
      myWebClient.UploadStringAsync(New Uri(String.Format("サーバーのURI/Telephone_NET/Default.aspx?myTime={0}", DateTime.Now.ToLongTimeString), UriKind.Absolute), saveXmlData)
      nameTextBox.Text = String.Empty
      telTextBox.Text = String.Empty
      okButton.IsEnabled = True
      saveButton.IsEnabled = False
  End Sub
  • 「データを保存し表示した電話番号に電話する」サンプルプログラム

四国のSOHO。薬師寺国安(VBプログラマ)と、薬師寺聖(デザイナ、エンジニア)によるコラボレーション・ユニット。1997年6月、Dynamic HTMLとDirectAnimationの普及を目的として結成。共同開発やユニット名義での執筆活動を行う。XMLおよび.NETに関する著書や連載多数。最新刊は「Silverlight実践プログラミング」両名とも、Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。http://www.PROJECTKySS.NET/

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています