Voorbeelden van JavaScript-code in workflows javascript-in-workflows
Deze voorbeelden laten zien hoe u JavaScript-code in een workflow kunt gebruiken:
Meer informatie over statische en niet-statische SOAP-methoden.
In deze voorbeelden wordt de extensie ECMAScript for XML (E4X) gebruikt. Met deze extensie kunt u JavaScript-aanroepen en XML-primitieven combineren in hetzelfde script.
Voer de volgende stappen uit om deze voorbeelden uit te proberen:
-
Maak een workflow en voeg deze activiteiten toe aan de workflow:
- Startactiviteit
- JavaScript-codeactiviteit
- Eindactiviteit
Meer informatie over workflows maken.
-
Voeg de JavaScript-code toe aan een activiteit. Meer informatie.
-
Sla de workflow op.
-
Test de voorbeelden:
- Start de workflow. Meer informatie.
- Open het dagboek. Meer informatie.
Voorbeeld 1: schrijven naar de database write-example
Als u naar de database wilt schrijven, kunt u de statische Write
op de xtk:session
schema:
-
Stel een schrijfverzoek in XML samen.
-
Schrijf de record:
-
Roep de
Write
op dextk:session
schema.note important IMPORTANT Als u Adobe Campaign v8 gebruikt, raden we u aan om het faseringsmechanisme te gebruiken met het Inname en Gegevens bijwerken/verwijderen API's voor de Write
in een tabel met Snowflaken. Meer informatie. -
Geef de XML-code door als een argument voor de schrijfaanvraag.
-
Stap 1: stel een schrijfverzoek samen
U kunt records toevoegen, bijwerken en verwijderen.
Een record invoegen
Omdat de insert
bewerking is de standaardbewerking, u hoeft deze niet op te geven.
Geef deze informatie op als XML-kenmerken:
- Het schema van de tabel die moet worden gewijzigd
- De tabelvelden die moeten worden ingevuld
Voorbeeld:
var myXML = <recipient xtkschema="nms:recipient"
firstName="Isabel"
lastName="Garcia"
email="isabel.garcia@mycompany.com"/>
Een record bijwerken
Gebruik de _update
-bewerking. Meer informatie.
Geef deze informatie op als XML-kenmerken:
- Het schema van de tabel die moet worden gewijzigd
- De tabelvelden die moeten worden bijgewerkt
- Het sleutelargument dat wordt vereist om het bij te werken record te identificeren
Voorbeeld:
var myXML = <recipient xtkschema="nms:recipient"
status="Client"
email="isabel.garcia@mycompany.com"
operation="_update"
_key="@email"/>
Een record verwijderen
Gebruik de DeleteCollection
methode. Meer informatie.
Geef deze informatie op:
- Het schema van de tabel die moet worden gewijzigd
- De
where
clausule die vereist is om de bij te werken record te identificeren, in de vorm van een XML-element
Voorbeeld:
xtk.session.DeleteCollection(
"nms:recipient",
<where>
<condition expr="[@email] = 'isabel.garcia@mycompany.com'"/>
</where>,
false
)
Stap 2: de record schrijven
Roep niet-statisch Write
op de xtk:session
schema:
xtk.session.Write(myXML)
Er wordt geen waarde geretourneerd voor deze methode.
Voeg de volledige code toe aan een JavaScript-codeactiviteit in de workflow:
var myXML = <recipient xtkschema="nms:recipient"
firstName="Isabel"
lastName="Garcia"
email="isabel.garcia@mycompany.com"/>
xtk.session.Write(myXML)
In deze video wordt getoond hoe u naar de database kunt schrijven:
Voorbeeld 2: de database opvragen read-example
Als u een query op de database wilt uitvoeren, kunt u de xtk:queryDef
instantiemethode:
- Stel een vraag in XML samen.
- Maak een queryobject.
- Voer de query uit.
Stap 1: stel een query samen
De XML-code voor een queryDef
entiteit.
Syntaxis:
<queryDef schema="nms:recipient" operation="">
<!-- select, where, and orderBy clauses as XML elements -->
</queryDef>
Geef deze informatie op:
- Het schema van de te lezen tabel
- De bewerking
- De kolommen die moeten worden geretourneerd, in een
select
clausule - De voorwaarden, in
where
clausule - De filtercriteria, in een
orderBy
clausule
U kunt de volgende bewerkingen gebruiken:
select
getIfExists
get
count
count
kenmerk.Schrijf de select
, where
, en orderBy
clausules als XML-elementen:
-
select
clausuleGeef op welke kolommen moeten worden geretourneerd. Als u bijvoorbeeld de voornaam en achternaam van de persoon wilt selecteren, schrijft u de volgende code:
code language-xml <select> <node expr="@firstName"/> <node expr="@lastName"/> </select>
Met de
nms:recipient
schema, worden de elementen in de volgende vorm geretourneerd:code language-xml <recipient firstName="Bo" lastName="Didley"/>
-
where
clausuleAls u voorwaarden wilt opgeven, gebruikt u een
where
clausule. Als u bijvoorbeeld de records wilt selecteren die zich in het dialoogvenster Training map, kunt u deze code schrijven:code language-xml <where> <condition expr="[folder/@label]='Training'"/> </where>
Wanneer u meerdere expressies combineert, gebruikt u de Booleaanse operator in de eerste expressie. Als u bijvoorbeeld alle personen wilt selecteren met de naam Isabel Garcia, kunt u de volgende code schrijven:
code language-xml <condition boolOperator="AND" expr="@firstName='Isabel'"/> <condition expr="@lastName='Garcia'"/>
-
orderBy
clausuleAls u de resultaatset wilt sorteren, geeft u de opdracht
orderBy
clausule als element van XML metsortDesc
kenmerk. Als u bijvoorbeeld de achternamen in oplopende volgorde wilt sorteren, kunt u de volgende code schrijven:code language-xml <orderBy> <node expr="@lastName> sortDesc="false"/> </orderBy>
Stap 2: een queryobject maken
Als u een entiteit wilt maken op basis van de XML-code, gebruikt u de opdracht create(
content
)
methode:
var query = xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="select">
…
</queryDef>)
Voorvoegsel create(
content
)
methode met het schema van de te creëren entiteit.
De content
argument is een string argument en is optioneel. Dit argument bevat de XML-code die de entiteit beschrijft.
Stap 3: voer de query uit
Voer de volgende stappen uit:
-
Roep de
ExecuteQuery
op dequeryDef
entiteit:code language-javascript var res = query.ExecuteQuery()
-
De resultaten verwerken:
- De resultaten van de
select
bewerking, met behulp van een lusconstructie. - Test de resultaten met de
getIfExists
-bewerking. - Telling de resultaten met de opdracht
count
-bewerking.
- De resultaten van de
Resultaten van een select
bewerking
Alle overeenkomsten worden geretourneerd als een verzameling:
<recipient-collection>
<recipient email="jane.smith@mycompany.com">
<recipient email="john.harris@mycompany.com">
</recipient-collection>
Als u de resultaten wilt doorlopen, gebruikt u de opdracht for each
lus:
for each (var rcp in res:recipient)
logInfo(rcp.@email)
De lus bevat een variabele voor lokale ontvangers. Voor elke ontvanger die in de inzameling van ontvangers is teruggekeerd, wordt de e-mail van de ontvanger gedrukt. Meer informatie over de logInfo
functie.
Resultaten van een getIfExists
bewerking
Elke overeenkomst wordt geretourneerd als een element:
<recipient id="52,378,079">
Als er geen gelijke is, dan is een leeg element teruggekeerd:
<recipient/>
U kunt verwijzen naar de primaire-sleutelknoop-bijvoorbeeld, @id
kenmerk:
if (res.@id !=undefined)
{ // match was found
…
}
Resultaat van get
bewerking
Eén overeenkomst wordt geretourneerd als een element:
<recipient id="52,378,079">
Als er geen overeenkomst is, wordt een fout geretourneerd.
get
-bewerking. Gebruik anders de opdracht getIfExists
-bewerking. Als u deze beste praktijken gebruikt, dan tonen de fouten onverwachte problemen. Als u het get
bewerking, gebruik de opdracht try…catch
instructie. Het probleem wordt afgehandeld door het foutafhandelingsproces van de workflow.Resultaat van count
bewerking
Een element met de count
attribute is returned:
<recipient count="200">
Raadpleeg de @count
kenmerk:
if (res.@count > 0)
{ // matches were found
…
}
Voor de select
bewerking, voeg deze code toe aan een JavaScript-code-activiteit in de workflow:
var myXML =
<queryDef schema="nms:recipient" operation="select">
<select>
<node expr="@firstName"/>
<node expr="@lastName"/>
</select>
</queryDef>
var query = xtk.queryDef.create(myXML)
var res = query.ExecuteQuery()
for each (var rcp in res.recipient)
logInfo(rcp.@firstName + " " + rcp.@lastName)
Omdat de select
bewerking is de standaardbewerking, u hoeft deze niet op te geven.
In deze video wordt getoond hoe u van de database kunt lezen:
Een workflow activeren trigger-example
U kunt werkstromen programmatically, bijvoorbeeld, in technische werkschema's of aan procesinformatie teweegbrengen die een gebruiker op een pagina van de Webtoepassing is ingegaan.
Workflowactivering werkt door het gebruik van gebeurtenissen. U kunt deze functies voor gebeurtenissen gebruiken:
- Als u een gebeurtenis wilt posten, kunt u de statische
PostEvent
methode. Meer informatie. - Als u een gebeurtenis wilt ontvangen, kunt u de External signal activiteit. Meer informatie.
U kunt workflows op verschillende manieren activeren:
-
U kunt een workflow inline activeren, dat wil zeggen vanuit het hoofdscript van een JavaScript code activiteit.
-
U kunt een workflow activeren als een andere bewerking is voltooid:
-
Voeg een initialisatiescript aan toe End activiteit van de initiële workflow.
-
Voeg de External signal activiteit aan het begin van de doelworkflow.
Na voltooiing van de initiële workflow wordt een gebeurtenis gepost. De uitgaande overgang wordt geactiveerd en de gebeurtenisvariabelen worden gevuld. De gebeurtenis wordt vervolgens ontvangen door de doelworkflow.
note tip TIP Als beste praktijk, wanneer u een manuscript aan een activiteit toevoegt, neem de activiteitennaam in dubbele koppeltekens op, bijvoorbeeld -- end --
. Meer informatie over best practices voor workflows.
-
Syntaxis van de PostEvent
methode:
PostEvent(
String //ID of the target workflow
String //Name of the target activity
String //Name of the transition to be activated in case of multiple transitions
XML //Event parameters, in the <variables/> element
Boolean //To trigger the target workflow only once, set this parameter to true.
)
In dit voorbeeld wordt na voltooiing van de workflow een korte tekst doorgegeven aan de signaal van de wkfExampleReceiver workflow:
var strLabel = "Adobe Campaign, Marketing that delivers"
xtk.workflow.PostEvent(
"wkfExampleReceiver",
"signal",
"",
<variables strLine={strLabel}/>,
false)
Omdat de laatste parameter is ingesteld op false
de wkfExampleReceiver elke keer dat de initiële workflow wordt voltooid, wordt een workflow gestart.
Houd rekening met de volgende beginselen wanneer u workflows activeert:
- De
PostEvent
wordt asynchroon uitgevoerd. Het bevel wordt geplaatst op de serverrij. De methode wordt geretourneerd nadat de gebeurtenis is gepost. - De doelworkflow moet worden gestart. Anders wordt een fout naar het logbestand geschreven.
- Als de doelworkflow wordt onderbroken, wordt de
PostEvent
wordt in een wachtrij geplaatst totdat de workflow wordt hervat. - De getriggerde activiteit vereist niet dat een taak wordt uitgevoerd.
In deze video wordt getoond hoe u statische API-methoden kunt gebruiken:
In deze video wordt getoond hoe workflows kunnen worden geactiveerd:
Interactie met de database interact-example
Deze voorbeelden laten zien hoe u deze handelingen uitvoert:
- Gebruik de
get
encreate
methoden op schema's voor het gebruik van niet-statische SOAP-methoden - Methoden maken die SQL-query's uitvoeren
- Gebruik de
write
methode voor het invoegen, bijwerken en verwijderen van records
Voer de volgende stappen uit:
-
Definieer de query:
- Een entiteit ophalen met de opdracht
create
methode op het overeenkomstige schema, bijvoorbeeldxtk:workflow
schema. Meer informatie. - Gebruik de
queryDef
om een SQL-query uit te geven.
- Een entiteit ophalen met de opdracht
-
Voer de query uit met de
ExecuteQuery
methode. Meer informatie.Gebruik de
for each
om de resultaten op te halen.
Syntaxis van de queryDef
methode met een select
clausule
<queryDef schema="schema_key" operation="operation_type">
<select>
<node expr="expression1">
<node sql="expression2">
</select>
<where>
<condition expr="expression1"/>
<condition sql="expression2"/>
</where>
<orderBy>
<node expr="expression1">
<node sql="expression2">
</orderBy>
<groupBy>
<node expr="expression1">
<node sql="expression2">
</groupBy>
<having>
<condition expr="expression1"/>
<condition sql="expression2"/>
</having>
</queryDef>
Create
methode
Voorbeeld 1: selecteer records en schrijf naar het journaal
De interne namen van de workflows die zich in de wfExamples is geselecteerd. De resultaten worden gesorteerd op interne naam, in oplopende volgorde, en naar het dagboek geschreven.
var query = xtk.queryDef.create(
<queryDef schema="xtk:workflow" operation="select">
<select>
<node expr="@internalName"/>
</select>
<where>
<condition expr="[folder/@name]='wfExamples'"/>
</where>
<orderBy>
<node expr="@internalName" sortDesc="false"/>
</orderBy>
</queryDef>
)
var res = query.ExecuteQuery()
for each (var w in res.workflow)
logInfo(w.@internalName)
Voorbeeld 2: records verwijderen
De voornaam, de achternaam, het e-mailbericht en de id van alle ontvangers met de naam Chris Smith worden geselecteerd. De resultaten worden gesorteerd per e-mail, in oplopende volgorde, en geschreven aan het dagboek. A delete
Deze bewerking wordt gebruikt om de geselecteerde records te verwijderen.
// Build the query, create a query object and hold the object in a variable
var query = xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="select">
<select>
<node expr="@firstName"/>
<node expr="@lastName"/>
<node expr="@email"/>
<node expr="@id"/>
</select>
<where>
<condition expr="[folder/@label]='Recipients'"/>
<condition expr="[@lastName]='Smith'"/>
<condition expr="[@firstName]='Chris'"/>
</where>
<orderBy>
<node expr="@email" sortDesc="false"/>
</orderBy>
</queryDef>
)
//Run the query using the ExecuteQuery method against the created object
var res = query.ExecuteQuery()
//Loop through the results, print out the person's name and email, then delete the records
for each (var rec in res.recipient)
{
logInfo("Delete record = Email: " + rec.@email + ', ' + rec.@firstName + ' ' + rec.@lastName)
xtk.session.Write(<recipient xtkschema="nms:recipient" _operation="delete" id={rec.@id}/>)
}
Voorbeeld 3: selecteer records en schrijf naar het tijdschrift
In dit voorbeeld wordt een niet-statische methode gebruikt. Het e-mail- en geboortejaar van alle ontvangers waarvan de gegevens in het 1234 en de map waarvan de e-maildomeinnaam begint met "adobe" zijn geselecteerd. De resultaten worden gesorteerd op geboortedatum in aflopende volgorde. De e-mail van de ontvangers wordt geschreven aan het dagboek.
var query = xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="select">
<select>
<node expr="@email"/>
<node sql="sEmail"/>
<node expr="Year(@birthDate)"/>
</select>
<where>
<condition expr="[@folder-id] = 1234 and @domain like 'adobe%'"/>
<condition sql="iFolderId = 1234 and sDomain like 'adobe%'"/>
</where>
<orderBy>
<node expr="@birthDate" sortDesc="true"/>
</orderBy>
</queryDef>
)
var res = query.ExecuteQuery()
for each (var w in res.recipient)
logInfo(w.@email)
Write
methode
U kunt records invoegen, bijwerken en verwijderen. U kunt de Write
in Adobe Campaign. Omdat deze methode statisch is, hoeft u geen object te maken. U kunt de volgende bewerkingen gebruiken:
-
De
update
bewerking -
De
insertOrUpdate
met de_key
argument om de bij te werken record te identificerenAls u geen Ontvangers als er een overeenkomst bestaat, wordt de record in elke submap bijgewerkt. Anders wordt de record in de hoofdmap gemaakt Ontvangers map.
-
De
delete
bewerking
Write
in een tabel met Snowflaken. Meer informatie.Voorbeeld 1: een record invoegen of bijwerken
xtk.session.Write(
<recipient
xtkschema="nms:recipient"
_operation="insertOrUpdate" _key="@email"
lastName="Lennon"
firstName="John"
email="johnlennon@thebeatles.com"
/>
)
Voorbeeld 2: records verwijderen
In dit voorbeeld worden een statische methode en een niet-statische methode gecombineerd.
var query=xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="select">
<select>
<node expr="@Id"/>
</select>
<where>
<condition expr="[@email]='johnlennon@thebeatles.com'"/>
</where>
</queryDef>
);
var res = query.ExecuteQuery()
for each (var w in res.recipient) {
xtk.session.Write(
<recipient xtkschema="nms:recipient" _operation="delete" id={w.@id}/>
);
}
In deze video wordt getoond hoe u niet-statische API-methoden kunt gebruiken:
In deze video ziet u een voorbeeld van het gebruik van een niet-statische API-methode in een workflow: