Geçersiz Kılınacak Veri Eylemi Devralınan Yöntemlerini Seçme

Doğru şekilde çalışmak için her bir veri eyleminin çeşitli yöntemler uygulaması gerekir. Sizin sadece değiştirmek istediğiniz davranışı uygulayan yöntemleri geçersiz kılmanız gerekir.

Genel Yöntemler

Somut veri eylemi sınıflarından birini genişletiyorsanız (örneğin HTTPAPIDataAction), gerekli yöntemlerin çoğu zaten uygulanmış olur ve sizin sadece değiştirmek istediğiniz davranışı uygulayan yöntemleri geçersiz kılmanız gerekir.

Bu bölümde çeşitli yöntemler ve bunlardan nelerin beklendiği açıklanmaktadır.

Tüm veri eylemi tipleri burada açıklanan yöntemleri uygulamalıdır.

create(sID, sName)

create() statik yöntemi, yeni bir veri eylemi oluştururken açılan menüden Veri Eylemi Tipi'ni seçtiğinizde çağrılır. Bu yöntemin sorumlulukları:

  • Veri eyleminizin kullandığı Knockout Modelini yapılandırmak.

    Knockout Modeli sınıfı, tüm diğer nitelikler için mantıklı öndeğerlerle birlikte create() yöntemine iletilen no'ya ve ada sahip olmalıdır. Örneğin, para birimi çevrimi veri eylemi için çevrilecek para birimi öndeğerini Dolar olarak ayarlamak isteyebilirsiniz. Knockout Modeli, öndeğerlerinizi sağlamak için doğru yerdir.

  • Knockout Modelinden veri eyleminizin bir anını yapılandırmak.
  • Veri eyleminizin anını döndürmek.

invoke(oActionContext, oDataActionContext)

invoke() yöntemi, kullanıcı bir görselleştirmedeki veri noktası için veri eyleminizi bağlam menüsünden çağırdığında çağrılır. Yöntem, seçili veri noktalarını, görselleştirmeyi, filtreleri, çalışma kitabını ve oturumu açıklayan meta verileri içeren DataActionContext bağımsız değişkenini iletir. Bkz. Veri Eylemi Hizmet Sınıfları.

validate()

validate() yöntemi, kullanıcı Veri Eylemleri iletişim kutusunda Tamam'a tıkladığında her bir veri eyleminde çağrılır. validate() yöntemi, her şeyin geçerli olduğunu belirtmek için null ya da geçersiz bir şey olduğunda DataActionError döndürür. İletişim kutusundaki veri eylemlerinin birinde hata varsa hata iletişim kutusunun kapanmasını engeller ve kullanıcıya bir hata mesajı gösterilir. Bu yöntem, this.validateName() yöntemini kullanarak veri eyleminin adını doğrular.

getGadgetInfos(oReport)

getGadgetInfos() yöntemi, kullanıcı arayüzünün veri eylemi nitelik alanlarını görüntülemesini sağlamak için çağrılır. Yöntem, bir dizi GadgetInfos'u kullanıcı arayüzünde görünmesini istediğiniz sırada döndürür. Gadget'lar tüm genel alan tipleri (örneğin metin, açılır liste, parola, çoklu seçim, radyo düğmesi, onay kutusu) için sağlanır, ancak daha karmaşık alanlar (birden fazla gadget'ın gruplandığı veya belirlediğiniz seçeneğe göre farklı gadget alanlarının görüntülendiği) isterseniz özel gadget'lar oluşturabilirsiniz. Potansiyel alt sınıfların sağladığınız GadgetInfo'lar arasından seçim yapmasını kolaylaştıracağından, dizinizde istediğiniz GadgetInfo'yu yapılandıran bir yöntem oluşturmak en iyi uygulama olacaktır. Bu en iyi uygulamayı kullanırsanız, kullanıcı arayüzlerinde kullandıkları alanlardan her biri için bir GadgetInfo döndürebilen farklı veri eylemi temel sınıfları tarafından uygulanmış çeşitli yöntemler zaten mevcuttur. Bu GadgetInfo'ların birine ihtiyacınız varsa ilgili create****GadgetInfo() yöntemini çağırabilir ve dönüş değerini gadget dizinize itebilirsiniz.

isAllowedHere(oReport)

isAllowedHere() yöntemi, kullanıcı bir görselleştirmedeki bir veri noktasına sağ tıkladığında çağrılır ve kullanıcı arayüzü bağlam menüsünü oluşturmaya başlar. Seçili veri noktalarıyla ilişkili bir veri eylemi varsa yöntem true döndürür ve veri eylemi bağlam menüsünde görünür. Yöntem false döndürürse, veri eylemi bağlam menüsünde görünmez. Üst sınıftan devralınan davranış öndeğerini kabul etmeyi dikkate alın.

upgrade(oOldDataActionJS)

İlk veri eyleminizi oluşturuyorsanız upgrade(oOldDataActionJS) yöntemini kullanmayın. Bu yöntemi, sadece ilk Knockout Modelinizi oluşturduktan sonra ve Knockout Modelinizin ikinci bir sürümüne yönelik niteliklerde önemli değişiklikler yaparken kullanın. Örneğin, veri eyleminizin ilk sürümü ilk Knockout Modelinde bir URL depoluyorsa ancak sonraki sürümün URL bileşeni parçalarını ayrı niteliklerde depolamasına karar verdiyseniz (örneğin, protocol, hostname, port, path, queryString ve bookmark).

Knockout Modeli kodunuzun ikinci sürümü, Knockout Modeli kodunuzun ilk sürümüyle kaydedilmiş bir veri eylemini açmayı ister ve bu da sorunlara yol açabilir. Bu sorunu çözmek için, sistem geçerli veri eylemi kodu sürümünüzün açılmakta olan veri eyleminin sürümünden daha yeni olduğunu belirler, yeni veri eylemi sınıfınızda upgrade() yöntemini çağırır ve eski veri eylemi Knockout Modelini iletir (JSON nesnesine serileştirilmiş). Sonra yeni Knockout Modelinizi doldurmak ve JSON nesnesinin yükseltilmiş bir sürümünü döndürmek için eski JSON nesnesini kullanabilirsiniz. Bu, veri eylemi kodunuzu geliştirdikçe eski veri eylemi meta verisinin çalışmaya devam etmesini sağlar.

HTTPAPIDataAction Yöntemleri

HTTPAPIDataAction sınıfını genişletiyorsanız, geçersiz kılmak isteyebileceğiniz şu ek yöntemi sağlar:

getAJAXOptions(oDataActionContext)

getAJAXOptions() yöntemi, veri eyleminin invoke() yöntemi tarafından çağrılır. getAJAXOptions() yöntemi, veri eyleminizin yapmasını istediğiniz HTTP isteğini açıklayan AJAX Options nesnesini oluşturur. getAJAXOptions() yöntemine, seçili veri noktalarını, görselleştirmeyi, filtreleri, çalışma kitabını ve oturumu açıklayan meta verileri içeren oDataActionContext nesnesi iletilir. AJAX Options'ı, entegre etmeye çalıştığınız HTTP Uygulama Programı Arabiriminin gerektirdiği şekilde ayarlayın ve HTTPRequest başarılı olduğunda veya hata ile sonuçlandığında çağrılmasını istediğiniz fonksiyonları belirleyin. jQuery.ajax nesnesi ve nitelikleri hakkında açıklama için JQuery web sitesine bakın.

Aşağıdaki uygulama HTTPAPIDataAction sınıfından devralınmıştır. Gereksinimleri belirtmek için devralınan yöntemi yeniden yazmanız gerekir. Örneğin, HTTP isteğini ve HTTP yanıtını işleyen kodu oluşturma. Bu uygulama getAJAXOptions() fonksiyonuna iletilen parametreler ile döndürülmesi beklenen nesneyi gösterdiğinden ve kodun yöntem içinde nasıl yapılandırılacağına dair net bir örnek sağladığından yararlıdır.

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 };