Tipo di trigger personalizzato in Ottimizzazione dell'esperienza

Oct 30 2020

Ho un'app Web DXA 2.2 configurata insieme al modulo XO. Le promozioni create nella "sezione Targeting CME" funzionano bene quando utilizzo i tipi di trigger OOTB (come il tipo di browser ecc.).

Ora sto cercando di creare un tipo di trigger personalizzato, un tipo di trigger basato su booleano molto semplice. Stavo pensando che potrebbe essere possibile scrivere tipi di trigger personalizzati senza scrivere alcuna cartuccia. Con questa comprensione ho scritto un po 'di codice in HttpModule e il codice è piuttosto semplice e assomiglia a:

        Uri uri = new Uri("taf:claim:demo:showpromotion");
        if (!AmbientDataContext.CurrentClaimStore.Contains(uri))
        {
            AmbientDataContext.CurrentClaimStore.Put(uri, true, ClaimValueScope.Session);
        }

Questo codice aggiunge un'attestazione all'archivio attestazioni. Ho configurato samrttergetconf e ambiend_data_conf nell'applicazione insieme ai microservizi (servizio di contenuto abilitato per la sessione) in modo che questa affermazione venga inoltrata. Di seguito sono riportati i file corrispondenti della mia app Web:

Ma nel generatore di modelli Smart Target, nel suo metodo ExecuteSmartTargetQuery, il mio trigger personalizzato non viene restituito dalla chiamata al metodo AmbientDataHelper.GetTriggers (ClaimStore).

Non ho scritto alcuna cartuccia e sto cercando di impostare le attestazioni solo dalla mia applicazione dotnet. Quindi le mie domande sono:

  1. È possibile utilizzare trigger personalizzati senza scrivere alcuna cartuccia per loro? o scrivere una cartuccia è obbligatorio?
  2. Se dovrebbe funzionare senza una cartuccia, cosa mi manca e perché il mio trigger personalizzato non viene restituito dalla chiamata al metodo AmbientDataHelper.GetTriggers?

Risposte

Velmurugan Nov 03 2020 at 00:27

Per risolvere ulteriormente i problemi di copia, questa pagina QueryBuilder.aspx nella cartella principale del sito Web DXA e modificare i valori in base al proprio ambiente e provare a convalidare i tipi di trigger e le regioni controllare la risposta.

<%@ Page Language="C#" %>
<%@ Import Namespace="Tridion.SmartTarget.Query.Builder" %>
<%@ Import Namespace="Tridion.SmartTarget.Analytics" %>
<%@ Import Namespace="Tridion.SmartTarget.Query" %>
<%@ Import Namespace="Tridion.SmartTarget.Utils" %>
<%@ Import Namespace="Tridion.ContentDelivery.AmbientData" %>
<%@ Import Namespace="Newtonsoft.Json" %>
<%@ Import Namespace="Newtonsoft.Json.Serialization" %>
<%@ Import Namespace="Newtonsoft.Json.Converters" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System.Diagnostics" %>
<script runat="server">
    protected void Execute(QueryBuilder queryBuilder)
    {
        var resultSet = queryBuilder.Execute();
        var jsonSettings = new JsonSerializerSettings
        {
            Formatting = Formatting.Indented,
            ContractResolver = new CamelCasePropertyNamesContractResolver(),
            Converters = { new StringEnumConverter() }
        };
        
        Response.ContentType = "application/json";
        Response.Write(JsonConvert.SerializeObject(resultSet, jsonSettings));
    }
    
    protected void AddTriggers(QueryBuilder queryBuilder)
    {
        var triggers = AmbientDataHelper.GetTriggers();
        foreach(var kvp in triggers)
        {
            queryBuilder.AddCriteria(new CustomParameterCriteria(kvp.Key, kvp.Value));
        }
    }
    
    protected void Page_Load(object sender, EventArgs e)
    {
        string[] regions = new[] { "Sidebar", "Header" };
        TcmUri _pageUri = new TcmUri("tcm:7-61-64");
        TcmUri _publicationUri = new TcmUri(0, _pageUri.PublicationId, 1);

        var queryBuilder = new QueryBuilder(_publicationUri, regions);
        AddTriggers(queryBuilder);

        Execute(queryBuilder);
    }
</script>

Spero possa essere d'aiuto.