Wednesday, May 11, 2011

Delete Rows in Epicor DeleteById Alternative

Epicor DeleteById vs. Update (RowMod="D")

In my experience, deleting rows from Epicor through the business objects works differently between objects.

For some objects, you can call .DeleteById, such as PartService.DeleteById and the row will be removed from Epicor database.

For other objects, .DeleteById fails (CustShipService.DeleteByID, SaleOrder.DeletedById, ...) sending to you check the AppServer log file, which states something like: "No ttOrderHead record is available", "Error attempting to push run time paramters onto the stack.".

In these cases, try deleting using the Update/RowMod option.
Call .Update (different from MasterUpdate, UpdateExt, etc.) passing in the appropriate dataset. You don't need the entire dataset returned by .GetById. Just pass in the element which has the unique ID for the business objects, and in that element, set RowMod="D".

For SalesOrder, my Service Connect trace looks like this:

<ext_UpdateRequest:UpdateRequest xmlns:ext_UpdateRequest="">


  1. One thing to note that's been driving me crazy for a little while -- if you're calling Update from the Epicor Web Services, the RowMod for Delete should be '[Delete]' not 'D'. If you don't send '[Delete]' nothing happens.

    According to the web services developer guide:

    The Update method has logic to support instructional processing tags which can be passed in the RowMod column of a data row. In this case you need to pass the ‘[Delete]’ tag to indicate the row is to be deleted.

    Thought I'd add this for anybody else running into this problem who neglected to read the FAQ on the Web Services Developer guide. :)

  2. Would you be interested in doing some Epicor things for us?