process to use advanced warehouse management · Item and warehouse migration process to use...

Post on 08-Jul-2020

2 views 0 download

Transcript of process to use advanced warehouse management · Item and warehouse migration process to use...

Format: 1 hour Skype call

Attendees: Key Stakeholders from Customer and partner teams.

AGENDA

Item and warehouse migration process to use advancedwarehouse management

• High level architecture overview of the WMS modules

• Upgrade data from AX2012 R3 to Microsoft Dynamics 365 for Finance and Operations, Enterprise Edition

• Enable warehouse setup

• Migration flow

• Demo

• Change storage dimension group for items

• Migration flow

• Demo

• Migration extensibility

Storage dimension groups incl. pallet assigned to products

Storage dimension groups incl. license plate assigned to products

Store area sequencewithin a Store zone

Location directives

Location directives

Item arrival journal

Pallet transport

Warehouse journal name-Pallet transport, Check picking location, Check bulk location

Shipment templates

Location directives

Wave templates- Process methods

Outbound rules

Shipmentstaging

Pallet transport (Outbound, refill)

Picking routes

Shipments

Work templates

Wave, loads, shipments

Replenishment templates- Wave, load demand

Counting journal- On-hand, items, expired

batches

Inventory adjustments, Transfer journal, Pallet

movements

Periodic location refill

Periodic replenishment- Min/Max

Unprocessed

consolidated output

orders or pallet

transport?

Blocked items

Active pallet dimension?

Start

YesFail upgrade

End

Open WMSII processes?

Yes

No

No

E.g.:

Pallet on non-License

plate tracked location

Enter warehouses to migrate and location setup

End

Warehouses to migrate

Define location profiles

Start

Migrationdata valid?

Yes

Migrate warehouse setup

No

InventLocationWHSProcessEnablementRequest

DataAreaId

Common

InventLocationId

WMSLocationWHSProcessEnablementRequest

InventLocationIdWMSLocationIdLocationProfileId

DataAreaId

InventLocationWHSProcessEnablementValidator

inventLocation

validateWarehouseNotWHSEnabled

validateLocations

validateInventLocationTypevalidateWMSLocationIdDefaultIssuevalidateRetailDefaultLocationvalidateRetailDefaultReturnLocation

validateAllLocationsHaveProfilevalidateNoPalletsOnHandOnNonLPControlledLocations

InventLocationWHSProcessEnablementService

enableWarehouseProcesses

InventLocationWHSProcessEnablementContract

whsProcessEnablementRequestQuery

validateWarehouseReadinesswhsEnableWarehouse

validate

RecId RecId

Data upgrade

Blocked items

Enter item to migrate

Items to migrate

Migration data valid?

Start

Yes

Migrate items

End

No

Item to migrate valid?

Yes

- No pallets exist on non-LP locations- All on-hand on LP locations has pallet- Default inventory status is set up

Pallet active?

Start

Validation successfulYes

Validation failed

Storage dimensiongroup uses WMS

processes?Yes

ReservationHierarchy

valid?

No

Catch-weight item?

Unit sequence group valid?

No

Yes

YesNo

Yes

No

No

Storagedimension group

valid?

YesNo

Open quarantine?

No

Yes

Start

Convert pallets to license plates

Create dimension conversions from items to migrate

Find tables with InventDimId

Initiate dimension update tasks

Populate dimension changes

Would inventory transactions be valid if the dimensions were

updated?

Update dimensions on table 1

Update dimensions on table 2

Update dimensions on table N

No

...

Yes

Dimension conversions,

conversion groups

Dimension change tables, table

group(s)

Dimension update tasks: population, inventory

transaction validation, update

Dimension changes

End

End

Unblock migrated items

Re-calculate on-hand

Update items: storage dimension group,

reservation hierarchy, unit sequence group

All dimensions updated

successfully?

Yes

No

Clean up dimension conversions, tasks,

change tables

Migration extensibility for item conversion

Item conversion

[SubscribesTo(classStr(InventItemInventoryDimensionConversionTaskInitiator), delegateStr(InventItemInventoryDimensionConversionTaskInitiator, tableWithInventDimIdDiscoveredDelegate))]

public static void tableWithInventDimIdDiscoveredStorageConversionDelegateHandler(TableId _updateTableTableId,FieldId _inventDimIdFieldId,InventItemInventoryDimensionConversionType _conversionType,EventHandlerResult _result)

{if (_updateTableTableId == tableNum(MyOwnTableWithInventDimId)) {

if (_inventDimIdFieldId == fieldNum(MyOwnTableWithInventDimId, InventDimIdAllDimensions)){

InventItemInventoryDimensionConversionTaskCreator creator = InventItemInventoryDimensionConversionTaskCreator::newStorageConversion();

creator.createTasksForTableWithItemId(_updateTableTableId, //tableId of the table that should be updated_inventDimIdFieldId, //fieldId of the inventDimId field that should be updatedfieldNum(MyOwnTableWithInventDimId, ItemId), //fieldId of ItemId fieldfieldNum(MyOwnTableWithInventDimId, DataAreaId)); //field id of DataAreaId

_result.booleanResult(true); //we need to update}else if (_inventDimIdFieldId == fieldNum(MyOwnTableWithInventDimId, InventDimIdOnlyProductDimensions)){

_result.booleanResult(false); //no update needed}

}

public static void main(Args _args)

{

InventItemInventoryDimensionConversionTaskInitiator taskInitiator = InventItemInventoryDimensionConversionTaskInitiator::newFromFieldReferenceProviderConversionType(InventDimIdFieldReferenceProvider::construct(), InventItemInventoryDimensionConversionType::StorageDimensionConversion);

ttsbegin;

taskInitiator.initiateTaskDiscovery();

ttsabort; //just for testing

info("done");

}

InventItemInventoryDimensionConversionTask

InventItemInventoryDimensionConversionTaskCreator

ProcessorClassName

InventDimIdFieldUpdateTableName

TaskType

DataAreaIdFieldIdItemIdFieldId

createDefaultPopulationTaskForTableWihItemIdcreateDefaultUpdateTaskForTableWihItemId

InventItemInventoryDimensionConversionTaskInitiator

inventDimFieldReferenceProvider

tableWithInventDimIdDiscoveredDelegate

InventItemInventoryDimensionStorageDimConversionTaskInitiatorDelegateHandlers

tableWithInventDimIdDiscoveredStorageConversionDelegateHandler

InventItemInventoryDimensionConversionTaskExistenceValidator

validateTasksCreatedForProvidedFields

<<Enumeration>>

InventItemInventoryDimensionConversionTaskType

DimensionPopulationUpdateSourceTableInventTransValidation

DataAreaIdRecId

<<Interface>>

InventItemInventoryDimensionConversionITaskProcessor

process

InventItemDimensionStorageDimConversionInventTransValidator

process

InventItemInventoryDimensionConversionDimensionPopulationTaskProcessor

process

InventItemInventoryDimensionConversionUpdateTaskProcessor

process

InventItemInventDimConversionInventBatchJournalSourceUpdateTaskProcess

process

InventItemInventoryDimensionConversionMultiTaskProcessor

processTasksByTypeprocessTask

InventItemInventoryDimensionConversionTask

ProcessorClassName

InventDimIdFieldUpdateTableName

TaskType

DataAreaIdFieldIdItemIdFieldId

Example of processor for non standard table InventItemInventoryDimensionConversionSourceTableUpdater

updateAll

checkDimHierarchy

InventItemInventoryDimensionChangePopulator

populateDimensionChanges

DataAreaIdRecId

InventTableStorageDimensionGroupChangeRequest

DataAreaId

blockItems

Common

UnitOfMeasureSequenceGroupId

ItemId

ReservationHierarchyStorageDimensionGroup

InventTableStorageDimensionGroupChangeService

changeStorageDimensionGroups

InventTableStorageDimensionGroupChangeContract

recommendedParallelTasksNumber

Updated

updatePalletInventoryDimensionsisExecutingInBatch

createDimensionConversions

InventItemInventoryDimensionConversionDataContract

conversionType

InventItemInventoryDimensionConversionService

createDimensionConversionController

Creates the batch job and tasks

finalizeChanges

scheduleDimensionConversionSubTaskspopulateTemporaryDatascheduleInventoryDimensionsUpdatecleanupTemporaryDatainitiateTasksprocessDimensionChangePopulationTasksprocessInventTransValidationTasks

InventItemInventoryDimensionConversionMultiTaskProcessor

processTasksByTypeprocessTask

InventItemDimensionConversionSourceTableUpdateDataContract

sourceTableNameconversionType

Creates all conversions

Updates the source table – per table to support parallel updates

markChangeRequestsUpdated

InventUpdateBlockedItem

ItemId

isItemBlocked

DataAreaIdRecId

RecId

InventItemInventoryDimensionConversion

DataAreaId

InventItemInventoryDimensionConversionGroup

ConversionType

InventItemInventoryDimensionChangeTableGroup

RecId

InventItemInventoryDimensionChangeTable

DataAreaId DataAreaId

NameTableNameChangeTableGroupRecId

DimensionConversionType

StorageDimensionGroupReservationHierarchy

RecIdDataAreaId

ConversionGroupRecId

ItemId

InventItemInventoryDimensionChange

DataAreaId

InventDimIdFrom

RecId

ChangeTableGroup

ConversionGroup

InventDimIdTo

ChangeTableGroup

<<Enumeration>>

InventItemInventoryDimensionConversionType

StorageDimensionConversion

https://roadmap.dynamics.com/

https://ideas.dynamics.com/ideas/