This note describes how to make a custom target location list by PutAwayDestinationLocationHookScript
The hook flow is called if the following settings are disabled:
-
Use suggested locations? setting on the Location controller
-
Use Location Suggestions? on the warehouse level of the Organization Structure
Creating SQL VIEW as an input for the script
First, create an SQL view that contains all source data.
MSSQL
CREATE PROCEDURE[dbo].[SP_EXAMPLE_PUTAWAY_DESTINATION]
@luid int,
@sscc nvarchar(20),
@listOfItemCode nvarchar(max),
@quantityToMove numeric(19,6),
@listOfZoneTypesForItems nvarchar(max),
@sourceLocation nvarchar(50),
@warehouse nvarchar(50),
@selectLocationFilter nvarchar(100)
AS
BEGIN
SELECT "PMX_OSSL"."Code" AS "Code", "PMX_OSSL"."Name" AS "Description", "PMX_OSEL"."PmxWhsCode" AS "WarehouseCode", "PMX_OSWH"."Name" AS "WarehouseName"
FROM "PMX_OSSL"
INNER JOIN "PMX_OSEL" ON "PMX_OSEL"."Code" = "PMX_OSSL"."Code"
INNER JOIN "PMX_OSWH" ON "PMX_OSEL"."PmxWhsCode" = "PMX_OSWH"."Code"
INNER JOIN "OWHS" ON "OWHS"."WhsCode" = "PMX_OSWH"."SboWhsCode" AND "OWHS"."U_PMX_IMBP" = 'Y'
END
HANA
CREATE PROCEDURE "SP_EXAMPLE_PUTAWAY_DESTINATION"
(
p_luid int,
p_sscc nvarchar(20),
p_listOfItemCode nvarchar(255),
p_quantityToMove numeric(19,6),
p_listOfZoneTypesForItems nvarchar(255),
p_sourceLocation nvarchar(50),
p_warehouse nvarchar(50),
p_selectLocationFilter nvarchar(100)
)
LANGUAGE SQLSCRIPT AS
BEGIN
SELECT "PMX_OSSL"."Code" AS "Code", "PMX_OSSL"."Name" AS "Description", "PMX_OSEL"."PmxWhsCode" AS "WarehouseCode", "PMX_OSWH"."Name" AS "WarehouseName"
FROM "PMX_OSSL"
INNER JOIN "PMX_OSEL" ON "PMX_OSEL"."Code" = "PMX_OSSL"."Code"
INNER JOIN "PMX_OSWH" ON "PMX_OSEL"."PmxWhsCode" = "PMX_OSWH"."Code"
INNER JOIN "OWHS" ON "OWHS"."WhsCode" = "PMX_OSWH"."SboWhsCode" AND "OWHS"."U_PMX_IMBP" = 'Y'
WHERE "PMX_OSSL"."IsActive" = 'Y';
END
Changing the Workflow script
Next, open the script of PutAwayDestinationLocationHookScript from Organizational Structure > Company object > Workflows tab, and replace the content of the script by the script below. The Mobile Client application must be restarted.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Globalization;
using System.Reflection;
using System.Text;
using Produmex.Foundation;
using Produmex.Foundation.Barcode;
using Produmex.Foundation.Data;
using Produmex.Foundation.Data.Sbo;
using Produmex.Foundation.Data.Sbo.BusinessObjects;
using Produmex.Foundation.Data.Sbo.BusinessObjects.Convertors;
using Produmex.Foundation.Data.Sbo.BusinessObjects.Definitions;
using Produmex.Foundation.Data.Sbo.BusinessObjects.Definitions.Tables;
using Produmex.Foundation.Data.Sbo.DataObjects;
using Produmex.Foundation.Data.Sbo.Providers;
using Produmex.Foundation.Data.Sbo.Utilities;
using Produmex.Foundation.Data.SqlClient;
using Produmex.Foundation.Diagnostics;
using Produmex.Foundation.GS1;
using Produmex.Foundation.Messages;
using Produmex.Foundation.SlimScreen;
using Produmex.Foundation.SlimScreen.Interfaces;
using Produmex.Foundation.SlimScreen.Interfaces.Definitions;
using Produmex.Foundation.SlimScreen.Interfaces.Definitions.DataObjects;
using Produmex.Foundation.SlimScreen.Interfaces.Definitions.KnownDataSets;
using Produmex.Foundation.SlimScreen.WinGui;
using Produmex.Foundation.Utilities;
using Produmex.Foundation.Workflows;
using Produmex.Foundation.Workflows.Parameters;
using Produmex.Foundation.Wwf.Sbo;
using Produmex.Foundation.Wwf.Sbo.DataObjects;
using Produmex.Foundation.Wwf.Sbo.LocalServices;
using Produmex.Sbo.Logex.Data.BusinessObjects;
using Produmex.Sbo.Logex.Data.BusinessObjects.Definitions;
using Produmex.Sbo.Logex.Data.BusinessObjects.Definitions.Tables;
using Produmex.Sbo.Logex.Data.DataObjects;
using Produmex.Sbo.Logex.Data.Devices;
using Produmex.Sbo.Logex.Data.Generators.BatchNumberGenerators;
using Produmex.Sbo.Logex.Data.Generators.PackingController;
using Produmex.Sbo.Logex.Data.Providers;
using Produmex.Sbo.Logex.Data.ViewObjects.Definitions.Views;
namespace WorkflowScript_PutAwayDestinationLocationHookScript
{
public class WorkflowScript_PutAwayDestinationLocationHookScript : WorkflowInstanceScriptBase
{
private static readonly ILog s_log = LogProvider.GetLogger(MethodInfo.GetCurrentMethod().DeclaringType);
// Input parameters * do not change *
public ReadOnlyBinder<CultureInfo> DefaultCultureInfo;
public ReadOnlyBinder<PmxOseCompany> PmxOseCompany;
public ReadOnlyBinder<object[]> FlowParameters;
private object[] currentFlowParameters
{
get { return FlowParameters == null ? null : FlowParameters.Get(); }
}
private CultureInfo defaultCultureInfo
{
get { return DefaultCultureInfo.Get(); }
}
// Output paramteters
public ReadWriteBinder<DataSet> Locations;
// Sub-flows
// <none>
//Internal helpers
internal enum LocationFilter
{
All = 0,
Empty = 1,
NotFull = 2,
NotFullAndIgnoreNonLuidStock = 3,
Default = NotFull
}
public WorkflowScript_PutAwayDestinationLocationHookScript(WorkflowInstanceBase parent, WorkflowInstanceFactory factory)
: base(parent, factory)
{
}
#region WorkflowInstanceScriptBase Members
protected override void Execute()
{
/* */
// Parameters in scope
int luid = (int)currentFlowParameters[0];
string sscc = (string)currentFlowParameters[1];
Collection<string> listOfItemCodes = (Collection<string>)currentFlowParameters[2];
double quantityToMove = (double)currentFlowParameters[3];
Collection<string> listOfZoneTypesForItems = (Collection<string>)currentFlowParameters[4];
string sourceLocation = (string)currentFlowParameters[5];
string warehouse = (string)currentFlowParameters[6];
LocationFilter selectLocationFilter = (LocationFilter)currentFlowParameters[7];
Session session = GetScopeParameter("Session") as Session;
ISboProviderService sboProviderService = GetScopeParameter("<WwfService>ISboService") as ISboProviderService;
string query = GetQueryDestinationLocations(luid, sscc, listOfItemCodes, quantityToMove, listOfZoneTypesForItems, sourceLocation, warehouse, selectLocationFilter, defaultCultureInfo);
DataSet dsLocation = null;
//Required colums:
// "Code"
// "Description"
// "WarehouseCode"
// "WarehouseName"
// Extra colums are allowed
dsLocation = sboProviderService.RunView(false, null, null, query);
Locations.Set(dsLocation);
return;
}
/* */
private static string GetQueryDestinationLocations(int luid, string sscc, Collection<string> listOfItemCodes, double quantityToMove, Collection<string> listOfZoneTypesForItems, string sourceLocation, string warehouse, LocationFilter selectLocationFilter, CultureInfo cultureDatabase)
{
StringBuilder strBuilder = new StringBuilder();
string listOfItemCodesAsString = "";
foreach (string itemCode in listOfItemCodes)
{
if (!string.IsNullOrEmpty(listOfItemCodesAsString))
{
listOfItemCodesAsString += "|";
}
listOfItemCodesAsString += itemCode;
}
string listOfZoneTypesForItemsAsString = "";
foreach (string zoneType in listOfZoneTypesForItems)
{
if (!string.IsNullOrEmpty(listOfZoneTypesForItemsAsString))
{
listOfZoneTypesForItemsAsString += "|";
}
listOfZoneTypesForItemsAsString += zoneType;
}
//SQL VERSION
strBuilder.Append("EXEC SP_EXAMPLE_PUTAWAY_DESTINATION ");
strBuilder.Append(SqlCommandHelper.FormatAndEscapeColumnValue(luid, cultureDatabase));
strBuilder.Append(", " + SqlCommandHelper.FormatAndEscapeColumnValue(sscc, cultureDatabase));
strBuilder.Append(", " + SqlCommandHelper.FormatAndEscapeColumnValue(listOfItemCodesAsString, cultureDatabase));
strBuilder.Append(", " + SqlCommandHelper.FormatAndEscapeColumnValue(quantityToMove, cultureDatabase));
strBuilder.Append(", " + SqlCommandHelper.FormatAndEscapeColumnValue(listOfZoneTypesForItemsAsString, cultureDatabase));
strBuilder.Append(", " + SqlCommandHelper.FormatAndEscapeColumnValue(sourceLocation, cultureDatabase));
strBuilder.Append(", " + SqlCommandHelper.FormatAndEscapeColumnValue(warehouse, cultureDatabase));
strBuilder.Append(", " + SqlCommandHelper.FormatAndEscapeColumnValue(selectLocationFilter, cultureDatabase));
//END OF SQL VERSION
////HANA VERSION
//strBuilder.Append("CALL SP_EXAMPLE_PUTAWAY_DESTINATION (");
//strBuilder.Append(SqlCommandHelper.FormatAndEscapeColumnValue(luid, cultureDatabase));
//strBuilder.Append(", " + SqlCommandHelper.FormatAndEscapeColumnValue(sscc, cultureDatabase));
//strBuilder.Append(", " + SqlCommandHelper.FormatAndEscapeColumnValue(listOfItemCodes, cultureDatabase));
//strBuilder.Append(", " + SqlCommandHelper.FormatAndEscapeColumnValue(quantityToMove, cultureDatabase));
//strBuilder.Append(", " + (listOfZoneTypesForItems == null || listOfZoneTypesForItems.Count == 0 ? "''" : SqlCommandHelper.FormatAndEscapeColumnValue(listOfZoneTypesForItems, cultureDatabase)));
//strBuilder.Append(", " + SqlCommandHelper.FormatAndEscapeColumnValue(sourceLocation, cultureDatabase));
//strBuilder.Append(", " + SqlCommandHelper.FormatAndEscapeColumnValue(warehouse, cultureDatabase));
//strBuilder.Append(", " + SqlCommandHelper.FormatAndEscapeColumnValue(selectLocationFilter, cultureDatabase));
//strBuilder.Append(")");
////END OF HANA VERSION
return strBuilder.ToString();
}
#endregion
}
}
For more information please read our documentation.
Comments
0 comments
Please sign in to leave a comment.