SendCMoveRequest Example for C++ 6.0 or later
{
//This example sends a C-Move Request to a server
//
//In this example:
//1. m_Dicom, m_Dicom2 are LEAD ActiveX Dicom objects (CLEADDICOM)
//
//2. m_DicomNet is LEAD ActiveX DicomNet object (CLEADDICOMNet)
//
//3. m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
// identifieds the LMyDicomNet object as a server or a client
//4. m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
// set so the server knows how a C-Store Response was generated
//
//5. A connection exists between client and server
//6. An association exists between the client and server
CString strMsg = "C-Move\n";
//Choose a class to move
_bstr_t strClassUID = UID_NM_IMAGE_STORAGE;
//create the data set that encodes the identifier to be matched
m_pLEADDicomDS->InitDS (DICOM_CLASS_UNKNOWN, 0);
//Add the required elements
// TAG_QUERY_RETRIEVE_LEVEL
// TAG_PATIENT_NAME
_bstr_t sPatient("PATIENT");
m_pLEADDicomDS->FindTag(TAG_QUERY_RETRIEVE_LEVEL);
m_pLEADDicomDS->InsertElement (FALSE, TAG_QUERY_RETRIEVE_LEVEL,m_pLEADDicomDS->GetCurrentTag ()->VR,FALSE,0);
m_pLEADDicomDS->StringValueCount = 1;
m_pLEADDicomDS->put_StringValues (0, sPatient);
m_pLEADDicomDS->SetStringValue (1);
m_pLEADDicomDS->FindTag(TAG_PATIENT_NAME);
m_pLEADDicomDS->InsertElement (FALSE, TAG_PATIENT_NAME, m_pLEADDicomDS->GetCurrentTag ()->VR, FALSE,0);
m_pLEADDicomDS->FindTag(TAG_PATIENT_ID);
m_pLEADDicomDS->InsertElement (FALSE, TAG_PATIENT_ID, m_pLEADDicomDS->GetCurrentTag ()->VR, FALSE, 0);
m_pLEADDicomDS->FindTag(TAG_PATIENT_BIRTH_DATE);
m_pLEADDicomDS->InsertElement (FALSE, TAG_PATIENT_BIRTH_DATE, m_pLEADDicomDS->GetCurrentTag ()->VR, FALSE, 0);
m_pLEADDicomDS->FindTag(TAG_PATIENT_SEX);
m_pLEADDicomDS->InsertElement (FALSE, TAG_PATIENT_SEX, m_pLEADDicomDS->GetCurrentTag ()->VR, FALSE, 0);
m_pLEADDicomDS->FindTag(TAG_NUMBER_OF_PATIENT_RELATED_INSTANCES);
m_pLEADDicomDS->InsertElement (FALSE, TAG_NUMBER_OF_PATIENT_RELATED_INSTANCES, m_pLEADDicomDS->GetCurrentTag ()->VR, FALSE, 0);
//global variable to count results
m_FileCount = 0;
//Get the associate object
long hAssociate = m_pLEADDicomNet->GetAssociate (m_pLEADDicomNet->GethNet());
//Is class supported in the assocation?
short nPresentationID = m_pLEADDicomNet->FindPresentationAbstract (hAssociate, strClassUID);
//nPresentationID must be odd--0 indicates failure
if (nPresentationID==0)
{
CString strTmp;
strTmp.Format("Abstract Syntax[%s] Not Included in the Association",(char*) strClassUID);
strMsg = strMsg + strTmp;
}
else //success
{
short uUniqueID = 99;
//Choose DICOM AE title of the destination DICOM AE
//from which the C-store operations are being performed
//This is set by the SetCalling() method of the LDicomAssociateRequest object
//before doing a SendAssociateRequest
_bstr_t strMoveAE = "LEADtest";
m_FileCount = 0; //used for file name in OnReceiveCStoreRequest event
//The client requests the server to move the SOP Instance to itself (the client)
m_pLEADDicomNet->SendCMoveRequest (
m_pLEADDicomNet->GethNet(),
nPresentationID,
uUniqueID,
strClassUID,
COMMAND_PRIORITY_MEDIUM,
strMoveAE,
m_pLEADDicomDS->GethDicomDS()
);
}
AfxMessageBox(strMsg);
//now wait for one or more C-STORE sub-operations and finally the C-Get response
}