process to use advanced warehouse management · Item and warehouse migration process to use...
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/