Snabbguide Visma Compact API Version 5.1 Copyright 2006-2008 Visma Spcs AB Visma Compact API



Relevanta dokument
Snabbguide Visma Compact API Copyright Visma Spcs AB

Objektorienterad programmering D2

Föreläsning 6: Introduktion av listor

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

OOP Objekt-orienterad programmering

Tentamen OOP

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Snabbguide för. Visma Integration för Visma Administration 500/1000/2000 Visma Integration för Visma Förening. Utvecklarpaket

"if"-satsen. Inledande programmering med C# (1DV402)

Laboration 1 Introduktion till Visual Basic 6.0

DSV A Procedurell programmering 5 poäng Tentamen

Övningar Dag 2 En första klass

Laboration 10 - NetBeans

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Tentamen, EDAA20/EDA501 Programmering

Föreläsning 4: Poster

Twincat: PLC Control

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

2. Komma igång Skapa grupper och elever Skriv också ut sidan 13 så att eleverna har en snabbguide till programmet.

7 Mamut Client Manager

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Grundläggande programmering med C# 7,5 högskolepoäng

LEGO NXT Robotprogrammering

Programmering för språkteknologer II, HT2014. Rum

Föreläsning 7. Träd och binära sökträd

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

Hjälpmedel för kompilatorkonstruktion, DVB004

Kom igång med LUPP 6.1

Föreläsning 1 & 2 INTRODUKTION

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Föreläsning 13 och 14: Binära träd

Objektorienterad programmering i Java

ANVÄNDARMANUAL. handdatorer i ängs- och betesmarksinventeringen. för

Arkiv Integration Visma Importera fakturaunderlag eller

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Tentamen i Objektorienterad programmering

Installation/Flytt av Rebus

Objektsamlingar i Java

Komponenter med COM (och COM+/VC++ 7.0)

19. Skriva ut statistik

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Datorlaboration 0, Programmering i C++ (EDAF30)

FileCentral Desktop. Användarhandledning Version

Smart Rogic Manual. Robostick Manual

ANVÄNDARMANUAL. handdatorer i ängs- och betesmarksinventeringen. för

Kom igång med LUPP 6.0

Visual Basic, en snabbgenomgång

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Omtenta, Programmeringsteknisk översiktskurs, VT06

Den här texten ska förhoppningsvis underlätta en del av anpassningarna. Det kan säkert finnas en del fel och annat tok.

SMD 134 Objektorienterad programmering

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Tips och tricks 1 Cadcorp SIS

Language Integrated Query, LINQ, och databaser

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Editering, Kompilering och Exekvering av Javaprogram

Lektion 1 - Programmeringsteknik F1, ht 2003

Dugga Datastrukturer (DAT036)

Smartair System. TS1000 Version 4.23

OOP Objekt-orienterad programmering

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Att använda Java SE JDK 6

5 Grundläggande in- och utmatning

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

Användarhandledning Version 1.2

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Programmeringsteknik med C och Matlab

Objektorienterad programmering

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Tentamen Grundläggande programmering

1 Översikt. 1.1 Koncept 1 (19) Tomas Rook Dokument typ Rev. Manual

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Objektorienterad programmering Föreläsning 2

Grunderna i stegkodsprogrammering

Att skriva till och läsa från terminalfönstret

Introduktion till arv

Tentamen, EDA501 Programmering M L TM W K V

Grundläggande datalogi - Övning 1

RVS5000PC. Allmänt. RVS5000PC produktblad

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

Användarhandledning. Procapita Vård och Omsorg Konvertering av worddokument till PDF/A

Installationsanvisning för kursens programvara på egen dator

Installationsanvisning Boss delad databas

Matriks Doc 3 Importera dokument. Navision / Microsoft Dynamics NAV

Installationsanvisning från Visma Spcs. Visma löneprogram. Innehåll. Inledning

Lära känna skrivbordet

Introduktion till PHP

Användarmanual. OrderOnlineWeb

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Programmering B med Visual C

Slutrapport för JMDB.COM. Johan Wibjer

PROGRAMMERING A VB 2008 EXPRESS UTVECKLINGSVERKTYGET VISUAL BASIC

Att använda pekare i. C-kod

Visma Export v För OpenCart 1.5.x (upp till 1.5.6)

Net id OEM Användarhandbok för Windows

Transkript:

Snabbguide Visma Compact API Version 5.1 Copyright 2006-2008 Visma Spcs AB Visma Compact API

Introduktion Visma Compact API är ett programmeringsgränssnitt framtaget för att underlätta integration av Visma Compact med andra affärssystem samt för att möjliggöra anpassningar av Visma Compact för arbetsuppgifter som normalt inte ingår i programmet. Visma Compact API kan användas i många vanligt förekommande utvecklingsmiljöer och gör det enkelt att skapa t ex fakturor och ordrar med samma affärsregler som Visma Compact följer. Installation Visma Compact API distribueras normalt som ett zip-paket. Detta kan packas upp var som helst i filsystemet. I paketet ingår dokumentation, importfiler för de vanligaste utvecklingsmiljöerna samt exempelkod. Alla filer är native win32-dller. För att vara så flexibla som möjligt använder alla API-funktionerna Windows standard anropskonventioner. Inga objekt behöver registreras och inga externa beroenden finns. Själva APIet består av tre dll-filer: C4DLL.DLL Databasmotorn XFILES.DLL Visma Compacts klassbibliotek XORBASE5.DLL Export av API-funktionerna API-funktionerna ligger i Xorbase5.dll som i sin tur är beroende av funktioner i C4DLL och XFILES. Alla dessa filer måste alltså finnas tillgängliga för API-programmet. För att kunna använda funktionerna i APIet måste också funktionerna deklareras så att API-programmet vet hur de skall anropas. Detta görs lite olika beroende på vilken utvecklingsmiljö man använder. Programmering Innan man börjar programmera bör man också förvissa sig om att man har Visma Compact installerat. Enklast är det att ha Visma Compact installerat på samma maskin som används för utvecklingen men det går också att arbeta mot en server förutsatt att servern har Visma Compacts företagsdatabaser åtkomliga. Om man inte har tillgång till Visma Compact kan man hämta en demoversion från Visma Spcs hemsida. VB.Net Importfilen för VB.Net heter Xorbase5.vb. Denna fil läggs enklast till efter att ett projekt skapas genom att man använder Add existing item och sedan bläddrar sig till filen. För att kunna exekvera måste filerna C4DLL.DLL, XFILES.DLL och XORBASE5.DLL göras tillgängliga för applikationen. Detta kan t ex göras genom att de kopieras till den sökväg som anges i Build output path under projektets kompileringsinställningar. Delphi Projekt utvecklade i Delphi måste använda sig av importfilen Xorbase5.pas. Denna läggs till med hjälp av kommandot Add file to project.... Enhetsnamnet är Xorbase5. För att kunna exekvera applikationen måste filerna C4DLL.DLL, XFILES.DLL och XORBASE5.DLL göras tillgängliga. Enklast görs detta genom att kopiera dem till samma mapp som projektet använder för applikationens exekveringsfiler. Visual Basic 6 De projekt som fortfarande använder sig av Visual Basic 6 måste använda importfilen Xorbase5.bas. Denna lägger man till sitt projekt t ex genom kommandot Add module. För att kunna exekvera applikationen måste filerna C4DLL.DLL, XFILES.DLL och XORBASE5.DLL göras tillgängliga.

C/C++ API-programmering med C eller C++ är möjlig genom att inkludera importfilen Xorbase5.h samt gör filerna C4DLL.DLL, XFILES.DLL och XORBASE5.DLL tillgängliga. Filen Xorbase5.lib innehåller de funktionsdefinitioner som behövs för länkning. Att ansluta till en företagsdatabas Visma Compact organiserar data per företag. Varje företag har sin egen unika databas och man kan bara ansluta till ett företag i taget via APIet. Om Visma Compact redan är installerat på maskinen kommer APIet automatiskt att hämta rätt sökväg till databasen. Detta gäller även om databasen ligger på en server. I de fall där Visma Compact inte är installerat på den dator som kör API-applikationen måste sökvägen till databasen sättas explicit med hjälp av DatabaseSetPath. T ex: DatabaseSetPath("\\server\vismaXOR\Compact5\Företag\1010") Notera att hela sökvägen, inklusive företagsnamn, måste vara med. DatabaseSetPath ändrar inte sökvägen permanent utan gäller bara för den sessionen. Årshantering och datum Räkenskapsåren i Visma Compact definieras i tabellen Year. I denna tabell anges start- och slutdatum för varje räkenskapsår samt det id-nummer som sedan används i övriga tabeller för att ange i vilket räkenskapsår data ligger. Om man behöver avgöra i vilket räkenskapsår ett datum infaller kan man använda funktionen GetYearNo(Date d) där datum anges som ett julianskt datum. Datum Alla datum som används internt i Visma Compact är av typen julianskt datum. Detta är ett heltal där första dagen är 1980-01-01 och dagar därefter är konsekutivt uppräknade. Den 10 januari 2007 är alltså dag 9872. För att omvandla mellan olika datumrepresentationer finns funktionerna: YMDToDate() Year() Month() Day() Public Function DateTimeToXORJulDate(ByVal d As DateTime) As System.Int16 Return YMDToDate(d.Year, d.month, d.day, 0) End Function Public Function XORJulDateToDateTime(ByVal d As System.Int16) As DateTime Return New System.DateTime(Year(d), Month(d), Day(d)) End Function Seriehantering Löpnummer för att identifiera poster som verifikat, fakturor och reskontra hanteras via löpnummerserier som definieras i tabellen Series. I version 5.0 av Visma Compact var alla serier kopplade till årshanteringen. För varje räkenskapsår skapade alltså nya fakturaserier. Från och med version 5.1 är fakturaserierna inte längre bundna till räkenskapsåret. Det innebär att den del av primärnyckeln som har fältnamnet YEARNO identifierar en serie.

Distribution För att en slutanvändare skall kunna köra ett program utvecklat mot Visma Compact API krävs, förutom en installation av Visma Compact, de tre filer som utgör APIet: C4DLL.DLL Databasmotorn XFILES.DLL Visma Compacts klassbibliotek XORBASE5.DLL Export av API-funktionerna Inga objekt behöver registreras. Alla installationer av Visma Compact innehåller de binärfiler som behövs för att applikationer utvecklade mot APIet skall kunna köras. Som APIutvecklare kan man välja mellan att använda de filer som redan finns i installationen eller att packa med API-filer med det egna systemet. Bägge metoderna har sina för- och nackdelar. Vi rekommenderar dock att man bipackar API-filerna tillsammans med försystemets exe- och dll-filer så att systemet använder de API-filer som utvecklingen skett mot. Arbeta med data Många av API-funktionerna lägger automatiskt upp data utan att man behöver arbeta mot enskilda tabeller och fält. I en del fall kan man emellertid behöva komplettera poster eller kanske utföra uppgifter som inte stöds direkt. Till exempel kan man behöva komplettera kunduppgifter efter att man lagt till en ny kund. Som API-programmerare har man tillgång till alla fält och tabeller i databasen. Metoden bygger på att man skapar en pekare till de fält man vill arbeta med och använder sedan pekaren då man skriver eller läser data från aktuell post. Positioneringsfunktioner används för att positionera tabellen på den post man är intresserad av. Alla fält och tabeller finns beskrivna i dokumentet Databasbeskrivning. Högnivåanrop / Lågnivåanrop APIet innehåller alltså ett antal API-funktioner för att lätt lägga upp order- och fakturaunderlag, verifikat, reskontraposter samt registerposter. Dessa högnivåmetoder är: InvoiceOpen VoucherOpen InvoiceAddRow VoucherAddRow InvoiceClose VoucherClose PersonAdd LedgerAddCustomerInvoice ArticleAdd LedgerAddSupplierInvoice ObjectAdd Med dessa API-metoder behövs bara ett litet antal rader kod för att lägga upp poster i Visma Compact. Det är även enkelt att läsa poster från Visma Compact. Några exempel på metoder: InvoiceFind InvoiceRowFind VoucherFind LedgerFind PersonFind ArticleFind ObjectFind Behöver man komplettera poster eller utföra uppgifter som inte stöds av ovanstående metoder så finns ett antal lågnivåmetoder att använda: RecordCreate RecordFind RecordFirst RecordNext RecordPrev RecordLast RecordUpdate RecordAdd RecordDelete

Exempel Nedan följer ett antal kodexempel för att skapa och läsa registerdata mot Visma Compact. Exemplen är skrivna i VB.NET. Registerposter Lägg till ny kund I exemplet nedan läggs en ny kund upp med funktionen PersonAdd. För att kunna komplettera posten skapas en pekare till fältet WEB i tabellen PERSON med hjälp av funktionen RecordField. Denna pekare kan sedan användas antingen för att läsa eller skriva data till fältet. Efter PersonAdd är tabellen positionerad på den nya posten vilket också betyder att den är aktuell post. För att uppdatera den aktuella posten används funktionen FieldAssignString. Efter att aktuell post har uppdaterats måste värdet returneras till databasen. Detta sker med hjälp av funktionen RecordUpdate. Private Sub AddCustomer() Dim web As IntPtr = RecordField(PERSON, "WEB") If PersonAdd(CUSTOM, "123456", "Alfred Nyman", "", "Storgatan 12", "Box 123", "222 44 Köpingsbruk", "", "048-112233", "048-112234", "Kurt") = DbOk Then FieldAssignString(web, "www.alfrednyman.se") RecordUpdate(PERSON) End Sub Sök kund Man kan också enkelt hämta data från databasen. Man skapar en pekare till det fält i den tabell man är intresserad av. Tabellen positioneras, t ex genom någon sökmetod, och sedan läses värdet ut. I exemplet nedan positioneras tabellen på den post som skapades i exemplet ovan och sedan används FieldValueString för att hämta data. Fältlängder och typ finns angivet i databasbeskrivningen. Private Sub FindCustomer() Dim name As New System.Text.StringBuilder(32) Dim ptrname As IntPtr = RecordField(PERSON, "PNAME") If PersonFind(CUSTOM, "123456") Then FieldValueString(ptrName, name, 32) MessageBox.Show("Kundens namn: " + name.tostring()) Else MessageBox.Show("Kunde inte hitta kunden!") End Sub

Order- och fakturaunderlag Skapa faktura Om man har ett försystem som gör order- eller fakturaunderlag och man vill kunna fakturera och hantera reskontra i Visma Compact så kan man använda funktionerna InvoiceOpen, InvoiceAddRow och InvoiceClose. I exemplet nedan visas även hur man kan använda högnivåfunktioner och komplettera data med lågnivåfunktioner. Dim TransferOK As Boolean = True Dim InvSerie As Integer Dim InvRowNo As Integer Dim InvNo As Integer 'Fakturaseriens nummer 'Radnummer för fakturaraden 'Fakturans löpnummer InvSerie = InvoiceOpen("1320", XCUSTINVOICE, NOTREADY, 2009, 3, 2, 0, 0) If (InvSerie < 0) Then TransferOK = False Else 'Loop som loopar igenom alla fakturarader START InvRowNo = InvoiceAddRow("500", "", "", "", "", "", 10, 1890, 0) If (InvRowNo < 0) Then TransferOK = False 'Loop som loopar igenom alla fakturarader SLUT InvNo = InvoiceClose() If (InvNo < 0) Then TransferOK = False ' Ytterligare data i Invoicehead för avvikande leveransadress ' Denna kod nedan kan uteslutas om ingen extra information ska sparas If (TransferOK) Then Dim kinvoice1 As IntPtr = RecordKey(INVOICE, 1) Dim kyearno As IntPtr = KeyField(kInvoice1, "YEARNO") Dim kinvix As IntPtr = KeyField(kInvoice1, "INVIX") Dim kinvno As IntPtr = KeyField(kInvoice1, "INVNO") Dim finvheadbuyno As IntPtr = RecordField(INVOICE, "BUYORDERNO") Dim finvheadlevname As IntPtr = RecordField(INVOICE, "LEVNAMN") Dim finvheadlevadr1 As IntPtr = RecordField(INVOICE, "LEVADR1") Dim finvheadlevadr2 As IntPtr = RecordField(INVOICE, "LEVADR2") Dim finvheadlevadr3 As IntPtr = RecordField(INVOICE, "LEVADR3") FieldAssignLong(kYearNo, InvSerie) FieldAssignLong(kInvIx, XCUSTINVOICE) FieldAssignLong(kInvNo, InvNo) If (RecordFind(kInvoice1) <> DbOk) Then FieldAssignString(fInvHeadBuyNo, "123456") FieldAssignString(fInvHeadLevName, "Hasses Gatukök") FieldAssignString(fInvHeadLevAdr1, "") FieldAssignString(fInvHeadLevAdr2, "Torgstigen 10") FieldAssignString(fInvHeadLevAdr3, "123 45 STADEN") RecordUpdate(INVOICE)

Reskontraposter Skapa kundreskontrapost I många fall sköts fakturering i ett försystem men man vill använda Visma Compacts reskontrahantering för redovisning och betalningsbevakning. I dessa fall kan man använda någon av funktionerna LedgerAddCustomerInvoice eller LedgerAddSupplierInvoice beroende på om det är kund- eller leverantörsfakturor. Båda dessa funktioner innehåller mycket affärsregler. Kund- och leverantörsstatistik uppdateras automatiskt och funktionerna kan även automatiskt utföra bokningen i redovisningen. If LedgerAddCustomerInvoice("100", 2006, 11, 30, 1000, 250, FA, 0, 1, "") > 0 Then MessageBox.Show("Skrev reskontraposten till databasen.") Else MessageBox.Show("Kunde inte skriva reskontraposten!") Verifikat Skapa verifikat Om man vill registrera verifikat automatiskt i Visma Compact från ett försystem så finns det API-funktioner för detta också. Dim YearNo As Integer Dim VoucherNo As Integer 'Räkenskapsåret 'Verifikatnummer YearNo = VoucherOpen(0, 2009, 3, 2) If (YearNo > 0) Then VoucherAddRow("1910", "Kassa", "", "", 990) VoucherAddRow("3010", "Försäljning", "Bageriet", "Kalle", -990) VoucherNo = VoucherClose()