Moving Composite Data
Moving data from one AE to another AE may require several sub-operations to take place in order to accomplish the task. The following is an example showing the types of sub-operations that may be required in a simple C-MOVE-REQ.
In the following example, four AEs will be involved as follows:
AE |
Role |
Action |
A |
SCU |
Sends the C-MOVE-REQ message. |
B |
SCP/SCU |
Receives the C-MOVE-REQ message and controls the move. |
C |
SCP |
Currently stores the data to be moved. |
D |
SCP |
Will store the moved data at the completion of the move. |
This process will be broken down into six steps, as shown in the diagram above. These steps are given in the table below. Please note that the use of hNet, nPriority, nStatus, hDS, etc. throughout the steps below does not imply equivalence. The point of this table is to show possible sub-operations that may be called, and how the message IDs are used to track responses
Step |
Function call: |
Explanation |
1 |
LDicomNet::SendCMoveRequest(hNet, nID, 1, pszClass, nPriority, "D", hDS) |
A sends this call to B. The third parameter is the message number for this AE's messages. This is the first message sent by A. It wants to move the data set indicated in hDS to D, as indicated in the sixth parameter.. |
2 |
LDicomNet::SendCGetRequest(hNet, nID, 1, pszClass, nPriority, hDS) |
B sends this call to C. B must retrieve the data indicated in hDS, in order to store it on D. The third parameter indicates that this is the first message sent by B. When C responds with LDicomNet::SendCGetResponse, it will refer to this message ID. That way B knows which message(command) has been completed. |
3 |
LDicomNet::SendCGetResponse(hNet, nID, 1, pszClass, nStatus, nRemaining, nCompleted, nFailed, nWarning, hDS) |
C sends this call to B. This sends the requested data to B in hDS. The third parameter indicates that this is a response to the first message sent by B. This way B knows the response to LDicomNet::SendCGetRequest (step 2) has been received. |
4 |
LDicomNet::SendCStoreRequest(hNet, nID, 2, pszClass, pszInstance, nPriority, "A", 1, hDS) |
B sends this call to D. B must determine whether D is capable of storing the data. The third parameter indicates that this is the second message sent by B. The seventh parameter indicates that A placed the original C-MOVE-REQ. The eighth parameter indicates that the original message sent by A, requesting the move, was message number 1. The data set to be stored is in hDS. |
5 |
LDicomNet::SendCStoreResponse(hNet, nID, 2, pszClass, pszInstance, nStatus) |
D sends this call to B. The third parameter indicates that this is in response to the second message sent by B. |
6 |
LDicomNet::SendCMoveResponse(hNet, nID, 1, pszClass, nStatus, nRemaining, nCompleted, nFailed, nWarning, hDS) |
B sends this call to A. The third parameter indicates that this is in response to the first message sent by A. At this point the move has been completed, and the data is now stored on D. |