1. Případová studie Model IT: Vytvoření záznamu problému z incidentu

    Článek: AN0001852Aktualizováno::

    Popis funkcionality

    V rámci Incident a Problem management ObjectGears nabízí uživateli vytvoření Problému z existujícího Incidentu. Tato funckionalita je uživateli dostupná přes tlačítko v detailu incidentu, který dosud není navázán na určitý problém. Po kliknutí na tlačítko je uživatel tázán, zda skutečně chce vytvořit nový Problém. Po povrzení dojde k přenesení informací ze sloupců Název, Popis, Řešitel a Související CI záznamu třídy Incident do odpovídajících sloupců třídy Problém. Uživatel pak má možnost doplnit další informace v novém záznamu o problému a záznam uložit. Po uložení je uživatel vrácen na detail incidentu, z něhož nový problém zakládal a založený problém je navázán na tento incident ve sloupci Problém. U incidentů, které jsou již na nějaký problém navázány, se tlačítko pro vytvoření nového problému nenabízí.

    Popis řešení

    Ve třídě Incident je vytvořeno tlačítko, které má nastaveno Zobrazit v detailu na toolbaru a Zobrazit při změně záznamu. Ve vlastnosti Potvrzovací dotaz je hláška ptající se uživatele, zda chce skutečně vytvořit nový problém. Ve vlastnosti Obrázek tlačítka je vybrána ikona, která se zobrazí na panelu jako tlačítko. Tlačítko spouští Typ akce Skript:

    // Uloží incident, vytvoří URL pro nový záznam o problému a zahrne do něj Id incidentu (pro dotažení informací o Názvu, Popisu atd. z incidentu). Vytvoří návratovou URL směřující na incident, z něhož se nový problém zakládá. Otevře URL pro nový problém s uvedením návratové URL.
    if ( OGDataDetailForm.Save(false))
    {
        var clProb = OG.ClassDef.GetByCode( OGModel.Id, 'problem');
        var newProblem = 'DataDetail.aspx?Id=' + clProb.Id + '-0&incId=' + OGActualDataRowId;
        var ret = 'returnUrl=DataDetail.aspx%3fId%3d' + OGActualDataRowParentId + '-' + OGActualDataRowId;
        OGForm.RedirectTo(newProblem + '&' + ret);
    }

    Ve třídě Problém nastavíme skript pro detail záznamu:

    function OnCreateEntity()
    // V URL hledá řetězec incId. Pokud ho nalezne a Id ukazuje na nesmazaný incident, uloží do odpovídajících sloupců problému hodnoty z daných sloupců incidentu.

    {
      var incId = OGForm.QueryString.GetInt('incId');
      var clInc = OG.ClassDef.GetByCode( OGDataRow, 'incident');

      if ( incId != null)
     {
        var drInc = OG.DataRow.GetDataById( clInc.Id, incId);
        if ( drInc != null && !drInc.IsDeleted)
        {
           OGDataRow['name'] = drInc['name'];
           OGDataRow['description'] = drInc['description'];
           OGDataRow['solver'] = drInc['solver'];
           OGDataRow['related-ci'] = drInc['related-ci'];
        }
      }
    }

    Výše uvedený skript nastaví hodnoty na formuláři pro nový záznam. Problém s těmito hodnotami bude uložen až po kliknutí uživatele na tlačítko uložit.

    Dále je třeba zajistit, aby po uložení nového problému, byl tento problém nalinkován k incidentu, z něhož byl problém vytvořen. Toto zajistí pravidlo na tříde problém Po uložení nového záznamu, které je typu Skript.
     

    // Pokud je v URL ID incidentu, tak problém napojí k incidentu.


    var qs = System.Web.HttpContext.Current.Request.QueryString;
    var incId = Com.ObjectGears.Common.Helpers.ExtendMethod.GetInt( qs, 'incId');

    if ( incId != null)
    {
        var clInc = OG.ClassDef.GetByCode( OGActualDataRow, 'incident');

        var drInc = OG.DataRow.GetDataById( clInc.Id, incId);
        if ( drInc != null && !drInc.IsDeleted)
        {
           drInc['problem'] = OGActualDataRow.Id;
           OG.DataRow.SaveData( drInc);
        }
    }

    Abychom zajistili to, že tlačítko pro založení nového problému se má zobrazovat pouze u incidentů, které dosud nejsou navázán k žádnému problému, nastavíme skript pro detail záznamu ve třídě Incident:

    // Skrytí tlačítka 'new_problem', pokud již ve sloupci 'problem' je vyplněn odkaz na problém


    function OnPreRender()
    {
      var s = OGColumns.GetByCode('problem').ColumnUI.GetData();
      //if ( s != null)
      if ( s != null && s.Count > 0)
      {
         OGControlOperations.GetByCode('new_problem').Visible = false;
      }
    }

×