Search Descriptions Version
 
 
This article applies to: ML8, MultiStore

XML Packages


XmlPackage Overview & Operation

XmlPackages are a means by which developers can extend the functionality of the software without necessarily having to know asp.net and/or recompile the storefront. This allows a great deal of customization to the front-end of the software without having to purchase the source code. That said, a knowledge of XML, Xsl (Xslt), HTML, SQL, etc is required and customizations of this sort should only be attempted by experienced developers. There are many tutorials and good books on those technologies, so they are not discussed here, except where any unusual exceptions or requirements are imposed by the storefront. XML documents are CasE SEnSITivE!!! Also, Xmldocuments must have various attributes and element values properly “XML Encoded”. There is an XSD schema in the /XmlPackages folder to help you create properly structured packages.

AspDotNetStorefront support staff cannot assist with issues that arise from customization of XML Packages, so make sure you have a backup before making any changes!

How an XML Package works

Conceptually, an XmlPackage is pretty simple. The XmlPackage takes an input data set (or SQL statement), combines it with system and customer parameters, and then produces output in either XML or HTML format. XmlPackages are named with the .xml.config extension (e.g. MyXmlPackage1.xml.config). They are named this way to prevent someone from “browsing” your XmlPackage file.

XmlPackages execute as follows:

    1. Package is instantiated by Name (the filename, e.g. MyXmlPackage1.xml.config)
    2. Package reads .xml.config file (we use XML structure itself to define the specification of the XmlPackage, and we
        add .config as an extension to prevent anyone from viewing your XmlPackages stored on your web site with a
        browser, for additional security protection).
    3. Code adds additional run-time parameters to the XmlPackage
    4. Code adds additional system defined parameters to the XmlPackage
    5. DataSets are built from the SQL statements in the XmlPackage
    6. DataSets are converted into XmlDocument
        fragments and combined with the system data (also XmlDocument fragments) to form the XML Data Document.
    7. XmlDocument is XSL “Transformed” into final XML or HTML

There are 2 types of XmlPackages, with 2 different purposes:

Internal Packages: These are used internally by AspDotNetStorefront to provide efficient access to nested “entity” (e.g. category, section, library, etc) and “object” (e.g. product, document) structures in the database. The storefront will NOT function if these XmlPackages are removed.

When used internally as a helper object, the XmlPackage typically produces an in-memory XmlDocument object, as a result of input SQL statements, and various customer, system, and user-defined parameters. Examples of these internal packages can be found by looking at files such as EntityHelper/EntityMgr.xml.config.

This manual does not describe in further detail how the XmlPackages are internally used by the storefront for managing entities. You can refer to the EntityHelper.cs, XmlPackage2.cs, and HierarchicalTableMgr.cs classes in the common project, and the ShowEntityPage.cs class in the storefront project. Various consumer pages of these objects include the SiteMap.cs classes, and the SiteMapComponentArt.cs classes.

Display Rendering Packages: These XmlPackages are created by third party developers (anyone, really) to allow generation of custom HTML output for entity and/or object pages. An example is to create a custom category page display format for the storefront.

When used by developers or customers, this type of XmlPackage outputs “HTML” to be rendered within a store page, typically rendering within the skin in the contents area. Next, we discuss how users can add new XmlPackages to the storefront WITHOUT recompiling any code in the storefront. This is important, as it allows developers to add custom page formats for their clients. For example, a particular store client may want their category pages to be displayed in a certain manner, which is not one of the formats provided with the software. The developer can author an XmlPackage (in a simple text editor like Notepad, if required), copy that XmlPackage to the server, and tell the storefront to use that XmlPackage to render the specified category via the admin site (by setting the 'Display Format XML Package' attribute).

Installing an XML Package

XmlPackages are installed by placing them in the /skins/skin_#/XmlPackages folder in the web site. XmlPackages are stored by skin, because different skin layouts may require different manifestations of the package. Also, the admin/skins/skin_1/XmlPackages contains the XmlPackages (typically Internal XmlPackages) that are needed by the Admin site to function properly. When your XmlPackage is ready for use, just copy (or FTP) the file into that directory. Then you can assign that XmlPackage to any product or entity in the storefront through the admin site by setting the 'Display Format XML Package' attribute.

Invoking XML Packages by Themselves

The 'engine.aspx' page allows you to invoke any XmlPackage specified in the query string, and have it’s contents rendered in the page contents area. Note that not all XmlPackages can be executed in this manner, as many XmlPackages DEPEND on system, page, or user information (e.g. query string categoryid= string, etc). However, much like topic pages produce standalone page output, XmlPackages “can” be used in the engine.aspx page to produce standalone XmlPackage driven page output. This basically extends the topic concept to a programmatic level, allowing developers to add dynamic data driven content pages to the storefront without ever touching the source code.

To invoke an XmlPackage this way, use ether:

    http://www.yoursite.com/engine.aspx?xmlpackage=nameofpackage
or
    http://www.yoursite.com/x-nameofpackage.aspx

When executing XmlPackages in this way you may want to override the page title, keywords, description, etc. There are five elements that you can include in the package to set these values. They are included in the SearchEngine setting node and are named: SectionTitle, SETitle, SEKeywords, SEDescription, and SENoScript. Each of the elements can contain either an xpath statement that locates the element within the XML Data Document that contains the data or a XSLT stylesheet to transform multiple nodes in to one value to be placed in the output. The XPath statement must return only one node and the stylesheet should be designed to work with the full XML Data Document.

XML Package Structure

XmlPackages can contain:

    1 - SQL Queries to be executed
    2 - Web Queries
    3 - Xsl transforms
    4 - Search Engine Setting definitions
    5 - Post Processing Queries
    6 - Set Cookie instructions

An XSD Schema (XmlPackages/xmlpackage.xsd) is provided to describe the structure of the package. You can use this schema to validate the structure of your package (this does not validate the logic or structure any of the Xslt stylesheets or sql queries).

SQL Queries

The Query element is defined as: <query name=”Sections” rowElementName=”Section” runif=”paramname”>

The name attribute is used for the name of the child of the root element in the XML Data Document for this query. The rowElementName is the element name for each row returned by the query. Elements for each field are created using the exact spelling of the field or field alias in the query. Remember, all names are case sensitive. So, to reference the Name field from a query that has the above definition you would use the following path: /root/Sections/Section/Name. The runif attribute can be used to run the query under only certain circumstances. The value should be either a querystring/form/cookie param or an appconfig param. If the specified querystring/form/cookie param or an appconfig param doesn't exist or is an empty the query will not be executed. This could be used for a page where the query should not be run until the page is submitted with a form field.

Each query has a <sql> element that can contain any valid SQL statement. The SQL statements are executed in .NET using the SqlClient data provider and are executed as parameterized queries.

Query Parameters

There are two types of query parameters that can be defined: the queryparam element and querystringreplace element.

Queryparam
A queryparam element defines a parameter that is evaluated at SQL execution time and has the format @paramname. For each queryparam element there must be a @paramname variable in the SQL statement. (e.g. select * From product where productid = @productid). The queryparam element has the following attributes (all of which are required):

* paramname – the name of the param as it is in the SQL statement.

* paramtype – defines where the parameter value is obtained, valid values are request, appconfig, and runtime

- request param values are retrieved from the Web request object (i.e. a Querystring, Form, Cookie value)

- appconfig params are retireve from the AppConfig table

- runtime params are retieved from an internal runtime parameters table

* requestparamname – this is the name of the request, AppConfig, or runtime field that is used for the value to be substituted in the query. It must match exactly or the item will not be found or it may find a different parameter altogether.

* sqlDataType – defines the .Net SqlDataType for this parameter. The allowed types can be view in the XmlPackages/xmlpackage.xsd file, they are defined in the elment definition <xsd:simpleTypename="SqlDataType">.

* defvalue – the default value to use in case the value is not found in the specified request, AppConfig, or runtime collection

* validationpattern – a regular expression that can be used to filter the data so that invalid ranges of values are not sent to the query.

Querystringreplace
The second type of query parameter is the querystringreplace parameter. It is used to make the SQL string dynamic in terms of table names, field names, WHERE clause fields, and ORDER BY clause fields. It is not intended to be used for filtering parameters in the WHERE clause (for security reasons). This element has the following attributes (all of which are required):

* replaceTag – a user defined string embedded in the SQL statement that will be replaced at run time.

* replacetype - defines where the string replacement value is obtained. Valid values are request, AppConfig, and runtime and behave the same as those defined above in the queryparam element.

* replaceparamname - this is the name of the request, AppConfig, or runtime field that is used for the value to be substituted for the replaceTag string in the query. It must match exactly or the item will not be found or it may find a different parameter altogether.

* defvalue - the default value to use in case the value is not found in the specified request, appconfig, or runtime collection

* validationpattern – a regular expression that can be used to filter the data so that invalid ranges of values are not sent to the query.

Here is an example query element:

  <query name="Entities" rowElementName="Entity">
  <sql>
     <![CDATA[
      select Name,Description from {EntityName} with (NOLOCK) where {EntityName}ID=@EntityID
    ]]>
  </sql>
  <querystringreplace replaceTag="{EntityName}"
        replacetype="runtime"
        replaceparamname="EntityName"
        defvalue=""
        validationpattern="(category)|(section)|(affiliate)|(manufacturer)|(distributor)|(library)" />
  <queryparam paramname="@EntityID"
        paramtype="runtime"
        requestparamname="EntityID"
        sqlDataType="int"
        defvalue="0"
        validationpattern="" />
    </query>

It would produce a document fragment like this:

  <Entities>
    <Entity>
      <Name>Test Entity1</Name>
      <Description>Test Description</Description>
    </Entity>
    <Entity>
      <Name>Test Entity2</Name>
      <Description>Test Description</Description>
    </Entity>
    …
  </Entities>

The query element can also contain an XSL transform element named querytransform. This element can contain an XSL transform that can be used to shape the output XML for this query differently than it comes from the database and before it is added to the final XML Data Document. It is optional but there can be no more than one transform for the query. The output of this transform must be a valid XML document fragment or the entire package will fail.


Web Queries

Web queries allow you to get data from an external data source via URL. The URL can return XML or text data (as specified by the RetType attribute). The name attribute is used for the node name in the XML Data Document under which all returned content is inserted. The url element contains the url of the web document (including any querystring parameters) to get the data from. The URL should be fully formed, e.g. http://www.somesite.com/xmldoc.aspx?param1=123. The querystring replace element is used much the same as in sql queries. It describes a tag in the URL string that can be replaced by some value from a request (querystring, form, cookie, or server) variable, a runtime variable or an AppConfig parameter. Finally, the query can contain an XSL transform. If a transform is specified, the returned data will be transformed and the results of the transform are added to the XML Data Document instead of the raw results from the URL. Tranforms are only run when the RetType attribute is “xml”. Again you can refer to the schema for a more technical description of the webquery element. A RetType of text causes the return data to be put in a CDATA element unmodified from how it was received.

Example:

  <webquery name=”WebData1” RetType=”xml”>
    <url>http://www.somesite.com/xmldatafeed.aspx?param1={param1}</url>
    <querystringreplace replaceTag=”{param1}” replacetype=”request”
      replaceparamname=”productid” defvalue=”0”
      validationpattern=”^\d{1,10}$”/>
  </webquery>


System Defined DataSets

In addition to your defined SQL queries, the storefront automatically adds the following DataSets to the XmlPackage before execution. This means that all of these datasets are available to your Xsl Transform via intermediate XML Document.

System Data Set:

  <System>
    <IsAdminSite>False</IsAdminSite>
    <IsAdminSiteInt>0</IsAdminSiteInt>
    <PublishedOnly>1</PublishedOnly>
    <CustomerID>0</CustomerID>
    <CustomerLevelID>0</CustomerLevelID>
    <CustomerLevelName />
    <CustomerFirstName />
    <CustomerLastName />
    <CustomerFullName />
    <SubscriptionExpiresOn />
    <CustomerRoles />
    <IsAdminUser>false</IsAdminUser>
    <IsSuperUser>false</IsSuperUser>
    <LocaleSetting>en-US</LocaleSetting>
    <WebConfigLocaleSetting>en-US</WebConfigLocaleSetting>
    <SqlServerLocaleSetting>en-US</SqlServerLocaleSetting>
    <Date>11/30/2005</Date>
    <Time>1:28 AM</Time>
    <SkinID>1</SkinID>
    <AffiliateID>0</AffiliateID>
    <IPAddress>192.168.0.40</IPAddress>
    <QueryString>SectionID=1&SEName=test-section</QueryString>
    <UseStaticLinks>false</UseStaticLinks>
    <PageName>showsection.aspx</PageName>
    <FullPageName>/version60/showsection.aspx</FullPageName>
    <XmlPackageName>aspdnsf.xml.config</XmlPackageName>
    <StoreUrl>http://dotnetstorefront6/version60/</StoreUrl>
  </System>

Runtime DataSet (a bit redundant with the runtime params, but still necessary and helpful sometimes in your Xsl transform):

  <Runtime>
    <AffiliateID>0</AffiliateID>
    <CustomerID>0</CustomerID>
    <EntityName>Section</EntityName>
    <IsAdminUser>False</IsAdminUser>
    <SubscriptionExpiresOn />
    <UseStaticLinks>False</UseStaticLinks>
    <Date>11/30/2005</Date>
    <CustomerLevelName />
    <StoreUrl>http://dotnetstorefront6/version60/</StoreUrl>
    <Time>1:28 AM</Time>
    <EntityID>1</EntityID>
    <SkinID>1</SkinID>
    <IsAdminSite>False</IsAdminSite>
    <QueryString>SectionID=1&amp;SEName=test-section</QueryString>
    <CustomerLevelID>0</CustomerLevelID>
    <CustomerFullName />
    <CustomerFirstName />
    <XmlPackageName>aspdnsf.xml.config</XmlPackageName>
    <IsSuperUser>False</IsSuperUser>
    <PublishedOnly>1</PublishedOnly>
    <IsAdminSiteInt>0</IsAdminSiteInt>
    <IPAddress>192.168.0.40</IPAddress>
    <CustomerRoles />
    <PageName>showsection.aspx</PageName>
    <CustomerLastName />
    <WebConfigLocaleSetting>en-US</WebConfigLocaleSetting>
    <FullPageName>/version60/showsection.aspx</FullPageName>
    <LocaleSetting>en-US</LocaleSetting>
    <SqlServerLocaleSetting>en-US</SqlServerLocaleSetting>
    <StoreUrl>http://dotnetstorefront6/version60/</StoreUrl>
  </Runtime>

QueryString data set (whatever was on page URL invocation):

  <QueryString>
    <SectionID>1</SectionID>
    <SEName>test-section</SEName>
  </QueryString>

Form Data Set (whatever was on page FORM post):

  <Form />

Session State (helpful with customer data and/or user defined session info):

  <Session>
    <CustomerID>58640</CustomerID>
    <CustomerGUID>559ca809-884b-4072-b612-ac235c9ac743</CustomerGUID>
    <ViewState>System.Web.UI.Triplet</ViewState>
  </Session>

Server Variables Info (not used too often, but may be required in some situations):

  <ServerVariables>
    <HTTP_HOST>localhost</HTTP_HOST>
    <HTTP_USER_AGENT>Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR1.1.4322)
    </HTTP_USER_AGENT>
    <AUTH_TYPE>Forms</AUTH_TYPE>
    <AUTH_USER>559ca809-884b-4072-b612-ac235c9ac743</AUTH_USER>
    <AUTH_PASSWORD />
    <HTTPS>off</HTTPS>
    <LOCAL_ADDR>127.0.0.1</LOCAL_ADDR>
    <PATH_INFO>/aspdotnetstorefront/showsection.aspx</PATH_INFO>
    <PATH_TRANSLATED>c:\websites\aspdotnetstorefront\showsection.aspx</PATH_TRANSLATED>
    <SCRIPT_NAME>/aspdotnetstorefront/showsection.aspx</SCRIPT_NAME>
    <SERVER_NAME>localhost</SERVER_NAME>
    <SERVER_PORT_SECURE>0</SERVER_PORT_SECURE>
  </ServerVariables>

These data sets are ALL available to your Xsl transform code, along with ALL the params you have defined, AND the runtime params added by the system.


XSL Transform

The output Package is obtained by applying an XSL transform to the resulting XmlDoc. The XmlDoc contains the SQL data, web data, and system data. This is done using the transform in the <PackageTransform> element. An XmlPackage doesn’t require any query elements to run but the PackageTransform is required and must contain a valid XSLT stylehseet. As stated previously The XmlPackage uses .NET extension objects to implement high level logic not available in normal XSL. For this to work it is required that a new namespace be added to the XSL stylesheet. The xsl:stylesheet element must have the attribute xmlns:aspdnsf="urn:aspdnsf" here’s the full stylesheet element:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"xmlns:aspdnsf="urn:aspdnsf">

Although not required it is a good idea to use an output element as well and set the method attribute to html. Here’s a sample:

<xsl:output method="html" omit-xml-declaration="yes" />

After that all you need to do is add templates to transform the XML DataDocument into html.


Search Engine Settings

In some instances you may want to control the page title, keywords meta tag, description meta tag, SectionTitle, and No Script sections. These items can be set by adding the SearchEngineSetting node to the package and including 1 or all of the following child nodes: SectionTitle, SETitle, SEKeywords, SEDescription, and SENoScript. Each node can contain either an XPath statement, an Xslt stylesheet, or static text and you must specify which type it contains in the node’s actionType attribute (either “xpath”, “transform”, or “text”). The XPath statement or the stylesheet is executed against the XML Data Document. If the node contains an XPath statement, it must return a single node (a nodeset will cause a runtime error). This is for when you just want to pick the value of one element from the XML Data Document. When a stylesheet is specified, you can combine as much information from the XML Data Document as you need. Here is an example of specifying some of the SE settings:

    <SearchEngineSettings>
    <SETitle actionType="transform">
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:aspdnsf=
      "urn:aspdnsf">
      <xsl:output method="html" omit-xml-declaration="yes" />
      <xsl:template match="/">
      <xsl:value-of select="concat(/root/Sections/Section/SEName, ' - ',/root/Sections/Section/Description)" />
      </xsl:template>
      </xsl:stylesheet>
    </SETitle>
    <SEKeywords actionType="xpath">
      /root/Sections/Section/SEKeywords
    </SEKeywords>
    <SEDescription actionType="text">
      This is my static text to use for the search engine description meta tag
    </SEDescription>
  </SearchEngineSettings>

When using a stylesheet you can use any of the extension functions described later in this article. Please refer to the schema (in the XmlPackages/xmlpackage.xsd file) for the full technical description of this node.


Post Processing

An XmlPackage can have post processing instructions. The post processing instructions include executing SQL queries (typically for insert or update), Web Queries, or setting cookie values. The actions take place after the XML DataDocument is created and before the transform is executed. So, after you have queried the database and/or retrieved data from the web you can execute commands to update your database, update your web data source, or set a user cookie value.


QueryAfter

Queryafter elements are used to define SQL queries that are executed after the XML DataDocument is built. This elements operates much like the <query> element except that the <querystringreplace> and <queryparam> elements can draw their values from the XML DataDocument (using an xpath statment). Typically you would use this to update data in your database after you gathered the data for the package transform. The <queryafter> element also contains a runif element that can be used to prevent the query from running. The runif element tests for the existence of the value or element you specify and if it does not exist or if it exists and is empty then the query is not executed.

Example:

  <queryafter>
    <sql>
      <![CDATA[
      update customer set lastlogin = datetime where customerid = @custid
      ]]>
    </sql>
    <queryparam paramname="@ custid " paramtype="xpath" requestparamname="/root/System/CustomerID"
    sqlDataType="int" defvalue="0"
    ::validationpattern="" />
  </queryafter>

AspDotNetStorefront Xsl Extensions

XmlPackages produce either:

    1 - XML Output
    2 - HTML Output

When producing XML Output, it is most likely your job to ensure that resulting XML is what you intended, and compliant with XML standards. When producing HTML output, you can pretty much spit out whatever you want from the package, as long as you know how it will be used, and that it will be valid for that use. However, when producing HTML you may need to create blocks of HTML code which are non-trivial (e.g. an add to cart form with validation for a product). Since these types of would be extremely difficult to generate via XSLT, the HTML output from the XmlPackage can use custom XSL extension functions. These functions implement high-level logic that is not possible in XSLT alone (e.g. checking to see if an image file exists on the server before displaying it). The functions are used in your packages like this:

    <xsl:value-of select=”aspdnsf:functionname(arguments)” disable-ouput-escaping=”yes”>

The disable-output-escaping parameter is only required when the function’s output is not valid XML. Also, XSL is case sensitive, as are the function names. Also, note that all functions must be prefixed with "aspdnsf:".

These functions are defined in the XSLTExtensionBase class, and are listed below.

Debugging XML Packages

If you set the Xml.DumpTransform AppConfig to true, the XmlPackage engine will write intermediate .xml files into the /image directory (they are put here because normally the site already has write permissions to that folder). The xml files will be appropriately named based on the name of the xml package, and also intermediate stage files will be written out.

The above procedure will cause debug information for every package used on the page to be display. If you only want to debug a specific package you can add the debug=”true” attribute to the package element. This will cause debug information to be display regardless of the setting the Xml.DumpTransform AppConfig.

To debug your xsl transforms, you can use your favorite xsl debug tool to take the intermediate .xml data file dumped out, and apply your transform directly to it. Also, Visual Studio 2005/2008 will debug transforms in-line. In order to do this you will need to put a break point in the XmlPackage2.TransformString method before the m_Transform.Transform method is called. When the code reaches your breakpoint, choose the File|Open menu item and open the transform file in the images folder, the file will be named fullpackagename_store.runtime.xsl (e.g. product.SimpleProduct.xml.config_store.runtime.xsl). After you have the file opened you can set breakpoints in the transform and view local variables (i.e. param or variable tags in the transform) as you step through the transform. Again you must turn on debugging for the package using the package element’s debug attribute (debug=”true”) or by setting the AppConfig parameter Xml.DumpTransform to true.


AspDotNetStorefront XSLT Functions

These are the built-in XSLT functions included with the software and used in our XML Packages. These functions can be used in new/edited XML Packages without having source code access, however adding new functions would require purchase of the source code.

AddtoCartForm
  Description: Returns the “add to cart form” with javascript validation required to be able to let the site user add
  this product to the cart. This can include sizes, colors, inventory checking logic, etc.
  Sample: <xsl:value-of select="aspdnsf:AddtoCartForm(ProductID, VariantID, ColorChangeProductImage)"
  disableoutput-escaping="yes"/>

    Argument Name: ProductId
    Data Type: Integer
    Description:

    Argument Name: VariantID
    Data Type: Integer
    Description:

    Argument Name: ColorChangeProductImage
    Data Type: Boolean
    Description: If the product has color options will selecting a color from the drop down cause the product image
    to change to the color selected.

AddtoCartFormERP
  Description:
  Sample: <xsl:value-of select="aspdnsf:AddtoCartForm(ProductID, VariantID, ColorChangeProductImage,
  VariantStyleFlag)" disableoutput-escaping="yes"/>

    Argument Name: ProductId
    Data Type: Integer
    Description:

    Argument Name: VariantID
    Data Type: Integer
    Description:

    Argument Name: ColorChangeProductImage
    Data Type: Boolean
    Description: If the product has color options will selecting a color from the drop down cause the product image
    to change to the color selected.

    Argument Name: VariantStyleFlag
    Data Type:
    Description:

AjaxShippingEstimator
  Description: Displays the AJAX Shipping Estimator tool on the product detail page.
  Sample: <xsl:value-of select="aspdnsf:AjaxShippingEstimator(VariantID)" disable-output-escaping="yes"/>

    Argument Name: VariantID
    Data Type: Integer
    Description: Variant to calculate the estimate on

AppConfig
    Description: Returns the value of the specified AppConfig.
    Sample: <xsl:value-of select="aspdnsf:AppConfig(AdminDir)" disable-output-escaping="yes"/>

    Argument Name: AppConfigName
    Data Type: String
    Description: Name of the AppConfig to check

AppConfigBool
  Description: Returns the value of the specified boolean Appconfig in lower case (i.e. “true’ or “false”).
  Sample: <xsl:value-of select="aspdnsf:AppConfigBool(UseSSL)" disable-output-escaping="yes"/>

    Argument Name: AppConfigName
    Data Type: String
    Description: Name of the AppConfig to check

CartSubTotal
  Description: Returns shoppingcart.cs.90 + the current customer's subtotal.
  Sample: <xsl:value-of select=”aspdnsf:CartSubTotal()” disable-output-escaping=”yes”>

CategoryLink
  Description: Returns a page name for the specified Category page in the site, using static links if required (e.g.c-
  17-boots.aspx). NOTE: This function is for backward compatibility with Parser functions only and should not be
  used in XmlPackage transforms because it outputs invalid XML when using the IncludeATag.

  Sample: <xsl:value-of select="aspdnsf:CategoryLink (CategoryID, SEName, IncludeATag, TagInnerText)"
  disableoutput-escaping="yes"/>

    Argument Name: CategoryID
    Data Type: Integer
    Description: ID of the desired category

    Argument Name: SEName
    Data Type: String
    Description: The SEName field from the db for this category, if known. If blank, the store will figure it out, but
    that takes an extra database query

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag with the href attribute set to the page url

    Argument Name: TagInnerText
    Data Type: String
    Description: The text that goes inside the <a> tag, only used when the IncludeATag is true (set to empty string
    otherwise)

CleanPaymentGateway
  Description: Returns Payment Gateway cleaned (no spaces or weird chars, all uppercased)
  Sample:

    Argument Name: GW
    Data Type: String
    Description: Gateway name

CleanPaymentMethod
  Description: Returns Payment Method cleaned (no spaces weird chars, all uppercased)
  Sample:

    Argument Name: PM
    Data Type: String
    Description: Payment method name

CleanShippingMethod
  Description: Returns Shipping Method cleaned (no spaces weird chars, all uppercased)
  Sample:

    Argument Name: SM
    Data Type: String
    Description: Shipping method name

ConvertToBase64
  Description: Converts input into base 64 encoding
  Sample:

    Argument Name: Input
    Data Type: String
    Description: Value to be converted

CreateXmlFromDelimitedString
    Description:
  Sample:

    Argument Name: delimitedString
    Data Type: string
    Description:

    Argument Name: delimiter
    Data Type: string
    Description:

    Argument Name: rootname
    Data Type: string
    Description:

    Argument Name: elementname
    Data Type: string
    Description:

CustomerID
  Description: Returns the currently logged in customer id, or 0 if anon customer with no customer record yet
  Sample: <xsl:value-of select=”aspdnsf:CustomerID()” >

DateCompare
  Description: returns:

    if Date1 < Date2 => -1
    if Date1 = Date2 => 0
    if Date1 > Date2 -> 1
    (if Date1 or Date2 is empty string, they will be set to "now")

  Sample:

    Argument Name: Date1
    Data Type: String
    Description: First date

    Argument Name: Date2
    Data Type: String
    Description: Second date

Decode
  Description: Decodes markup that might have been encoded during a conversion to XML
  Sample: <xsl:value-of select="aspdnsf:Decode()" disable-output-escaping="yes"/>

Decrypt
  Description: Returns the decrypted value of the data that was encrypted using the ASPDNSF Encrypt method
  Sample: <xsl:value-of select="aspdnsf:Decrypt(EncryptedData)" disable-output-escaping="yes"/>

    Argument Name: EncryptedData
    Data Type: String
    Description: The data you want decrypted

DecryptCCNumber
  Description:
  Sample:

    Argument Name: CardNumberCrypt
    Data Type: String
    Description:

    Argument Name: OrderNumber
    Data Type: String
    Description:

DisplayAddressString
  Description:
  Sample:

    Argument Name: AddressID
    Data Type:
    Description:

DisplayOrderOptions
  Description:
  Sample:

    Argument Name: OrderOptions
    Data Type: String
    Description:

    Argument Name: ViewInLocaleSetting
    Data Type: String
    Description:

    Argument Name: UseFullPathToImages
    Data Type: String
    Description:

DisplayProductStockHint
  Description: Display 'out of stock' or 'in stock' message
  Sample:

    Argument Name: ProductID
    Data Type: Integer
    Description: The product to check stock levels on

    Argument Name: Pages
    Data Type: String
    Description: Entity or Product

DistributorLink
  Description: Creates a link to the Distributor page.
  Sample:

    Argument Name: DistributorID
    Data Type: String
    Description: ID of the Distributor

    Argument Name: SEName
    Data Type: String
    Description: The Search Engine name of the distributor

    Argument Name: IncludeATag
    Data Type: String
    Description: Flag to create an achor tag

    Argument Name: TagInnerText
    Data Type: String
    Description: The iStringnnertext of the anchor tag

DocumentAndLibraryLink
  Description: Returns link to that document page (with Library breadcrumb navigation), using static links if
  required (e.g. p-1-test.aspx). NOTE: This function is for backward compatibility with Parser functions only and
  should not be used in XmlPackage transforms because it outputs invalid XML when using the IncludeATag.

  Sample: <xsl:value-of select="aspdnsf:DocumentandLibraryLink(DocumentID, SEName, LibraryID, IncludeATag,
  TagInnerText)" disable-output-escaping="yes"/>

    Argument Name: DocumentID
    Data Type: Integer
    Description: Document ID

    Argument Name: SEName
    Data Type: String
    Description: Product SE name

    Argument Name: LibraryID
    Data Type: Integer
    Description: LibraryID that the document is assigned to

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag with the href attribute set to the page url

    Argument Name: TagInnerText
    Data Type: String
    Description: The text that goes inside the <a> tag, only used when the IncludeATag is true (set to empty string
    otherwise)

DocumentLink
  Description: Returns a link to the specified document page. NOTE: This function is for backward compatibility with
  Parser functions only and should not be used in XmlPackage transforms because it outputs invalid XML when
  using the IncludeATag.

  Sample: <xsl:value-of select="aspdnsf:DocumentLink(DocumentID, SEName, IncludeATag, TagInnerText)"
  disable-output-escaping="yes"/>

    Argument Name: DocumentID
    Data Type: Integer
    Description: Document ID

    Argument Name: SEName
    Data Type: String
    Description: Product SE name

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag with the href attribute set to the page url

    Argument Name: TagInnerText
    Data Type: String
    Description: The text that goes inside the <a> tag, only used when the IncludeATag is true (set to empty string
    otherwise)

Ellipses
  Description: Returns shortened value of text with an ellipses (...) on the end. For example "This is one of our most
  popular products" might be changed to "This is one of..."
  Sample:

    Argument Name: Content
    Data Type: String
    Description: Text to shorten


    Argument Name: ReturnLength
    Data Type: String
    Description: How long the final return should be

    Argument Name: BreakBetweenWords
    Data Type: String
    Description: (true/false) If this is set to true, the ellipses will be added at the end of a word before ReturnLength
    if the ReturnLength would be in the middle of a word. For example the string "There is more information here"
    would return "There is more..." even if the ReturnLength would have had it cut off at "There is more infor"

EmailProductToFriend
  Description: Returns an a hyperlink to a page to where you can email the product page
  Sample: <xsl:value-of select="aspdnsf:EmailProductToFriend(ProductID, CategoryID)" disable-
  outputescaping="yes"/>

    Argument Name: ProductID
    Data Type: Integer


    Description: The productID to email a link to

    Argument Name: CategoryID
    Data Type: Integer


    Description: Not used by default

EncryptString
  Description: Uses the Security.MungeString function to encrypt text
  Sample:

    Argument Name: String2Encrypt
    Data Type: String
    Description: Text to encrypt

EntityLink
  Description: Returns a link to the specified entity page. NOTE: This function is for backward compatibility with
  Parser functions only and should not be used in XmlPackage transforms because it outputs invalid XML when using
  the IncludeATag.

  Sample: <xsl:value-of select="aspdnsf:EntityLink(EntityID, SEName, EntityName, IncludeATag)"disable-output-
  escaping="yes"/>

    Argument Name: EntityID
    Data Type: Integer
    Description: ID of the desired entity

    Argument Name: SEName
    Data Type: String
    Description: The SEName field from the db for this entity, if known. If blank, the store will figure it out,
    but that takes an extra database query

    Argument Name: EntityName
    Data Type: String
    Description: The name of the entity (“product”, “category”, “section”, etc.)

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag with the href attribute set to the page url

EntityPageFilterOptions
  Description:
  Sample:

    Argument Name: EntityName
    Data Type: String
    Description:

    Argument Name: EntityID
    Data Type: String
    Description:

    Argument Name: SectionFilterID
    Data Type: String
    Description:

    Argument Name: CategoryFilterID
    Data Type: String
    Description:

    Argument Name: ManufacturerFilterID
    Data Type: String
    Description:

    Argument Name: ProductTypeFilterID
    Data Type: String
    Description:

EntityPageHeaderDescription
  Description:
  Sample:

    Argument Name: EntityName
    Data Type: String
    Description:

    Argument Name: EntityID
    Data Type: String
    Description:

EvalBool
  Description: If the string = YES, TRUE, or 1, the software returns true. Otherwise, it returns false.
  Sample:

    Argument Name: EvalString
    Data Type: String
    Description: String to evaluate

FileExists
  Description: Checks to see if the specified file exists and returns true/false
  Sample:

    Argument Name: FNOrUrl
    Data Type: String
    Description: Relative URL or physical file path to check

FormatCurrency
  Description: Returns the currency value formatted for the specified locale
  Sample: <xsl:value-of select="aspdnsf:FormatCurrency(CurrencyValue, LocaleSetting)" disable-
  outputescaping="yes"/>

    Argument Name: CurrencyValue
    Data Type: Decimal
    Description: Amount to convert

    Argument Name: LocaleSetting
    Data Type: String
    Description: User or server default locale setting

FormatCurrencyHelper
  Description: Internal helper function only.

FormatDate
  Description: Parses incoming date string DateString and reformats it to a new date string according to the
  FormatString parameter
  Sample:

    Argument Name: StrDate
    Data Type: String
    Description:

    Argument Name: SourceLocale
    Data Type: String
    Description:

    Argument Name: strFmt
    Data Type: String
    Description:

FormatDecimal
  Description: Returns a localized, rounded decimal of the length specified.
  Sample:

    Argument Name: DecimalValue
    Data Type: String
    Description: Original decimal value

    Argument Name: intFixPlaces
    Data Type: String
    Description: Number of places to round the decimal to

GenreLink
  Description: Creates a link to the Genre page.
  Sample:

    Argument Name: GenreID
    Data Type: Integer
    Description: ID of the desired genre

    Argument Name: SEName
    Data Type: String
    Description: The SEName field from the db for this genre, if known. If blank, the store will figure it out, but that
    takes an extra database query

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag with the href attribute set to the page url

    Argument Name: TagInnerText
    Data Type: String
    Description: The text that goes inside the <a> tag, only used when the IncludeATag is true (set to empty string
    otherwise)

GetCartPrice
  Description:
  Sample:

    Argument Name: intProductID
    Data Type: String
    Description:

    Argument Name: intQuantity
    Data Type: String
    Description:

    Argument Name: decProductPrice
    Data Type: String
    Description:

    Argument Name: intTaxClassID
    Data Type: String
    Description:

GetCustomerLevelPrice
  Description: Returns a localized price for the specified variant, based on the customer level of the current
  customer.
  Sample:

    Argument Name: VariantID
    Data Type: String
    Description: Variant to get the price of

    Argument Name: Price
    Data Type: String
    Description:

    Argument Name: Points
    Data Type: String
    Description: Not used by default

GetJSPopupRoutines
  Description: Returns the JS code that creates popups for various features on the site - order option tooltips, CCV
  code image, etc.
  Sample:

GetKitItemOptions
  Description:
  Sample:

    Argument Name: ProductID
    Data Type: String
    Description:

    Argument Name: ThisGroupID
    Data Type: String
    Description:

    Argument Name: GroupIsRequired
    Data Type: String
    Description:

    Argument Name: GroupName
    Data Type: String
    Description:

    Argument Name: GroupDescription
    Data Type: String
    Description:

    Argument Name: KitGroupTypeID
    Data Type: String
    Description:

    Argument Name: HidePriceUntilCart
    Data Type: String
    Description:

GetKitPrice
  Description:
  Sample:

    Argument Name: ProductID
    Data Type: String
    Description:

    Argument Name: Price
    Data Type: String
    Description:

    Argument Name: SalePrice
    Data Type: String
    Description:

    Argument Name: ExtendedPrice
    Data Type: String
    Description:

    Argument Name: HidePriceUntilCart
    Data Type: String
    Description:

    Argument Name: Colors
    Data Type: String
    Description:

    Argument Name: ShoppingCartRecID
    Data Type: String
    Description:

    Argument Name: intTaxClassID
    Data Type: String
    Description:

GetLocaleShortDateString
  Description: Returns a localized version of the supplied date without the time
  Sample:

    Argument Name: DateTimeString
    Data Type: String
    Description: Full string to shorten

GetMLValue
  Description:
  Sample:

    Argument Name: MLContent
    Data Type: XPathNodeIterator
    Description:

    Argument Name: Locale
    Data Type: String
    Description:

    Argument Name: XMLEncodeOutput
    Data Type: String
    Description:

GetNativeShortDateString
  Description: Returns a shortened (non-localized) version of the supplied date without the time
  Sample:

    Argument Name: DateTimeString
    Data Type: String
    Description: Full string to shorten

GetNewKitItemOptions
  Description:
  Sample:

    Argument Name: ProductID
    Data Type: String
    Description:

    Argument Name: Price
    Data Type: String
    Description:

    Argument Name: SalePrice
    Data Type: String
    Description:

    Argument Name: ExtendedPrice
    Data Type: String
    Description:

    Argument Name: HidePriceUntilCart
    Data Type: String
    Description:

    Argument Name: Colors
    Data Type: String
    Description:

    Argument Name: ShoppingCartRecID
    Data Type: String
    Description:

    Argument Name: intTaxClassID
    Data Type: String
    Description:

GetNewsBoxExpanded
  Description: Returns a list of news items in an option frame
  Sample: <xsl:value-of select="aspdnsf:GetNewsBoxExpanded(ShowCopy, ShowNum, IncludeFrame, Teaser)"disable-output-escaping="yes"/>

    Argument Name: ShowCopy
    Data Type: Boolean
    Description: Shows the entire content of the article

    Argument Name: ShowNum
    Data Type: Integer
    Description: The number of news items to show

    Argument Name: IncludeFrame
    Data Type: Boolean
    Description: Create a frame around the list of specials, 1 = yes, 0 = no

    Argument Name: Optional string rendered at the top of the list (inside the frame if it exists)
    Data Type: String
    Description: Teaser

GetOrderReceiptCCNumber
  Description:
  Sample:

    Argument Name: Last4
    Data Type: String
    Description:

    Argument Name: CardType
    Data Type: String
    Description:

    Argument Name: CardExpirationMonth
    Data Type: String
    Description:

    Argument Name: CardExpirationYear
    Data Type: String
    Description:

GetPackItmQtyScroller
  Description:
  Sample:

    Argument Name: PackID
    Data Type: String
    Description:

    Argument Name: ProductID
    Data Type: String
    Description:

    Argument Name: PresetProducts
    Data Type: String
    Description:

    Argument Name: NumItemsInPack
    Data Type: String
    Description:

    Argument Name: SourceEntityID
    Data Type: String
    Description:

    Argument Name: SourceEntityName
    Data Type: String
    Description:

    Argument Name: CartRecID
    Data Type: String
    Description:

    Argument Name: ShoppingCartRecID
    Data Type: String
    Description:

GetPackPrice
  Description: Deprecated. Please use GetVariantPrice instead.
  Description:
  Sample:

    Argument Name:
    Data Type:
    Description:

GetPackTypePrompt
  Description: Returns the name of the specified pack plus the value of the 'dyop.aspx.12' string (if the pack name
  does not already end in that text).
  Sample:

    Argument Name: PackName
    Data Type: String
    Description: Name of the desired pack

GetPollBox
  Description:
  Sample:

    Argument Name: PollID
    Data Type: String
    Description:

    Argument Name: Large
    Data Type: String
    Description:

    Argument Name: Category
    Data Type: String
    Description:

    Argument Name: Section
    Data Type: String
    Description:

GetProductDiscountID
  Description: Returns the quantity discount table ID the specified product uses (if any)
  Sample:

    Argument Name: ProductID
    Data Type: String
    Description: Product to check for a quantity discount table on

GetRatingStarsImage
  Description: Creates an image displaying 0-5 stars (and fractions of them) based on the rating value supplied.
  Sample:

    Argument Name: Rating
    Data Type: String
    Description: Rating value to create an image for. 0.00 - 5.0

GetReceiptCss
  Description: Returns the content of CSS file based on skin ID
  Sample:

    Argument Name: SkinID
    Data Type: Integer
    Description: SkinID to lookup the CSS for

GetRootEntityContextOfPage
  Description:
  Sample:

    Argument Name: EntityName
    Data Type: String
    Description:

GetSpecialsBoxExpanded
  Description: Returns a formatted list of randomly selected items marked as being on special in the specified
  category
  Sample: <xsl:value-of select="aspdnsf:GetSpecialsBoxExpandedRandom(CategoryID, ShowPics, IncludeFrame,
  Teaser)" disable-output-escaping="yes"/>

    Argument Name: CategoryID
    Data Type: Integer
    Description: Category containing the products to display

    Argument Name: ShowPics
    Data Type: Boolean
    Description: 1 = Show product pictures, 0 = don’t show pictures

    Argument Name: IncludeFrame
    Data Type: Boolean
    Description: Create a frame around the list of specials, 1 = yes, 0 = no

    Argument Name: Teaser
    Data Type: String
    Description: Optional string rendered at the top of the list (inside the frame if it exists)

GetSpecialsBoxExpandedRandom
  Description: Returns a formatted list of randomly selected items marked as being on special in the specified
  category
  Sample: <xsl:value-of select="aspdnsf:GetSpecialsBoxExpandedRandom(CategoryID, ShowPics, IncludeFrame,
  Teaser)" disable-output-escaping="yes"/>

    Argument Name: CategoryID
    Data Type: Integer
    Description: Category containing the products to display

    Argument Name: ShowPics
    Data Type: Boolean
    Description: 1 = Show product pictures, 0 = don’t show pictures

    Argument Name: IncludeFrame
    Data Type: Boolean
    Description: Create a frame around the list of specials, 1 = yes, 0 = no

    Argument Name: Teaser
    Data Type: String
    Description: Optional string rendered at the top of the list (inside the frame if it exists)

GetSplitString
  Description:
  Sample:

    Argument Name: StringToSplit
    Data Type:
    Description:

    Argument Name: SplitChar
    Data Type:
    Description:

    Argument Name: intReturnIndex
    Data Type:
    Description:

GetStoreHTTPLocation
  Description: Returns the full URL of the store.
  Sample:

    Argument Name: TryToUseSSL
    Data Type: String
    Description: If true, the software will use https instead of http.

GetString
  Description: Deprecated, use StringResource instead.

GetUpsellVariantPrice
  Description:
  Sample:

    Argument Name: VariantID
    Data Type: String
    Description:

    Argument Name: HidePriceUntilCart
    Data Type: String
    Description:

    Argument Name: Price
    Data Type: String
    Description:

    Argument Name: SalePrice
    Data Type: String
    Description:

    Argument Name: ExtPrice
    Data Type: String
    Description:

    Argument Name: Points
    Data Type: String
    Description:

    Argument Name: SalesPromptName
    Data Type: String
    Description:

    Argument Name: ShowPriceLabel
    Data Type: String
    Description:

    Argument Name: TaxClassID
    Data Type: String
    Description:

    Argument Name: decUpSelldiscountPct
    Data Type: String
    Description:

GetVariantPrice
  Description:
  Sample:

    Argument Name: VariantID
    Data Type: String
    Description:

    Argument Name: HidePriceUntilCart
    Data Type: String
    Description:

    Argument Name: Price
    Data Type: String
    Description:

    Argument Name: SalePrice
    Data Type: String
    Description:

    Argument Name: ExtPrice
    Data Type: String
    Description:

    Argument Name: Points
    Data Type: String
    Description:

    Argument Name: SalesPromptName
    Data Type: String
    Description:

    Argument Name: ShowPriceLabel
    Data Type: String
    Description:

    Argument Name: TaxClassID
    Data Type: String
    Description:

    Argument Name: ChosenAttributesPriceDelta
    Data Type: String
    Description:

GiftCardKey
  Description: Returns a number in the format #####-#####-#####
  Sample:

HasZoomify
  Description: Returns false if the specified image/entity does not have Zoomify images, and true if it does
  Sample:

    Argument Name: ID
    Data Type: String
    Description:

    Argument Name: EntityOrObjectName
    Data Type: String
    Description:

HelpBox
  Description: Displays a table with a header image and the contents of the 'helpbox' topic.
  Sample:

HtmlDecode
  Description: Strips HTML tags out of the supplied string
  Sample:

    Argument Name: HtmlContent
    Data Type: String
    Description: String to decode

HtmlEncode
  Description: HTML-encodes the supplied string
  Sample:

    Argument Name: HtmlContent
    Data Type: String
    Description: String to encode

ImageGallery
  Description:
  Sample:

    Argument Name:
    Data Type:
    Description:

ImageURL
  Description: Returns the path (relative or full URL) to the specified image
  Sample: <xsl:value-of select="aspdnsf:ImageUrl(ID, EntityOrObjectName, DesiredSize, FullUrl)" disable-
  outputescaping="yes"/>

    Argument Name: ID
    Data Type: Integer
    Description: Product, Category, Section, or Manufacturer ID

    Argument Name: EntityOrObjectName
    Data Type: String
    Description: “Product”, “Category”, “Section”, or “Manufacturer”

    Argument Name: DesiredSize
    Data Type: String
    Description: icon, medium, large

    Argument Name: FullURL
    Data Type: Boolean
    Description: Determine whether the path is a relative path (e.g. images/product/icon/imgname.jpg) or a full URL
    (e.g. http://www.mydomain.com/images/product/medium/myimage.jpg)

InStr
  Description: Reports the index of the first occurrence of strFind within strSource
  Sample:

    Argument Name: strSource
    Data Type: String
    Description: Complete string

    Argument Name: strFind
    Data Type: String
    Description: String to find

IsEmailGiftCard
  Description: Returns true if the specified product is an email type gift card
  Sample:

    Argument Name: ProductID
    Data Type: Integer
    Description: Product to check gift card type of

IsStringEmpty
  Description: Returns true if the specified string is empty, false if it is not
  Sample:

    Argument Name: StringValue
    Data Type: String
    Description: String to check

LibraryLink
  Description: Returns a page name for the specified Library page in the site, using static links if required
  Sample: <xsl:value-of select="aspdnsf:LibraryLink(LibraryID, SEName, IncludeATag, TagInnerText)" disableoutput-
  escaping="yes"/>

    Argument Name: LibraryID
    Data Type: Integer
    Description: ID of the desired category

    Argument Name: SEName
    Data Type: String
    Description: The SEName field from the db for this library, if known. If blank, the store will figure it out, but that
    takes an extra database query

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag with the href attribute set to the page url

    Argument Name: TagInnerText
    Data Type: String
    Description: The text that goes inside the <a> tag, only used when the IncludeATag is true (set to empty string
    otherwise)

LocateImageUrl
  Description: When given a relative path, returns the full URL to the specified image (localized if possible)
  Sample:

    Argument Name: ImgUrl
    Data Type: String
    Description: Relative path to the desired image

    Argument Name: Locale
    Data Type: String
    Description: given an input image string like /skins/skin_1/images/shoppingcart.gif, the software will try to resolve
    it to the proper locale by:

      /skins/skin_1/images/shoppingcart.LocaleSetting.gif first
      /skins/skin_1/images/shoppingcart.WebConfigLocale.gif second
      /skins/skin_1/images/shoppingcart.gif last

LoginOutPrompt
  Description: Returns a login link or a logout link depending the user's current login state
  Sample: <xsl:value-of select="aspdnsf:LoginOutPrompt()" disable-output-escaping="yes"/>

LookupEntityImage
  Description: Returns an <img> tag specifically for the specified entity.
  Sample: <xsl:value-of select="aspdnsf:LookupEntityImage(ID, EntityName, DesiredSize, IncludeATag)"
  disableoutput-escaping="yes"/>

    Argument Name: ID
    Data Type: Integer
    Description: Category, Section, or Manufacturer ID

    Argument Name: EntityName
    Data Type: String
    Description: “Category,” “Section”, or “Manufacturer”

    Argument Name: DesiredSize
    Data Type: String
    Description: icon, medium, large

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag around the <img> tag with the href attribute set to the page url

LookupImage
  Description: Returns the fully qualified <img src=”…”….> tag for the desired image. NoPicture or NoPictureIcon
  may be returned also in some cases. This method will not produce a link to the large image when a medium image is
  requested. The SKU and ImageFileNameOverride arguments are optional and will cause the ID to be used as the
  filename.
  Sample: <xsl:value-of select="aspdnsf:LookupImage(ID, EntityOrObjectname, DesiredSize, DesiredSize,
  IncludeATag)" disable-output-escaping="yes"/>

    Argument Name: ID
    Data Type: Integer
    Description: The ID of the object for which you want the image

    Argument Name: EntityOrObjectName
    Data Type: String <
    Description: The name of the object (“product”, “category”, “section”, etc.) for which you want the image

    Argument Name: ImageFileNameOverride
    Data Type: String
    Description: The desired object’s ImageFileNameOverride value (optional)

    Argument Name: SKU
    Data Type: String
    Description: The desired object’s SKU (optional, if using UseSKUForProductImageName)

    Argument Name: DesiredSize
    Data Type: String
    Description: icon, medium, large, swatch

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag around the <img> tag with the href attribute set to the page url

LookupProductImage
  Description: Returns an <img> tag specifically for a product. The ImageFileNameOverride or SKU parameter will
  allow this method to perform much faster than the standard LookupImage function if you use
  ImageFileNameOverride or UseSKUForProductImageName on your product's images. Either parameter
  can be an empty string if not used.
  Sample: <xsl:value-of select="aspdnsf:LookupProductImage(ProductID, ImageFileNameOverride, SKU,
  DesiredSize, IncludeATag)" disable-output-escaping="yes"/>

    Argument Name: ID
    Data Type: Integer
    Description: The ID of the product for which you want the image

    Argument Name: ImageFileNameOverride
    Data Type: String
    Description: The desired products’s ImageFileNameOverride value (optional)

    Argument Name: SKU
    Data Type: String
    Description: The desired product’s SKU (optional, if using UseSKUForProductImageName)

    Argument Name: DesiredSize
    Data Type: String
    Description: icon, medium, large, swatch

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag around the <img> tag with the href attribute set to the page url

LookupVariantImage
  Description: Returns an <img> tag specifically for a variant. The ImageFileNameOverride or SKU parameter will
  allow this method to perform much faster than the standard LookupImage function if you use
  ImageFileNameOverride or UseSKUForProductImageName on your product's images. Either parameter
  can be an empty string if not used.
  Sample: <xsl:value-of select="aspdnsf:LookupVariantImage(ProductID, VariantID, ImageFileNameOverride, SKU,
  DesiredSize, IncludeATag)" disable-output-escaping="yes"/>

    Argument Name: ProductID
    Data Type: Integer
    Description: The ID of the product for which you want the image

    Argument Name: VariantID
    Data Type: Integer
    Description: The ID of the variant for which you want the image

    Argument Name: ImageFileNameOverride
    Data Type: String
    Description: The desired products’s ImageFileNameOverride value (optional)

    Argument Name: SKU
    Data Type: String
    Description: The desired product’s SKU (optional, if using UseSKUForProductImageName)

    Argument Name: DesiredSize
    Data Type: String
    Description: icon, medium, large , swatch

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag around the <img> tag with the href attribute set to the page url

LookupZoomify
  Description: Displays the Zoomify image for the specified entity or product
  Sample:

    Argument Name: ID
    Data Type: String
    Description: The ID of the product or entity to find the image for

    Argument Name: EntityOrObjectName
    Data Type: String
    Description: The name of the object (“product”, “category”, “section”, etc.) for which you want the image

    Argument Name: DesiredSize
    Data Type: String
    Description: icon, medium, large

ManufacturerLink
  Description: Returns a page name for the specified Manufacturer page in the site, using static links if required
  (e.g.m-17-hats.aspx). NOTE: This function is for backward compatibility with Parser functions only and should not
  be used in XmlPackage transforms because it outputs invalid XML when using the IncludeATag.

  Sample: <xsl:value-of select=”aspdnsf:ManufacturerLink(ManufacturerID, SEName, TagInnerText)” disableoutput-
  escaping=”yes”>

    Argument Name: ManufacturerID
    Data Type: Integer
    Description: ID of the desired manufacturer

    Argument Name: SEName
    Data Type: String
    Description: The SEName field from the db for this manufacturer, if known. If blank, the store will figure it out, but
    that takes an extra database query

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag with the href attribute set to the page url

    Argument Name: TagInnerText
    Data Type: String
    Description: The text that goes inside the <a> tag, only used when the IncludeATag is true (set to empty string
    otherwise)

MicroPayBalance
  Description: Returns the current customer's MicroPay balance, localized if multiple currencies are set up.
  Sample:

MiniCartOrderOption
  Description:
  Sample:

    Argument Name: intOrderOptionID
    Data Type: String
    Description:

MiniCartProductImage
  Description: Returns the icon image for a product for display within the minicart.
  Sample:

    Argument Name: intProductID
    Data Type: String
    Description: Product for which you want the icon image

    Argument Name: ImageFileNameOverride
    Data Type: String
    Description: ImageFileNameOverride value for the product (if the product uses ImageFileNameOverride)

    Argument Name: SKU
    Data Type: String
    Description: Product SKU (if using UseSKUForProductImageName )

ObjectLink
  Description: Returns link to that Object page in the site, using static links if required (e.g. p--17-test.aspx). NOTE:
  This function is for backward compatibility with Parser functions only and should not be used in XmlPackage
  transforms because it outputs invalid XML when using the IncludeATag.

  Sample: <xsl:value-of select="aspdnsf:ObjectLink(ObjectID, SEName, EntityName, IncludeATag)" disable-output-
  escaping="yes"/>

    Argument Name: ObjectID
    Data Type: Integer
    Description: ID of the desired object

    Argument Name: SEName
    Data Type: String
    Description: The SEName field from the db for this object, if known. If blank, the store will figure it out, but that
    takes an extra database query

    Argument Name: EntityName
    Data Type: String
    Description: The name of the object (“product”, “category”, “section”, etc.)

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag with the href attribute set to the page url

OnLiveServer
  Description: Returns true if the LiveServer AppConfig has a value in it, false if not.
  Sample:

    Argument Name: NotUsed
    Data Type: String
    Description: Pass an empty string

OrderOptionsAsXML
  Description:
  Sample:

    Argument Name: strOrderOptions
    Data Type: String
    Description:

OrderShippingCalculation
  Description:
  Sample:

    Argument Name: PaymentMethod
    Data Type: String
    Description:

    Argument Name: ShippingMethod
    Data Type: String
    Description:

    Argument Name: ShippingTotal
    Data Type: String
    Description:

    Argument Name: ShippingCalculationID
    Data Type: String
    Description:

    Argument Name: ShipAddresses
    Data Type: String
    Description:

    Argument Name: IsAllDownloadComponents
    Data Type: String
    Description:

    Argument Name: IsAllFreeShippingComponents
    Data Type: String
    Description:

    Argument Name: IsAllSystemComponents
    Data Type: String
    Description:

Owns
  Description: Returns true if the Customer has previously purchased this product.
  Sample:

    Argument Name: ProductID
    Data Type: String
    Description: Product to check for previous purchases of

PagingControl
  Description: Displays the paging controls on product/entity pages
  Sample:

    Argument Name: BaseURL
    Data Type: String
    Description: URL for the product/entity main page (page 1, without ?pagenum params)

    Argument Name: PageNum
    Data Type: String
    Description: Current page number

    Argument Name: NumPages
    Data Type: String
    Description: Max number of pages for this product/entity

ProductAndCategoryLink
  Description: Returns link to that product page (with category breadcrumb navigation), using static links if required
  (e.g. p-17-boots.aspx). NOTE: This function is for backward compatibility with Parser functions only and should not
  be used in XmlPackage transforms because it outputs invalid XML when using the IncludeATag.

  Sample: <xsl:value-of select="aspdnsf:ProductandCategoryLink(ProductID, SEName, CategoryID, IncludeATag)"
  disable-output-escaping="yes"/>

    Argument Name: ProductID
    Data Type: Integer
    Description: ID of the desired product

    Argument Name: SEName
    Data Type: String
    Description: The SEName field from the db for this product, if known. If blank, the store will figure it out, but that
  takes an extra database query

    Argument Name: CategoryID
    Data Type: String
    Description: ID of the category to display breadcrumbs for

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag with the href attribute set to the page url

ProductAndEntityLink
  Description: Returns link to that product page (with entity breadcrumb navigation), using static links if required
  (e.g. p-17-boots.aspx). NOTE: This function is for backward compatibility with Parser functions only and should not
  be used in XmlPackage transforms because it outputs invalid XML when using the IncludeATag.

  Sample: <xsl:value-of select="aspdnsf:ProductAndEntityLink(ProductID, SEName, EntityID, EntityName,
  IncludeATag)" disable-output-escaping="yes"/>

    Argument Name: ProductID
    Data Type: Integer
    Description: ID of the desired product

    Argument Name: SEName
    Data Type: String
    Description: The SEName field from the db for this product, if known. If blank, the store will figure it out, but that
    takes an extra database query

    Argument Name: EntityID
    Data Type: String
    Description: ID of the category to display breadcrumbs for

    Argument Name: EntityName
    Data Type: String
    Description: "category", "section", "manufacturer", etc

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag with the href attribute set to the page url

ProductAndManufacturerLink
  Description: Returns link to that product page (with manufacturer breadcrumb navigation), using static links if
  required (e.g. p-17-boots.aspx). NOTE: This function is for backward compatibility with Parser functions only and
  should not be used in XmlPackage transforms because it outputs invalid XML when using the IncludeATag.

  Sample: <xsl:value-of select="aspdnsf:ProductandManufacturerLink(ProductID, SEName, ManufacturerID,
  IncludeATag)" disable-output-escaping="yes"/>

    Argument Name: ProductID
    Data Type: Integer
    Description: ID of the desired product

    Argument Name: SEName
    Data Type: String
    Description: The SEName field from the db for this product, if known. If blank, the store will figure it out, but that
    takes an extra database query

    Argument Name: ManufacturerID
    Data Type: String
    Description: ID of the manufacturer to display breadcrumbs for

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag with the href attribute set to the page url

ProductAndSectionLink
  Description: Returns link to that product page (with section breadcrumb navigation), using static links if
  required (e.g. p-17-boots.aspx). NOTE: This function is for backward compatibility with Parser functions only and
  should not be used in XmlPackage transforms because it outputs invalid XML when using the IncludeATag.

  Sample: <xsl:value-of select="aspdnsf:ProductandSectionLink(ProductID, SEName, SectionID,
  IncludeATag)" disable-output-escaping="yes"/>

    Argument Name: ProductID
    Data Type: Integer
    Description: ID of the desired product

    Argument Name: SEName
    Data Type: String
    Description: The SEName field from the db for this product, if known. If blank, the store will figure it out, but that
    takes an extra database query

    Argument Name: SectionID
    Data Type: String
    Description: ID of the section to display breadcrumbs for

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag with the href attribute set to the page url

ProductDescriptionFile
  Description: Returns the contents the product description file
  Sample: <xsl:value-of select="aspdnsf:ProductDescriptionFile(ProductID, IncludeBRBefore)" disable-
  outputescaping="yes"/>

    Argument Name: ProductID
    Data Type: String
    Description: Product to find the description file for

    Argument Name: IncludeBRBefore
    Data Type: Boolean
    Description: Return a <br> tag before the contents of the file if true

ProductEntityList
  Description: Returns a list of all the entities of the specified type that the specified product is mapped to, with a link
  to the landing page for each entity.
  Sample:

    Argument Name: ProductID
    Data Type: String
    Description: Specified product

    Argument Name: EntityName
    Data Type: String
    Description: "category", "section", "manufacturer", etc

ProductImageUrl
  Description: Returns the path (relative or full URL) to the specified product image.
  Sample: <xsl:value-of select="aspdnsf:ProductImageUrl(ProductID, ImageFileNameOverride, SKU, DesiredSize,
  FullUrl)" disable-output-escaping="yes"/>

    Argument Name: ProductID
    Data Type: String
    Description: Specified product

    Argument Name: ImageFileNameOverride
    Data Type: String
    Description: The desired product’s ImageFileNameOverride value (optional)

    Argument Name: SKU
    Data Type: String
    Description: The desired product’s SKU (optional, if using UseSKUForProductImageName)

    Argument Name: DesiredSize
    Data Type: String
    Description: icon, medium, large

    Argument Name: FullUrl
    Data Type: String
    Description: Determine whether the path is a relative path (e.g. images/product/icon/imgname.jpg) or a full URL
    (e.g. http://www.mydomain.com/images/product/medium/myimage.jpg)

ProductLink
  Description: Returns a link to that product page, using static links if required (e.g. p-17-boots.aspx). NOTE: This
  function is for backward compatibility with Parser functions only and should not be used in XmlPackage transforms
  because it outputs invalid XML when using the IncludeATag.

  Sample: <xsl:value-of select="aspdnsf:ProductLink(ProductID, SEName, IncludeATag)" disable-output-
  escaping="yes"/>

    Argument Name: ProductID
    Data Type: Integer
    Description: ID of the desired product

    Argument Name: SEName
    Data Type: String
    Description: The SEName field from the db for this product, if known. If blank, the store will figure it out, but that
  takes an extra database query

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag with the href attribute set to the page url

ProductNavLinks
  Description: Returns the next-previous product navigation for products within the specified category or section
  Sample: <xsl:value-of select="aspdnsf:ProductNavLinks(ProductID, SectionID)" disable-output-escaping="yes"/>

    Argument Name: ProductID
    Data Type: String
    Description: Specified product

    Argument Name: SectionID
    Data Type: String
    Description: Desired section (specify this OR category)

    Argument Name: CategoryID
    Data Type: String
    Description: Desired category (specify this OR section)

ProductProperName
  Description: Returns the full localized name of a product (parent product name + variant name)
  Sample: <xsl:value-of select="aspdnsf:ProductProperName(ProductID, VariantID)" disable-output-
  escaping="yes"/>

    Argument Name: ProductID
    Data Type: String
    Description: Specified product

    Argument Name: VariantID
    Data Type: String
    Description: Specified variant

ProductRatings
  Description: Returns the Product Rating display
  Sample: <xsl:value-of select="aspdnsf:ProductRatings(ProductID, CategoryID, SectionID, ManufacturerID,
  IncludeBRBefore)" disable-output-escaping="yes"/>

    Argument Name: ProductID
    Data Type: String
    Description: Product to display ratings for

    Argument Name: CategoryID
    Data Type: String
    Description:

    Argument Name: SectionID
    Data Type: String
    Description:

    Argument Name: ManufacturerID
    Data Type: String
    Description:

    Argument Name: IncludeBRBefore
    Data Type: String
    Description: Return a <br> tag and a dividing line between the product description section and the ratings if true

ProductSpecs
  Description: Returns the contents the product spec file
  Sample: <xsl:value-of select="aspdnsf:ProductSpecs(ProductID, IncludeBRBefore, ShowSpecsInline, SpecUrl,
  IFrameHeight)" disable-outputescaping="yes"/>

    Argument Name: ProductID
    Data Type: String
    Description: Product to find the spec file for

    Argument Name: IncludeBRBefore
    Data Type: String
    Description: Return a <br> tag before the contents of the file if true

    Argument Name: ShowSpecsInline
    Data Type: String
    Description: If true, specs will be displayed normally on the page immediately below the product description

    Argument Name: SpecUrl
    Data Type: String
    Description: If the specs are hosted off-site, provide the URL here and they will be displayed in an iFrame

    Argument Name: IFrameHeight
    Data Type: String
    Description: Height of the iFrame if off-site specs are being used

ProductSpecsLink
  Description:
  Sample:

    Argument Name: ProductID
    Data Type: String
    Description:

    Argument Name: ShowSpecsInline
    Data Type: String
    Description:

    Argument Name: SpecTitle
    Data Type: String
    Description:

    Argument Name: SKU
    Data Type: String
    Description:

    Argument Name: SpecUrl
    Data Type: String
    Description:

ReadFile
  Description: Outputs the contents of the specified file (for example, a JS file)
  Sample:

    Argument Name: FName
    Data Type: String
    Description: File to read/display. This can be just the filename, the software will scan the whole virtual folder the
    site resides in first, then attempt to do a drive search to find the file.

RelatedProducts
  Description: Runs the relatedproducts.xml.config Xml Package to display related products
  Sample:

    Argument Name: ProductID
    Data Type: String
    Description: Product to display related products of

RemoteUrl
  Description:
  Sample:

    Argument Name: URL
    Data Type: String
    Description: Calls a remote URL and returns the response

ReplaceNewLineWithBR
  Description: Replaces any occurences of \n with <br/>
  Sample:

    Argument Name: Content
    Data Type: String
    Description: Text to perform the find/replace on

SearchBox
  Description: Returns a form that contains an input control and submit button and posts to the search.aspx page
  Sample: <xsl:value-of select="aspdnsf:SearchBox()" disable-output-escaping="yes"/>

SectionLink
  Description:
  Sample:

  Description: Returns a page name for the specified Section page in the site, using static links if required (e.g.s-
  17-boots.aspx). NOTE: This function is for backward compatibility with Parser functions only and should not be used
  in XmlPackage transforms because it outputs invalid XML when using the IncludeATag.

  Sample: <xsl:value-of select="aspdnsf:SectionLink (SectionID, SEName, IncludeATag, TagInnerText)"
  disableoutput-escaping="yes"/>

    Argument Name: SectionID
    Data Type: Integer
    Description: ID of the desired category

    Argument Name: SEName
    Data Type: String
    Description: The SEName field from the db for this section, if known. If blank, the store will figure it out, but that
    takes an extra database query

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag with the href attribute set to the page url

    Argument Name: TagInnerText
    Data Type: String
    Description: The text that goes inside the <a> tag, only used when the IncludeATag is true (set to empty string
    otherwise)

SelectElementsFromIDDelimitedString
  Description:
  Sample:

    Argument Name: delimitedString
    Data Type: String
    Description:

    Argument Name: delimiter
    Data Type: String
    Description:

    Argument Name: selection
    Data Type: XPathNodeIterator
    Description:

    Argument Name: element
    Data Type: String
    Description:

SendMail
  Description: Sends an email with the details specified below, using the AppLogic.SendMail function. MailMe_From*
  AppConfigs are used for the email's 'From' data.
  Sample:

    Argument Name: Subject
    Data Type: String
    Description: Desired Subject line

    Argument Name: Body
    Data Type: String
    Description: Content of the email

    Argument Name: UseHtml
    Data Type: String
    Description: (true/false) Should the email body be in HTML format

    Argument Name: ToAddress
    Data Type: String
    Description: Destination address

SetTrace
  Description: If the HttpContext.Current.Items collection does not already contain an XmlPackageTracePoint, it is
  added and set to the value of the TraceName param. If the XmlPackageTracePoint already exists, it is overwritten
  with the new value.
  Sample:

    Argument Name: TraceName
    Data Type: String
    Description: Value to insert

ShowInventoryTable
  Description: If the ShowInventoryTable AppConfig is true, this will return a table with the product's inventory
  status. Normal store customers will see only "Yes/No" for in-stock, store admins will see actual stock levels.
  Sample:

    Argument Name: ProductID
    Data Type: String
    Description: Product to display the inventory for

ShowQuantityDiscountTable
  Description: If the specified product has an active quantity discount table, the discount displayed.
  Sample:

    Argument Name: ProductID
    Data Type: String
    Description: Product to display the quantity discount table for

ShowRelatedProducts
  Description: Deprecated, use RelatedProducts instead.
  Sample:

ShowUpsellProducts
  Description: Displays upsell products for the specified product ID
  Sample:

    Argument Name: ProductID
    Data Type: String
    Description: Product to display upsell products for

SizeColorQtyOption
  Description: Returns the controls that allow customers to enter a quantity, set a price (if needed), and choose
  sizes/colors.
  Sample:

    Argument Name: ProductID
    Data Type: String
    Description: Product to display controls for

    Argument Name: VariantID
    Data Type: String
    Description: Variant to display controls for

    Argument Name: Colors
    Data Type: String
    Description:

    Argument Name: Sizes
    Data Type: String
    Description:

    Argument Name: ColorPrompt
    Data Type: String
    Description:

    Argument Name: SizePrompt
    Data Type: String
    Description:

    Argument Name: RestrictedQuantities
    Data Type: String
    Description:

    Argument Name: boolCustomerEntersPrice
    Data Type: String
    Description:

    Argument Name: CustomerEntersPricePrompt
    Data Type: String
    Description:

    Argument Name: intTaxClassID
    Data Type: String
    Description:

SkinID
  Description: Returns the # of the skin the current customer is seeing the site in.
  Sample:

SplitString
  Description: Splits a string and puts it inside tags using the specified TagName, e.g.
  <TagName>value1</TagName><TagName>value2</TagName>,etc. The values will be XML Encoded.
  Sample:

    Argument Name: S
    Data Type: String
    Description: String to split

    Argument Name: Delimiter
    Data Type: String
    Description: Character to split the string on

    Argument Name: TagName
    Data Type: String
    Description: Tag to put the split strings in

Store_Version
  Description: Returns the store version
  Sample:

    Argument Name: NotUsed
    Data Type: String
    Description: Pass an empty string

StoreVersion
  Description: Returns the store version
  Sample:

    Argument Name: NotUsed
    Data Type: String
    Description: Pass an empty string

StrCapitalize
  Description: Returns capitalized (first letter only) string (invariant culture).
  Sample:

    Argument Name: S
    Data Type: String
    Description: String to capitalize

StrFormat
  Description: Uses a delimited list of params to format a string that has format tags in it.
  Sample:

    Argument Name: SrcString
    Data Type: String
    Description: String to format

    Argument Name: FormatParams
    Data Type: String
    Description: Delimited list of Format tags

    Argument Name: Delimiter
    Data Type: String
    Description: Delimiter char to split the list of FormatParams on

StrFormatString Resource
  Description: Uses a delimited list of params to format a StringResource that has format tags in it.
  Sample:

    Argument Name: StringResourceName
    Data Type: String
    Description: String resource to format

    Argument Name: FormatParams
    Data Type: String
    Description: Delimited list of Format tags

    Argument Name: Delimiter
    Data Type: String
    Description: Delimiter char to split the list of FormatParams on

StringResource
  Description: Returns the specified string resource value.
  Sample: <xsl:value-of select="aspdnsf:StringResource(StringResourceName)" disable-output-escaping="yes"/>

    Argument Name: StringResourceName
    Data Type: String
    Description: String resource to return

StripHtml
  Description: Strings HTML tags out of a supplied string.
  Sample:

    Argument Name: TheString
    Data Type: String
    Description: String to remove HTML tags from

StrReplace
  Description: Replaces the old value of a string with a new value
  Sample:

    Argument Name: S
    Data Type: String
    Description: String to be changed

    Argument Name: OldValue
    Data Type: String
    Description: String's current value

    Argument Name: NewValue
    Data Type: String
    Description: New value to be assigned

StrToLower
  Description: Returns lowercase of a string (invariant culture).
  Sample:

    Argument Name: S
    Data Type: String
    Description: String to be made lowercase

StrToUpper
  Description: Returns uppercase of a string (invariant culture).
  Sample:

    Argument Name: S
    Data Type: String
    Description: String to be made uppercase

StrTrim
  Description: Returns trimmed (no trailing/leading whitespace) string.
  Sample:

    Argument Name: S
    Data Type: String
    Description: String to be trimmed

StrTrimEnd
  Description: Returns a string with any trailing whitespace trimmed.
  Sample:

    Argument Name: S
    Data Type: String
    Description: String to be trimmed

StrTrimStart
  Description: Returns a string with any leading whitespace trimmed.
  Sample:

    Argument Name: S
    Data Type: String
    Description: String to be trimmed

ToLower
  Description: Returns a copy of the specified string converted to lowercase using the casing rules of the invariant
  culture.
  Sample:

    Argument Name: StrValue
    Data Type: String
    Description: String to be converted

Topic
  Description: Returns the contents of the specified topic with any parser tokens replaced with their intended values.
  NOTE: If the TopicName and TopicID provided do not reference the same topic, the topic specified by Name will be
  returned.

  Sample:

    Argument Name: TopicName
    Data Type: String
    Description: Name of the topic to replace

    Argument Name: TopicID
    Data Type: String
    Description: ID of the topic to replace
ToUpper
  Description: Returns a copy of the specified string converted to uppercase using the casing rules of the invariant
  culture.
  Sample:

    Argument Name: StrValue
    Data Type: String
    Description: String to be converted

UpsellProducts
  Description: Deprecated, use ShowUpsellProducts instead.

User_Menu_Name
  Description: If the customer is not logged in, returns the value of skinbase.cs.7. If they are, it returns the full
  customer name.
  Sample:

User_Name
  Description: If the current customer is not logged in, returns an emptry string. If the current user is an admin,
  returns the full name. If the current user is a customer, returns the value of skinbase.cs.1 + their name and their
  customer level name (if any) as a link to the account page.
  Sample:

VectorLink
  Description: Returns a page name for the specified Vector page in the site, using static links if required (e.g.
  v-17-hats.aspx). NOTE: This function is for backward compatibility with Parser functions only and should not be
  used in XmlPackage transforms because it outputs invalid XML when using the IncludeATag.

  Sample: <xsl:value-of select=”aspdnsf:VectorLink(VectorID, SEName, TagInnerText)” disableoutput-
  escaping=”yes”>

    Argument Name: VectorID
    Data Type: Integer
    Description: ID of the desired vector

    Argument Name: SEName
    Data Type: String
    Description: The SEName field from the db for this vector, if known. If blank, the store will figure it out, but that
  takes an extra database query

    Argument Name: IncludeATag
    Data Type: Boolean
    Description: Returns an <a> tag with the href attribute set to the page url

    Argument Name: TagInnerText
    Data Type: String
    Description: The text that goes inside the <a> tag, only used when the IncludeATag is true (set to empty string
  otherwise)

XmlPackage
  Description: Returns the finale, transformed results of running the specified XML package, named with a .xml.config
  extension. NOTE: Be careful that the XML Package does not refer to itself directly or indirectly or you could cause
  endless recursion!

  Sample:

    Argument Name: PackageName
    Data Type: String
    Description: XML Package to run

XmlPackageAsXML
  Description: Returns XML ready to be modified or traversed using the available .NET methods for working with XML
  Sample:

    Argument Name: packageName
    Data Type: String
    Description: Package to run

    Argument Name: runtimeParams
    Data Type: String
    Description: Parameters to use when running the specified XML Package<




More to come...