> ## Documentation Index
> Fetch the complete documentation index at: https://docs.superoffice.com/llms.txt
> Use this file to discover all available pages before exploring further.

# NSProduct

> Information about a Product from the ERP system. This may be fetched from SuperOffice Product table through the SO Connector.

Information about a Product from the ERP system. This may be fetched from SuperOffice Product table through the SO Connector.

## Constructors

### NSProduct()

```crmscript theme={null}
NSProduct
```

Initializes a new instance of the NSProduct class.

## Methods

## GetCode()

```crmscript theme={null}
String GetCode()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - The product code / article number in the product supplier system.

**Example:**

```crmscript theme={null}
NSProduct thing;
String code = thing.GetCode();
```

## GetDefaultSubscriptionQuantity()

```crmscript theme={null}
Float GetDefaultSubscriptionQuantity()
```

**Returns:** [CRMScript.Global.Float](CRMScript.Global.Float) - The default number of SubscriptionUnits to suggest when creating quote lines from this product.

**Example:**

```crmscript theme={null}
NSProduct thing;
Float defaultSubscriptionQuantity = thing.GetDefaultSubscriptionQuantity();
```

## GetDescription()

```crmscript theme={null}
String GetDescription()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - The description to use, with potentially several lines. Will be used as tool-tip to use in the list user interface too.

**Example:**

```crmscript theme={null}
NSProduct thing;
String description = thing.GetDescription();
```

## GetERPPriceListKey()

```crmscript theme={null}
String GetERPPriceListKey()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - Foreign key to the price list that this product is a part of, or the primary key of the price list if this is a built-in list.

**Example:**

```crmscript theme={null}
NSProduct thing;
String eRPPriceListKey = thing.GetERPPriceListKey();
```

## GetERPProductKey()

```crmscript theme={null}
String GetERPProductKey()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - Reference/foreign key to the product in the given price list in the product supplier system, if it exists there.

**Example:**

```crmscript theme={null}
NSProduct thing;
String eRPProductKey = thing.GetERPProductKey();
```

## GetExtraField1()

```crmscript theme={null}
String GetExtraField1()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - A simple field for adding information that the Connector can provide, and that the quote document need to display.

**Example:**

```crmscript theme={null}
NSProduct thing;
String extraField1 = thing.GetExtraField1();
```

## GetExtraField2()

```crmscript theme={null}
String GetExtraField2()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - A simple field for adding information that the Connector can provide, and that the quote document need to display.

**Example:**

```crmscript theme={null}
NSProduct thing;
String extraField2 = thing.GetExtraField2();
```

## GetExtraField3()

```crmscript theme={null}
String GetExtraField3()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - A simple field for adding information that the Connector can provide, and that the quote document need to display.

**Example:**

```crmscript theme={null}
NSProduct thing;
String extraField3 = thing.GetExtraField3();
```

## GetExtraField4()

```crmscript theme={null}
String GetExtraField4()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - A simple field for adding information that the Connector can provide, and that the quote document need to display.

**Example:**

```crmscript theme={null}
NSProduct thing;
String extraField4 = thing.GetExtraField4();
```

## GetExtraField5()

```crmscript theme={null}
String GetExtraField5()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - A simple field for adding information that the Connector can provide, and that the quote document need to display.

**Example:**

```crmscript theme={null}
NSProduct thing;
String extraField5 = thing.GetExtraField5();
```

## GetExtraInfo()

```crmscript theme={null}
NSProductExtraDataField[] GetExtraInfo()
```

**Returns:** [CRMScript.NetServer.NSProductExtraDataField](CRMScript.NetServer.NSProductExtraDataField)\[] - Extra information, supplied by QuoteConnector, used by a future dynamic GUI extension.

**Example:**

```crmscript theme={null}
NSProduct thing;
NSProductExtraDataField[] extraInfo = thing.GetExtraInfo();
```

## GetInAssortment()

```crmscript theme={null}
Bool GetInAssortment()
```

**Returns:** [CRMScript.Global.Bool](CRMScript.Global.Bool) - True for products that should currently be offered, false when the product is discontinued and should not ordinarily be offered. When false the product no longer appears in search results.

**Example:**

```crmscript theme={null}
NSProduct thing;
Bool inAssortment = thing.GetInAssortment();
```

## GetInStock()

```crmscript theme={null}
Float GetInStock()
```

**Returns:** [CRMScript.Global.Float](CRMScript.Global.Float) - Negative numbers will be interpreted as how many is ordered. Might not be available.

**Example:**

```crmscript theme={null}
NSProduct thing;
Float inStock = thing.GetInStock();
```

## GetIsSubscription()

```crmscript theme={null}
Bool GetIsSubscription()
```

**Returns:** [CRMScript.Global.Bool](CRMScript.Global.Bool) - Is this a subscription product, sold in repeating intervals/amounts?

**Example:**

```crmscript theme={null}
NSProduct thing;
Bool isSubscription = thing.GetIsSubscription();
```

## GetItemNumber()

```crmscript theme={null}
String GetItemNumber()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - Line item number, NOR «Postnummer». Specific numbers from some hierarchy, for instance "1.4.3.2P".

<Note>
  Typically used to sort the items in the quote by some standard way.
</Note>

**Example:**

```crmscript theme={null}
NSProduct thing;
String itemNumber = thing.GetItemNumber();
```

## GetName()

```crmscript theme={null}
String GetName()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - The name to use in the user interface.

**Example:**

```crmscript theme={null}
NSProduct thing;
String name = thing.GetName();
```

## GetPriceUnit()

```crmscript theme={null}
String GetPriceUnit()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - What is the unit (meter, ton, bushel, microsecond, gradus, τρυβλίον, 五合枡, دونم or whatever); read-only for lines that originate in defined products.

**Example:**

```crmscript theme={null}
NSProduct thing;
String priceUnit = thing.GetPriceUnit();
```

## GetProductCategoryKey()

```crmscript theme={null}
String GetProductCategoryKey()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - Either a ListId to an ID from a connector provided list, or, if the connection doesn't support lists, a text with the actual product category.

**Example:**

```crmscript theme={null}
NSProduct thing;
String productCategoryKey = thing.GetProductCategoryKey();
```

## GetProductFamilyKey()

```crmscript theme={null}
String GetProductFamilyKey()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - Either a ListId to an ID from a connector provided list, or, if the connection doesn't support lists, a text with the actual product family.

**Example:**

```crmscript theme={null}
NSProduct thing;
String productFamilyKey = thing.GetProductFamilyKey();
```

## GetProductId()

```crmscript theme={null}
Integer GetProductId()
```

**Returns:** [CRMScript.Global.Integer](CRMScript.Global.Integer) - Primary key.

**Example:**

```crmscript theme={null}
NSProduct thing;
Integer productId = thing.GetProductId();
```

## GetProductTypeKey()

Either a ListId to an ID from a connector provided list, or, if the connection doesn't support lists, a text with the actual product type.

```crmscript theme={null}
String GetProductTypeKey()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String)

**Example:**

```crmscript theme={null}
NSProduct thing;
String productTypeKey = thing.GetProductTypeKey();
```

## GetQuantityUnit()

```crmscript theme={null}
String GetQuantityUnit()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - What is the unit (meter, ton, bushel, microsecond, gradus, τρυβλίον, 五合枡, دونم or whatever); Connector handles conversion relative to PriceUnit if they are different.

**Example:**

```crmscript theme={null}
NSProduct thing;
String quantityUnit = thing.GetQuantityUnit();
```

## GetRawExtraInfo()

```crmscript theme={null}
String GetRawExtraInfo()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - Read-only extra information in plain text, supplied by QuoteConnector, used by a future dynamic GUI extension.

**Example:**

```crmscript theme={null}
NSProduct thing;
String rawExtraInfo = thing.GetRawExtraInfo();
```

## GetRights()

```crmscript theme={null}
String GetRights()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - Field1=right\&Field2=right, etc. of any fields that have non-standard field access rights. Rights can be one of N (=None or Hidden), R (=Read-only), W (=Writeable), M (=Mandatory). The fields will mostly be from the Quoteline table, but some added fields that are conceptually part of the quoteline, like Image will also be possibly to set rights on.

<Note>
  Will be used by SuperOffice to control the user interface when showing the record.
</Note>

**Example:**

```crmscript theme={null}
NSProduct thing;
String rights = thing.GetRights();
```

## GetRule()

```crmscript theme={null}
String GetRule()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - The names of one or more calculation rules that are in effect for this line, comma-separated case-insensitive.

<Note>
  Will NOT be used by SuperOffice.
</Note>

**Example:**

```crmscript theme={null}
NSProduct thing;
String rule = thing.GetRule();
```

## GetSubscriptionUnit()

```crmscript theme={null}
String GetSubscriptionUnit()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - Either a ListId to an ID from a connector provided list, or, if the connection doesn't support lists, a text with the actual subscription unit.

**Example:**

```crmscript theme={null}
NSProduct thing;
String subscriptionUnit = thing.GetSubscriptionUnit();
```

## GetSupplier()

```crmscript theme={null}
String GetSupplier()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - In SuperOffice, an ID from the contact table, when saved as an ERP cache, the name of the supplier.

**Example:**

```crmscript theme={null}
NSProduct thing;
String supplier = thing.GetSupplier();
```

## GetSupplierCode()

```crmscript theme={null}
String GetSupplierCode()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - Suppliers part code/number or other key-like field.

**Example:**

```crmscript theme={null}
NSProduct thing;
String supplierCode = thing.GetSupplierCode();
```

## GetUnitCost()

```crmscript theme={null}
Float GetUnitCost()
```

**Returns:** [CRMScript.Global.Float](CRMScript.Global.Float) - The cost price. Might not be given, use Decimal.MinValue to signal this.

**Example:**

```crmscript theme={null}
NSProduct thing;
Float unitCost = thing.GetUnitCost();
```

## GetUnitListPrice()

```crmscript theme={null}
Float GetUnitListPrice()
```

**Returns:** [CRMScript.Global.Float](CRMScript.Global.Float) - The basic/normal/standard price from which the discount is computed from.

<Note>
  The ListPrice will stay the same even when a larger amount is ordered.
</Note>

**Example:**

```crmscript theme={null}
NSProduct thing;
Float unitListPrice = thing.GetUnitListPrice();
```

## GetUnitMinimumPrice()

```crmscript theme={null}
Float GetUnitMinimumPrice()
```

**Returns:** [CRMScript.Global.Float](CRMScript.Global.Float) - The minimum price this salesman can offer to his customer. This might be cost price if there is no policy. Might not be given, use Decimal.MinValue to signal this.

**Example:**

```crmscript theme={null}
NSProduct thing;
Float unitMinimumPrice = thing.GetUnitMinimumPrice();
```

## GetUrl()

```crmscript theme={null}
String GetUrl()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - URL to product information web page.

**Example:**

```crmscript theme={null}
NSProduct thing;
String url = thing.GetUrl();
```

## GetVAT()

```crmscript theme={null}
Float GetVAT()
```

**Returns:** [CRMScript.Global.Float](CRMScript.Global.Float) - Tax/VAT if available from ERP system. THIS IS A PERCENTAGE.

<Note>
  In the Superoffice product register, this field is available in the product admin GUI.
</Note>

**Example:**

```crmscript theme={null}
NSProduct thing;
Float vAT = thing.GetVAT();
```

## GetVATInfo()

```crmscript theme={null}
String GetVATInfo()
```

**Returns:** [CRMScript.Global.String](CRMScript.Global.String) - VATInfo you need to show in the final quoteDocument, like the VAT type that is used.

<Note>
  Not used in any business logic in SuperOffice; available to document templates.
</Note>

**Example:**

```crmscript theme={null}
NSProduct thing;
String vATInfo = thing.GetVATInfo();
```

## SetCode(String)

```crmscript theme={null}
Void SetCode(String code)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String code;
thing.SetCode(code);
```

## SetDefaultSubscriptionQuantity(Float)

```crmscript theme={null}
Void SetDefaultSubscriptionQuantity(Float defaultSubscriptionQuantity)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
Float defaultSubscriptionQuantity;
thing.SetDefaultSubscriptionQuantity(defaultSubscriptionQuantity);
```

## SetDescription(String)

```crmscript theme={null}
Void SetDescription(String description)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String description;
thing.SetDescription(description);
```

## SetERPPriceListKey(String)

```crmscript theme={null}
Void SetERPPriceListKey(String eRPPriceListKey)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String eRPPriceListKey;
thing.SetERPPriceListKey(eRPPriceListKey);
```

## SetERPProductKey(String)

```crmscript theme={null}
Void SetERPProductKey(String eRPProductKey)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String eRPProductKey;
thing.SetERPProductKey(eRPProductKey);
```

## SetExtraField1(String)

```crmscript theme={null}
Void SetExtraField1(String extraField1)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String extraField1;
thing.SetExtraField1(extraField1);
```

## SetExtraField2(String)

```crmscript theme={null}
Void SetExtraField2(String extraField2)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String extraField2;
thing.SetExtraField2(extraField2);
```

## SetExtraField3(String)

```crmscript theme={null}
Void SetExtraField3(String extraField3)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String extraField3;
thing.SetExtraField3(extraField3);
```

## SetExtraField4(String)

```crmscript theme={null}
Void SetExtraField4(String extraField4)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String extraField4;
thing.SetExtraField4(extraField4);
```

## SetExtraField5(String)

```crmscript theme={null}
Void SetExtraField5(String extraField5)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String extraField5;
thing.SetExtraField5(extraField5);
```

## SetExtraInfo(NSProductExtraDataField\[])

```crmscript theme={null}
Void SetExtraInfo(NSProductExtraDataField[] extraInfo)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
NSProductExtraDataField[] extraInfo;
thing.SetExtraInfo(extraInfo);
```

## SetInAssortment(Bool)

```crmscript theme={null}
Void SetInAssortment(Bool inAssortment)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
Bool inAssortment;
thing.SetInAssortment(inAssortment);
```

## SetInStock(Float)

```crmscript theme={null}
Void SetInStock(Float inStock)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
Float inStock;
thing.SetInStock(inStock);
```

## SetIsSubscription(Bool)

```crmscript theme={null}
Void SetIsSubscription(Bool isSubscription)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
Bool isSubscription;
thing.SetIsSubscription(isSubscription);
```

## SetItemNumber(String)

```crmscript theme={null}
Void SetItemNumber(String itemNumber)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

<Note>
  Typically used to sort the items in the quote by some standard way.
</Note>

**Example:**

```crmscript theme={null}
NSProduct thing;
String itemNumber;
thing.SetItemNumber(itemNumber);
```

## SetName(String)

```crmscript theme={null}
Void SetName(String name)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String name;
thing.SetName(name);
```

## SetPriceUnit(String)

```crmscript theme={null}
Void SetPriceUnit(String priceUnit)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String priceUnit;
thing.SetPriceUnit(priceUnit);
```

## SetProductCategoryKey(String)

```crmscript theme={null}
Void SetProductCategoryKey(String productCategoryKey)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String productCategoryKey;
thing.SetProductCategoryKey(productCategoryKey);
```

## SetProductFamilyKey(String)

```crmscript theme={null}
Void SetProductFamilyKey(String productFamilyKey)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String productFamilyKey;
thing.SetProductFamilyKey(productFamilyKey);
```

## SetProductId(Integer)

```crmscript theme={null}
Void SetProductId(Integer productId)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
Integer productId;
thing.SetProductId(productId);
```

## SetProductTypeKey(String)

```crmscript theme={null}
Void SetProductTypeKey(String productTypeKey)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String productTypeKey;
thing.SetProductTypeKey(productTypeKey);
```

## SetQuantityUnit(String)

```crmscript theme={null}
Void SetQuantityUnit(String quantityUnit)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String quantityUnit;
thing.SetQuantityUnit(quantityUnit);
```

## SetRawExtraInfo(String)

```crmscript theme={null}
Void SetRawExtraInfo(String rawExtraInfo)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String rawExtraInfo;
thing.SetRawExtraInfo(rawExtraInfo);
```

## SetRights(String)

```crmscript theme={null}
Void SetRights(String rights)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

<Note>
  Will be used by SuperOffice to control the user interface when showing the record.
</Note>

**Example:**

```crmscript theme={null}
NSProduct thing;
String rights;
thing.SetRights(rights);
```

## SetRule(String)

```crmscript theme={null}
Void SetRule(String rule)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

<Note>
  Will NOT be used by SuperOffice.
</Note>

**Example:**

```crmscript theme={null}
NSProduct thing;
String rule;
thing.SetRule(rule);
```

## SetSubscriptionUnit(String)

```crmscript theme={null}
Void SetSubscriptionUnit(String subscriptionUnit)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String subscriptionUnit;
thing.SetSubscriptionUnit(subscriptionUnit);
```

## SetSupplier(String)

```crmscript theme={null}
Void SetSupplier(String supplier)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String supplier;
thing.SetSupplier(supplier);
```

## SetSupplierCode(String)

```crmscript theme={null}
Void SetSupplierCode(String supplierCode)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String supplierCode;
thing.SetSupplierCode(supplierCode);
```

## SetUnitCost(Float)

```crmscript theme={null}
Void SetUnitCost(Float unitCost)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
Float unitCost;
thing.SetUnitCost(unitCost);
```

## SetUnitListPrice(Float)

```crmscript theme={null}
Void SetUnitListPrice(Float unitListPrice)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

<Note>
  The ListPrice will stay the same even when a larger amount is ordered.
</Note>

**Example:**

```crmscript theme={null}
NSProduct thing;
Float unitListPrice;
thing.SetUnitListPrice(unitListPrice);
```

## SetUnitMinimumPrice(Float)

```crmscript theme={null}
Void SetUnitMinimumPrice(Float unitMinimumPrice)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
Float unitMinimumPrice;
thing.SetUnitMinimumPrice(unitMinimumPrice);
```

## SetUrl(String)

```crmscript theme={null}
Void SetUrl(String url)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

**Example:**

```crmscript theme={null}
NSProduct thing;
String url;
thing.SetUrl(url);
```

## SetVAT(Float)

```crmscript theme={null}
Void SetVAT(Float vAT)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

<Note>
  In the Superoffice product register, this field is available in the product admin GUI.
</Note>

**Example:**

```crmscript theme={null}
NSProduct thing;
Float vAT;
thing.SetVAT(vAT);
```

## SetVATInfo(String)

```crmscript theme={null}
Void SetVATInfo(String vATInfo)
```

**Returns:** [CRMScript.Global.Void](CRMScript.Global.Void)

<Note>
  Not used in any business logic in SuperOffice; available to document templates.
</Note>

**Example:**

```crmscript theme={null}
NSProduct thing;
String vATInfo;
thing.SetVATInfo(vATInfo);
```


## Related topics

- [Products](/en/automation/crmscript/howto/quote/products.md)
- [NSQuoteAgent](/en/automation/crmscript/reference/CRMScript.NetServer.NSQuoteAgent.md)
- [Add quote line](/en/automation/crmscript/howto/quote/add-quote-line.md)
- [NSProductCategory](/en/automation/crmscript/reference/CRMScript.NetServer.NSProductCategory.md)
- [NSProductFamily](/en/automation/crmscript/reference/CRMScript.NetServer.NSProductFamily.md)
- [NSProductType](/en/automation/crmscript/reference/CRMScript.NetServer.NSProductType.md)
