MENU

BLUEJET API V1

 

Přehled

 

BLUEJET API slouží k integraci s aplikacemi třetích stran. Přístup je téměř ke všem modulům v aplikaci BLUEJET a je možné nad nimi dělat základní operace jako výběr, vložení, úpravy a mazání. Je možné k API přistupovat jak pomocí SOAP webových služeb, tak pomocí REST služeb. REST služby rozumí formátům JSON i XML.

API BLUEJET je nezávislé na programovacím jazyku. Stačí poslat požadavek ve správném formátu.

 

Informace k dokumentaci

Všechna volání API BLUEJET mají uvedeny příklady pro lepší srozumitelnost. Tyto jsou psány s ohledem na jednoduchost a přehlednost (nejsou ošetřeny žádné výjimky apod.), nedoporučujeme je tak používat v běžném provozu.

SOAP webové služby jsou samo-popisné, jejich volání je tudíž velmi jednoduché. Příklady budou psány v jazyce C#. Datové typy jsou shodné se službami REST a jejich popis bude uváděn pouze v kapitole REST.

Příklady REST služeb  budou psány v jazyce C# a javascript (konkrétně jQuery). V jazyce C# bude jako formát přenosu dat využíván XML. V javascriptu pak JSON.

 

Zabezpečení

Všechny dotazy k API musí probíhat na protokolu https, jinak API odpoví status kódem  400 (BadRequest) a upozorněním „K API ke možné přistupovat jedině na protokolu HTTPS.“.

 


 

Autentizace

 

Zjištění údajů k API v aplikaci BLUEJET

Uživatel musí mít od administrátora systému BLUEJET povoleno používat API (detail uživatele).

 a také mít vygenerován API tokenID a tokenHash. Je to v podstatě jméno a heslo k API BLUEJET.

Uživatel se pak může podívat na své nastavení API v BLUEJET v sekci Nastavení –> Uživatelské nastavení –> Aplikace

S těmito údaji je pak možné používat API BLUEJET.

Autentizace

Abychom mohli udělat požadavek na API BLUEJET, je potřeba být ověřený.

Na adresu (viz. níže) pošlete údaje tokenID a tokenHash a pokud údaje budou správné, dostanete token, pomocí něhož budete moci využívat API BLUEJET po dobu 24 h. Poté bude muset dojít opět k ověření údajů a získání nového tokenu.


 

SOAP webové služby

Adresa webové reference

https://VaseBluejetAplikace.cz/API/V1/Users.asmx

Příklad v C#

Webová reference je pojmenována jako BlueJetAuth.

 

BlueJetAuth.Users users = new BlueJetAuth.Users();

var status = users.Authenticate("OVBA7INLXG2TIYRIT0RK", "*I11C1LMZV(D%MUBIP63U8X-@ZVHU^O8RX(IA%2(DJ68S29#");

// status.token

REST webové služby

Na získání tokenu se musí udělat požadavek typu POST. V těle požadavku se posílá složitý datový typ user, jako příchozí je použit typ status.

Adresa REST služby

https://VaseBluejetAplikace.cz/api/v1/users/authenticate

Příklad v C#

// Požadavky na API děláme pomocí HttpClient.

  using (var client = new HttpClient())

  {

      // Adresa API BLUEJET

      client.BaseAddress = new Uri("https://VaseBluejetAplikace.cz/");

      // acceptujeme odpověď typu XML. (je možné ponechat na JSON)

      client.DefaultRequestHeaders.Accept.Clear();

      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));

      // Třída zaslána v těle dokumentu

      User user = new User() { tokenID = "OVBA7INLXG2TIYRIT0RK", tokenHash = "*I11C1LMZV(D%MUBIP63U8X-@ZV (DJ68S29#" };

 

      // Autentizace probíhá na HTTP POST. Posíláme jako XML.

      var result = client.PostAsXmlAsync("api/v1/users/authenticate", user).Result;

      // Odpověď se vrací v typu Status

      var status = result.Content.ReadAsAsync<Status>().Result;

      if (status.succeeded) // požadavek proběhl úspěšně

      {

          //autentizace proběhla úspěšně. Token je v status.token

      }

}

Příklad v jQuery

function authenticate()

{

    jQuery.support.cors = true;           

    // Data, která budeme posílat

    var postingData = { "tokenID": "OVBA7INLXG2TIYRIT0RK", "tokenHash": "*I11C1LMZV(D%MUBIP63U8X-@ZV (DJ68S29#" };

    jQuery.ajax({

        type: "POST", // typ požadavku POST

        async: true,  // asynchronně

        url: 'https://VaseBluejetAplikace.cz/api/v1/users/authenticate', // na tuto adresu

        data: JSON.stringify(postingData), // v těle požadavku pošli tokenID a tokenHash

        dataType: "json", // typ JSON

        contentType: "application/json; charset=utf-8", // formát v jakém data posíláme

        success: function (status) { /*pouzijToken(status.token);*/ }, // zde dostaneme token

        error: function (err) { alert(err.responseText); } // chyba

    });

}


 

Datové typy použité v příkladech

/// <summary>

/// Objekt s tokenID a tokenHash. Slouží k přihlášení do API BLUEJET.

/// </summary>

[DataContract(Name = "user", Namespace = "http://www.bluejet.cz/API")]

public class User

{

    public User() { }

   

    [DataMember]

    public string tokenID { get; set; }

    [DataMember]

    public string tokenHash { get; set; }

}

 

/// <summary>

/// Vrací status autentizace.

/// </summary>

[DataContract(Name = "status", Namespace = "http://www.bluejet.cz/API")]

public class Status

{

    public Status() { }

    /// <summary>

    /// Autentizace proběhla v pořádku

    /// </summary>

    [DataMember]

    public bool succeeded { get; set; }

    /// <summary>

    /// Pokud autentizace proběhla v pořádku, zde dostaneme token

    /// </summary>

    [DataMember]

    public string token { get; set; }

    /// <summary>

    /// Pokud autentizace neproběhla v pořádku, zde bude popis chyby.

    /// </summary>

    [DataMember]

    public string message { get; set; }

}

 

Hledání záznamů

Popis

Vrací záznamy, na které mám právo. Pouze pokud mi administrátor přidělil v sekci API „plná práva“, pak mohu vidět vše. API je nutné zavolat minimálně se třemi parametry a to:

no – číslo objektu, (kontakty, firmy atd.), viz. sekce Moduly.

offset – začínající řádek dotazu.

limit – počet vět, které chci vrátit od offsetu

Př. pokud mám 1000 vět v evidenci a chci je stáhnout všechny, musím dělat dotazy postupně po max. 200 záznamech. Dotazy budou vypadat takto:

1.       offset 0, limit 200

2.       offset 200. limit 200

3.       offset 400, limit 200 atd.

sort – řazení záznamů. Volitelný parametr. Např: „+vlastnik“ (vzestupně) nebo „-vlastnik“ (sestupně), Mohu řadit podle více sloupců, pole jsou oddělena čárkou: „+vlastnik, -lastname“ (vzestupně podle vlastníka, sestupně podle příjmení).

fields – výčet polí, které chci vrátit. Volitelný parametr. Pokud pole do požadavku nezadáme, nebo ho necháme prázdné resp. napíšeme „all“, pak vrátí všechny sloupce. Jinak sloupce oddělujeme čárkou např: lastname, firstname, createdon, multitutisupl

condition – podmínka. Volitelný parametr. Např.

„lastname|contains|t“ (příjmení obsahuje t)

podmínky je možné spojovat

„lastname|contains|t|,|emailaddress1|=|informacni.servis@seznam.cz„ (příjmení obsahuje t a zároveň email se rovná informacni.servis@seznam.cz)

Výčet operátorů

1.       "=": rovná se. Může být použito u všech datových typů.

2.       "<>" nebo "!=": nerovná se. Může být použito u všech datových typů.

3.       "contains": obsahuje. Pouze u textových hodnot.

4.       "!contains": neobsahuje. Pouze u textových hodnot.

5.       "starts": začíná. Pouze u textových hodnot.

6.       "!starts": nezačíná. Pouze u textových hodnot.

7.       "<": menší než. Pouze u číselných a datumových polí

8.       ">": větší než. Pouze u číselných a datumových polí

9.       "<=": menší nebo rovno. Pouze u číselných a datumových polí

10.    ">=": větší nebo rovno. Pouze u číselných a datumových polí

 

SOAP webové služby

Adresa webové reference

https://VaseBluejetAplikace.cz/API/V1/Data.asmx

Příklad v C#

Webová reference je pojmenována jako BlueJetData.

// vytvoříme novou instanci proxy třídy BlueJetData

var data = new BlueJetData.Data();

// předáme token v hlavičce požadavku

data.TokenHeaderValue = new BlueJetData.TokenHeader() { Token = status.token };

// Metoda GetDataSet vrací záznamy, které odpovídají naší podmínce.

var dataSet = data.GetDataSet(222, 0, 10, "+lastname", "lastname, firstname, createdon, multitutisupl", "lastname|contains|t");

 

REST webové služby

Požadavek typu GET. V těle požadavku se neposílá nic. Dotaz se tvoří parametry v adrese URL.

Adresa REST služby

https://VaseBluejetAplikace.cz/api/v1/data

Příklad v C#

// Požadavky na API děláme pomocí HttpClient.

  using (var client = new HttpClient())

  {

      // Adresa API BLUEJET

      client.BaseAddress = new Uri("https://VaseBluejetAplikace.cz/");

      // acceptujeme odpověď typu XML. (je možné ponechat na JSON)

      client.DefaultRequestHeaders.Accept.Clear();

      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));

      // Do hlavičky požadavku musíme přidat X-Token s tokenem, který jsme získali při autentizaci.

      client.DefaultRequestHeaders.Add("X-Token", token);

      // Nejjednodušší požadavek vrátí prvních 15 záznamů v evidenci Kontakty. Vybere všechny sloupce bez filtru a vlastního řazení

      result = client.GetAsync("api/v1/Data?no=222&offset=0&limit=15").Result;

      // Se všemi parametry vypadá takto. Vrátí prvních 15 záznamů v evidenci Kontakty.

      // Seřadí vzestupně podle pole vlastnik a sestupně podle pole lastname

     // vrátí sloupce lastname, firstname, createdon, multitutisupl

     // podle podmínky, kde: lastname obsahuje "t" a emailova adresa se rovna informacni.servis@seznam.cz

     result = client.GetAsync("api/v1/Data?no=222&offset=0&limit=15&sort=+vlastnik, -lastname&fields=lastname, firstname, createdon,      multitutisupl&condition=lastname|contains|t|,|emailaddress1|=|informacni.servis@seznam.cz").Result;

     var dataSet = result.Content.ReadAsAsync<DataSet>().Result;

}

Příklad v jQuery

function search(token)

{        

    jQuery.support.cors = true;

    jQuery.ajax({

        type: "GET",

        beforeSend: function (request) { // do hlavičky požadavku přidáme náš token

            request.setRequestHeader("X-Token", token);

        },

        async: true,

        url: 'https:// VaseBluejetAplikace.cz /api/v1/Data?no=222&offset=10&limit=5&sort=+vlastnik, -lastname&fields=lastname, firstname, createdon, multitutisupl&condition=lastname|contains|t|,|emailaddress1|=|informacni.servis@seznam.cz ',

        dataType: "json",               

        success: function (dataSet) {                   

                alert("dataSet total count: " + dataSet.recordsCount + ", records count: " + dataSet.rows.length);

            },

        error: function (err) {

                alert(err.responseText);

            }

        });

      }

 

Datové typy použité v příkladech

// Tabulka záznamů vrácených z API

 [DataContract(Name = "dataset", Namespace = "http://www.bluejet.cz/API")]

public class DataSet

{

    // číslo objektu, které vracím

    [DataMember]

    public int no { get; set; }

 

    // celkový počet záznamů v databázi, které odpovídají mé podmínce. Užitečný pro stránkování.

    [DataMember]

    public int recordsCount { get; set; }

 

    // kolekce řádků

    [DataMember]

    public Row[] rows { get; set; }

 

    [DataContract(Name = "row", Namespace = "")]

    public class Row

    {

        // číslo řádku odpovídající mé podmínce

        [DataMember]

        public int offset { get; set; }

 

        // kolekce sloupců

        [DataMember]

        public Column[] columns { get; set; }

    }

    [DataContract(Name = "column", Namespace = "")]

    public class Column

    {

        // název sloupce

        [DataMember]

        public string name { get; set; }

 

        // hodnota sloupce

        [DataMember]

        public object value { get; set; }

    }

}

Výsledek

{

    "no": 222,

    "recordsCount": 145,

    "rows": [

        {

            "offset": 0,

            "columns": [

                { "name": "createdon", "value": "2014-07-15T09:40:53.067" },

                { "name": "firstname", "value": null },

                { "name": "lastname", "value": "Team servis" },

                { "name": "multitutisupl", "value": "treti" }]

        }, {

            "offset": 1,

            "columns": [

                { "name": "createdon", "value": "2014-05-19T11:25:27.513" },

                { "name": "firstname", "value": null },

                { "name": "lastname", "value": "Kvak kontakt" },

                { "name": "multitutisupl", "value": "" }

            ]

        }, {

            "offset": 2,

            "columns": [

                { "name": "createdon", "value": "2014-03-03T08:17:13.797" },

                { "name": "firstname", "value": null },

                { "name": "lastname", "value": "AAA01test" },

                { "name": "multitutisupl", "value": "" }]

        }

    ]

}

Spolu s tabulkou se vrací v hlavičce také parametr „X-Total-Count“, což je celkový počet záznamů v databázi odpovídající mé podmínce, stejně jako vlastnost recordsCount.


 

Vložení nových záznamů

Popis

Umožňuje vložit jeden anebo více záznamů do aplikace BLUEJET. Pokud vkládáme pouze jeden objekt, stačí naplnit datový objekt číslem objektu a jednotlivými poli.

Pokud budeme chtít vkládat více objektů a provazovat je mezi sebou, budeme ještě plnit referenci a vnitřní objekty. Nejlépe je to vidět na příkladech. První dva jsou jednoduché s vložením jediného kontaktu, poslední příklad v jQuery vkládá kontakt, firmu a vazbu mezi nimi. Max. počet zároveň vkládaných objektů je 10.

Při vkládání záznamů není možné vkládat primární klíč, který si volí systém BLUEJET sám a pokud nemám plná oprávnění na API, nemohu vkládat ani automatická pole jako datum vytvoření, vlastník apod.

SOAP webové služby

Adresa webové reference

https://VaseBluejetAplikace.cz/API/V1/Data.asmx

Příklad v C#

Webová reference je pojmenována jako BlueJetData.

// vytvoříme novou instanci proxy třídy BlueJetData

var data = new BlueJetData.Data();

// předáme token v hlavičce požadavku

data.TokenHeaderValue = new BlueJetData.TokenHeader() { Token = status.token };

// vytvori datovy objekt s cislem 222 (kontakt) se dvěma poli. Jméno a příjmení.

BlueJetData.DataObject dataObj = new BlueJetData.DataObject()

{

    no = 222,               

    fields = new BlueJetData.Field[] {                   

                    new BlueJetData.Field() { name= "lastname", value= "API " + DateTime.Now.ToString()},                               // string

                    new BlueJetData.Field(){ name= "firstname", value = "API " + DateTime.Now.ToString()},                                                // string

                    new BlueJetData.Field(){ name= "birthdate", value = new DateTime(1982, 5, 12)},                                                         // DateTime

                    new BlueJetData.Field(){ name= "multitutisupl", value = 4},                                                                                                                           // int

                    new BlueJetData.Field(){ name= "newsletter", value = true},                                                                                                                         // Boolean

                    new BlueJetData.Field(){ name= "firmaid", value = new Guid("0a432cb4-574f-4245-8277-8e23a4643b28")},   // Guid

    }               

};

// vlozi firmu a kontakt do BLUEJET a vytvoří mezi nimi vazbu

var result = data.InsertObject(dataObj);

 

REST webové služby

Požadavek typu POST. V těle požadavku se posílá typ dataObject.

Adresa REST služby

https://VaseBluejetAplikace.cz/api/v1/data


 

Příklad v C#

private void InsertObject(string token)

{

    // vytvori datovy objekt s cislem 222 (kontakt)

    var dataObject = new DataObject()

    {

        no = 222,

        fields = new Field[]{

            new Field() { name = "lastname", value = "API " + DateTime.Now.ToString()},                 // string

            new Field() { name = "firstname", value = "API " + DateTime.Now.ToString()},                // string

            new Field() { name = "birthdate", value = new DateTime(1982, 5, 12)},                       // DateTime

            new Field() { name = "multitutisupl", value = 4 },                                          // int

            new Field() { name = "newsletter", value = true },                                          // Boolean

            new Field() { name = "firmaid", value = new Guid("0a432cb4-574f-4245-8277-8e23a4643b28") }  // Guid

        }       

    };

    using (var client = new HttpClient())

    {

        // Adresa API BLUEJET               

        client.BaseAddress = new Uri("https:// VaseBluejetAplikace.cz /");

        // acceptujeme odpověď typu XML. (je možné ponechat na JSON)

        client.DefaultRequestHeaders.Accept.Clear();

        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));

        // předáme token v hlavičce požadavku

        client.DefaultRequestHeaders.Add("X-Token", token);

        // pošleme datový objekt na API BLUEJET

        var result = client.PostAsJsonAsync("api/v1/data", dataObject).Result;

        // odpověď typu dataObjectResult

        var res = result.Content.ReadAsStringAsync().Result;

    }

}

výsledek

<dataObjectResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.bluejet.cz/API">

  <dataObjectRows>

    <dataObjectRow xmlns="">

     <action>insert</action>

     <id>57404da8-4b39-4940-b2cd-d75eb2b8cd58</id>

     <no>222</no>

     <reference i:nil="true" />

    </dataObjectRow>

  </dataObjectRows>

</dataObjectResult>

 

Výsledek je kolekce dataObjectRows, kde každý řádek obsahuje

1.       action – zda proběhl insert nebo update (v tomto případě vždy insert, více v kapitole Vložení či úprava záznamů)

2.       no – číslo objektu, kterého se update týká. V tomto případě 222 – kontaktů. Více v kapitole Moduly.

3.    reference – více viz. další příklad.

Příklad v jQuerY

Na rozdíl od předchozích příkladů zde plníme pole reference a innerObjects. Pole reference proto, že ve výsledku pak dostaneme k této referenci primární klíč, takže např. víme, že kontakt co jsme vložili jako první dostane primární klíč: „eb592217-0e00-49b7-822d-d09fd89ff251“ (viz. výsledek níže) atd.

Také lze vidět, že se na tuto referenci odkazujeme ve vnitřním objektu vazeb, kde jako parentid předáváme $1$ a childid $2$. Tím říkáme, že v poli parentid se má použít primární klíč vloženého kontaktu a v poli childid primární klíč firmy.

 


 

function insert(token) {

     var insertObject = {

         "no": 222, "reference": "1", // kontakt s referenci 1

         "fields": [

             { "name": "lastname", "value": "API 3.9.2014 10:06:46" },

             { "name": "firstname", "value": "API 3.9.2014 10:06:46" }],

         "innerObjects": [{

             "no": 225, "reference": "2", "fields": [ // po kontaktu ulozime firmu s referenci 2

                 { "name": "name", "value": "API Firma 3.9.2014 10:06:46" }]

         },

         { "no": 315, "reference": "3", // nakonec ulozime vazbu mezi nimi

             "fields": [

                 { "name": "parentid", "value": "$1$" }, { "name": "parenttype", "value": "222" },

                 { "name": "childid", "value": "$2$" }, { "name": "childtype", "value": "225" },

                 { "name": "typvazby", "value": "0" }]

         }]

     };

 

     jQuery.support.cors = true;

     // pošli požadavek

     var start = performance.now();

     jQuery.ajax({

         type: "POST",

         beforeSend: function (request) {

             request.setRequestHeader("X-Token", token);

         },

         async: true,

         url: 'https:// VaseBluejetAplikace.cz/api/v1/Data',

         data: JSON.stringify(insertObject),

         dataType: "json",

         contentType: "application/json; charset=utf-8",

         success: function (result) {

             /* zpracuj vysledek */ alert(result.dataObjectRows.length);

         },

         error: function (err) {

             alert(err.responseText);

         }

     });

 }

 

výsledek

 

<dataObjectResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.bluejet.cz/API">

  <dataObjectRows>

    <dataObjectRow xmlns="">

      <action>insert</action>

      <id>eb592217-0e00-49b7-822d-d09fd89ff251</id>

      <no>222</no>

      <reference>1</reference>

    </dataObjectRow>

    <dataObjectRow xmlns="">

      <action>insert</action>

      <id>fa74e5a0-072e-4192-adfc-72545f95fc83</id>

      <no>225</no>

      <reference>2</reference>

    </dataObjectRow>

    <dataObjectRow xmlns="">

      <action>insert</action>

      <id>4216ffad-2d0e-430b-af66-a116678754d1</id>

      <no>315</no>

      <reference>3</reference>

    </dataObjectRow>

  </dataObjectRows>

</dataObjectResult>

 

V odpovědi vidíme k jednotlivým referencím přivázány primární klíče, pro případ, že bychom s nimi potřebovali dále pracovat.

Datové typy použité v příkladech

/// <summary>

/// Objekt, ktery slouzi pro vkladani ci update zaznamu

/// </summary>

[DataContract(Name = "dataObject", Namespace = "http://www.bluejet.cz/API")]       

public class DataObject

{           

    // cislo objektu

    [DataMember]

    public int no { get; set; }

    // Pouziti primarního klíče jako reference.           

    [DataMember]

    public string reference { get; set; }

   

    // Podmínka, která se používá u metody InsertOrUpdate. Pokud nevíme jestli existuje věta v BLUEJETu anebo ne a chci ji tam nahrát jedním krokem,

    // zvolím např. podminku "foreignkey|=|1". Pokud najdu alespoň jeden záznam, tak ho updatujeme jinak vložíme nový záznam.

    [DataMember]

    public string condition { get; set; }

 

    /// <summary>

    /// pole, která vkládám

    /// </summary>

    [DataMember]

    public Field[] fields { get; set; }

     /// <summary>

     /// další datové objekty

     /// </summary>

     [DataMember]

     public DataObject[] innerObjects { get; set; }

 }

 

 /// <summary>

 /// Pole v dataObjektu

 /// </summary>

 [DataContract(Name = "field", Namespace = "http://www.bluejet.cz/API")]

 public class Field

 {

     // název pole

     [DataMember]

     public string name { get; set; }

     // hodnota pole

     [DataMember]

     public object value { get; set; }

     // jedná se o "insert" nebo "update"

     [DataMember]

     public string action { get; set; }

 }

 

Pole condition a pole action  projednáme v kapitole Vložení nebo úprava záznamů.

 


 

Úprava záznamů

Popis

Umožňuje upravit jeden anebo více záznamů v aplikaci BLUEJET. Vše je stejné jako v předešlé kapitole Vložení nových záznamů, s tím rozdílem, že zde je potřeba u každého vkládaného objektu uvést primární klíč záznamu, který se má upravit. Vzhledem k tomu, že vše je stejné jako v kapitole Vložení nových záznamů, budou zde vypsány jen rozdíly.

SOAP webové služby

Adresa webové reference

https://VaseBluejetAplikace.cz/API/V1/Data.asmx

Příklad v C#

Webová reference je pojmenována jako BlueJetData.

// vytvoříme novou instanci proxy třídy BlueJetData

var data = new BlueJetData.Data();

...

...

// updatuje firmu a kontakt.

data.UpdateObject(dataObj);

REST webové služby

Požadavek typu PUT. V těle požadavku se posílá typ dataObject.

Adresa REST služby

https://VaseBluejetAplikace.cz/api/v1/data

Příklad v C#

string date = DateTime.Now.ToString();

DataObject dataObj = new DataObject() { no = 222, reference = "1" };

dataObj.fields = new Field[] { // v kontaktu uprav pouze pole příjmení a jméno

    new Field(){ name= "contactid", value=new Guid("841032e2-6f07-41d3-a19b-58a54940ab77").ToString()},

    new Field() { name= "lastname", value= "API " + date},

    new Field(){ name= "firstname", value = "API " + date}

};

 

DataObject inner1 = new DataObject() { no = 225, reference = "2" };

inner1.fields = new Field[] { // ve firmě uprav pole název a dodatkové pole kategorie

    new Field(){ name= "id", value=new Guid("759fd694-a6b3-4be2-a22b-a74fbcbb647b").ToString()},

    new Field() { name= "name", value= "API Firma" + date},           

    new Field() { name= "kategoriesupl", value= "B"}               

};

 

dataObj.innerObjects = new DataObject[] { inner1 };

using (var client = new HttpClient())

{   

        // Adresa API BLUEJET               

       client.BaseAddress = new Uri("https:// VaseBluejetAplikace.cz /");

       // acceptujeme odpověď typu XML. (je možné ponechat na JSON)

       client.DefaultRequestHeaders.Accept.Clear();

       client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));

       // předáme token v hlavičce požadavku

       client.DefaultRequestHeaders.Add("X-Token", token);

       // pošleme datový objekt na API BLUEJET

       var result = client.PutAsJsonAsync("api/v1/data", dataObject).Result;    }

}

 

Zde stojí za povšimnutí, že zatímco v kontaktu používáme jako primární klíč contactid, ve firmě používáme pouze id, ovšem primární klíč firem je customerid. Zde má id zástupný význam pro primární klíč objektu a mohu jej používat místo vlastních názvů primárních klíčů. Čili i u kontaktů bych mohl použít id místo contactid.

Příklad v jQuerY

 

function update(token) {

     var updateObject = { // updatuje kontakt a firmu

         "no": 222, "reference": "1",

         "fields": [

             { "name": "contactid", "value": "841032e2-6f07-41d3-a19b-58a54940ab77" },

             { "name": "lastname", "value": "API " + new Date() },

             { "name": "firstname", "value": "API " + new Date() }]

         ,"innerObjects": [{

             "no": 225, "reference": "2",

             "fields": [

                 { "name": "id", "value": "759fd694-a6b3-4be2-a22b-a74fbcbb647b" },

                 { "name": "name", "value": "API Firma 3.9.2014 9:19:33" },

                 { "name": "kategoriesupl", "value": "B" }]

         }]

     };

 

     jQuery.support.cors = true;

     // Send the request

     var start = performance.now();

     jQuery.ajax({

         type: "PUT",

         beforeSend: function (request) {

             request.setRequestHeader("X-Token", token);

         },

         async: true,

         url: 'https:// VaseBluejetAplikace.cz /api/v1/Data',

         data: JSON.stringify(updateObject),

         dataType: "json",

         contentType: "application/json; charset=utf-8",

         success: function () {

             // úspěšně upraveno

         },

         error: function (err) {

             alert(err.responseText);

         }

     });

 }

 

Datové typy použité v příkladech

Stejné jako v předchozí kapitole

 


 

Vložení nebo Úprava záznamů

Popis

Umožňuje vložit resp. upravit jeden anebo více záznamů v aplikaci BLUEJET. Pokud potřebujeme vložit do BLUEJET nějaký záznam, ale nevíme, zda v systému BLUEJET již existuje, můžeme postupovat následovně.

1.       Vyhledat napřed záznam přes BLUEJET API a poté vložit resp. upravit záznam na základě existence výsledku hledání.

2.       Využít tuto metodu insertorupdate, která má podmínku vloženou přímo v datovém objektu a podle ní buď záznam aktualizuje (pokud ho najde) anebo vloží (pokud ne). Zpravidla se bude kontrolovat jedinečný primární klíč BLUEJET anebo externího systému, ale v podstatě se může kontrolovat cokoliv. Syntaxe je shodná se syntaxí podmínky v kapitole Hledání záznamů. Pokud se posílá více objektů zároveň, výsledek může být kombinovaný, tzn., že některé záznamy se mohou upravit a některé vložit.

V podkapitole REST – Příklad v C# bude vysvětleno pole action.

 

SOAP webové služby

Adresa webové reference

https://VaseBluejetAplikace.cz/API/V1/Data.asmx

Příklad v C#

Webová reference je pojmenována jako BlueJetData.

// vytvoříme novou instanci proxy třídy BlueJetData

var data = new BlueJetData.Data();

// předáme token v hlavičce požadavku

data.TokenHeaderValue = new BlueJetData.TokenHeader() { Token = status.token };

 

string date = DateTime.Now.ToString();

BlueJetData.DataObject dataObject = new BlueJetData.DataObject()

{

    no = 222,

    reference = "1",

    condition = "contactid|=|841032e2-6f07-41d3-a19b-58a54940ab77",

    fields = new BlueJetData.Field[] {

        new BlueJetData.Field(){ name= "contactid", value=new Guid("841032e2-6f07-41d3-a19b-58a54940ab77").ToString()},

        new BlueJetData.Field() { name= "lastname", value= "API " + date},

        new BlueJetData.Field(){ name= "firstname", value = "API " + date}

    },

    innerObjects = new BlueJetData.DataObject[] {

        new BlueJetData.DataObject() {

            no = 225,

            reference = "2",

            condition = "customerid|=|759fd694-a6b3-4be2-a22b-a74fbcbb647b",

            fields = new BlueJetData.Field[]{

                new BlueJetData.Field(){ name= "id", value=new Guid("759fd694-a6b3-4be2-a22b-a74fbcbb647b").ToString()},

                new BlueJetData.Field() { name= "name", value= "API Firma" + date},           

                new BlueJetData.Field() { name= "kategoriesupl", value= "B"}      

            }

        }

    }

};

// vložíme nebo upravíme záznam           

var result = data.InsertOrUpdate(dataObject);

 

Výsledek je dataObjectResult. Dostaneme dva výsledky, které nám řeknou, jestli objekty byly aktualizovány anebo vloženy a zároveň s nimi dostaneme primární klíče. Viz. kapitola Vložení nových záznamů.

REST webové služby

Požadavek typu POST. V těle požadavku se posílá typ dataObject.

Adresa REST služby

https://VaseBluejetAplikace.cz/api/v1/data/insertorupdate

Příklad v C#

string date = DateTime.Now.ToString();

DataObject dataObject = new DataObject()

{

    no = 222,

    reference = "1",

    condition = "contactid|=|841032e2-6f07-41d3-a19b-58a54940ab77",

    fields = new Field[] {

        new Field(){ name= "contactid", value=new Guid("841032e2-6f07-41d3-a19b-58a54940ab77").ToString()},

        new Field() { name= "lastname", value= "API " + date},

        new Field(){ name= "firstname", value = "API " + date}

    },

    innerObjects = new DataObject[] {

        new DataObject() {

            no = 225,

            reference = "2",

            condition = "customerid|=|759fd694-a6b3-4be2-a22b-a74fbcbb647b",

            fields = new Field[]{

                new Field(){ name= "id", value=new Guid("759fd694-a6b3-4be2-a22b-a74fbcbb647b").ToString()},

                new Field() { name= "name", value= "API Firma" + date, action="insert"},           

                new Field() { name= "kategoriesupl", value= "B", action="update"}     

            }

        }

    }

};

using (var client = new HttpClient())

{

    // Adresa API BLUEJET               

    client.BaseAddress = new Uri("https:// VaseBluejetAplikace.cz /");

    // acceptujeme odpověď typu XML. (je možné ponechat na JSON)

    client.DefaultRequestHeaders.Accept.Clear();

    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));

    // předáme token v hlavičce požadavku

    client.DefaultRequestHeaders.Add("X-Token", token);

    // pošleme datový objekt na API BLUEJET

    var result = client.PostAsJsonAsync("api/v1/data/insertorupdate", dataObject).Result;

    // odpověď typu dataObjectResult

    var res = result.Content.ReadAsStringAsync().Result;

}

 

Příklad je stejný jako u SOAP, jen v druhém datovém objektu (firem) používáme pole action, které může nabývat hodnot insert anebo update. Tzn., pokud bude action=insert, tak se hodnota tohoto pole bude aplikovat pouze, pokud se daný záznam bude vkládat. Pokud bude action=update, tak se hodnota tohoto pole bude aplikovat pouze, pokud se daný záznam bude aktualizovat. Pokud action bude prázdné, bude se pole aplikovat vždy. Toto je legální zápis:

new Field() { name= "name", value= "vložená firma", action="insert"},           

new Field() { name= "name", value= "aktualizovaná firma", action="update"},           

Pokud se bude záznam vkládat, vloží se do názvu hodnota: vložená firma, pokud aktualizovat, tak: aktualizovaná firma.

Příklad v jQuerY

 

function insertOrUpdate(token)

{

    var dataObject = {

        "no": 222, "reference": "1", "condition": "contactid|=|841032e2-6f07-41d3-a19b-58a54940ab77",

        "fields": [

            { "name": "contactid", "value": "841032e2-6f07-41d3-a19b-58a54940ab77" },

            { "name": "lastname", "value": "API 14.9.2014 2:08:38" },

            { "name": "firstname", "value": "API 14.9.2014 2:08:38" }],

        "innerObjects": [

            {

                "no": 225, "reference": "2", "condition": "customerid|=|759fd694-a6b3-4be2-a22b-a74fbcbb647b",

                "fields": [{ "name": "id", "value": "759fd694-a6b3-4be2-a22b-a74fbcbb647b" },

                    { "name": "name", "value": "API Firma14.9.2014 2:08:38", "action": "insert" },

                    { "name": "kategoriesupl", "value": "B", "action": "update" }]

            }

        ]

    };

 

    jQuery.support.cors = true;

    // Send the request

    jQuery.ajax({

        type: "POST",

        beforeSend: function (request) {

            request.setRequestHeader("X-Token", token);

        },

        async: true,

        url: 'https:// VaseBluejetAplikace.cz /api/v1/data/insertorupdate',

        data: JSON.stringify(dataObject),

        dataType: "json",

        contentType: "application/json; charset=utf-8",

        success: function (result) {

            /* zpracuj vysledek */ alert(result.dataObjectRows.length);

        },

        error: function (err) {

            alert(err.responseText);

        }

    });

}

 

Datové typy použité v příkladech

Stejné jako v kapitole Vložení nových záznamů.

 


 

Mazání záznamů

Popis

Umožňuje smazat jeden záznam v aplikaci BLUEJET.

SOAP webové služby

Adresa webové reference

https://VaseBluejetAplikace.cz/API/V1/Data.asmx

Příklad v C#

Webová reference je pojmenována jako BlueJetData.

// vytvoříme novou instanci proxy třídy BlueJetData

var data = new BlueJetData.Data();

// předáme token v hlavičce požadavku

data.TokenHeaderValue = new BlueJetData.TokenHeader() { Token = status.token };

// pošleme požadavek na smazání objektu 222 (kontakty)s id 841...

data.DeleteObject(222, new Guid("841032e2-6f07-41d3-a19b-58a54940ab77"));

REST webové služby

Požadavek typu DELETE. V těle požadavku se nic neposílá. Předávají se pouze parametry no (číslo objektu) a id (primární klíč).

Adresa REST služby

https://VaseBluejetAplikace.cz/api/v1/data

Příklad v C#

using (var client = new HttpClient())

{

    // Adresa API BLUEJET               

    client.BaseAddress = new Uri("https://VaseBluejetAplikace.cz/");

    // acceptujeme odpověď typu XML. (je možné ponechat na JSON)

    client.DefaultRequestHeaders.Accept.Clear();

    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));

    // předáme token v hlavičce požadavku

    client.DefaultRequestHeaders.Add("X-Token", token);

    // pošleme požadavek na smazání objektu 222 (kontakty)s id 841...

    var result = client.DeleteAsync("api/v1/Data?no=222&id=841032e2-6f07-41d3-a19b-58a54940ab77").Result;

    // odpověď typu dataObjectResult

    if (result.IsSuccessStatusCode) { } // záznam byl smazán.

}

Příklad v jQuerY

 

function deleteObject(token) {   

    jQuery.support.cors = true;

    // Send the request

    jQuery.ajax({

        type: "DELETE",

        beforeSend: function (request) {

            request.setRequestHeader("X-Token", token);

        },

        async: true,

        url: 'https://VaseBluejetAplikace.cz/api/v1/data?no=222&id=841032e2-6f07-41d3-a19b-58a54940ab77',

        contentType: "application/json; charset=utf-8",

        success: function () {

            // úspěšně smazáno

            alert('smazáno');

        },

        error: function (err) {

            alert(err.responseText);

        }

    });

}

 

Datové typy použité v příkladech

Žádné.

 

Pomocné metody Update a Remove

Popis

Pokud vaše aplikace využívá REST a nedokáže poslat požadavky PUT a DELETE, využijte těchto metod pro  aktualizaci a mazání dat pomocí typu POST.

Update

 

Pro aktualizaci platí kapitola Úprava záznamů s tím rozdílem, že adresa je api/v1/Data/update a metoda POST.

result = client.PostAsJsonAsync("api/v1/Data/update", GetUpdateDataObject()).Result;

 

Remove

 

 

Při mazání je dokonce možno poslat více záznamů, které se mají smazat. V těle se posílá datový objekt, stejně jako při vkládání nových záznamů. V každém objektu stačí poslat jediné pole: primární klíč.

Adresa REST služby

https://VaseBluejetAplikace.cz/api/v1/data/remove

Příklad v C#

DataObject dataObject = new DataObject()

{

    no = 222,

    reference = "1",

    fields = new Field[] {

        new Field(){ name= "contactid", value=new Guid("841032e2-6f07-41d3-a19b-58a54940ab77").ToString()}               

    },

    innerObjects = new DataObject[] {

        new DataObject() {

            no = 225,

            reference = "2",

            fields = new Field[]{

                new Field(){ name= "id", value=new Guid("759fd694-a6b3-4be2-a22b-a74fbcbb647b").ToString()}               

            }

       

        }

    }

};

using (var client = new HttpClient())

{

    // Adresa API BLUEJET               

    client.BaseAddress = new Uri("https://VaseBluejetAplikace.cz/");

    // acceptujeme odpověď typu XML. (je možné ponechat na JSON)

    client.DefaultRequestHeaders.Accept.Clear();

    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));

    // předáme token v hlavičce požadavku

    client.DefaultRequestHeaders.Add("X-Token", token);

    // pošleme datový objekt na API BLUEJET

    var result = client.PostAsJsonAsync("api/v1/data/remove", dataObject).Result;

    // odpověď typu dataObjectResult

    var res = result.Content.ReadAsStringAsync().Result;

}

 

Výsledek

<dataObjectResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.bluejet.cz/API">

  <dataObjectRows>

    <dataObjectRow xmlns="">

      <action>delete</action>

      <id>841032e2-6f07-41d3-a19b-58a54940ab77</id>

      <no>222</no>

      <reference>1</reference>

    </dataObjectRow>

    <dataObjectRow xmlns="">

      <action>delete</action>

      <id>759fd694-a6b3-4be2-a22b-a74fbcbb647b</id>

      <no>225</no>

      <reference>2</reference>

    </dataObjectRow>

  </dataObjectRows>

</dataObjectResult>

 

Výsledek je stejný jako v kapitole Vložení záznamů. Pokud se záznam podaří smazat, je v poli action hodnota delete. Jinak je tam error – popis chyby.

 

Příklad v jQuerY

 

Stejný jako v kapitole Vložení nových záznamů, pouze adresa je api/v1/Data/update.

 

Datové typy použité v příkladech

Stejné jako v kapitole Vložení nových záznamů.


 

Moduly

 

Toto jsou moduly, ve kterých povoleno používat API.

 

Název modulu

Číslo modulu

Aktivity

227

Ceníky

250

Ceníky - položky

253

FAQ

414

Firmy

225

Informace

346

Informace 2

405

Informace 3

406

Informace 3 - položky

407

Kontakty

222

Poznámky

200

Požadavky

403

Produkty

217

Projekty

332

Přijaté faktury

328

Přijaté faktury - položky

329

Přijaté nabídky

232

Přijaté objednávky

321

Příležitosti

209

Přílohy

341

Servis - poznámky

412

Smlouvy

276

Vazby

315

Vydané faktury

323

Vydané faktury - položky

324

Vydané nabídky

293

Vydané nabídky položky

291

Výkazy práce

331

Zájemci

205

 


 

Pole

 

Seznam polí, která je možné používat přes API. Standardní pole je možné vyhledávat i ukládat. Virtuální pole možné pouze vyhledávat.

Aktivity

Název

Název v databázi

Typ

Standardní/Virtuální

Celodenní událost

alldayevent                  

Boolean

Standardní

Datum odeslání

DatumOdeslani                

DateTime                                                                                           

Standardní

Datum přijetí

DatumPrijeti                 

DateTime                                                                                           

Standardní

definice opakování

recurencedefid               

UniqueIdentifier                                                                                   

Standardní

Eail přečten

readed                       

Boolean

Standardní

Generovaná aktivita

generate                     

Boolean

Standardní

Hotovo [%]

percentcomplete              

Combo (int)

Standardní

Konec

actualend                    

DateTime                                                                                           

Standardní

Kopie

bc                           

NvarChar

Standardní

Milník

ismilestone                  

Boolean

Standardní

Místo konání

location                     

NvarChar

Standardní

nadrazaná schůzka

parentmeetingid              

UniqueIdentifier                                                                                   

Standardní

Nadřazená aktivita

parentactivityid             

UniqueIdentifier                                                                                    

Standardní

Název

subject                      

NvarChar

Standardní

Plánovaný konec

plannedend                   

DateTime                                                                                           

Standardní

Plánovaný začátek

plannedstart                 

DateTime                                                                                           

Standardní

Popis

description                  

NText

Standardní

Popis pro schůzky

descriptioninvite            

NText

Standardní

Priorita

prioritycode                 

Combo (int)

Standardní

Projekt

projectid                    

UniqueIdentifier                                                                                   

Standardní

Příchozí/Odchozí

directioncode                

Combo (int)

Standardní

Příjemci

prijemci                     

NvarChar

Standardní

Příloha

prilohaje                    

Combo (int)

Standardní

Přílohy

prilohy                      

Soubor (odkaz)                                                                                     

Standardní

Připomenout emailem

EmailRemind                  

Boolean

Standardní

Připomenutí

scheduledstart               

DateTime                                                                                           

Standardní

Připomenutí chatem

chatremind                   

Boolean

Standardní

Slepá kopie

bcc                          

NvarChar

Standardní

SMS

smsremind                    

Boolean

Standardní

SMS zaslána

smslastsended                

DateTime                                                                                           

Standardní

Soukromé

isprivate                    

Boolean

Standardní

Status připomínky chatem

chatremindstatus             

Int

Standardní

Termín odeslání

sendatfirst                  

DateTime                                                                                           

Standardní

Typ aktivity

activitytypecode             

Combo (int)

Standardní

Velikost [MB]

sizeonservers                

Decimal                                                                                            

Standardní

Velikost[KB]

sizeonserver                 

Int

Standardní

Viditelné zákazníkovi

viditelnezakaznikovi         

Boolean

Standardní

Vlastník

ownerid                      

UniqueIdentifier                                                                                   

Standardní

Volané číslo

volanecislo                  

NvarChar

Standardní

Volaný

volany                       

NvarChar

Standardní

Vytvořeno

createdon                    

DateTime                                                                                           

Standardní

Vytvořil

createdby                    

UniqueIdentifier                                                                                   

Standardní

Začátek

actualstart                  

DateTime                                                                                           

Standardní

Změněno

modifiedon                   

DateTime                                                                                           

Standardní

Změnil

modifiedby                   

UniqueIdentifier                                                                                   

Standardní

Zobrazit v kalendáři

billed                       

Boolean

Standardní

Emailový účet

email                        

NvarChar

Virtuální

Firma

firma                        

NvarChar

Virtuální

Chat

chat                         

Combo (int)

Virtuální

Kontakt

kontakt                      

NvarChar

Virtuální

Kopie

kopie                        

NvarChar

Virtuální

Odesílatel

odesilatel                   

NvarChar

Virtuální

Odesílatel (dopis)

odesilateldopis              

NvarChar

Virtuální

Odesílatel (email)

odesilatelemail              

BigInt

Virtuální

Odesílatel (fax)

odesilatelfax                

NvarChar

Virtuální

Organizátor

organizator                  

NvarChar

Virtuální

Počet dnů do konce

allendplanday                

Int

Virtuální

Projekt

mainproject                  

NChar

Virtuální

Předchůdci a následovníci

links                        

NvarChar

Virtuální

Příjemce (SMS)

prijemcesms                  

NvarChar

Virtuální

Skrytá kopie

skrytakopie                  

BigInt

Virtuální

Status aktivity (obrázek)

imageactivitystatus          

VarChar                                                                                            

Virtuální

Status emailu

imagestatus                  

VarChar                                                                                             

Virtuální

Štítky

stitky                       

NvarChar

Virtuální

Účastníci (schůzka)

ucastnicischuzka             

NvarChar

Virtuální

Účastníci (úkol)

ucastniciukol                

NvarChar

Virtuální

Vazby

vazby                        

NvarChar

Virtuální

Vlastník

vlastnik                     

VarChar                                                                                            

Virtuální

Vložit podpis

vlozitpodpis                 

NvarChar

Virtuální

Volající

volajicimain                 

NvarChar

Virtuální

Volající (telefon)

volajici                     

NvarChar

Virtuální

Volaný

volanymain                   

NvarChar

Virtuální

Volaný (telefon)

volanyd                      

NvarChar

Virtuální

Vykázaný čas

skutcas                      

Decimal

Virtuální

Vytvořil

maincreatedby                

VarChar                                                                                            

Virtuální

Zadavatel

zadavatel                    

NvarChar

Virtuální

Změnil

modifiedbyname               

VarChar                                                                                            

Virtuální

 

Ceníky

Název

Název v databázi

Typ

Standardní/Virtuální

Ceník id

pricelistid

UniqueIdentifier                                                                                   

Standardní

Důvod stavu

statecode

Int

Standardní

Kód

code

NvarChar

Standardní

Měna

currencyid

UniqueIdentifier                                                                                   

Standardní

Název

name

NvarChar

Standardní

Platnost do

validityto

DateTime                                                                                           

Standardní

Platnost od

validityfrom

DateTime                                                                                           

Standardní

Poznámka

description

NvarChar

Standardní

Stav

statuscode

Int

Standardní

Typ ceníku

pricetype

Combo (int)

Standardní

Vlastník

ownerid

UniqueIdentifier                                                                                   

Standardní

Vytvořeno

createdon

DateTime                                                                                           

Standardní

Vytvořil

createdby

UniqueIdentifier                                                                                   

Standardní

Vzorový ceník

prefiguration

Boolean

Standardní

Zamčeno

zamceno

Boolean

Standardní

Změněno

modifiedon

DateTime                                                                                           

Standardní

Změnil

modifiedby

UniqueIdentifier                                                                                   

Standardní

Měna

mainmena

NvarChar

Virtuální

Vazby

vazby

NvarChar

Virtuální

Vlastník

vlastnik

NvarChar

Virtuální

 

Ceníky položky

Název

Název v databázi

Typ

Standardní/Virtuální

Cena

price

Decimal

Standardní

Cena je za x MJ

quantityprice

Decimal

Standardní

Daň DPH

sdan

Combo (int)

Standardní

Dodavatelský kód

vendorpartnumber

NvarChar

Standardní

Hlavička ceníku

pricelistid

UniqueIdentifier                                                                                   

Standardní

Marketingový kód

vendorname

NvarChar

Standardní

Markup on min prod. run

markuprun

Decimal                                                                                            

Standardní

Minimum production run

minprodrun

Int

Standardní

MJ defaultní

defaultunitid

UniqueIdentifier                                                                                   

Standardní

MJ fakturační

unitinvoice

UniqueIdentifier                                                                                   

Standardní

MJ nákupní

unitpurchase

UniqueIdentifier                                                                                   

Standardní

MJ přepravní

unitshipping

UniqueIdentifier                                                                                   

Standardní

MJ skladová

unitstock

UniqueIdentifier                                                                                   

Standardní

MJ technologická

unittechnology

UniqueIdentifier                                                                                   

Standardní

Množství do

quantityto

Decimal

Standardní

Množství od

quantityfrom

Decimal

Standardní

Nákupní cena

purchasetariffprice

Decimal

Standardní

Nákupní měna

menanakup

UniqueIdentifier                                                                                   

Standardní

Název

name

NvarChar

Standardní

Obsahuje příslušenství

iskit

Boolean

Standardní

Položka ceníku ID

pricelistfieldid

UniqueIdentifier                                                                                   

Standardní

Prodejní cena

sellingtariffprice

Decimal

Standardní

Prodejní kód

productnumber

NvarChar

Standardní

Prodejní měna

menaprodej

UniqueIdentifier                                                                                   

Standardní

Produkt

productid

UniqueIdentifier                                                                                   

Standardní

Standardní cena

standardcost

Decimal

Standardní

Typ produktu

producttypecode

Combo (int)

Standardní

Vytvořeno

createdon

DateTime                                                                                           

Standardní

Vytvořil

createdby

UniqueIdentifier                                                                                   

Standardní

Změněno

modifiedon

DateTime                                                                                           

Standardní

Změnil

modifiedby

UniqueIdentifier                                                                                   

Standardní

MJ

mainunit

VarChar                                                                                            

Virtuální

Nákupní měna

mainmenanakup

NvarChar

Virtuální

Název produktu

produktmain

Decimal

Virtuální

Prodejní měna

mainmenaprodej

NvarChar

Virtuální

Typ MJ

mainunittype

VarChar                                                                                            

Virtuální

Vytvořil

maincreatedby

VarChar                                                                                            

Virtuální

FAQ

Název

Název v databázi

Typ

Standardní/Virtuální

Budget

budgetid

UniqueIdentifier                                                                                   

Standardní

Číslo

faqnumber

NvarChar

Standardní

Důvod stavu

statecode

Combo (int)

Standardní

FAQ id

faqid

UniqueIdentifier                                                                                   

Standardní

FAQ nadřazený

faqidparent

UniqueIdentifier                                                                                   

Standardní

Název

name

NvarChar

Standardní

Popis

popis

NvarChar

Standardní

Popis - prostý text

popisplain

NvarChar

Standardní

Poznámka

poznamkaid

UniqueIdentifier                                                                                   

Standardní

Požadavek

pozadavekid

UniqueIdentifier                                                                                   

Standardní

Příznak smazáno

deletionstatecode

Int

Standardní

Smlouva

smlouvaid

UniqueIdentifier                                                                                   

Standardní