I'm currently tasked with implementing a method of mapping certain attributes (e.g. tax codes, nominal codes, country codes etc...) between 2 systems.
These mappings will tell the system that when specific properties of data pushed by one system have a certain value, the value will be changed to the value of the attribute mapped on the other side.
For example: Say 2 systems don't agree on the statuses for customers (one system has 'Okay', the other, 'Good'). If the 'Okay' attribute is mapped to 'Good' then whenever the value 'Okay' is pushed by the first system and then pulled down by the second, the value will be changed to 'Good'.
This mapping will happen both ways, so I need to ensure that an attribute can only be mapped to a single attribute (e.g. if 'Okay' is mapped to 'Good', neither of these can be mapped to or from any other attributes).
My problem is that I'm having trouble visualising how to set up these mappings.
My only idea so far is to have a table with 2 columns. One prepopulated with the attributes from one system, the other with a drop down allowing the user to select an attribute to map to it. My problem with this is that either I have to remove items from the drop downs whenever something is selected (otherwise they could set up multiple mappings) or I have to validate it and throw errors when the user selects an attribute that has already been used. Neither of these feel very clear and transparent.
Scenarios where you are actually removing items from a list are a good candidate for drag and drop. You could make a UI where the user drags the status out of the list of unmapped statuses and onto the one you wish to map it to. In this case you should have a list box rather than a drop down for finding the statuses. I would also recommend some kind of search box to filter the list box (if you have a lot of these to manage, this is easier for users than scrolling).
For clarity you could drag the statuses from both sides onto a third screen area to create the mapping. This is a good solution if there is a chance that one-to-many or many-to-many could be a future feature request.