流通BMSのShipmentNotification(出荷予定)データを書き込む

## 概要
流通BMSのShipmentNotification(出荷予定)データを書き込む処理をやってみた。
注)このプログラムは大まかな処理部分のみを記述しています。

```vb:VB.NET
Private xDocument As XmlDocument
Private root As System.Xml.XmlElement
Private lv2 As XmlNode
Private lv3 As XmlNode
Private lv4 As XmlNode
Private lv5 As XmlNode
Private lv6 As XmlNode
Private lv7 As XmlNode
Private lv8 As XmlNode
Private Attr As System.Xml.XmlAttribute

''' <summary>
''' 出荷予定データをXML形式で出力する
''' </summary>
''' <param name="dt">発注明細データ</param>
''' <param name="path">保存先パス</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function ExportShukkaDataXML(dt As DataTable, path As String) As Boolean

	xDocument = New XmlDocument  'XMLドキュメント作成

	Dim str As String = ""

	str = "<?xml version=""1.0"" encoding=""UTF-8"" ?>"
	str &= "<sh:StandardBusinessDocument xmlns:common=""urn:SecondGenEDI:common:Japan:1"" xmlns:deliver=""urn:SecondGenEDI:deliver:Japan:1"" xmlns:sh=""http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:schemaLocation=""urn:SecondGenEDI:common:Japan:1 ../Schemas/SGE_ShipmentNotificationProxy1_3.xsd http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader ../Schemas/sbdh/StandardBusinessDocumentHeader.xsd"">"
	str &= "</sh:StandardBusinessDocument>"
	
	'XMLドキュメントを作成
	xDocument.LoadXml(str)

	'root指定
	root = xDocument.DocumentElement
	
	'名前空間の定義
	sh = "http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader"
	common = "urn:SecondGenEDI:common:Japan:1"
	deliver = "urn:SecondGenEDI:deliver:Japan:1"
	xsi = "http://www.w3.org/2001/XMLSchema-instance"
	schemaLocation = "urn:SecondGenEDI:common:Japan:1 ../Schemas/SGE_ShipmentNotificationProxy1_3.xsd http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader ../Schemas/sbdh/StandardBusinessDocumentHeader.xsd"


	'2階層目にエレメントを追加
	lv2 = xDocument.CreateElement("sh", "StandardBusinessDocumentHeader", sh.NamespaceName)
	root.AppendChild(lv2)
	
	'3階層目にエレメントを追加
	lv3 = xDocument.CreateElement("sh", "HeaderVersion", sh.NamespaceName)
	lv3.InnerText = "1.3"
	lv2.AppendChild(lv3)
	
	'3階層目にエレメントを追加
	lv3 = xDocument.CreateElement("sh", "Sender", sh.NamespaceName)'1---Sender
	lv2.AppendChild(lv3)

	'4階層目に追加する要素(テキスト)を作成
	lv4 = xDocument.CreateElement("sh", "Identifier", sh.NamespaceName)
	lv4.InnerText = "123456" '送信元の取引先コード

	'4階層目に追加する属性(テキスト)を作成
	Attr = xDocument.CreateAttribute("Authority")'2---Sender属性を追加する
	Attr.Value = "CODE"

	'4階層目に属性(テキスト)を追加
	lv4.Attributes.Append(Attr)

	'4階層目にエレメントを追加
	lv3.AppendChild(lv4)

	'その他の項目も同様に作成する
	
	
    Dim dv As DataView

    dv = New DataView(dt)
    Dim dtDen As DataTable = dv.ToTable(True, "伝票番号")
    dv.Dispose()

    '伝票番号分ループする
    For i As Integer = 0 To dtDen.Rows.Count - 1

        '発注データを伝票番号で抽出する
        dv = New DataView(dt)
        dv.RowFilter = "伝票番号 ='" & dtDen.Rows(i).Item("伝票番号") & "'"
        Dim dtMeisai As DataTable = dv.ToTable
        dv.Dispose()

        '明細行分ループする
        For m As Integer = 0 To dtMeisai.Rows.Count - 1
            '伝票明細情報
	        '---lineItem
	        lv5 = xDocument.CreateElement("lineItem")
	        lv4.AppendChild(lv5)

	        '---lineID
	        lv6 = xDocument.CreateElement("lineID")
	        lv5.AppendChild(lv6)

	        '---lineNumber 伝票行番号 
	        lv7 = xDocument.CreateElement("lineNumber")
	        lv7.InnerText = dtMeisai.Rows(m).item("行番号")
	        lv6.AppendChild(lv7)
	        
	        'その他の項目も同様
        Next

    Next
	
	'xmlファイルを保存する
    xDocument.Save(path)

End Function
```