Issues using ShippingMethodParameter for my custom Shipping provider


I'm trying to setup a custom shipping provider with extra parameters and have followed the instructions found here

and here

But I have trouble retrieving and storing the parameters. In the examples it says (one is about ShippingMethodCase, but it is handled in the same way as ShippingMethodParameter):

//Adding a row of data
if (_ShippingMethodDto != null && _ShippingMethodDto.ShippingMethod.Count > 0)
 ShippingMethodDto.ShippingMethodCaseRow row = _ShippingMethodDto.ShippingMethodCase.NewShippingMethodCaseRow();
 row.Total = Double.Parse(Weight.Text, _NumberFormat);
 row.Charge = Double.Parse(Price.Text, _NumberFormat);
 row.StartDate = StartDate.Value;
 row.EndDate = EndDate.Value;

 //the ShippingMethodDto will only contain one row for the ShippingMethod row, which
 //represents the shipping method information stored on the first tab of the shipping method in
 //commerce manager
 row.ShippingMethodId = _ShippingMethodDto.ShippingMethod[0].ShippingMethodId;
 row.JurisdictionGroupId = Int32.Parse(JurisdictionGroupList.SelectedValue);

 // add the row to the dto
 if (row.RowState == DataRowState.Detached)

//retrieving data

if (_ShippingMethodDto != null && _ShippingMethodDto.ShippingMethodParameter != null &&  _ShippingMethodDto.ShippingMethodParameter.Rows.Count > 0) 
 ShippingMethodDto.ShippingMethodParameterRow row = (ShippingMethodDto.ShippingMethodParameterRow)_ShippingMethodDto.ShippingMethodParameter.Rows[0]; 
 txtTypeOfService.Text = row.Value; 
 lblTypeOfService.Text = row.Parameter; 

But when I use this implementation I only get a long table with a new row everytime I change the settings, and using Rows[0](as in the example) only gets me the first parameter I added. I changed it to just .Last() instead as a workaround but not only does it seem wrong to just keep adding a new parameter instead of overwriting the same but when I try to add different parameters at the same time I have noway of retrieving two different parameters from the "ShippingMethodParameter" table at the same time.
 _ShippingMethodDto.ShippingMethodParameter only have the following methods



and the "ShippingMethodParamterId" seems to be auto incremented when a new row is added so I cant find the parameter with the find method

Anyone have any suggestions?

Jan 16, 2014 17:01

I'm assuming you are inside the "ConfigureShippingMethod.ascx" - the control that loads the Shipping Provider Parameters tab inside Commerce Manager. I use the following code:

//inside your save method:
var parameterRow = GetParameterByName(shippingMethod, parameterName);
if (parameterRow != null)
   parameterRow.Value = value;
   CreateParameter(shippingMethod, parameterName, value, methodId);

//GetParameterByName method
protected ShippingMethodDto.ShippingMethodParameterRow 
  GetParameterByName(ShippingMethodDto shippingMethod, string parameterName)
    var rowArray =
       shippingMethod.ShippingMethodParameter.Select(string.Format("Parameter = '{0}'", parameterName));
            return rowArray.Any() ? rowArray[0] : null;

// create method
protected void CreateParameter(ShippingMethodDto dto, string parameterName, string value, Guid paymentMethodId)
   var row = dto.ShippingMethodParameter.NewShippingMethodParameterRow();
   row.ShippingMethodId = paymentMethodId;
   row.Parameter = parameterName;
   row.Value = value;

   if (row.RowState == DataRowState.Detached)





Jan 21, 2014 10:01
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.