Script execution processor
Core v2.2.0
The processor enables execution of arbitrary code in multiple scripting
languages. This is essential for complex data transformations, arithmetic operations,
API calls, conditional logic, and any processing that's difficult to express in pure XML.
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://org.webharvest/schema/2.1/core">
<def var="price" value="99.99"/>
<def var="quantity" value="5"/>
<def var="total">
<script language="javascript">
<![CDATA[
var price = parseFloat(context.getVar("price").toString());
var qty = parseInt(context.getVar("quantity").toString());
price * qty; // Returns: 499.95
]]>
</script>
</def>
</config>
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://org.webharvest/schema/2.1/core">
<def var="email" value="USER@EXAMPLE.COM"/>
<def var="normalizedEmail">
<script>
<![CDATA[
var email = context.getVar("email").toString();
email.toLowerCase(); // Returns: user@example.com
]]>
</script>
</def>
</config>
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://org.webharvest/schema/2.1/core">
<def var="httpStatus" value="404"/>
<def var="shouldRetry">
<script>
<![CDATA[
var status = parseInt(context.getVar("httpStatus").toString());
if (status >= 500 && status < 600) {
"true"; // Server error - retry
} else if (status == 429) {
"true"; // Rate limit - retry
} else {
"false"; // Don't retry
}
]]>
</script>
</def>
<if condition="${shouldRetry}">
<sleep time="5000"/>
<http url="${url}"/>
</if>
</config>
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://org.webharvest/schema/2.1/core">
<def var="jsonData">
<http url="https://api.example.com/data"/>
</def>
<def var="extractedValue">
<script>
<![CDATA[
var json = context.getVar("jsonData").toString();
var obj = JSON.parse(json);
obj.users[0].name; // Extract nested value
]]>
</script>
</def>
</config>
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://org.webharvest/schema/2.1/core">
<def var="timestamp" value="1609459200000"/>
<def var="formattedDate">
<script>
<![CDATA[
var ts = parseInt(context.getVar("timestamp").toString());
var date = new Date(ts);
date.toISOString(); // Returns: 2021-01-01T00:00:00.000Z
]]>
</script>
</def>
</config>
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://org.webharvest/schema/2.1/core">
<def var="baseUrl" value="https://api.example.com"/>
<def var="endpoint" value="users"/>
<def var="userId" value="123"/>
<def var="fields">name,email,age</def>
<def var="fullUrl">
<script>
<![CDATA[
var base = context.getVar("baseUrl").toString();
var ep = context.getVar("endpoint").toString();
var id = context.getVar("userId").toString();
var fields = context.getVar("fields").toString();
base + "/" + ep + "/" + id + "?fields=" + encodeURIComponent(fields);
// Returns: https://api.example.com/users/123?fields=name%2Cemail%2Cage
]]>
</script>
</def>
</config>
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://org.webharvest/schema/2.1/core">
<def var="uuid">
<script language="groovy">
<![CDATA[
import java.util.UUID
UUID.randomUUID().toString()
]]>
</script>
</def>
</config>
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://org.webharvest/schema/2.1/core">
<def var="counter" value="0"/>
<loop maxloops="10">
<!-- Real arithmetic increment -->
<def var="counter">
<script>
<![CDATA[
var current = parseInt(context.getVar("counter").toString());
current + 1;
]]>
</script>
</def>
<http url="https://example.com/page/${counter}"/>
</loop>
</config>
for any code with <, >, &
context
object is always available