De database opvragen met queryDef query-database-api
Adobe Campaign biedt krachtige JavaScript-methoden voor interactie met de database via queryDef en het NLWS -object. Met deze op SOAP gebaseerde methoden kunt u gegevens laden, maken, bijwerken en zoeken met JSON, XML of SQL.
Wat is NLWS? what-is-nlws
NLWS (Neolane Web Services) is het algemene JavaScript-object dat wordt gebruikt voor toegang tot de op SOAP gebaseerde API-methoden van Adobe Campaign . Schema's zijn eigenschappen van het NLWS -object, zodat u programmatisch kunt communiceren met campagneentiteiten.
Volgens de documentatie van JSAPI van de Campagne , "zijn de schema's "NLWS"globale voorwerpen." De syntaxis voor toegang tot schemamethoden volgt dit patroon:
NLWS.<namespace><SchemaName>.<method>()
Voorbeelden:
NLWS.nmsRecipient- Toegang tot methoden voor het ontvangende schema (nms:recipient)NLWS.nmsDelivery- Toegang tot methoden voor het leveringsschema (nms:delivery)NLWS.xtkQueryDef- Toegang tot queryDef-methoden om query's uit te voeren op de database
Veelvoorkomende API-methoden zijn:
load(id)- Een entiteit met de id laden. Meer informatiecreate(data)- Een nieuwe entiteit makensave()- Wijzigingen in een entiteit opslaan
Voorbeeld van officiële documentatie:
var delivery = NLWS.nmsDelivery.load("12435")
nms.recipient.create(), xtk.queryDef.create()) zien. Beide syntaxis werkt, maar NLWS is de standaard die wordt beschreven in de officiële JSAPI-referentie voor campagne.Vereisten prerequisites
Voordat u de methoden queryDef en NLWS gebruikt, moet u bekend zijn met:
- JavaScript
- Adobe Campaign gegevensmodel en -schema's
- XPath-expressies voor navigeren door schema-elementen
Begrijpend het de gegevensmodel van de Campagne:
Adobe Campaign wordt geleverd met een vooraf gedefinieerd gegevensmodel dat bestaat uit tabellen die zijn gekoppeld in een Cloud-database. De basisstructuur omvat:
-
Ontvankelijke lijst (
nmsRecipient) - Belangrijkste lijst die marketing profielen opslaat -
lijst van de Levering (
nmsDelivery) - slaat leveringsacties en malplaatjes met parameters op voor het uitvoeren van leveringen -
Logs lijsten - de uitvoeringslogboeken van de opslag:
nmsBroadLogRcp- Leveringslogboeken voor alle berichten die naar ontvangers worden verzondennmsTrackingLogRcp- Logboeken bijhouden voor reacties van ontvangers (wordt geopend, er wordt geklikt)
-
Technische lijsten - de systeemgegevens van de opslag zoals exploitanten (
xtkGroup), zittingen (xtkSessionInfo), werkschema's (xtkWorkflow)
Om tot schemabeschrijvingen in de interface van de Campagne toegang te hebben, doorblader aan Beleid > Configuratie > de schema's van Gegevens, selecteer een middel, en klik de Documentatie tabel.
Methoden van het entiteitsschema entity-schema-methods
Elk schema in Adobe Campaign (bijvoorbeeld nms:recipient , nms:delivery ) wordt geleverd met methoden die toegankelijk zijn via het NLWS -object. Deze methodes verstrekken een geschikte manier om met gegevensbestandentiteiten in wisselwerking te staan.
Statische methoden static-methods
Statische SOAP-methoden worden benaderd door een methode aan te roepen voor het object dat het schema vertegenwoordigt. NLWS.xtkWorkflow.PostEvent() roept bijvoorbeeld een statische methode aan.
Niet-statische methoden non-static-methods
Als u niet-statische SOAP-methoden wilt gebruiken, moet u eerst een entiteit ophalen met de methoden load of create in de desbetreffende schema's. Leer meer in de documentatie van JSAPI van de Campagne .
Entiteiten laden, opslaan en maken load-save-create
Laad een entiteit door identiteitskaart en werk het bij:
// Load a delivery by @id and save
var delivery = NLWS.nmsDelivery.load("12435");
delivery.label = "New label";
delivery.save();
creeer een ontvanger gebruikend JSON:
// Create via JSON, edit via JS and save
var recipient = NLWS.nmsRecipient.create({
x: { // the key 'x' doesn't matter
email: 'john.doe@example.com',
}
});
recipient.folder_id = 1183;
recipient.firstName = 'John';
recipient.lastName = 'Doe';
recipient.save();
creeer een ontvanger gebruikend XML:
// Create via XML and save
var recipient = NLWS.nmsRecipient.create(
<recipient
email="support@adobe.com"
lastName="Adobe"
firstName="Support"
/>
);
recipient.save();
Overzicht van QueryDef querydef-overview
Het xtk:queryDef -schema biedt methoden om databasequery's te maken en uit te voeren. Met NLWS.xtkQueryDef.create() kunt u query's samenstellen met JSON- of XML-syntaxis.
Beschikbare verrichtingen:
select- Meerdere records ophalenget- Eén record ophalen (SQLLIMIT 1)getIfExists- Eén record ophalen, null retourneren als deze niet is gevondencount- Records tellen die aan de criteria voldoen
Leer meer over methodes queryDef in de documentatie van JSAPI van de Campagne .
Query uitvoeren met JSON query-json
Gebruik NLWS.xtkQueryDef.create() om query's samen te stellen met JSON-syntaxis. Met de bewerking get wordt één record opgehaald (SQL LIMIT 1 ), terwijl select meerdere records ophaalt.
krijg één enkele ontvanger:
var email = "contact@example.com";
var query = NLWS.xtkQueryDef.create({
queryDef: {
schema: "nms:recipient",
operation: "get", // "get" does a SQL "LIMIT 1"
select: {
node: [{expr: "@id"}, {expr: "@email"}, {expr: "@firstName"}]
},
where: {
condition: [
{expr: "@email = '" + email + "'"}, // filter by email
],
}
}
});
var res = query.ExecuteQuery();
// res is an XML object such as <recipient id="1234" email="contact@example.com" firstName="John"/>
var recipient = NLWS.nmsRecipient.load(res.$id); // conversion to a JavaScript object
recipient.email = "newemail@example.com";
recipient.save();
Gebruik getIfExists om uitzonderingen te vermijden:
Als de record mogelijk niet bestaat, gebruikt u operation: "getIfExists" in plaats van get om uitzonderingen te voorkomen:
var query = NLWS.xtkQueryDef.create({
queryDef: {
schema: "nms:recipient",
operation: "getIfExists",
select: { node: [{expr: "@id"}] },
where: {
condition: [{expr: "@email = 'nonexistent@example.com'"}]
}
}
});
var res = query.ExecuteQuery();
if (res) {
logInfo("Recipient found: " + res.$id);
} else {
logInfo("Recipient not found");
}
Meerdere records selecteren select-multiple
Gebruik de bewerking select om meerdere records op te halen. U kunt voorwaarden, opdracht geven tot, en grenzen toevoegen.
de werkschema's van de Vraag met filters en het opdracht geven tot:
var query = NLWS.xtkQueryDef.create({
queryDef: {
schema: "xtk:workflow",
operation: "select",
select: {
node: [
{expr: "@id"},
{expr: "@label"},
{expr: "@internalName"}
]
},
where: {
condition: [
{expr: "[folder/@name]='nmsTechnicalWorkflow'"},
{expr: "@production = 1"}
]
},
orderBy: {
node: {expr: "@internalName", sortDesc: "false"}
}
}
});
var res = query.ExecuteQuery();
var workflows = res.getElementsByTagName("workflow");
for each (var w in workflows) {
logInfo(w.getAttribute("internalName"));
}
de leveringen van de Vraag met de syntaxis van XML:
var q = NLWS.xtkQueryDef.create(
<queryDef schema="nms:delivery" operation="select" lineCount="3">
<select>
<node expr="@id"/>
<node expr="@label"/>
<node expr="@created"/>
</select>
<where>
<condition expr="@label NOT LIKE '%Proof%'" bool-operator="AND"/>
<condition expr="@created <= '2024-12-01'" bool-operator="AND"/>
</where>
<orderBy>
<node expr="@lastModified" sortDesc="true"/>
</orderBy>
</queryDef>
);
var deliveries = q.ExecuteQuery();
for each(var delivery in deliveries.delivery) {
logInfo(delivery.@id + ": " + delivery.@label);
}
- Standaardlimiet varieert per context (doorgaans 200-10.000 records)
- Gebruik
lineCountom het maximale aantal resultaten expliciet in te stellen - Voor grote datasets (>1000 verslagen), gebruik werkschema's in plaats van queryDef. Workflows zijn ontworpen om miljoenen rijen efficiënt te verwerken.
Leer meer over ExecuteQuery en vraag beste praktijken .
Overgangsgegevens van querywerkstroom workflow-transition-data
Wanneer u werkt met JavaScript-activiteiten in workflows, kunt u query's uitvoeren op gegevens van binnenkomende overgangen met vars.targetSchema en vars.tableName .
de ontvankelijke gegevens van de Vraag van een werkschemaovergang:
// Query data from the incoming transition
var query = NLWS.xtkQueryDef.create({
queryDef: {
schema: vars.targetSchema, // The schema from the previous activity
operation: 'select',
lineCount: 999999999, // Override default 10,000 limit
select: {
node: [
{expr: '@id'},
{expr: '@email'},
{expr: '@firstName'},
{expr: '@lastName'}
]
},
}
});
var records = query.ExecuteQuery(); // Returns a DOMElement
for each(var record in records.getElements()) {
logInfo("Processing: " + record.$id + " - " + record.$email);
// Clean email address
var cleanedEmail = record.$email.replace(/\s+/g, '').toLowerCase();
// Update using parameterized query to prevent SQL injection
sqlExec(
"UPDATE " + vars.tableName + " SET sEmail=$(sz) WHERE iId=$(l)",
cleanedEmail,
record.$id
);
}
$(sz) voor tekenreeksen en $(l) voor gehele getallen om SQL-injectiekwetsbaarheden te voorkomen. Leer meer in de documentatie van JSAPI van de Campagne .Records tellen count-records
Gebruik Count(@id) met een alias om records te tellen.
Aantal lopende hypothesen:
var jobCount = NLWS.xtkQueryDef.create(
<queryDef schema="nms:remaHypothesis" operation="get">
<select>
<node expr="Count(@id)" alias="@count"/>
</select>
<where>
<condition expr={"@status=" + HYPOTHESIS_STATUS_RUNNING}/>
</where>
</queryDef>
);
var iJobCount = parseInt(jobCount.ExecuteQuery().@count);
logInfo("Running jobs: " + iJobCount);
Telling met veelvoudige voorwaarden:
var xmlQuery = <queryDef schema="nms:trackingLogRcp" operation="select">
<select>
<node expr="DateOnly(@logDate)" groupBy="1"/>
<node expr="count(@id)" alias="@count"/>
<node expr="countDistinct([@broadLog-id])" alias="@distinctCount"/>
</select>
<where>
<condition expr={"@logDate IS NOT NULL AND @logDate < #" + today + "# AND [@url-id] <> 1"}/>
</where>
</queryDef>;
var result = NLWS.xtkQueryDef.create(xmlQuery).ExecuteQuery();
Verdeling van waarden distribution-values
Hiermee wordt de verdeling van waarden voor een bepaald veld opgehaald. Dit is handig voor het analyseren van gegevenspatronen.
Distributie van landcodes:
/**
* @class DistributionOfValues
* @param {string} schema - The schema name (e.g., 'nms:recipient')
* @param {string} field - The field to analyze (e.g., '@country')
*/
function DistributionOfValues(schema, field) {
this.queryDef = {
operation: 'select',
lineCount: 200,
schema: schema,
select: {
node: [
{alias: '@expr', expr: field, groupBy: 'true', noSqlBind: 'true'},
{alias: '@count', expr: 'COUNT()', label: 'Count'},
]
},
orderBy: {
node: [{expr: 'COUNT()', sortDesc: 'true'}]
},
};
/**
* Execute the query and return results
* @return {Array} XML list of results
*/
this.get = function() {
this.results = NLWS.xtkQueryDef.create({queryDef: this.queryDef}).ExecuteQuery();
return this.results.getElements();
};
}
// Usage example
var d = new DistributionOfValues('nms:recipient', '@country');
// Optional: Add additional filters
d.queryDef.where = {
condition: [{expr: 'DateOnly(@created) = #2024-12-01#'}]
};
// Execute and display results
for each(var result in d.get()) {
logInfo(result.$expr + ': ' + result.$count);
}
Opsommingen query met analyse analyze-enumerations
De optie analyze retourneert gebruikersvriendelijke namen voor opsommingswaarden. In plaats van alleen numerieke waarden retourneert Campaign ook de tekenreekswaarde en het label met de achtervoegsels "Naam" en "Label".
levering van de Vraag afbeelding met opsommingsanalyse:
var query = NLWS.xtkQueryDef.create({
queryDef: {
schema: "nms:deliveryMapping",
operation: "get",
select: {
node: [
{expr: "@id"},
{expr: "@name"},
{expr: "[storage/@exclusionType]", analyze: true} // Analyze enumeration
]
},
where: {
condition: [{expr: "@name='mapRecipient'"}]
}
}
});
var mapping = query.ExecuteQuery();
// Result includes:
// - exclusionType: 2 (numeric value)
// - exclusionTypeName: "excludeRecipient" (string value)
// - exclusionTypeLabel: "Exclude recipient" (display label)
logInfo("Type: " + mapping.$exclusionType);
logInfo("Name: " + mapping.$exclusionTypeName);
logInfo("Label: " + mapping.$exclusionTypeLabel);
Leer meer over analyseer optie .
Paginering pagination
Gebruik lineCount en startLine om door grote resultaatsets te pagineren.
wint verslagen in pagina's terug:
// Get records 3 and 4 (skip first 2)
var query = NLWS.xtkQueryDef.create({
queryDef: {
schema: "nms:recipient",
operation: "select",
lineCount: 2, // Number of records per page
startLine: 2, // Starting position (0-indexed)
select: {
node: [
{expr: "@id"},
{expr: "@email"}
]
},
orderBy: {
node: [{expr: "@id"}] // Critical: Always use orderBy for pagination
}
}
});
var recipients = query.ExecuteQuery();
orderBy clausule, zijn de vraagresultaten niet gewaarborgd om in een verenigbare orde te zijn. Volgende aanroepen kunnen verschillende pagina's of dubbele records retourneren. Neem altijd een orderBy op wanneer u paginering gebruikt.Leer meer over paginering .
Dynamische queryconstructie dynamic-queries
Bouw vragen dynamisch door voorwaarden programmatically toe te voegen.
voegt voorwaarden aan een bestaande vraag toe:
var xmlQuery = <queryDef schema="nms:delivery" operation="select">
<select>
<node expr="@id"/>
<node expr="@label"/>
</select>
<where/>
</queryDef>;
// Dynamically add conditions
if (includeProofs) {
xmlQuery.where.appendChild(
<condition expr="@label LIKE '%Proof%'"/>
);
}
if (startDate) {
xmlQuery.where.appendChild(
<condition expr={"@created >= #" + Format.toISO8601(startDate) + "#"}/>
);
}
var result = NLWS.xtkQueryDef.create(xmlQuery).ExecuteQuery();
bouwt uitgezocht en waar clausules in lijnen:
// Build select dynamically
var select = <select/>;
var fields = ["@id", "@label", "@created"];
for each(var field in fields) {
select.appendChild(<node expr={field}/>);
}
// Build where dynamically
var where = <where/>;
var conditions = [
"@status = 1",
"@type = 'email'"
];
for each(var condition in conditions) {
where.appendChild(<condition expr={condition}/>);
}
// Create complete query
var xmlQuery = <queryDef operation="select" schema="nms:delivery"/>;
xmlQuery.appendChild(select);
xmlQuery.appendChild(where);
var result = NLWS.xtkQueryDef.create(xmlQuery).ExecuteQuery();
Geavanceerde queryDef-methoden advanced-methods
Buiten ExecuteQuery() biedt queryDef verschillende gespecialiseerde methoden voor geavanceerde gebruiksgevallen.
BuildQuery - SQL genereren zonder uitvoeren build-query
Gebruik BuildQuery() om de SQL-instructie te genereren zonder deze uit te voeren. Dit is nuttig voor het zuiveren, registreren, of het overgaan van vragen aan externe systemen.
var query = NLWS.xtkQueryDef.create(
<queryDef schema="nms:recipient" operation="select">
<select>
<node expr="@id"/>
<node expr="@email"/>
</select>
<where>
<condition expr="@email IS NOT NULL"/>
</where>
</queryDef>
);
// Get the generated SQL
var sql = query.BuildQuery();
logInfo("Generated SQL: " + sql);
// Output: "SELECT iRecipientId, sEmail FROM NmsRecipient WHERE sEmail IS NOT NULL"
Leer meer over BuildQuery .
BuildQueryEx - SQL ophalen met indelingstekenreeks build-query-ex
BuildQueryEx() retourneert zowel de SQL-query als een indelingstekenreeks die compatibel is met de functie sqlSelect() .
var query = NLWS.xtkQueryDef.create(
<queryDef schema="nms:recipient" operation="select">
<select>
<node expr="@id"/>
<node expr="@email"/>
<node expr="@firstName"/>
</select>
</queryDef>
);
var [sql, format] = query.BuildQueryEx();
logInfo("SQL: " + sql);
logInfo("Format: " + format);
// Use with sqlSelect
var results = sqlSelect(format, sql);
Leer meer over BuildQueryEx .
Alles selecteren - Alle velden toevoegen om te selecteren select-all
De methode SelectAll() voegt automatisch alle velden van het schema toe aan de selectieclausule, zodat u niet elk veld handmatig hoeft weer te geven.
var query = NLWS.xtkQueryDef.create(
<queryDef schema="nms:recipient" operation="select">
<select/>
<where>
<condition expr="@id = 12345"/>
</where>
</queryDef>
);
// Add all fields to the select
query.SelectAll(false);
var result = query.ExecuteQuery();
// Result contains all recipient fields
Leer meer over SelectAll .
Bijwerken - Update-records voor massa mass-update
Met de methode Update() kunt u massa-updates uitvoeren op records die voldoen aan uw querycriteria zonder elke record afzonderlijk te laden.
// Mass update example: set a field value for all matching records
var updateQuery = NLWS.xtkQueryDef.create({
queryDef: {
schema: "nms:recipient",
operation: "update",
where: {
condition: [{expr: "@country = 'US'"}]
},
set: {
node: [{expr: "@blackList", value: "0"}]
}
}
});
// Execute mass update
updateQuery.Update();
logInfo("Mass update completed");
Leer meer over Update .
GetInstanceFromModel - Query-sjablooninstanties get-instance-from-model
Gebruik GetInstanceFromModel() om gegevens op te halen uit instanties die zijn gemaakt van sjablonen.
var query = NLWS.xtkQueryDef.create(
<queryDef schema="nms:delivery" operation="select">
<select>
<node expr="@id"/>
<node expr="@label"/>
</select>
<where>
<condition expr="@isModel = 1"/>
</where>
</queryDef>
);
// Get instance data from template
var instance = query.GetInstanceFromModel("nms:delivery");
Leer meer over GetInstanceFromModel .
Batchbewerkingen batch-operations
Verwerk meerdere records in batch om de prestaties te verbeteren.
de etiketten van de updatelevering van de Partij:
// Query all deliveries to update
var query = NLWS.xtkQueryDef.create({
queryDef: {
schema: vars.targetSchema,
operation: 'select',
lineCount: 999999999,
select: {
node: [{expr: '@id'}]
},
where: {
condition: [{expr: "@label LIKE '%OLD%'"}]
}
}
});
var records = query.ExecuteQuery();
// Process each record
for each(var record in records.getElements()) {
var delivery = NLWS.nmsDelivery.load(record.$id);
var oldLabel = delivery.label.toString();
var newLabel = oldLabel.replace(/OLD/g, 'NEW');
logInfo("Updating: " + oldLabel + " => " + newLabel);
delivery.label = newLabel;
delivery.save();
}
logInfo("Updated " + records.getElements().length + " deliveries");
Onbewerkte SQL-uitvoering raw-sql
Voor complexe bewerkingen kunt u onbewerkte SQL rechtstreeks uitvoeren.
Uitvoeren geparametereerde SQL:
var dbEngine = instance.engine;
// Using parameterized query (recommended)
dbEngine.exec(
"UPDATE NmsUserAgentStats SET iVisitorsOfTheDay=$(l) WHERE tsDate=$(dt)",
visitorCount,
Format.parseDateTimeInter(dateString)
);
Vraag met sqlSelect:
// Execute SELECT query and parse results
var xml = sqlSelect(
"collection,@id,@email",
"SELECT iId as id, sEmail as email FROM " + vars.tableName + " WHERE iStatus = 1"
);
logInfo(xml.toXMLString()); // "<select><collection id="1" email="..."/></select>"
for each(var record in xml.collection) {
logInfo('ID: ' + record.@id + ', Email: ' + record.@email);
// Load full object if needed
if (vars.targetSchema == "nms:recipient") {
var recipient = NLWS.nmsRecipient.load(record.@id);
recipient.lastName = recipient.lastName.toUpperCase();
recipient.save();
}
}
- Gebruikersinvoer altijd valideren en ontsmetten
- Gebruik geparametereerde query's met
$(sz),$(l),$(dt)enz. - Ben zich bewust van de verschillen tussen de lokale en wolkengegevensbestanden in plaatsingen FFDA
Best practices best-practices
Bij het werken met queryDef- en NLWS-methoden:
- werkschema's van het Gebruik voor grote datasets - QueryDef wordt niet ontworpen voor de verwerking van high-volume gegevens. Voor datasets met meer dan 1.000 verslagen, gebruikwerkschema's die miljoenen rijen efficiënt kunnen behandelen. Leer meer in de documentatie van SDK van de Campagne
- Gebruik de parameters bepaalde vragen - gebruik altijd gebonden parameters (
$(sz),$(l)) metsqlExecom SQL injectie te verhinderen - vastgestelde expliciete grenzen - Gebruik
lineCountom resultaatgrootte te controleren. De standaardlimieten van de campagne variëren per context (200-10.000 records) - Gebruik orderBy met paginering - omvat altijd een
orderByclausule wanneer het gebruikenstartLineenlineCountom verenigbare paginering te verzekeren - getIfExists van het Gebruik - Gebruik
operation: "getIfExists"wanneer de verslagen niet zouden kunnen bestaan om uitzonderingen te vermijden - Analyseer van het Gebruik voor opsommingen - voeg
analyze: truetoe om knopen te selecteren om gebruikersvriendelijke opsommingsnamen en etiketten te krijgen - optimaliseer vragen - voeg aangewezen
wherevoorwaarden toe om resultaatreeksen te beperken - verwerking van de Partij - de veelvoudige verslagen in partijen verwerken om geheugenkwesties en onderbrekingen te vermijden
- bewustzijn FFDA - In de plaatsingen van de Onderneming (FFDA) , ben zich ervan bewust dat Campaign met twee gegevensbestanden werkt
Praktische gebruiksgevallen use-cases
Foutopsporing en logboekquery's debug-queries
Gebruik BuildQuery() om de gegenereerde SQL te inspecteren voordat deze wordt uitgevoerd:
var query = NLWS.xtkQueryDef.create({
queryDef: {
schema: "nms:recipient",
operation: "select",
select: { node: [{expr: "@id"}, {expr: "@email"}] },
where: { condition: [{expr: "@blackList = 0"}] }
}
});
// Log the SQL for debugging
var sql = query.BuildQuery();
logInfo("About to execute: " + sql);
// Now execute
var results = query.ExecuteQuery();
Een record dupliceren met SelectAll duplicate-record
Met SelectAll() kunt u alle velden kopiëren tijdens het dupliceren van records:
// Query the original record
var query = NLWS.xtkQueryDef.create(
<queryDef schema="nms:delivery" operation="get">
<select/>
<where>
<condition expr="@id = 12345"/>
</where>
</queryDef>
);
// Select all fields for duplication
query.SelectAll(true); // true indicates duplication mode
var original = query.ExecuteQuery();
// Create a new delivery from the original
var newDelivery = NLWS.nmsDelivery.create(original);
newDelivery.label = original.@label + " (Copy)";
newDelivery.save();
Valideren vóór update van massa validate-mass-update
Altijd de betreffende records voorvertonen voordat u massa-updates uitvoert:
// Step 1: Preview what will be updated
var previewQuery = NLWS.xtkQueryDef.create({
queryDef: {
schema: "nms:recipient",
operation: "select",
select: { node: [{expr: "@id"}, {expr: "@email"}] },
where: { condition: [{expr: "@country = 'US' AND @blackList = 1"}] }
}
});
var preview = previewQuery.ExecuteQuery();
var count = preview.getElementsByTagName("recipient").length;
logInfo("About to update " + count + " recipients");
// Step 2: If count looks correct, proceed with mass update
if (count > 0 && count < 10000) {
sqlExec("UPDATE NmsRecipient SET iBlackList = 0 WHERE sCountryCode = 'US' AND iBlackList = 1");
logInfo("Mass update completed for " + count + " recipients");
} else {
logWarning("Update cancelled: count is " + count);
}
Overzicht van de querydefinitiesyntaxis querydef-reference
Volledige structuur van het object queryDef :
{
queryDef: {
schema: 'nms:recipient', // Required: target schema
operation: 'select', // select|get|getIfExists|count
lineCount: 100, // Maximum records to return
startLine: 0, // Offset for pagination
select: {
node: [
{
expr: '@id', // XPath expression
alias: '@myAlias', // Optional alias
label: 'ID', // Optional label
groupBy: 'true', // Group by this field
noSqlBind: 'true' // No SQL binding on constants
}
]
},
where: {
condition: [
{
expr: '@email IS NOT NULL', // Condition expression
boolOperator: 'AND', // AND|OR
setOperator: 'EXISTS', // EXISTS|NOT EXISTS|IN|NOT IN
enabledIf: '', // Enabling condition
ignore: false, // Ignore this condition
sql: '', // Native SQL expression
'filter-name': '' // Predefined filter name
}
]
},
orderBy: {
node: [
{
expr: '@lastModified', // Field to sort by
sortDesc: 'true' // true for DESC, false for ASC
}
]
},
groupBy: {
node: [
{expr: '@country'} // Group by field
]
}
}
}