Synchronize concepts for a given code system

Aus Termserver-CTS2
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Description

You can synchronize concepts for a given code system with the method "ListCodeSystemConcepts" in the "Search" web service.

Therefore you have to specify a timestamp from your last synchronization. If it is your first, leave it empty. You have to save the current timestamp at every synchronization and save it to specify it at the next call.

SOAP

Web service: Search

Method: ListCodeSystemConcepts

Request

versionId: versionId from your code system you want to get concepts from

isMainClass: true, if you want to get only the root concepts (if code system is hierarchical)

lookForward: true, if you want to get the childs from the concepts, if available (if code system is hierarchical)

statusVisibilityDate: your last synchronization date

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sear="http://search.ws.terminologie.fhdo.de/">
  <soapenv:Header/>
  <soapenv:Body>
    <sear:ListCodeSystemConcepts>
      <parameter>
        <codeSystem>
          <codeSystemVersions>
            <versionId>1</versionId>
          </codeSystemVersions>
        </codeSystem>
        <codeSystemEntity>
          <codeSystemEntityVersions>
            <statusVisibilityDate>2014-11-17T11:10:00+01:00</statusVisibilityDate>
          </codeSystemEntityVersions>
        </codeSystemEntity>
        <searchParameter>
        </searchParameter>
        <lookForward>false</lookForward>
      </parameter>
    </sear:ListCodeSystemConcepts>
  </soapenv:Body>
</soapenv:Envelope>

Response

The following result show all concepts which are changed after "2014-11-17T11:10:00+01:00". You have to update the concepts in your database.

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:ListCodeSystemConceptsResponse xmlns:ns2="http://search.ws.terminologie.fhdo.de/">
         <return>
            <returnInfos>
               <count>1</count>
               <message>Konzepte erfolgreich gelesen, Anzahl: 1</message>
               <overallErrorCategory>INFO</overallErrorCategory>
               <status>OK</status>
            </returnInfos>
            <codeSystemEntity>
               <codeSystemEntityVersions>
                  <codeSystemConcepts>
                     <code>C</code>
                     <codeSystemEntityVersionId>7</codeSystemEntityVersionId>
                     <isPreferred>true</isPreferred>
                     <term>Testgemeinschaft C</term>
                  </codeSystemConcepts>
                  <effectiveDate>2014-11-17T11:11:48+01:00</effectiveDate>
                  <insertTimestamp>2014-11-17T11:11:48+01:00</insertTimestamp>
                  <isLeaf>true</isLeaf>
                  <statusDeactivated>0</statusDeactivated>
                  <statusDeactivatedDate>2014-11-17T11:11:48+01:00</statusDeactivatedDate>
                  <statusVisibility>1</statusVisibility>
                  <statusVisibilityDate>2014-11-17T11:11:48+01:00</statusVisibilityDate>
                  <statusWorkflow>0</statusWorkflow>
                  <statusWorkflowDate>2014-11-17T11:11:48+01:00</statusWorkflowDate>
                  <versionId>7</versionId>
               </codeSystemEntityVersions>
               <codeSystemVersionEntityMemberships>
                  <isAxis>false</isAxis>
                  <isMainClass>true</isMainClass>
               </codeSystemVersionEntityMemberships>
               <currentVersionId>7</currentVersionId>
               <id>7</id>
            </codeSystemEntity>
         </return>
      </ns2:ListCodeSystemConceptsResponse>
   </S:Body>
</S:Envelope>

Java

WSDL: http://193.25.22.69:8080/TermServer/Search?wsdl

Sample has been created with netbeans. You have to add a web service reference with above WSDL to use the code below.

package termserverclientdemo;
 
import de.fhdo.terminologie.ws.search.ListCodeSystemConceptsRequestType;
import de.fhdo.terminologie.ws.search.ListCodeSystemConceptsResponse;
import de.fhdo.terminologie.ws.search.Search;
import de.fhdo.terminologie.ws.search.Search_Service;
import java.net.URL;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;
import types.termserver.fhdo.de.CodeSystemConcept;
import types.termserver.fhdo.de.CodeSystemEntity;
import types.termserver.fhdo.de.CodeSystemEntityVersion;
import types.termserver.fhdo.de.CodeSystemVersion;
 
/**
 *
 * @author Robert Mützner <robert.muetzner@fh-dortmund.de>
 */
public class SynchronizeConcepts
{
  private java.util.Date lastSynch = new Date();
 
  public void synchronizeConcepts()
  {
    boolean success = false;
 
    try
    {
      GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance();
      gc.set(GregorianCalendar.YEAR, 2014);
      gc.set(GregorianCalendar.MONTH, 10);
      gc.set(GregorianCalendar.DAY_OF_MONTH, 1);
      lastSynch = gc.getTime();
 
      // create webservice reference and port
      Search_Service service = new Search_Service(
              new URL("http://193.25.22.69:8080/TermServer/Search?wsdl"),
              new QName("http://search.ws.terminologie.fhdo.de/", "Search"));
      Search port = service.getSearchPort();
 
      // define parameter
      ListCodeSystemConceptsRequestType request = new ListCodeSystemConceptsRequestType();
      CodeSystemVersion csvRequest = new CodeSystemVersion();
      csvRequest.setVersionId(1l);  // get code system with version id '1'
 
      request.setCodeSystem(new types.termserver.fhdo.de.CodeSystem());
      request.getCodeSystem().getCodeSystemVersions().add(csvRequest);
 
      CodeSystemEntityVersion csev = new CodeSystemEntityVersion();
      csev.setStatusVisibilityDate(dateToXMLGregorianCalendar(lastSynch));  // set last synch date
      request.setCodeSystemEntity(new CodeSystemEntity());
      request.getCodeSystemEntity().getCodeSystemEntityVersions().add(csev);
      System.out.println("Date: " + dateToXMLGregorianCalendar(lastSynch));
 
      // invoke method
      ListCodeSystemConceptsResponse.Return response = port.listCodeSystemConcepts(request);
 
      // handle response
      System.out.println("Response: " + response.getReturnInfos().getMessage());
 
      if(response.getReturnInfos().getStatus() == de.fhdo.terminologie.ws.search.Status.OK)
      {
        System.out.println("Count: " + response.getReturnInfos().getCount());
 
        for(CodeSystemEntity cse : response.getCodeSystemEntity())
        {
          for(CodeSystemEntityVersion csv : cse.getCodeSystemEntityVersions())
          {
            CodeSystemConcept csc = csv.getCodeSystemConcepts().get(0);
            System.out.println("VersionId: " + csv.getVersionId() + " " + csv.getStatusVisibilityDate().toString() + ", " + csc.getCode()+ " - " + csc.getTerm());
 
            // update changed data in your database
 
          }
        }
 
        success = true;
      }
      else
      {
        // handle error message
      }
    }
    catch (Exception ex)
    {
      ex.printStackTrace();
    }
 
    if(success)
    {
      lastSynch = new java.util.Date();
      // TODO save current date for synchronization
    }
  }
 
  public static XMLGregorianCalendar dateToXMLGregorianCalendar(Date date)
  {
    GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance();
    gc.setTime(date);
    DatatypeFactory dataTypeFactory = null;
    try
    {
      dataTypeFactory = DatatypeFactory.newInstance();
    }
    catch (DatatypeConfigurationException ex)
    {
      ex.printStackTrace();
    }
    XMLGregorianCalendar value = dataTypeFactory.newXMLGregorianCalendar(gc);
    return value;
  }
}
Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Werkzeuge