Přeskočit na hlavní obsah

DŮLEŽITÉ: Manuální kroky po upgrade (on-prem)

Varování

Při přechodu ze starší než bezprostředně předcházející verze Alvao, nejprve proveďte kroky po upgradu pro všechny verze, které byly přeskočeny v chronologickém pořadí.

Po upgrade na verzi 25.1

SQL skripty

Ukládání hodnot vlastnosti objektu a jejich dědičnosti se změnila. Tabulka tblProperty již neexistuje v databázi, stejně jako pohledy vProperty a vPropertyInherited.

Místo toho jsou k dispozici následující tabulky:

  • NodeCust - úložiště vlastních a zděděných hodnot vlastností. Sloupce tabulky mají stejný typ jako definice vlastností.
  • ClassKind - vlastnosti definované pro každý typ objektu.
  • NodeColumnInheritance - dědičné (InheritedFromNodeId = NULL) a zděděné (InheritedFromNodeId != NULL) vlastnosti objektů.

Existuje také užitečný pohled vNodeProperty a uložená procedura spNodeProperty. Musíte aktualizovat své dotazy podle nového schématu databáze.

Příklad 1

Vyberte hostname (nezděděný) konkrétního objektu.

ALVAO 11.2:

select pk.txtValue [Hostname] from vPropertyKind pk where pk.lintNodeId = 10 and pk.intKindCode = 3 --HostName

ALVAO 25.1:

select nc.HostName from vNodeProperty np join NodeCust nc on nc.NodeId = np.NodeId where np.NodeId = 10 and np.InheritedFromNodeId is null and np.KindCode = 3 --HostName

Příklad 2

Vyberte název organizace konkrétního objektu. Vlastnost může být zděděna

ALVAO 11.2:

select pk.txtValue [Organization name] from vPropertyKindInherited pk where pk.lintNodeId = 20 and pk.txtKind = N'Organization name'

ALVAO 25.1:

select nc.OrganizationName from NodeCust nc where nc.NodeId = 20

Příklad 3

Vyberte všechny vlastnosti (včetně zděděných) s hodnotami konkrétního objektu.

ALVAO 11.2:

select pk.txtKind [Property name], pk.txtValue [Property value] from vPropertyKindInherited pk where pk.lintNodeId = 30

ALVAO 25.1:

declare @nodes Node insert into @nodes select 30

declare @props NodeProperty insert into @props exec [dbo].[spNodeProperty] @nodes

select k.txtName [Property name], p.TextValue [Property value] from @props p join tblKind k on k.intKindId = p.KindId where p.NodeId = 30

Custom Apps

Při aktualizaci z ALVAO 11.2 musíte upravit stávající vlastní rozšíření, viz ALVAO Asset Management Custom Apps nebo ALVAO Service Desk Custom Apps. Upravte zdrojové soubory a skripty podle popisu na této stránce. Pokud upgradujete z ALVAO 11.1 nebo starší verze, nejprve převeďte vlastní rozšíření na ALVAO 11.2.

  1. Alvao.API – Common.Database.ReadColumn – Bitové hodnoty – Vrací "0"/"1" místo lokalizovaných "Ano"/"Ne". Vrátili jsme chování do předchozího stavu z SD WS. Pokud chcete vrátit lokalizovanou hodnotu místo logické hodnoty (0/1), použijte Common.CustomColumn.GetValue a volitelný parametr returnBitAsNumber nastavený na false. (T155790ALVAO).
  2. Skripty IObjectPropertyAutoAction – metoda OnObjectPropertyModifying nyní vrací objekt ObjectPropertyModifyResult místo Tuple. Musíte změnit definici této metody na public ObjectPropertyModifyResult OnObjectPropertyModifying(ObjectPropertyEventArgs e). Dále musíte z popsané metody vrátit objekt tohoto typu (ObjectPropertyModifyResult má parametry bool a string, podobně jako Tuple v předchozí verzi).
  3. Skripty IObjectPropertyAutoAction - metody OnObjectPropertyModifying a OnObjectPropertyModified nyní přijímají jako parametr objekt typu ObjectPropertyEventArgs. Musíte změnit definice těchto metod na public ObjectPropertyModifyResult OnObjectPropertyModifying(ObjectPropertyEventArgs e) a public void OnObjectPropertyModified(ObjectPropertyEventArgs e). Tento objekt obsahuje všechny parametry z předchozí verze, takže místo použití parametru personId nyní použijete e.PersonId.
Varování

Neměli byste používat String.GetHashCode k identifikaci Custom Apps, protože metoda není stabilní a může vracet různé hash kódy v různých verzích a implementacích .NET.

Vlastní ikony

Způsob specifikace ikon příkazů byl změněn. Sledujte pokyny pro metodu IEntityCommand.Show - člen Icon.

Custom Forms

Při upgrade z verze ALVAO 11.2 je třeba upravit stávající vlastní formuláře, viz Vlastní formulář pro odeslání nového požadavku nebo Vlastní formulář pro schválení požadavku. Upravte soubory .cs a .cshtml podle popisu na této stránce. Pokud upgradujete z ALVAO 11.1 nebo starší verze, nejprve převeďte vlastní rozšíření na ALVAO 11.2.

Musíte přepsat alespoň následující části kódu:

  • Všechny zdrojové soubory upravte tak, že usings Alvao.ServiceDesk.ServiceDeskWebApp... nahradíte Alvao.WebApp....

ALVAO 11.2:

using Alvao.ServiceDesk.ServiceDeskWebApp.Infrastructure.Custom;

ALVAO 25.1:

using Alvao.WebApp.Infrastructure.Custom;
  • Nahradit using System.Web.Mvc za Microsoft.AspNetCore.Mvc.

ALVAO 11.2:

using System.Web.Mvc;

ALVAO 25.1:

using Microsoft.AspNetCore.Mvc;
  • Pokud používáte CustomPageController jako základní třídu pro vaši kontrolní třídu, přidejte konstruktor, který má parametr IHttpContextAccessor:

ALVAO 11.2:

public class MyCustomController : CustomPageController
{
...
}

ALVAO 25.1:

using Microsoft.AspNetCore.Http;
...
public class MyCustomController : CustomPageController
{
...
public MyCustomController(IHttpContextAccessor httpContextAccessor)
: base(httpContextAccessor)
{
}
...
}
  • Přidejte using ke standardním zdrojům, pokud je používáte a přistupujete k nim pouze prostřednictvím třídy Localization.

ALVAO 11.2:

throw new CustomHttpException(
HttpStatusCode.Forbidden, Resources.Localization.AccessDenied);

ALVAO 25.1:

using Alvao.WebApp.Resources;
...
throw new CustomHttpException(
HttpStatusCode.Forbidden, Localization.AccessDenied);
  • Ve všech vašich třídách změňte své jménné prostory z Alvao.ServiceDesk.ServiceDeskWebApp.Custom... na Alvao.WebApp.Custom....

ALVAO 11.2:

namespace Alvao.ServiceDesk.ServiceDeskWebApp.Custom.MyFormController

ALVAO 25.1:

namespace Alvao.WebApp.Custom.MyFormController
  • Odstraňte parametr ControllerContext z konstruktorů a metod ve třídách dědících třídu SelectCallbackResponse.

ALVAO 11.2:

public MyGridSelectResponse(MyGridGrid grid, ControllerContext ctx)
: base(grid, ctx)

ALVAO 25.1:

public MyGridSelectResponse(MyGridGrid grid)
: base(grid)
  • Místo vytváření nové instance UrlHelper přímo volejte její statické metody.

ALVAO 11.2:

UrlHelper helper = new UrlHelper(ctx.RequestContext); Dictionary<string, object> result = new Dictionary<string, object>(); result.Add("link", helper.DefaultAction(
"Index", "Ticket", new { Id = rowData["iHdTicketId"] }));

ALVAO 25.1:

Dictionary<string, object> result = new Dictionary<string, object>(); result.Add("link", UrlHelper.DefaultAction(
"Index", "Ticket", new { Id = rowData["iHdTicketId"] }));
  • Změňte způsob čtení query parametrů.

ALVAO 11.2:

Request.Params["TicketId"]

ALVAO 25.1:

  • V kontroleru:
HttpContext.GetParam("TicketId")
  • V pohledu:
    ViewContext.HttpContext.GetParam("ReturnUrl")
  • Získejte IP adresu volajícího z připojení.

ALVAO 11.2:

IPAddress HostIp = IPAddress.Parse(Request.UserHostAddress);

ALVAO 25.1:

var HostIp = HttpContext.Connection.RemoteIpAddress;
  • Změňte typ vyvolaných HTTP výjimek.

ALVAO 11.2:

throw new HttpException();

ALVAO 25.1:

throw new CustomHttpException(HttpStatusCode.InternalServerError);
  • Změňte způsob práce se session.

ALVAO 11.2:

UserContactsModel ContactDetails =
Session["UserContactDetails"] as UserContactsModel;

ALVAO 25.1:

var userContactDetails =
HttpContext.Session.GetString("UserContactDetails");
UserContactsModel ContactDetails =
string.IsNullOrEmpty(userContactDetails) ?
null :
JsonConvert.DeserializeObject<UserContactsModel>(userContactDetails);

ALVAO 25.2:

Session byl z této verze odstraněn. Musíte použít CacheUtil místo toho.

CacheUtil.UpdateOrCreateItem($"UserContactDetails_{currentPersonId}", contactDetails, 120);
bool isInCache =
CacheUtil.TryGetFromCache($"UserContactDetails_{currentPersonId}", out UserContactsModel contactDetails);
  • Přistupujte k response headers jinak.

ALVAO 11.2:

Response.AddHeader("Content-Disposition", ...);

ALVAO 25.1:

Response.Headers.Append("Content-Disposition", ...);
  • Použijte statickou metodu StatusCode pro vrácení určitého stavu z metody kontroleru.

ALVAO 11.2:

return new HttpStatusCodeResult(
System.Net.HttpStatusCode.NoContent);

ALVAO 25.1:

return StatusCode(StatusCodes.Status204NoContent);
  • Přidejte layout do .cshtml, pokud není přítomen:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
  • Pokud používáte helpers v souborech cshtml, přepište je na funkce.

ALVAO 11.2:

  • Deklarace funkce:
@helper HelperTest(<T> model)
{
<h1>@Model.Text</h1>
}
  • Volání funkce:
@HelperTest(Model)

ALVAO 25.1:

  • Deklarace funkce:
@functions
{
public void HelperTest(<T> model)
{
<h1>@Model.Text</h1>
}
}
  • Volání funkce:
@{
HelperTest(Model);
}
  • Použijte statické metody UrlHelper k generování URL.

ALVAO 11.2:

string editTicketUrl =
VirtualPathUtility.ToAbsolute("~/Ticket/Edit/" + Model.TicketId);

ALVAO 25.1:

string editTicketUrl =
UrlHelper.Content("~/Ticket/Edit/" + Model.TicketId);

Užitečné metody UrlHelper:

public static string Action(string action, string controller) public static string Action(string action, string controller,
RouteValueDictionary routeValues)
public static string Content(string contentPath) public static string Content(string contentPath,
RouteValueDictionary routeValues)
  • Použijte WebUtility místo HttpUtility k zakódování textů.

ALVAO 11.2:

HttpUtility.UrlEncode(Model.RelatedAccountName)

ALVAO 25.1:

WebUtility.UrlEncode(Model.RelatedAccountName)

Pro použití WebUtility také musíte přidat následující řádek na začátek souboru:

@using System.Net;
  • Změňte cestu k systémovým zdrojům.

ALVAO 11.2:

<img src="~/Content/img/favicon.ico" />

ALVAO 25.1:

<img src="~/wwwroot/img/favicon.ico" />

Po upgrade na verzi 25.2

Po upgrade není potřeba provádět žádné manuální kroky.