/// <summary> /// Invokes the subscriber. /// </summary> /// <param name="msg">A reference to the subscribed message.</param> /// <param name="session">The current <see cref="VocollectSession"/> object.</param> /// <exception cref="WarehouseAdapterException"> /// </exception> /// <exception cref="MessageEngineException"> /// </exception> public override void Invoke(MultiPartMessage msg, VocollectSession session) { MultiPartMessage responseMsg = CreateResponseMessage(msg); responseMsg.Properties.Write("AssignmentId", 0); responseMsg.Properties.Write("IsChase", 0); responseMsg.Properties.Write("WorkId", "1"); responseMsg.Properties.Write("Position", "1"); responseMsg.Properties.Write("TotalItems", 0); responseMsg.Properties.Write("ItemsNotPicked", 0); responseMsg.Properties.Write("BaseItemsNotPicked", 0); responseMsg.Properties.Write("Cube", 0); responseMsg.Properties.Write("GoalTime", 0); responseMsg.Properties.Write("Route", ""); responseMsg.Properties.Write("ActiveContainer", "00"); responseMsg.Properties.Write("PassAssignment", "0"); responseMsg.Properties.Write("PreviousWork", "0"); responseMsg.Properties.Write("PickLines", 0); responseMsg.Properties.Write("PickedLines", 0); responseMsg.Properties.Write("CustomerNumber", ""); responseMsg.Properties.Write("PreviousWorkVehicle", ""); responseMsg.Properties.Write("AllowPackaging", "1"); responseMsg.Properties.Write("ErrorCode", VocollectErrorCodeNoError); responseMsg.Properties.Write("Message", ""); try { using (TransactionScope transactionScope = new TransactionScope()) { PropertyCollection properties = null; /* Check if pick order is already fetched */ if (session.ReadAsString("PBHEADID").Length == 0) { CorrelationContext context = RequestPickOrder(PickOrderHoldType.None, session); properties = context.ResponseMessages[0].Parts[0].Properties; } else /* Use data from session */ { properties = session.CurrentAssignmentData; } responseMsg.Properties.Write("AssignmentId", session.ReadAsString("PBHEADID")); responseMsg.Properties.Write("TotalItems", 0); responseMsg.Properties.Write("ItemsNotPicked", properties.ReadAsDouble("TOTQTY") - properties.ReadAsDouble("PIKQTY")); responseMsg.Properties.Write("GoalTime", ((TimeSpan)session.Read("PICKTIME")).Minutes); if (string.IsNullOrEmpty(session.ReadAsString("HOLD_TYPE"))) { responseMsg.Properties.Write("PreviousWork", 0); } else { if (string.IsNullOrEmpty(properties.ReadAsString("TUID"))) { responseMsg.Properties.Write("PreviousWork", 1); } else { responseMsg.Properties.Write("PreviousWork", 2); } } responseMsg.Properties.Write("PickLines", properties.Read("NOROWS")); responseMsg.Properties.Write("PickedLines", properties.Read("NOPIKROW")); //responseMsg.Properties.Write("AllowPackaging", properties.Read("CONFIRM_PM")); responseMsg.Properties.Write("PreviousWorkVehicle", properties.Read("TUID")); transactionScope.Complete(); } } catch (WarehouseAdapterException ex) { responseMsg.Properties.Write("ErrorCode", WarehouseAlarm); responseMsg.Properties.Write("Message", ex.Message); throw; } catch (Exception) { responseMsg.Properties.Write("ErrorCode", VocollectErrorCodeCritialError); responseMsg.Properties.Write("Message", GetCriticalErrorMessageText(msg)); throw; } finally { TransmitResponseMessage(responseMsg, session); } }