組織によっては、自社のファイアウォールの外部から送信される cXML ドキュメントを受信するための HTTP エントリポイントがない場合があります。このような組織では、cXML の待機データ確認トランザクションおよびデータダウンロードトランザクションを使用して、ダウンロード待機中のドキュメントの有無をポーリングしダウンロードできます。
17.1 待機データ確認/データダウンロードトランザクションの概要
17.2 GetPendingRequest
17.3 GetPendingResponse
17.3.1 待機中ドキュメントが存在しない場合
17.3.2 待機中ドキュメントが存在する場合
17.3.2.1 インラインのドキュメント
17.3.2.2 DataAvailableMessage で参照されるドキュメント
17.4 DataRequest
17.5 DataResponse
17.1 待機データ確認/データダウンロードトランザクションの概要
クライアントシステムは、待機データ確認およびデータダウンロードトランザクションを使用して、都合に合わせてドキュメントを抽出します。待機データ確認トランザクションは、待機中ドキュメントが存在するかどうかを示します。待機中ドキュメントが存在する場合、それらが応答に表示されるか、クライアントがデータダウンロードトランザクションを使用してそれらを取得します。このようなポーリング方式で送信するドキュメントには、次のものがあります。
- SupplierChangeMessage — サプライヤデータの変更についてバイヤー企業に通知します。
- SubscriptionChangeMessage — サプライヤカタログの変更についてバイヤー企業に通知します。
- DataAvailableMessage — データダウンロードトランザクションを使用して取得できる待機中ドキュメントがあることを組織に通知します。
17.2 GetPendingRequest
この要素は、要求者による処理を待機している一連のメッセージを抽出します。MessageType 要素と lastReceivedTimestamp および maxMessages 属性で、取得されるドキュメントの種類および数を制御します。
属性 | 説明 |
---|---|
lastReceivedTimestamp | 最後に受信したドキュメントのタイムスタンプ |
maxMessages | 1 回の応答で要求者が処理できるドキュメントの最大数 |
受信システムは要求を受信すると、指定されたタイムスタンプ以降の指定された種類の最も古いドキュメントを返します。この基準を満たすドキュメントが複数ある場合は、maxMessages 属性に従ってドキュメントが返されます。キューシステムでは、指定されたタイムスタンプよりも前のタイムスタンプを持ち、指定されたメッセージタイプのすべての処理待ちドキュメントが破棄されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.014/cXML.dtd"> <cXML payloadID="1105574416.19583@hydra.buyer.com" timestamp="2005-01-13T00:00:16+00:00"> <Header> <From> <Credential domain="NetworkId"> <Identity>AN13000000259</Identity> </Credential> </From> <To> <Credential domain="SystemID"> <Identity>ERP01</Identity> </Credential> </To> <Sender> <Credential domain="NetworkId"> <Identity>AN13000000259</Identity> <SharedSecret>abracadabra</SharedSecret> </Credential> <UserAgent>Our Buyer App 1.0</UserAgent> </Sender> </Header> <Request> <GetPendingRequest lastReceivedTimestamp="2005-03-12T18:39:09-08:00" maxMessages="5"> <MessageType>SubscriptionChangedMessage</MessageType> </GetPendingRequest> </Request> </cXML> |
17.3 GetPendingResponse
サーバーにより、同じ HTTP 接続で Response ドキュメントが返されます。Response に GetPendingResponse ドキュメントが含まれていない場合、待機中ドキュメントは存在しません。GetPendingResponse ドキュメントが含まれていた場合は、待機中ドキュメントが存在します。
17.3.1 待機中ドキュメントが存在しない場合
次の例は、要求されたメッセージタイプの待機中ドキュメントが存在しないことを示しています。
1 2 3 4 5 6 7 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.014/cXML.dtd"> <cXML timestamp="2005-01-12T16:00:25-08:00" payloadID="1105574420906--451266344000288275@10.10.13.125"> <Response> <Status code="200" text="OK"/> </Response> </cXML> |
17.3.2 待機中ドキュメントが存在する場合
GetPendingResponse ドキュメントが存在する場合は、待機中のドキュメントが存在します。GetPendingResponse ドキュメントには、待機中ドキュメントをインラインで含めることも、待機中ドキュメントを参照する DataAvailableMessage 要素を含めることもできます。
17.3.2.1 インラインのドキュメント
サーバーは、待機中ドキュメントを GetPendingResponse ドキュメントにインラインで送信できます。その場合、クライアントはデータダウンロードトランザクションを使用する必要はありません。次の例には、待機中の SubscriptionChangeMessage ドキュメントが含まれています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.014/cXML.dtd"> <cXML timestamp="2005-01-12T16:00:25-08:00" payloadID="1105574420906--451266344000288275@10.10.13.125"> <Response> <Status code="200" text="OK"/> <GetPendingResponse> <cXML xml:lang="en-US" payloadID="456778@hub.com" timestamp="2005-01-12T16:00:25-08:00"> <Header> <From> <Credential domain="NetworkId"> <Identity>AN01000000001</Identity> </Credential> </From> <To> <Credential domain="NetworkId"> <Identity>AN13000000259</Identity> </Credential> </To> <Sender> <Credential domain="NetworkId"> <Identity>AN01000000001</Identity> </Credential> <UserAgent>Network Hub 2.0</UserAgent> </Sender> </Header> <Message> <SubscriptionChangeMessage type="new"> <Subscription> <InternalID>1234</InternalID> <Name xml:lang="en-US">Q2 Prices</Name> <Changetime>2002-03-12T18:39:09-08:00</Changetime> <SupplierID domain="DUNS">123456789</SupplierID> <Format version="2.1">CIF</Format> </Subscription> </SubscriptionChangeMessage> </Message> </cXML> </GetPendingResponse> </Response> </cXML> |
17.3.2.2 DataAvailableMessage で参照されるドキュメント
GetPendingReponse ドキュメントでは、待機中ドキュメントをインラインで含めるのではなく、DataAvailableMessage 要素を使用してそのドキュメントを参照することができます。この要素には、クライアントがドキュメントの取得時に使用する内部 ID が含まれます。クライアントは、データダウンロードトランザクションを使用して、待機中ドキュメントを MIME (Multipurpose Internet Mail Extensions) 添付ファイルとして受信します (ドキュメントはcXML ドキュメントに埋め込まれません)。GetPendingResponse ドキュメントで使用されるインライン方法ではなく、データダウンロードトランザクションで使用される MIME 添付ファイル方法をサーバーで使用するのには、次のような理由があります。
- MIME の場合、GetPendingResponse ドキュメントとは異なる DTD または DTD バージョンを使用しているドキュメントを送信できます。
- MIME 添付ファイルは、複数の親子要素が入れ子状態にあるドキュメントよりも処理が簡単です。
- MIME は、1 つの大きなドキュメントではなく、複数の別々のファイルとして転送する大きなドキュメントに向いています。
次の例では、データダウンロードトランザクションで取得待ちのドキュメントが存在していることを示すDataAvailableMessage 要素が含まれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.014/cXML.dtd"> <cXML timestamp="2005-01-12T16:00:18-08:00" payloadID="1105574420906--451266344000288275@10.10.13.125"> <Response> <Status code="200" text="OK"/> <GetPendingResponse> <cXML timestamp="2005-01-12T16:00:18-08:00" payloadID="1105574420141-977399960268715709@10.10.13.125"> <Header> <From> <Credential domain="NetworkId"> <Identity>AN01000000001</Identity> </Credential> </From> <To> <Credential domain="NetworkId"> <Identity>AN13000000259</Identity> </Credential> </To> <Sender> <Credential domain="NetworkId"> <Identity>AN01000000001</Identity> <UserAgent>ANCXMLDispatcher</UserAgent> </Credential> </Sender> </Header> <Message> <DataAvailableMessage> <InternalID domain="PendingMessages">3738</InternalID> </DataAvailableMessage> </Message> </cXML> </GetPendingResponse> </Response> </cXML> |
DataAvailableMessage 要素には、ダウンロード待ちの 1 つまたは複数のドキュメントに対応する内部 ID が含まれます。ドキュメントは、データダウンロードトランザクションを使用して取得します。
17.4 DataRequest
DataAvailableMessage を取得したら、その内部 ID 値を使用して、cXML DataRequest ドキュメントを送信することで待機中のドキュメントをダウンロードします。
例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.014/cXML.dtd"> <cXML payloadID="1105574421.19583@hydra.buyer.com" timestamp="2005-01-13T00:00:21+00:00"> <Header> <From> <Credential domain="NetworkId"> <Identity>AN13000000259</Identity> </Credential> </From> <To> <Credential domain="NetworkId"> <Identity>AN01000000001</Identity> </Credential> </To> <Sender> <Credential domain="NetworkId"> <Identity>AN13000000259</Identity> <SharedSecret>abracadabra</SharedSecret> </Credential> <UserAgent>Our Buyer App 1.0</UserAgent> </Sender> </Header> <Request> <DataRequest> <InternalID domain="PendingMessages">3738</InternalID> </DataRequest> </Request> </cXML> |
17.5 DataResponse
サーバーは、cXML DataResponse ドキュメントと要求されたドキュメントを一緒に MIME エンベロープに入れ、同じ HTTP 接続で応答します。Content-Type HTTP ヘッダーは、MIME 境界を定義します。次の DataResponse ドキュメントには、StatusUpdateRequest ドキュメントが 1 つ添付されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | Content-Type: multipart/mixed; boundary="----=_Part_0_10550230.1105574425445"------=_Part_0_10550230.1105574425445 Content-Type: text/xml; charset=UTF-8 Content-ID: <1105574425572.1197583259@cetus.hub.com> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.014/cXML.dtd"> <cXML timestamp="2005-01-12T16:00:25-08:00" payloadID="1105574425428-5167970095322563427@10.10.13.103"> <Response> <Status code="200" text="OK"/> <DataResponse> <Attachment> <URL>cid:1105574422695.1816707419@cetus.hub.com</URL> </Attachment> </DataResponse> </Response> </cXML> ------=_Part_0_10550230.1105574425445 Content-Type: text/xml; charset=UTF-8 Content-ID: <1105574422695.1816707419@cetus.hub.com> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.014/cXML.dtd"> <cXML payloadID="1105573919487--7116204576911739136@10.10.13.125" timestamp="2005-01-12T15:51:59-08:00"> <Header> <From> <Credential domain="NetworkId"> <Identity>AN12000000259</Identity> </Credential> </From> <To> <Credential domain="NetworkId"> <Identity>AN13000000259</Identity> </Credential> </To> <Sender> <Credential domain="NetworkId"> <Identity>AN01000000001</Identity> </Credential> <UserAgent>Network Hub 2.0</UserAgent> </Sender> </Header> <Request deploymentMode="production"> <StatusUpdateRequest> <DocumentReference payloadID="DO123@hydra.buyer.com"/> <Status code="200" message="OK"/> </StatusUpdateRequest> </Request> </cXML> ------=_Part_0_10550230.1105574425445-- |
MIME 添付ファイルの詳細については、「添付ファイル [20 ページ]」を参照してください。データダウンロードトランザクションでダウンロードしたドキュメントの認証は、信頼されるソースから取得した場合は必要ありません。