Výběr převzatých metod akcí s daty k přepsání

Každá akce s daty musí k zajištění řádného fungování implementovat různé metody, takže je pouze třeba přepsat ty metody, které implementují chování, jež chcete změnit.

Obecné metody

Pokud rozšiřujete jednu z konkrétních tříd akcí s daty, například HTTPAPIDataAction, pak většina vyžadovaných metod je již implementována a je pouze třeba přepsat metody, které implementují chování, jež chcete změnit.

V této části jsou popsány různé metody a jejich účel.

Všechny typy akcí s daty musí implementovat metody, které jsou zde popsány.

create(sID, sName)

Statickou metodu create() vyvoláte, když vytváříte novou akci s daty a v rozevírací nabídce vyberete položku Typ akce s daty. Tato metoda je zodpovědná za:

  • Vytvoření třídy modelu Knockout, která používá akci s daty.

    Třída modelu Knockout musí mít identifikátor a název, který je předán metodě create() společně se smysluplnými výchozími hodnotami pro všechny ostatní vlastnosti. Například pro akci s daty zajišťující převod mezi měnami budete možná chtít nastavit výchozí cílovou měnu převodu na hodnotu Dolary. Model Knockout je správným místem k poskytování výchozích hodnot.

  • Vytvoření instance akce s daty z modelu Knockout.
  • Vrácení instance akce s daty.

invoke(oActionContext, oDataActionContext)

K volání metody invoke() dojde, když uživatel vyvolá akci s daty z místní nabídky pro datový bod ve vizualizaci. Metoda předá argument DataActionContext, který obsahuje metadata popisující vybrané datové body, vizualizaci, filtry, sešit a relaci. Viz část Třídy služeb akcí s daty.

validate()

K volání metody validate() dojde při každé akci s daty, když uživatel klikne na tlačítko OK v dialogovém okně Akce s daty. Metoda validate() vrací hodnotu null, pokud je vše platné, nebo argument DataActionError, pokud je cokoli neplatné. Pokud se v dialogovém okně vyskytne chyba v některé z akcí s daty, tato chyba zabrání zavření dialogového okna a uživateli se zobrazí chybová zpráva. Tato metoda ověřuje název akce s daty pomocí metody this.validateName().

getGadgetInfos(oReport)

Volání metody getGadgetInfos() umožňuje uživatelskému rozhraní zobrazit pole vlastností akce s daty. Metoda vrací pole hodnot GadgetInfos v pořadí, ve kterém se mají zobrazit v uživatelském rozhraní. Miniaplikace jsou poskytovány pro všechny nejběžnější typy polí (jako jsou textové pole, pole s rozevíracím seznamem, pole pro heslo, pole pro vícenásobný výběr, přepínač, zaškrtávací políčko), nicméně můžete vytvářet vlastní miniaplikace, pokud požadujete složitější pole (například, když je více miniaplikací seskupeno dohromady nebo když se zobrazují různá pole miniaplikací v závislosti na vybrané volbě). Nejvhodnější postup je vytvořit metodu, která vytvoří jednotlivé hodnoty GadgetInfo, které chcete mít obsaženy v poli, protože tím zjednoduší potenciálním podtřídám výběr a volbu z poskytnutých hodnot GadgetInfo. Pokud dodržíte tento osvědčený postup, budou již implementovány různé metody různými základními třídami akcí s daty, které mohou vrátit hodnotu GadgetInfo pro jednotlivá pole používaná v jejich uživatelských rozhraních. Pokud také potřebujete jednu z těchto hodnot GadgetInfo, pak vyvolejte odpovídající metodu create****GadgetInfo() a předejte vrácenou hodnotu do pole miniaplikací.

isAllowedHere(oReport)

K volání metody isAllowedHere() dojde, když uživatel klikne pravým tlačítkem myši na datový bod ve vizualizaci a uživatelské rozhraní začne generovat místní nabídku. Pokud existuje akce s daty, která souvisí s vybranými datovými body, pak metoda vrátí hodnotu true a akce s daty se zobrazí v místní nabídce. Pokud metoda vrátí hodnotu false, akce s daty se v místní nabídce nezobrazí. Zvažte přijetí výchozího chování převzatého z nadtřídy.

upgrade(oOldDataActionJS)

Metodu upgrade(oOldDataActionJS) nepoužívejte, pokud vytváříte první akci s daty. Tuto metodu používejte až po vytvoření prvního modelu Knockout k provádění významných změn ve vlastnostech pro druhou verzi modelu Knockout. Například, pokud první verze akce s daty ukládá adresu URL do modelu Knockout, ale vy se rozhodnete, že další verze bude ukládat jednotlivé části adresy URL do samostatných vlastností (například protocol, hostname, port, path, queryStringbookmark).

Druhá verze kódu modelu Knockout bude vyžadovat otevření akce s daty, která byla uložena s první verzí kódu modelu Knockout, což může způsobit potíže. Když však systém zjistí, že aktuální verze kódu akce s daty je novější než akce s daty, která je otevřena, vyřeší tento problém voláním metody upgrade() pro novou třídu akce s daty a předáním starého modelu Knockout akce s daty (serializovaného do objektu JSON). Poté můžete použít starý objekt JSON k naplnění nového modelu Knockout a k vrácení upgradované verze objektu JSON. Stará metadata akce s daty tak budou nadále použitelná i po vylepšení kódu akce s daty.

Metody HTTPAPIDataAction

Pokud rozšiřujete třídu HTTPAPIDataAction, pak poskytuje následující doplňkovou metodu, kterou můžete vybrat k přepsání:

getAJAXOptions(oDataActionContext)

Metodu getAJAXOptions() volá metoda invoke() akce s daty. Metoda getAJAXOptions() vytvoří objekt Volby AJAX, jenž popisuje požadavek protokolu HTTP, který má vaše akce s daty provést. Metoda getAJAXOptions() je předána objektu oDataActionContext, který obsahuje metadata popisující vybrané datové body, vizualizaci, filtry, sešit a relaci. Nastavte objekt Volby AJAX podle požadavků rozhraní HTTP API, které se snažíte integrovat, a zadejte funkce, které chcete volat, když požadavek protokolu HTTP proběhne úspěšně nebo když způsobí chybu. Vysvětlení objektu jQuery.ajax a jeho vlastností najdete na webu JQuery.

Následující implementace je převzata z třídy HTTPAPIDataAction. Chcete-li zadat požadavky, musíte přepsat převzatou metodu. Například vytvoření požadavku protokolu HTTP a kódu, který zpracuje odpověď protokolu HTTP. Tato implementace je užitečná, protože ukazuje parametry předané funkci getAJAXOptions() a očekávaný vrácený objekt a poskytuje srozumitelný příklad, jak strukturovat kód uvnitř metody.

1 /**
2  * This method returns an object containing the AJAX settings used when the data action is invoked. 
3  * Subclasses may wish to override this method to provide their own behavior. 
4  * @param {module:obitech-reportservices/dataactionmanager.DataActionContext} oDataActionContext The context metadata describing where the data action was invoked from.  
5  * @returns {?object} A JQuery AJAX settings object (see http://api.jquery.com/jQuery.ajax/ for details) - returns null if there is a problem. 
6  */
7 dataaction.HTTPAPIDataAction.prototype.getAJAXOptions = function (oDataActionContext)
8 {
9    jsx.assertInstanceOfModule(oDataActionContext, "oDataActionContext", "obitech-reportservices/dataactionmanager", "DataActionContext");
10   
11   var oAJAXOptions = null;   
12   var oKOViewModel = this.getKOViewModel();
13   var sURL = oKOViewModel.sURL();
14   if (sURL)
15   {
16      // Parse the URL
17      var sResultURL = this._parseURL(sURL, oDataActionContext);
18      if (sResultURL)
19      {
20         // Parse the POST parameters (if required)
21         var eHTTPMethod = oKOViewModel.eHTTPMethod()[0];
22         var sData = null;
23         if (eHTTPMethod === dataaction.HTTPDataActionKOModel.HTTPMethod.POST)
24         {
25            var sPOSTParams = oKOViewModel.sPOSTParams();
26            sData = sPOSTParams.replace(dataaction.AbstractHTTPDataAction.RegularExpressions.LINE_END, "&");
27            sData = this._parseURL(sData, oDataActionContext, false);
28         }
29         oAJAXOptions = {
30            type: eHTTPMethod,
31            url: sResultURL,
32            async: true,
33            cache: false,
34            success: function (/*oData, sTextStatus, oJQXHR*/)
35            {
36               oDataActionContext.getReport().displaySuccessMessage(messages.HTTP_API_DATA_ACTION_INVOCATION_SUCCESSFUL.format(oKOViewModel.sName()));
37            },
38            error: function (oJQXHR/*, sTextStatus, sError*/)
39            {
40               oDataActionContext.getReport().displayErrorMessage(messages.HTTP_API_DATA_ACTION_INVOCATION_FAILED.format(oKOViewModel.sName(), oJQXHR.statusText, oJQXHR.status));
41            }
42         };
43         if (sData)
44         {
45            oAJAXOptions.data = sData;
46         }
47      }
48   }
49   return oAJAXOptions;
50 };