Skip Navigation LinksALVAO 11.0Release NotesUpgrade from previous versionsUpgrade from ALVAO 10.4 – manual steps Skip Navigation Links.

Upgrade from ALVAO 10.4 – manual steps

Custom Apps

When upgrading from ALVAO 10.4, you need to modify existing software extensions, see ALVAO Asset Management Custom Apps or ALVAO Service Desk Custom Apps. Modify the source files and scripts as described on this page. If you are upgrading from ALVAO 10.3 or earlier, first convert the custom extension to ALVAO 10.4.

  1. Transfer your existing customizations from the App_Code folder in the SD WS installation to the Applications folder as follows:
    1. In the Administration - Applications section, create a suitable structure of applications.
      Applications are part of the ALVAO Service Desk Custom Apps module.
    2. In the application, create a new script with a template for each file being transferred:
      • Blank if you are transferring a file with an implementation of one of the extension types (e.g., a file containing a class implementing ITicketAutoAction).
      • Class Library, if you are transferring a file containing auxiliary classes (e.g., a file containing Settings service names used in extensions).
    3. Enter the contents of the file you are transferring into the script.
    4. using System.Web.WebServices;
      replace with:
      using Alvao.Apps.WebService;
  2. Automatic actions based on event changes - if you are using the tActHd.bActHdUserRead column in automatic actions, you need to change it to tAct.UserRead.
  3. Custom person selection functions - If you are using the spPersonSearch-Custom2 custom procedure, add new parameters @onlyCustomizableUsers and @rightLimitationPersonId. We recommend that you copy the definition of the default implementation spPersonSearch and make your own modifications to it again.
  4. If you are using the table in a custom form, remove the DefaultAction() and Actions() methods from the table if you have implemented them.
  5. Remove the use of the scope.Open() method.
  6. ALVAO Standard HW/SW Request Forms - Custom HW Request Form
    The new template is located in the Templates/StandardHwSwRequestForm folder. In the existing code of the cs file, which is based on Code/StandardHwSwRequestForm-Hw-NewTicket.cs, replace the following lines:
    TicketBody += properties["ItemName"];
    TicketBody += "\nPrice: " + properties["Price"];

    for this code:
    object itemName;
    properties.TryGetValue("ItemName", out itemName);
    TicketBody += itemName;

    object price;
    properties.TryGetValue("Price", out price);
    TicketBody += "\nPrice: " + price;
  7. If you use any of the Alvao.API methods listed in the A10.4 column in your custom forms, replace it with the appropriate method from column A11.0.
    A10.4 A11.0
    AM.ImportCsv.RunImportCsv AM.ImportCsv.Run
    AM.Object.CreateObject AM.Object.Create
    AM.Object.CopyObject AM.Object.Copy
    AM.Object.DeleteObject AM.Object.Delete
    AM.Object.MoveObject AM.Object.Move
    AM.Object.GetObjectById AM.Object.GetById
    AM.ObjectProperty.UpdateProperties AM.ObjectProperty.Update
    Common.Email.QueueMailMessage Common.Email.Queue
    Common.Person.GetPersonById Common.Person.GetById
    Common.Person.GetPersonByEmail Common.Person.GetByEmail
    Common.Person.GetPersonCultureInfoOrDefault Common.Person.GetCultureInfoOrDefault
    SD.Message.SendMessage SD.Message.Send
    SD.Sections.MoveSections SD.Sections.Move
    SD.Sections.CopySections SD.Sections.Copy
    SD.Sections.ReplaceSectionsRights SD.Sections.ReplaceRights
    SD.Sections.ReplaceSectionsSlaRights SD.Sections.ReplaceSlaRights
    SD.Sections.GetSectionOnlySolverId SD.Sections.GetOnlySolverId
    SD.Sections.ExportSections SD.Sections.Export
    SD.Sections.ValidateSectionsBeforeImport SD.Sections.ValidateBeforeImport
    SD.Sections.ImportSections SD.Sections.Import
  8. The ObjectClass.Code.Store enumerator item from Alvao.API (Alvao.API.AM.Model.ObjectClass.Code.Store) has been renamed to Alvao.API.AM.Model.ObjectClass.Code.Warehouse.
  9. The spMoveNode database procedure now requires a value to be filled in the person parameter.
  10. Remove the use of the Alvao.Apps.AppsConfig.ConnectionProvider.SetApiContext method.
  11. By the next version of ALVAO (release April 2023), SD WS will be deprecated. In custom forms and applications, we recommend replacing SD WS methods with the corresponding methods from Alvao.API:
    AddPersonToGroup Alvao.API.Common.Person.AddToGroup()
    AssignTicketToSolver Alvao.API.SD.Ticket.ChangeSolver()
    CreateAct Alvao.API.SD.Act.Create()
    CreateGroup Alvao.API.Common.Role.Create()
    CreatePerson Alvao.API.Common.Person.Create()
    CreateTicket Alvao.API.SD.Ticket.Create()
    CreateTicketRelation Alvao.API.SD.Relation.Create()
    DeleteGroup Alvao.API.Common.Role.Delete()
    FindPerson partially Alvao.API.Common.Person.GetByEmail, or db procedure spPersonSearch()
    GetAzureApplicationOptions Alvao.API.DbProperty.AzureApplicationId
    GetGroupList Alvao.API.Common.Role.GetAll()
    GetPersonGroupList Alvao.API.Common.Person.GetGroupMembership()
    GetServiceDeskPortalUrl Alvao.API.Common.DbProperty.WebAppUrl
    IsActivated Alvao.API.Activation.IsModuleActivated()
    IsExistingTicket Alvao.API.SD.Ticket.GetById()
    IsPersonMemberOfGroup Alvao.API.Common.Person.IsMemberOfGroup()
    LogAuditRecord Alvao.API.Common.AuditLog.LogAuditRecord()
    ReadColumn Alvao.API.Common.Database.ReadColumn()
    RemovePersonFromGroup Alvao.API.Common.Person.RemoveFromGroup()
    ResolveTicket Alvao.API.SD.Ticket.Resolve()
    SetTicketState Alvao.API.SD.Ticket.ChangeState()
    WriteColumn Alvao.API.Common.Database.WriteColumn()

    For example: sdws.ReadColumn(recordId, tableName, columnName);
    replace with
    Alvao.API.Common.Database.ReadColumn(recordId, tableName, columnName);

    sdws.WriteColumn(recordId, tableName, columnName, newValue);
    replace with
    Alvao.API.Common.Database.WriteColumn(recordId, tableName, columnName, newValue);

    In integrations with external systems, we recommend replacing SD WS methods with the corresponding methods from the Service Desk Enterprise API:

    SD WS SD Enterprise API
    AssignTicketToSolver PUT tickets/{ticketId}/solver
    CreateAct POST tickets/{ticketId}/log
    CreateTicket POST tickets
    CreateTicketRelation POST tickets/{ticketId}/links
    FindPerson GET users?$search={person|name}
    GetAzureApplicationOptions GET systemSettings
    GetPersonList GET users
    GetPersonNameFromMail GET users?$filter=email eq '{email}'
    GetServiceDeskPortalUrl Get systemSettings
    GetTicketActList GET tickets/{ticketId}/log
    GetTicketByMessageTag Get tickets/GetIdFromText(text='{text}')
    GetTicketList GET tickets
    GetWebServiceVersion GET /
    IsExistingTicket GET tickets/{ticketId}
    ResolveTicket PUT tickets/{ticketId}/state
    SetTicketState PUT tickets/{ticketId}/state

    Note: SD WS methods not listed in the table will not have a replacement until the next version of ALVAO (April 2023 release).

  12. If you use database transactions in Applications, apply the new recommendations. (T124214ALVAO)

Custom print report templates

Custom print report templates need to be rewritten to a supported XSL version as follows:

Old construction New construction
<xsl:stylesheet xmlns:xsl= > <xsl:stylesheet version="1.0" xmlns:xsl= >
<xsl:script>...</xsl:script> -
<xsl:if test="context()[not(end())]"> <xsl:if test="position()!=last()">
<xsl:for-each select="xxx" order-by="yyy,zzz"> <xsl:for-each select="xxx">
  <xsl:sort select="yyy" />
  <xsl:sort select="zzz" />
<xsl:if test=".[value!='']"> <xsl:if test="value!=''">
<xsl:when test=".[not(proplist/prop[kind='xxx']) and proplist/prop[kind='yyy']]"> <xsl:when test="not(proplist/prop[kind='xxx']) and proplist/prop[kind='yyy']">
<xsl:apply-templates select="ancestor(node[classid='x'])/nodelist"/> <xsl:apply-templates select="ancestor::node[classid='x']/nodelist"/>
<xsl:apply-templates select="xxx" order-by="yyy" /> <xsl:apply-templates select="xxx">
  <xsl:sort select="yyy" />


Did not find what you were looking for? Ask our technical support team.