1. Případová studie Model IT: Parametr ze záznamu použitý v dotazu

    Článek: AN0001853Aktualizováno::

    V některých případech potřebujeme v dotazu vrátit záznamy pro konkrétní detail záznamu. V ObjectGears není takovýto parametr předáván do dotazu, ale je zohledněn při filtrování v zobrazení seznamu záznamů.

    Popis funkcionality

    V entitě Změnový požadavek (RFC) je k dispozci dotaz Realizace RFC - otevřené případy. Tento dotaz se váže ke konkrétnímu záznamu Změnového požadavku a zobrazuje s ním související entity.

    Popis řešení

    Vytvoříme dotaz, zobrazující požadovaná data. Dotaz bude také vracet sloupec chr_id obsahující odkaz na Změnový požadavek. Tento sloupec v dotazu nebudeme zobrazovat - v detailu sloupce dotazu tedy odškrtneme volby Zobrazit na formuláři, Zobrazit v seznamu a Zobrazit v detailním seznamu.

     

    SELECT chr.id AS [chr___change_request], r.name AS Request, tc.code AS Test_case, uat.name AS UAT, tcs.name AS Test_case_UAT_status, d.id AS Defect___defects, ds.name AS Defect_status,
    case
     when uat2.id = uat.id then 'Ano'
     else null
    end UAT_for_PROD_Release,
    chr.id AS chr_id

    FROM {{:class.change_request:}} chr
    LEFT JOIN {{:class.request:}} r ON r.rfc = chr.id
    LEFT JOIN {{:class.project-phase:}} pph ON pph.id = chr.[project-phase]
    LEFT JOIN {{:class.project:}} p ON chr.project = p.id
    LEFT JOIN {{:class.request:test-case:}} rtc ON rtc.DataRowId = r.id
    LEFT JOIN {{:class.test-case:}} tc ON tc.id = rtc.LinkDataRowId
    LEFT JOIN {{:class.test-case-for-uat:}} tcfu ON tcfu.[test-case] = tc.id
    LEFT JOIN {{:class.test-case-status:}} tcs ON tcfu.status = tcs.id
    LEFT JOIN {{:class.uat:}} uat ON tcfu.uat = uat.id
    LEFT JOIN {{:class.defects:}} d ON tcfu.id = d.[test-case-for-uat]
    LEFT JOIN {{:class.defect-status:}} ds ON ds.id = d.status

    LEFT JOIN {{: class.release:change_request:}} rechr ON rechr.LinkDataRowId = chr.id
    LEFT JOIN {{:class.release:}} re ON re.id = rechr.DataRowId

    LEFT JOIN {{:class.uat:}} uat2 ON uat2.id = re.uat_for_prod_release
    WHERE (tcs.id = 2 OR tcs.id = 4 OR tcs.id IS NULL) AND (ds.id IS NULL or ds.id = 1)

    Dotaz chceme volat pro konkrétní záznam Změnového požadavku. Proto na třídě Změnový požadavek vytvoříme tlačítko Realizace RFC - otevřené případy, které bude typu Skript. V detailu tlačítka zaškrtneme Zobrazit v seznamu v kontextovém menu, Zobrazit v detailu v kontextovém menu a Zobrazit při změně záznamu. Ve skriptu se vytváří URL na dotaz obsahující proměnnou DrId a hodnotou Id záznamu Změnového požadavku, z něhož se dotaz volá. Nakonec se toto URL otevře.

    var q = OG.Query.GetByCode( OGModel.Id, 'rfc_readiness_open_cases');
    var url = 'Datas.aspx?QId=' + q.Id + '&DrId=' + OGActualDataRowId;
    OGForm.RedirectTo(url);

    Abychom zajistili zobrazení pouze záznamů týkajících se změnového požadavku, z něhož byl dotaz volán, nastavíme v detailu dotazu skript pro Seznam záznamů. Ve skriptu hledáme řetězec DrId v URL, a pokud je nalezeno, filtrujeme seznam záznamů dotazu ve sloupci chr_id, obsahujícím Id změnového požadavku, na hodnotu předanou v URL proměnné DrId.
     

    function OnCreateFilter()
    {
      var drId = OGForm.QueryString.GetInt( 'DrId');
      if ( drId != null)
      {
          var c = OG.Column.GetByCode( OGQuery.Id, 'chr_id');
          OGDataRowFilter.SetColumnData(c.Id, drId);
      }
    }

×