Generelt om integration

Det er muligt at integrere med SmartTID fra dit ERP system. Herved kan medarbejdere, ordrer, sager, projekter m.v. blive overført til SmartTID automatisk og evt. bogførte poster fra SmartTID kan føres tilbage til dit ERP system.

For at integrere dit ERP system med SmartTID kræver det i kommer i en dialog med jeres interne eller eksterne ERP konsulent som vil kunne forestå denne integration. De og I er naturligvis altid velkomne til at kontakte os for hjælp, men nedenstående skulle gerne gøre dem i stand til at lave integrationen.

Lige når det drejer sig om integration til eConomics, så har vi en standard integration til dette som vi selv kan tilpasse fra gang til gang jf. jeres ønsker.

Det tekniske

Der er 3 måder at lave integrationen på
  1. Via REST API som vi klart anbefaler til nye kunder og udviklere der vil integrere med SmartTID. Det har sin egen side hos os og som er på engelsk. How to become a developer partner with SmartTID
  2. Via SOAP web services (se den tekniske beskrivelse af vores API her http://help.smarttid.dk/integration/smarttid-web-service-api)
  3. Direkte kald til SQL (tilbydes ikke til nye kunder efter 1. januar 2018 - her skal anvendes web services)

REST API

Vi anbefaler at bruge vores REST API og også at eksistere integrationer der måtte bruge vores SOAP web services skiftes til REST.

Via REST API er det muligt at lave stort set alle funktioner i SmartTID og det er dermed muligt at bygge ret avancerede integrationer med andre systemer


Web services (SOAP)

For at anvende web services skal du have et API key fra os. Kontakt vores support for at få denne.

Dette link beskriver de kald der kan laves

Se evt. også afsnittet om direkte kald til SQL da det er de samme parametre som bruges.

Direkte kald til SQL

For at lave direkte kald til SQL skal du kende følgende oplysninger
  • URL adresse på SQL server
  • Brugernavn
  • Password
Disse oplysninger har i fået i en velkomst mail og ellers kan i henvende jer til vores support for at få disse.

Kaldet foregår til stored procedurer som tager en eller flere parametre. Alle parametre ud over nødvendige nøglefelter har en default værdi, så du behøver kun kalde med de felter I har brug for.

Det er den samme funktion der bruges til at oprette eller ændre en post. Funktionen sørger for at oprette nye og opdatere eksisterende.

Opret medarbejder

sp_IntegrationCreateEmployee
    @sEmployeeCode NVARCHAR(20),
    @sName NVARCHAR(50) = '',
    @sAddress NVARCHAR(50) = '',
    @sZipCode NVARCHAR(20) = '',
    @sCity NVARCHAR(50) = '',
    @sPhone NVARCHAR(20) = '',
    @sCellPhone NVARCHAR(20) = '',
    @sEmail NVARCHAR(50) = '',
    @sCPRNo NVARCHAR(11) = '',
    @sDepartmentCode NVARCHAR(20) = '',
    @sDepartmentName NVARCHAR(50) = '',
    @sWorkCalendarCode NVARCHAR(20) = '',
    @sWorkFunctionCode NVARCHAR(20) = '',
    @sWorkFunctionName NVARCHAR(50) = '',
    @sPayrollTypeCode NVARCHAR(20) = '',
    @sPayrollTypeName NVARCHAR(50) = '',
    @sJournalCode NVARCHAR(20) = '',
    @sJournalName NVARCHAR(50) = '',
    @sEmployedStartDate NVARCHAR(20) = '',     -- ansættelsesdato som streng dd-mm-åååå
    @sEmployedEndDate NVARCHAR(20) = '',       -- fratrædelsesdato som streng dd-mm-åååå
    @dtEmployedStartDate DATETIME = NULL,     -- ansættelsesdato
    @dtEmployedEndDate DATETIME = NULL,       -- fratrædelsesdato
    @sTeamleaderCode NVARCHAR(20) = '',
    @bActive BIT = 0,
    @sEmployeeCode2 NVARCHAR(20) = '',
    @sGroundsForTerminationCode NVARCHAR(20) = '', -- Har hun virkning hvis den kaldes sammen med @sEmployedEndDate
    @sDistrictCode NVARCHAR(20) = '',
    @sEmployeeGroupCode NVARCHAR(20) = '',
    @sProfileCode NVARCHAR(20) = '',
    @sOldEmployeeCode NVARCHAR(20) = '', -- Hvis denne er udfyldt omdøbes medarbejder fra @sOldEmployeeCode til @sEmployeeCode
    @sSystemID NVARCHAR(30) = '',
    @sTAG NVARCHAR(20) = '',
    @sTemplateCode NVARCHAR(20) = '',
    @sDimensionCode1 NVARCHAR(20) = '',
    @sDimensionCode2 NVARCHAR(20) = '',
    @sDimensionCode3 NVARCHAR(20) = '',
    @sDimensionCode4 NVARCHAR(20) = '',
    @sDimensionCode5 NVARCHAR(20) = '',
    @bTransferToPayroll BIT = 1

Eksempel:
EXEC sp_IntegrationCreateEmployee @sEmployeeCode = '1234', @sName = 'Poul Christensen', @sTemplateCode = 'FUNK', @dtEmployedStartDate = '20170101'

Vil oprette medarbejdere. Sætte skabelon FUNK på og ansætte vedkommende pr. 1 januar 2017.

Opret job

sp_IntegrationCreateJob
    @sJobCode NVARCHAR(20),
    @sJobDescription NVARCHAR(50) = '',
    @sJobDescription2 NVARCHAR(50) = '',
    @sPlannedStartDate NVARCHAR(10) = '', -- String on format yyyy-mm-dd
    @sPlannedCompletionDate NVARCHAR(10) = '', -- String on format yyyy-mm-dd
    @sStatus NVARCHAR(10) = '', -- Planned, Started, Completed, Canceled, Template
    @sJobTemplate NVARCHAR(20) = '',
    @sJobGroupCode NVARCHAR(20) = '',
    @nPlannedNumber INT = 0,
    @nNumberPerContainer INT = 0,
    @sOrderCode NVARCHAR(20) = '',
    @sCustomerCode NVARCHAR(20) = '',
    @sCustomerName NVARCHAR(50) = '',
    @sCustomerAddress NVARCHAR(50) = '',
    @sCustomerZipCode NVARCHAR(20)= '',
    @sCustomerCity NVARCHAR(50) = '',
    @sCustomerPhone NVARCHAR(50) = '',
    @sPlannedDeliveryDate NVARCHAR(10) = '', -- String on format yyyy-mm-dd
    @sActualDeliveryDate NVARCHAR(10) = '', -- String on format yyyy-mm-dd
    @sDepartmentCode NVARCHAR(20) = '',
    @sProductCode NVARCHAR(20) = '',
    @sReference NVARCHAR(50) = '',
    @sRemark NVARCHAR(200) = '',
    @sMaterialsRecieved NVARCHAR(1) = '0', -- 0 for no and 1 for yes
    @sReadyToShip NVARCHAR(1) = '0', -- 0 for no and 1 for yes
    @sExpectedMaterialDeliveryDate NVARCHAR(10) = '', -- String on format yyyy-mm-dd
    @sInvoiced NVARCHAR(1) = '0', -- 0 for no and 1 for yes
    @sManagerCode NVARCHAR(20) = '',
    @sOldJobCode NVARCHAR(20) = '', -- Hvis denne er udfyldt omdøbes job fra @sOldJobCode til @sJobCode
    @sDistrictCode NVARCHAR(20) = ''

Eksempel
EXEC sp_IntegrationCreateJob @sJobCode = '1234', @sJobDescription = 'Testjob', @sJobTemplate = 'STANDARD', @sStatus = 'Started'

Vil oprette et job og sætte skabelon STANDARD på og starte jobbet.

Ved at bruge en skabelon kan man få sat en række standard operationer og aktiviteter på. Det kunne være der var et felt i ERP systemet som kunne styre det således at alle ordre, sager, projekter i en bestemt gruppe fik et bestemt sæt operationer og aktiviteter på.

Hvis der ikke bruges en skabelon så skal der som minimum oprettes en operation vha. sp_IntegrationCreateOperation

Oprette operation

sp_IntegrationCreateOperation 
  @sJobCode NVARCHAR(20),
  @nLineNumber FLOAT = 0, -- Hvis @nLineNumber = 0 (eller NULL) finder funktionen selv LineNumber ud fra OperationCode og ellers genererer én selv
  @sOperationCode NVARCHAR(20) = '',
  @sDescription NVARCHAR(100) = '',
  @sPlannedTime NVARCHAR(20) = '0',
  @sERPReference NVARCHAR(20) = '',
  @nPlannedQuantityPerHour FLOAT = NULL,
  @nQuantityPerUnit FLOAT = NULL,
  @nLength FLOAT = NULL,
  @nWidth FLOAT = NULL,
  @nHeight FLOAT = NULL,
  @bOperationCompleted BIT = 0,
  @bReportScrap BIT = 1,
  @bReportProduced BIT = 1,
  @sColorCode NVARCHAR(20) = NULL,
  @nArea DECIMAL(38,18) = NULL,
  @sType NVARCHAR(50) = NULL,
  @sQuality NVARCHAR(50) = NULL,
  @nPlannedQuantity DECIMAL(38,18) = NULL

Eksempel
EXEC sp_IntegrationCreateOperation @sJobCode = '1234', @nLineNumber = 10, @sOperationCode = '100', @sDescription = 'Savning', @sPlannedTime = '2.50', @bReportScrap BIT = 0,  @bReportProduced BIT = 1

Vil oprette en operation på jobbet 1234 på linje 10. Hvis ikke operationen 100 Savning findes generelt i operationskartoteket oprettes det automatisk. Linje nummeret angiver rækkefølgen på ruten.

Oprette aktivitet

sp_IntegrationCreateActivity
  @sJobCode NVARCHAR(20),
  @nLineNumber FLOAT = 0,
  @sOperationCode NVARCHAR(20) = '', -- Hvis @sOperationCode er angivet forsøger funktionen af finde @nLineNumber der ud fra
  @sActivityCode NVARCHAR(20) = '',
  @sDescription NVARCHAR(100) = '',
  @sERPReference NVARCHAR(50) = '',
  @dtStartDate DATETIME = '',
  @dtEndDate DATETIME = '',
  @sColorCode NVARCHAR(20) = NULL

EXEC sp_IntegrationCreateActivity @sJobCode = '1234', @nLineNumber = 10, @sActivityCode = '100', @sDescription = 'Aktivitetsbeskrivelse'

Vil oprette aktivitet 100 på job 1234 under operationslinje 10. Hvis ikke aktiviteten findes i aktivitetskartoteket så oprettes den automatisk

Hente tidsposter

sp_IntegrationGetTimeLedgerEntry

         TimeLedgerEntry.EntryID,
         TimeLedgerEntry.EmployeeCode,
         TimeLedgerEntry.Name,
         TimeLedgerEntry.Date,
         TimeLedgerEntry.LogStart,
         TimeLedgerEntry.LogEnd,
         TimeLedgerEntry.WorkTypeCode,
         TimeLedgerEntry.BreakTime,
         TimeLedgerEntry.StartTime,
         TimeLedgerEntry.EndTime,
         TimeLedgerEntry.TotalTime,
         TimeLedgerEntry.WorkCalendarCode,
         TimeLedgerEntry.Export,
         TimeLedgerEntry.Type,
         TimeLedgerEntry.TransferedToOutlook,
         TimeLedgerEntry.Remark,
         TimeLedgerEntry.DepartmentCode,
         TimeLedgerEntry.WorkFunctionCode,
         TimeLedgerEntry.Relative,
         TimeLedgerEntry.PeriodName,
         TimeLedgerEntry.JournalCode,
         TimeLedgerEntry.EmployeeGroupCode,
         TimeLedgerEntry.DistrictCode,
         TimeLedgerEntry.TeamLeaderCode,
         TimeLedgerEntry.Canceled,
         TimeLedgerEntry.PayrollTypeCode,
         TimeLedgerEntry.JournalLineEntryID,
         TimeLedgerEntry.OverTimeCode,
         TimeLedgerEntry.DimensionCode1,
         TimeLedgerEntry.DimensionCode2,
         TimeLedgerEntry.DimensionCode3,
         TimeLedgerEntry.DimensionCode4,
         TimeLedgerEntry.DimensionCode5,
         TimeLedgerEntry.DimensionCode7,
         TimeLedgerEntry.DimensionCode6,
         TimeLedgerEntry.DimensionCode8,
         TimeLedgerEntry.DimensionCode9,
         TimeLedgerEntry.DimensionCode10

Eksempel
EXEC sp_IntegrationGetTimeLedgerEntry

Der kræves ingen parametre til dette kald. Alle poster som endnu ikke er overført hentes.

Når en post er hentet kan den med fordel markeres hentet så den ikke kommer med næste gang

UPDATE TimeLedgerEntry SET Transfered = 1 WHERE EntryID = xxxx

Kan også bruge denne funktion fra version 6.02 til at markere overført sp_IntegrationMarkTimeLedgerEntryTransfered

Hente jobposter

sp_IntegrationGetJobLedgerEntry

         JobLedgerEntry.ID,         
         JobLedgerEntry.EmployeeCode,
         JobLedgerEntry.Date,
         JobLedgerEntry.Name,
         JobLedgerEntry.JobCode,
         JobLedgerEntry.OperationCode,
         JobLedgerEntry.JobOperationLineNumber,
         JobLedgerEntry.OperationDescription,
         JobLedgerEntry.ActivityCode,
         JobLedgerEntry.ActivityDescription,
         JobLedgerEntry.Completed,
         JobLedgerEntry.WorkTypeCode,
         JobLedgerEntry.StartTime,
         JobLedgerEntry.EndTime,
         JobLedgerEntry.TotalTime,
         JobLedgerEntry.ERPReference,
         JobLedgerEntry.TaskID,
         JobLedgerEntry.WorkFunctionCode,
         JobLedgerEntry.DistrictCode,
         JobLedgerEntry.DepartmentCode,
         JobLedgerEntry.EmployeeGroupCode,
         JobLedgerEntry.Setup,
         JobLedgerEntry.JournalCode,
         JobLedgerEntry.DimensionCode1,
         JobLedgerEntry.DimensionCode2,
         JobLedgerEntry.DimensionCode3,
         JobLedgerEntry.DimensionCode4,
         JobLedgerEntry.DimensionCode5,
         JobLedgerEntry.DimensionCode6,
         JobLedgerEntry.DimensionCode7,
         JobLedgerEntry.DimensionCode8,
         JobLedgerEntry.DimensionCode9,
         JobLedgerEntry.DimensionCode10,
         JobLedgerEntry.PayrollTypeCode,
         JobLedgerEntry.OverTimeCode,
         JobLedgerEntry.Remarks

Eksempel
EXEC sp_IntegrationGetJobLedgerEntry

Der kræves ingen parametre til dette kald. Alle poster som endnu ikke er overført hentes.

Når en post er hentet kan den med fordel markeres hentet så den ikke kommer med næste gang

UPDATE JobLedgerEntry SET Transfered = 1 WHERE D = xxxx

Kan også bruge denne funktion fra version 6.02 til at markere overført sp_IntegrationMarkJobLedgerEntryTransfered

Hente afmeldingsposter

Hvis der er afmeldt antal eller skrot kan disse poster hentes med

Eksempel
EXEC sp_IntegrationGetJobReportLedgerEntry @nID = JobLedgerEntry.ID

         JobReportLedgerEntry.ID,
         JobReportLedgerEntry.Type,
         JobReportLedgerEntry.ScrapCode,
         JobReportLedgerEntry.ERPRef,
         JobReportLedgerEntry.Quantity

Denne skal kaldes for hver jobpost der hentes.

Type = 1 for afmeldinger og 2 for skrot.

Hente udvalgte tidsposter (fra version 6.02)

Fra og med version 6.02 er de muligt at hente alle poster eller et udvalg af dem. Det gælder også poster som allerede er hentet.

sp_IntegrationGetAllTimeLedgerEntry
  @dtStartDate DATETIME = NULL,
  @dtEndDate DATETIME = NULL,
  @sDistrictCode NVARCHAR(20) = NULL,
  @sDepartmentCode NVARCHAR(20) = NULL,
  @sEmployeeGroupCode NVARCHAR(20) = NULL,
  @bTransfered BIT = NULL

Eksempel på tidsposter
EXEC sp_IntegrationGetAllTimeLedgerEntry @dtStartDate = '20170101', @dtEndDate = '20170430'

Vil hente alle tidsposter i perioden 1 januar til 30 april 2017

Hente udvalgte jobposter (fra version 6.02)

sp_IntegrationGetAllJobLedgerEntry
  @dtStartDate DATETIME = NULL,
  @dtEndDate DATETIME = NULL,
  @sDistrictCode NVARCHAR(20) = NULL,
  @sDepartmentCode NVARCHAR(20) = NULL,
  @sEmployeeGroupCode NVARCHAR(20) = NULL,
  @bTransfered BIT = NULL

Eksempel på jobposter
EXEC sp_IntegrationGetAllJobLedgerEntry @dtStartDate = '20170101', @dtEndDate = '20170430'

Vil hente alle jobposter i perioden 1 januar til 30 april 2017

Markere tidspost overført (fra version 6.02)

sp_IntegrationMarkTimeLedgerEntryTransfered
  @nEntryID INT

Eksempel på tidspost
EXEC sp_IntegrationMarkTimeLedgerEntryTransfered nEntryID = xxxx

Markere jobpost overført (fra version 6.02)

sp_IntegrationMarkJobLedgerEntryTransfered
  @nID INT

Eksempel på jobpost
EXEC sp_IntegrationMarkJobLedgerEntryTransfered nID = xxxx


Rev 04 Poul Christensen, 04-08-2021