The Api-Pro microservice is responsible for the communication between Blackbird and Api-Pro. The Api-Pro integration is part of the maintenance call system (Andon), and serves as an extension of this. If enabled, a user can, during a maintenance call, initiate an Api-Pro work order. This will cause the call to be locked in Blackbird (i.e. you cannot update the status in Blackbird no more), and leaves the status updates to Api-Pro. Upon initiation, Blackbird sends the maintenance call details to Api-Pro, along with the call's UUID, and Api-Pro returns a #AO (Work Order Number). Later on, when the technician has handled the call in the Api-Pro application, Api-Pro will send back a status update to Blackbird, which will be used to update the Andon maintenance call status.

The API Pro interface is requiring a high level of customization for each customer. Depending on the setup of the client there will likely be a need for custom development for the interface to fit the client's need.

The following diagram illustrates the flow between Blackbird and API-Pro.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/01045714-e536-4a4f-b1d4-0aad6db7a331/Untitled.png

Data shared with API-Pro

author: 'ordered_by',
  jobexecDate: 'jobexec_date',
  jobexecTime: 'jobexec_time',
  moKey: 'MO_key',
  sapId: 'jobcode_key',
  // NOTE: The resolution details that the technician fills out (it usually consists of three parts)
  pendingDetails: 'history_note',
  callId: 'Extra_WO_info3',
  userId: 'User_ID', // Initials
  // NOTE: Three error codes that the technician fills out
  symptom: 'error_code_1',
  cause: 'error_code_2',
  action: 'error_code_3',
  // NOTE: WO_name is the SOAP-alias for the "Short description" field in APIPRO
  // - it corresponds to the operator's input
  makeDetails: 'WO_name',

SOAP

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:soapenc="<http://schemas.xmlsoap.org/soap/encoding/>" xmlns:prodata="urn:schemas-progress-com:xml-prodata:0001" xmlns:wsdl="<http://schemas.xmlsoap.org/wsdl/>" xmlns:tns="urn:DKK010-BLACKBIRD-com" xmlns:S2="urn:DKK010-BLACKBIRD-com:DKK010-BLACKBIRD" xmlns:xsd="<http://www.w3.org/2001/XMLSchema>" xmlns:S1="urn:soap-fault:details" xmlns:soap="<http://schemas.xmlsoap.org/wsdl/soap/>" name="DKK010-BLACKBIRD" targetNamespace="urn:DKK010-BLACKBIRD-com">
  <wsdl:documentation>EncodingType=DOC_LITERAL, Proxygen_Product=Progress Version 11.6</wsdl:documentation>
  <wsdl:types>
    <schema xmlns="<http://www.w3.org/2001/XMLSchema>" elementFormDefault="unqualified" targetNamespace="urn:soap-fault:details">
      <element name="FaultDetail">
        <complexType>
          <sequence>
            <element name="errorMessage" type="xsd:string"/>
            <element name="requestID" type="xsd:string"/>
          </sequence>
        </complexType>
      </element>
    </schema>
    <schema xmlns="<http://www.w3.org/2001/XMLSchema>" elementFormDefault="qualified" targetNamespace="urn:DKK010-BLACKBIRD-com:DKK010-BLACKBIRD">
      <complexType name="exportWoFinished_APIUserRow">
        <sequence>
          <element name="user-key" nillable="true" type="xsd:string"/>
          <element name="user-pw" nillable="true" type="xsd:string"/>
          <element name="auto-create-list" nillable="true" type="xsd:string"/>
        </sequence>
      </complexType>
      <complexType name="exportWoFinished_APIUserParam">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="APIUserRow" type="S2:exportWoFinished_APIUserRow"/>
        </sequence>
      </complexType>
      <complexType name="exportWoFinished_temp_cut_dateRow">
        <sequence>
          <element name="dcut_date" nillable="true" type="xsd:dateTime"/>
        </sequence>
      </complexType>
      <complexType name="exportWoFinished_temp_cut_dateParam">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="temp_cut_dateRow" type="S2:exportWoFinished_temp_cut_dateRow"/>
        </sequence>
      </complexType>
      <complexType name="exportWoFinished_temp_wo_finishedRow">
        <sequence>
          <element name="wo_key" nillable="true" type="xsd:string"/>
        </sequence>
      </complexType>
      <complexType name="exportWoFinished_temp_wo_finishedParam">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="temp_wo_finishedRow" type="S2:exportWoFinished_temp_wo_finishedRow"/>
        </sequence>
      </complexType>
      <complexType name="exportWoFinished_temptable_ImportExport_logRow">
        <sequence>
          <element name="Interface_IE_sequence" nillable="true" type="xsd:long"/>
          <element name="Interface_IE_key" nillable="true" type="xsd:string"/>
          <element name="Interface_action" nillable="true" type="xsd:string"/>
          <element name="Interface_direction" nillable="true" type="xsd:string"/>
          <element name="Import_IE_key" nillable="true" type="xsd:string"/>
          <element name="Export_IE_key" nillable="true" type="xsd:string"/>
          <element name="Key1" nillable="true" type="xsd:string"/>
          <element name="Key2" nillable="true" type="xsd:string"/>
          <element name="Key3" nillable="true" type="xsd:string"/>
          <element name="Key4" nillable="true" type="xsd:string"/>
          <element name="Key5" nillable="true" type="xsd:string"/>
          <element name="Key1_label" nillable="true" type="xsd:string"/>
          <element name="Key2_label" nillable="true" type="xsd:string"/>
          <element name="Key3_label" nillable="true" type="xsd:string"/>
          <element name="Key4_label" nillable="true" type="xsd:string"/>
          <element name="Key5_label" nillable="true" type="xsd:string"/>
          <element name="Error_exist" nillable="true" type="xsd:boolean"/>
          <element name="Error_code" nillable="true" type="xsd:string"/>
          <element name="Error_text" nillable="true" type="xsd:string"/>
          <element name="Interface_batch" nillable="true" type="xsd:string"/>
          <element name="Interface_foreign_key" nillable="true" type="xsd:string"/>
          <element name="Record_active" nillable="true" type="xsd:boolean"/>
          <element name="Last_change_dtz" nillable="true" type="xsd:dateTime"/>
          <element name="Last_export_dtz" nillable="true" type="xsd:dateTime"/>
          <element name="Last_import_dtz" nillable="true" type="xsd:dateTime"/>
          <element name="Create_dtz" nillable="true" type="xsd:dateTime"/>
          <element name="Export_dtz" nillable="true" type="xsd:dateTime"/>
          <element name="Import_dtz" nillable="true" type="xsd:dateTime"/>
          <element name="Record_Language_key" nillable="true" type="xsd:string"/>
          <element name="Site_key" nillable="true" type="xsd:string"/>
        </sequence>
      </complexType>
      <complexType name="exportWoFinished_temptable_ImportExport_logParam">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="temptable_ImportExport_logRow" type="S2:exportWoFinished_temptable_ImportExport_logRow"/>
        </sequence>
      </complexType>
      <complexType name="exportWoFinished_APIErrorRow">
        <sequence>
          <element name="api-func" nillable="true" type="xsd:string"/>
          <element name="the-key" nillable="true" type="xsd:string"/>
          <element name="err-num" nillable="true" type="xsd:int"/>
          <element name="err-desc" nillable="true" type="xsd:string"/>
        </sequence>
      </complexType>
      <complexType name="exportWoFinished_APIErrorParam">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="APIErrorRow" type="S2:exportWoFinished_APIErrorRow"/>
        </sequence>
      </complexType>
      <complexType name="importWorkorder_APIUserRow">
        <sequence>
          <element name="user-key" nillable="true" type="xsd:string"/>
          <element name="user-pw" nillable="true" type="xsd:string"/>
          <element name="auto-create-list" nillable="true" type="xsd:string"/>
        </sequence>
      </complexType>
      <complexType name="importWorkorder_APIUserParam">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="APIUserRow" type="S2:importWorkorder_APIUserRow"/>
        </sequence>
      </complexType>
      <complexType name="importWorkorder_temptable_interface_work_orderRow">
        <sequence>
          <element name="ordered_by" nillable="true" type="xsd:string"/>
          <element name="jobexec_date" nillable="true" type="xsd:date"/>
          <element name="jobexec_time" nillable="true" type="xsd:int"/>
          <element name="MO_key" nillable="true" type="xsd:string"/>
          <element name="jobcode_key" nillable="true" type="xsd:string"/>
          <element name="history_note" nillable="true" type="xsd:string"/>
          <element name="Extra_WO_info3" nillable="true" type="xsd:string"/>
          <element name="User_ID" nillable="true" type="xsd:string"/>
          <element name="error_code_1" nillable="true" type="xsd:string"/>
          <element name="error_code_2" nillable="true" type="xsd:string"/>
          <element name="error_code_3" nillable="true" type="xsd:string"/>
          <element name="WO_name" nillable="true" type="xsd:string"/>
        </sequence>
      </complexType>
      <complexType name="importWorkorder_temptable_interface_work_orderParam">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="temptable_interface_work_orderRow" type="S2:importWorkorder_temptable_interface_work_orderRow"/>
        </sequence>
      </complexType>
      <complexType name="importWorkorder_temptable_ImportExport_logRow">
        <sequence>
          <element name="Interface_IE_sequence" nillable="true" type="xsd:long"/>
          <element name="Interface_IE_key" nillable="true" type="xsd:string"/>
          <element name="Interface_action" nillable="true" type="xsd:string"/>
          <element name="Interface_direction" nillable="true" type="xsd:string"/>
          <element name="Import_IE_key" nillable="true" type="xsd:string"/>
          <element name="Export_IE_key" nillable="true" type="xsd:string"/>
          <element name="Key1" nillable="true" type="xsd:string"/>
          <element name="Key2" nillable="true" type="xsd:string"/>
          <element name="Key3" nillable="true" type="xsd:string"/>
          <element name="Key4" nillable="true" type="xsd:string"/>
          <element name="Key5" nillable="true" type="xsd:string"/>
          <element name="Key1_label" nillable="true" type="xsd:string"/>
          <element name="Key2_label" nillable="true" type="xsd:string"/>
          <element name="Key3_label" nillable="true" type="xsd:string"/>
          <element name="Key4_label" nillable="true" type="xsd:string"/>
          <element name="Key5_label" nillable="true" type="xsd:string"/>
          <element name="Error_exist" nillable="true" type="xsd:boolean"/>
          <element name="Error_code" nillable="true" type="xsd:string"/>
          <element name="Error_text" nillable="true" type="xsd:string"/>
          <element name="Interface_batch" nillable="true" type="xsd:string"/>
          <element name="Interface_foreign_key" nillable="true" type="xsd:string"/>
          <element name="Record_active" nillable="true" type="xsd:boolean"/>
          <element name="Last_change_dtz" nillable="true" type="xsd:dateTime"/>
          <element name="Last_export_dtz" nillable="true" type="xsd:dateTime"/>
          <element name="Last_import_dtz" nillable="true" type="xsd:dateTime"/>
          <element name="Create_dtz" nillable="true" type="xsd:dateTime"/>
          <element name="Export_dtz" nillable="true" type="xsd:dateTime"/>
          <element name="Import_dtz" nillable="true" type="xsd:dateTime"/>
          <element name="Record_Language_key" nillable="true" type="xsd:string"/>
          <element name="Site_key" nillable="true" type="xsd:string"/>
        </sequence>
      </complexType>
      <complexType name="importWorkorder_temptable_ImportExport_logParam">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="temptable_ImportExport_logRow" type="S2:importWorkorder_temptable_ImportExport_logRow"/>
        </sequence>
      </complexType>
      <complexType name="importWorkorder_APIErrorRow">
        <sequence>
          <element name="api-func" nillable="true" type="xsd:string"/>
          <element name="the-key" nillable="true" type="xsd:string"/>
          <element name="err-num" nillable="true" type="xsd:int"/>
          <element name="err-desc" nillable="true" type="xsd:string"/>
        </sequence>
      </complexType>
      <complexType name="importWorkorder_APIErrorParam">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" name="APIErrorRow" type="S2:importWorkorder_APIErrorRow"/>
        </sequence>
      </complexType>
      <element name="exportWoFinished">
        <complexType>
          <sequence>
            <element name="APIUser" nillable="true" type="S2:exportWoFinished_APIUserParam"/>
            <element name="temp_cut_date" nillable="true" type="S2:exportWoFinished_temp_cut_dateParam"/>
          </sequence>
        </complexType>
      </element>
      <element name="exportWoFinishedResponse">
        <complexType>
          <sequence>
            <element name="result" nillable="true" type="xsd:string"/>
            <element name="temp_wo_finished" nillable="true" type="S2:exportWoFinished_temp_wo_finishedParam"/>
            <element name="temptable_ImportExport_log" nillable="true" type="S2:exportWoFinished_temptable_ImportExport_logParam"/>
            <element name="APIError" nillable="true" type="S2:exportWoFinished_APIErrorParam"/>
          </sequence>
        </complexType>
      </element>
      <element name="importWorkorder">
        <complexType>
          <sequence>
            <element name="APIUser" nillable="true" type="S2:importWorkorder_APIUserParam"/>
            <element name="temptable_interface_work_order" nillable="true" type="S2:importWorkorder_temptable_interface_work_orderParam"/>
          </sequence>
        </complexType>
      </element>
      <element name="importWorkorderResponse">
        <complexType>
          <sequence>
            <element name="result" nillable="true" type="xsd:string"/>
            <element name="temptable_ImportExport_log" nillable="true" type="S2:importWorkorder_temptable_ImportExport_logParam"/>
            <element name="APIError" nillable="true" type="S2:importWorkorder_APIErrorParam"/>
          </sequence>
        </complexType>
      </element>
    </schema>
  </wsdl:types>
  <wsdl:message name="FaultDetailMessage">
    <wsdl:part name="FaultDetail" element="S1:FaultDetail"/>
  </wsdl:message>
  <wsdl:message name="DKK010-BLACKBIRD_importWorkorder">
    <wsdl:part name="parameters" element="S2:importWorkorder"/>
  </wsdl:message>
  <wsdl:message name="DKK010-BLACKBIRD_exportWoFinished">
    <wsdl:part name="parameters" element="S2:exportWoFinished"/>
  </wsdl:message>
  <wsdl:message name="DKK010-BLACKBIRD_importWorkorderResponse">
    <wsdl:part name="parameters" element="S2:importWorkorderResponse"/>
  </wsdl:message>
  <wsdl:message name="DKK010-BLACKBIRD_exportWoFinishedResponse">
    <wsdl:part name="parameters" element="S2:exportWoFinishedResponse"/>
  </wsdl:message>
  <wsdl:portType name="DKK010-BLACKBIRDObj">
    <wsdl:operation name="exportWoFinished">
      <wsdl:input message="tns:DKK010-BLACKBIRD_exportWoFinished"/>
      <wsdl:output message="tns:DKK010-BLACKBIRD_exportWoFinishedResponse"/>
      <wsdl:fault name="DKK010-BLACKBIRDFault" message="tns:FaultDetailMessage"/>
    </wsdl:operation>
    <wsdl:operation name="importWorkorder">
      <wsdl:input message="tns:DKK010-BLACKBIRD_importWorkorder"/>
      <wsdl:output message="tns:DKK010-BLACKBIRD_importWorkorderResponse"/>
      <wsdl:fault name="DKK010-BLACKBIRDFault" message="tns:FaultDetailMessage"/>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="DKK010-BLACKBIRDObj" type="tns:DKK010-BLACKBIRDObj">
    <soap:binding style="document" transport="<http://schemas.xmlsoap.org/soap/http>"/>
    <wsdl:operation name="exportWoFinished">
      <soap:operation soapAction="" style="document"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
      <wsdl:fault name="DKK010-BLACKBIRDFault">
        <soap:fault name="DKK010-BLACKBIRDFault" use="literal"/>
      </wsdl:fault>
    </wsdl:operation>
    <wsdl:operation name="importWorkorder">
      <soap:operation soapAction="" style="document"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
      <wsdl:fault name="DKK010-BLACKBIRDFault">
        <soap:fault name="DKK010-BLACKBIRDFault" use="literal"/>
      </wsdl:fault>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="DKK010-BLACKBIRDService">
    <wsdl:port name="DKK010-BLACKBIRDObj" binding="tns:DKK010-BLACKBIRDObj">
      <wsdl:documentation/>
      <soap:address location="<http://www.apipro.com/wsa/wsa1>"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>