The Shipping Director is an "evaluation engine". Each row is evaluated based on "Order". (Some old school VB developers may notice the numbering scheme in the example screen below. :) The "Type" of each row is either a variable (String, Boolean, etc.), an Error, or a shipping Option. For Variables, the "Expression" field should evaluate to the type of the declaration. For Error and Option, the "Expression" field is a 'condition' that should evaluate to a boolean - if true, the additional expressions are evaluated (rate, surcharge, etc.), and if false, the next row is examined. You can specify whether the rows continue to evaluate, or "Exit" when matched - ErrorExit, OptionExit. Additionally, there is (not shown below) a global setting: "Evaluate All" vs. "EvaluateFirstMatchOnly", whereby a plain Exit or Option will exit if EvaluateFirstMatchOnly is set.
Below are some sample expressions in context of the Configure screen. (Note that NameExpression and DescriptionExpression must evaluate to strings - if you just have text, be sure to enclose it in double quotes.)
Order Active Type Name Expression RateExpression SurchargeExpression NameExpression DescriptionExpression
0 True Int32 CustomerId Customer.Id
5 True Boolean IsContiguous "AK,HI".Contains(State)
10 True Boolean CheckShipCriteria EXECUTE CheckShippingCriteria @CustomerId; [CustomerId]
20 True OptionExit Shipping to Hawaii/Alaska [IsContiguous] AND [CheckShipCriteria] 15.95
30 True Option Flat Rate Shipping true 12.95
When I test it out I get the following error:
Error - Customer=252158:clint@gogbs.com; Record=5: 10 CheckShipCriteria; Expression=EXECUTE CheckShippingCriteria @CustomerId; [CustomerId]; Error=EvaluateQueryExpression - Field:CheckShipCriteria, Expr=EXECUTE CheckShippingCriteria @CustomerId; 252158, Error=Must declare the scalar variable "@CustomerId".
I am declaring the variable properly in my stored procedure so I am not sure why it si erroring out. Here is my stored procedure code:
ALTER PROC [dbo].[CheckShippingCriteria]
@CustomerId int,
@Result BIT OUTPUT
AS
SET NOCOUNT ON;
BEGIN TRY
IF EXISTS (SELECT CustomerId FROM ShoppingCartItem WHERE CustomerId = @CustomerId AND ProductId = 3764)
SET @Result = 1
ELSE
SET @Result = 0
END TRY
BEGIN CATCH
--Capture errors if they happen
EXEC [dbo].[usp_StoredProcedureErrorLog]
END CATCH
Any guess as to why this is happening?