When writing expressions, it is typically necessary to access the objects within the "context" of the calculation (for both Shipping Rates and Payment Methods). The context includes the Customer and the Shopping Cart (Items) among other objects. For example, if you need to know how many items are in the cart, the expression might look like: Items.Count(). Items is a collection, and "Count()" is a a built in method (Linq) that counts the number of items in a collection. NopCommerce objects have properties - e.g. a (shopping cart) Item has a Product property and a Quantity property. So, Items.Count() is not really an accurate count of the # of products in the cart. To do that, you need to sum the Quantity: Items.Sum(Quantity). Without going into details about writing Linq expressions, suffice it to say that to use them in SD & PD it's necessary to access properties of nopCommerce objects, and we sometimes need helper methods that are more specific to nopCommerce objects (see this blog about Shopping Cart Object and Query Operators , but note it's based on the older nopCommerce versions that had product variants). So, here's a list of helper methods (and also includes String helper methods). To use them, follow the nopCommerce object with a "." followed by the method name - e.g. Customer.IsInRole("Member"). In the future, I'll come back and fill in the Description column with more info/examples.
Class / Extension | Return | Description |
String |
|
|
SubstringAfter(value [,includeDelimiter = false]) | String |
|
SubstringBefore(value [,includeDelimiter = false]) | String |
|
SubstringBetween(value [,includeDelimiter = false]) | String |
|
SubstringRemove(value | String |
|
SubstringRemoveIgnoreCase(value) | String |
|
ToTitleCase() | String |
|
ToOnlyAlphaAndDigits() | String |
|
Split(string [,separator]) | String |
|
IsNumeric() | Boolean |
|
IsInteger() | Boolean |
|
SelectSingleNode(xpath) | XmlNode |
|
Customer |
|
|
IsInRole(roleSystemName) (or IsInCustomerRole(roleSystemName) ) | Boolean | E.g. Customer.IsInRole("Free Shipping") Be sure to assign the Role's "System name" field. If you need to do a wildcard match, use e.g. Customer.CustomerRoles.Any(SystemName.Contains("Discount")) (UPDATE: The CustomerRoles collection no longer works as of SD for 4.30 - |
GetAttribute(attributeName) | String |
|
GetAttributeValues(attributeName [valueSeparator]) | String | attribute value, or if list/checkboxes, then separated list of selected values for attribute (nopC 3.30+) |
HasAttributeValue(attributeName) HasAttributeValue(attributeName, valueName)HasAttributeValue(attributeName, valueId) | Boolean | True if has attribute [and value] |
HasDiscountCouponCode("couponcode") | Boolean | True if customer used coupon code. (Case is ignored,) |
AppliedDiscountCouponCodes() | string[] | You can use .Contains(), .Any(), etc. to test the array Example: Customer.AppliedDiscountCouponCodes().Any() |
GetOrders() | Orders collection |
|
GetRewardPointsBalancePoints() | Integer |
|
GetRewardPointsBalanceAmount() | Decimal |
|
Product |
|
|
HasCategory(categoryName) | Boolean | Example: Product.HasCategory("Free Shipping") |
HasCategory(categoryId) | Boolean | Example: Product.HasCategory(5) |
HasCategoryMatch(categoryNameRegex) | Boolean | Example: Product.HasCategoryMatch("Brushes") (has a category that has the word "Brushes" in its name) |
HasParentCategory(categoryName) | Boolean |
|
HasParentCategory(categoryId) | Boolean |
|
HasParentCategoryMatch(categoryNameRegex) | Boolean |
|
HasManufacturer(manufacturerName) | Boolean |
|
HasManufacturer(manufacturerId) | Boolean |
|
ShoppingCartItem |
|
|
GetWeight() | Decimal | Shopping Cart Item Weight (Includes attribute weight if any.) (The weight is for single item; multiply by Quantity if required) |
GetAttributeValues(attributeName [, valueSeparator = ", "]) | String | returns string of separated values for given attributeName |
HasAttributeValue(attributeName [, valueName]) | Boolean | if no valueName param passed, then any for given attributeName |
HasAttributeValue(valueId) | Boolean |
|
GetVendor() | Vendor |
|
GetVendorAddresses() | Address collection |
|
GetShippingOriginAddress() | Address | If the product has a warehouse assigned, then this returns that warehouse's address, otherwise it returns the shipping origin address in Shipping Settings. example: surcharge if any cart items are being shipped from Zip Code 12345 Decimal Surcharge Items.Any(GetShippingOriginAddress().ZipPostalCode = "12345") ? 2 : 0 |
GetWarehouse() | Warehouse |
|
GetSubTotalWithDiscounts() | Decimal |
|
GetSubTotalWithoutDiscounts() | Decimal |
|
HasSku(sku) | Boolean | Will also test against product attribute combinations SKU |
Address |
|
|
ToSenderString([defaultIfNone]) | String | * |
GetState() | StateProvince | In Shipping Director you can just use State to get the two character state abbreviation. |
GetCountry() | Country | In Shipping Director you can just use Country to get the two character country code. |
ZipPostalCode | string | In Shipping Director you can just use Zip to get the postal zip code. |
GetAttributeValues() | string | Since attributes can be defined as checkboxes that can multi-select |
Warehouse |
|
|
ToSenderString([defaultIfNone]) | String | ** |
GetAddress() | String | Check that a product has a warehouse before using this. It's safer to use an Item's GetShippingOrigiAddress() (see above) |
(Root) |
|
|
GetLocaleStringResourceByName(resourceName) | String |
|
*SenderStringFormat - Address
{Company}:Address={Address1};City={City};StateProvince={StateProvince};ZipCode={ZipPostalCode};Country={Country.TwoLetterIsoCode};
*SenderStringFormat - Warehouse
{Warehouse.Name}:Address={Address1};City={City};StateProvince={StateProvince};ZipCode={ZipPostalCode};Country={Country.TwoLetterIsoCode};