This code is a good example of setting custom field values for all products based on words we find in product titles. In this case it's for a jewelry store.
Note that the gender facet is a multi-facet which means we can add men, women, or both men and women.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Facets Workbench</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
</head>
<body>
<div class="container-fluid">
<div class="row my-3 ">
<div class="col">
<h1 class="h3 display-5">Facets Import Workbench</h1>
<p class="small text-secondary mt-2">
This utility parses product titles to write custom field data for facets.
</p>
</div>
<div class="col pt-3">
<mvt:if expr="g.write_custom_fields EQ 1">
<h3><code class="text-success">Live Mode</code></h3>
<code class="text-success">Items in green have been updated, cells in red had errors.</code>
<mvt:else>
<h3><code>Preview Mode</code></h3>
</mvt:if>
</div>
<div class="col pt-3 text-end">
<a class="text-uppercase fw-bold btn btn-secondary text-uppercase me-2" style="letter-spacing: .2em;" href="/workbench-facets-data-import.html"><small>Refresh Preview</small></a>
<a class="text-uppercase fw-bold btn btn-primary text-uppercase" style="letter-spacing: .2em;" href="/workbench-facets-data-import.html?write_custom_fields=1"><small>Write Custom Field Data</small></a>
<p class="text-secondary small mt-2"><b>Important:</b> Do not double click buttons. It may take a while before the page refreshes.</p>
</div>
</div>
<mvt:comment>
#
# NOTES:
[ g.Module_Root $ l.__module_customfields:module ].ProductFieldValue_Set( field_id,product_id,value )
[ g.Module_Library_DB ].ProductList_Load_Offset_Active( offset,search,searchable_fields,max,nextoffset var,products var )
[ g.Module_Library_DB ].ProductList_Load_Offset_Category_Assigned( cat_id,offset,search,searchable_fields,max,nextoffset var,products var )
#
</mvt:comment>
<mvt:comment>
#
# load fields first
#
</mvt:comment>
<mvt:do file="g.Module_Root $ '/modules/util/customfld.mvc'" name="l.success" value="ProductField_Load_Code('facet_karat',l.settings:field_karat)" />
<mvt:do file="g.Module_Root $ '/modules/util/customfld.mvc'" name="l.success" value="ProductField_Load_Code('facet_color',l.settings:field_color)" />
<mvt:do file="g.Module_Root $ '/modules/util/customfld.mvc'" name="l.success" value="ProductField_Load_Code('facet_gender',l.settings:field_gender)" />
<mvt:comment>
#
# load products - testing with 250
#
</mvt:comment>
<mvt:do file="g.Module_Library_DB " name="l.success" value="ProductList_Load_Offset_Active(0,l.null,l.null,10000,l.settings:nextoffset,l.settings:products)" />
<table class="table table-sm table-hover mt-5">
<thead class="sticky-top ">
<tr class="table-dark">
<th></th>
<th>code</th>
<th>name</th>
<th>karat</th>
<th>color</th>
<th>gender</th>
</tr>
</thead>
<mvt:comment>
#
### Karat
10K Gold = "10K"
14K Gold = "14K"
18K Gold = "18K"
22K Gold = "22K"
24K Gold = "24K"
Platinum = "Platinum"
Sterling Silver = "Silver"
Titanium = "Titanium"
Stainless Steel = "Steel"
### Color
Yellow Gold = "Gold", "Yellow Gold" or "Solid Gold" (but not "white" or "rose" anywhere in title)
White Gold = "White Gold"
Rose Gold = "Rose Gold"
Two Tone Gold = "Two Tone" or "Two-Tone"
### Gender
Women = woman, women
Men = man, men
'Men' $ asciichar(10) $ 'Women'
#
</mvt:comment>
<mvt:foreach iterator="product" array="products">
<mvt:assign name="l.settings:counter" value="l.settings:counter + 1" />
<mvt:assign name="l.settings:f_karat" value="''" />
<mvt:assign name="l.settings:f_color" value="''" />
<mvt:assign name="l.settings:f_gender" value="''" />
<mvt:comment>
#
# CARAT
#
</mvt:comment>
<mvt:if expr="'10k' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_karat" value="'10k Gold'" />
<mvt:elseif expr="'14k' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_karat" value="'14k Gold'" />
<mvt:elseif expr="'18k' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_karat" value="'18k Gold'" />
<mvt:elseif expr="'22k' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_karat" value="'2k Gold'" />
<mvt:elseif expr="'24k' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_karat" value="'24k Gold'" />
<mvt:elseif expr="'Platinum' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_karat" value="'Platinum'" />
<mvt:elseif expr="'Sterling Silver' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_karat" value="'Silver'" />
<mvt:elseif expr="'Titanium' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_karat" value="'Titanium'" />
<mvt:elseif expr="'Stainless Steel' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_karat" value="'Steel'" />
</mvt:if>
<mvt:comment>
#
# COLOR
#
</mvt:comment>
<mvt:if expr="'Rose Gold' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_color" value="'Rose Gold'" />
<mvt:elseif expr="'Two Tone' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_color" value="'Two Tone Gold'" />
<mvt:elseif expr="'Two-Tone' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_color" value="'Two Tone Gold'" />
<mvt:elseif expr="'White Gold' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_color" value="'White Gold'" />
<mvt:elseif expr="'Gold' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_color" value="'Yellow Gold'" />
</mvt:if>
<mvt:comment>
#
# GENDER
#
</mvt:comment>
<mvt:if expr="'Women' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_gender" value="'Women'" />
<mvt:elseif expr="'Woman' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_gender" value="'Women'" />
<mvt:elseif expr="'Men' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_gender" value="'Men'" />
<mvt:elseif expr="'Man' CIN l.settings:product:name">
<mvt:assign name="l.settings:f_gender" value="'Men'" />
</mvt:if>
<mvt:comment>
#
# Save Custom Field Info
#
</mvt:comment>
<mvt:assign name="l.f_karat_ok" value="''" />
<mvt:assign name="l.f_color_ok" value="''" />
<mvt:assign name="l.f_gender_ok" value="''" />
<mvt:if expr="g.write_custom_fields EQ 1">
<mvt:if expr="l.settings:f_karat">
<mvt:do file="g.Module_Root $ '/modules/util/customfld.mvc'" name="l.f_karat_ok" value="ProductFieldValue_Set(l.settings:field_karat:id,l.settings:product:id,l.settings:f_karat)" />
</mvt:if>
<mvt:if expr="l.settings:f_color">
<mvt:do file="g.Module_Root $ '/modules/util/customfld.mvc'" name="l.f_color_ok" value="ProductFieldValue_Set(l.settings:field_color:id,l.settings:product:id,l.settings:f_color)" />
</mvt:if>
<mvt:if expr="l.settings:f_gender">
<mvt:do file="g.Module_Root $ '/modules/util/customfld.mvc'" name="l.f_gender_ok" value="ProductFieldValue_Set(l.settings:field_gender:id,l.settings:product:id,l.settings:f_gender)" />
</mvt:if>
<mvt:else>
<mvt:assign name="l.f_karat_ok" value="'1'" />
<mvt:assign name="l.f_color_ok" value="'1'" />
<mvt:assign name="l.f_gender_ok" value="'1'" />
</mvt:if>
<mvt:comment>
#
# table row output with error / success highlights
#
</mvt:comment>
<tr>
<td>&mvt:counter;.</td>
<td>&mvt:product:code;</td>
<td>&mvt:product:name;</td>
<mvt:if expr="NOT g.write_custom_fields">
<td>&mvt:f_karat;</td>
<mvt:elseif expr="g.write_custom_fields EQ 1 AND l.settings:f_karat">
<mvt:if expr="l.f_karat_ok EQ 1">
<td class="text-success">&mvt:f_karat;</td>
<mvt:else>
<td class="table-danger">&mvt:f_karat;</td>
</mvt:if>
<mvt:else>
<td></td>
</mvt:if>
<mvt:if expr="NOT g.write_custom_fields">
<td>&mvt:f_color;</td>
<mvt:elseif expr="g.write_custom_fields EQ 1 AND l.settings:f_color">
<mvt:if expr="l.f_color_ok EQ 1">
<td class="text-success">&mvt:f_color;</td>
<mvt:else>
<td class="table-danger">&mvt:f_color;</td>
</mvt:if>
<mvt:else>
<td></td>
</mvt:if>
<mvt:if expr="NOT g.write_custom_fields">
<td>&mvt:f_gender;</td>
<mvt:elseif expr="g.write_custom_fields EQ 1 AND l.settings:f_gender">
<mvt:if expr="l.f_gender_ok EQ 1">
<td class="text-success">&mvt:f_gender;</td>
<mvt:else>
<td class="table-danger">&mvt:f_gender;</td>
</mvt:if>
<mvt:else>
<td></td>
</mvt:if>
</tr>
</mvt:foreach>
</table>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
</body>
</html>
https://www.scotsscripts.com/mvblog/facets-workbench-to-set-facet-values-on-parsed-product-name.html