/// <summary>
        /// Abstract override to be called on onButtonClick
        /// </summary>
        public override bool onPropertySetButtonClick(NbtButtonData ButtonData)
        {
            if (null != ButtonData.NodeTypeProp)
            {
                //Remember: Save is an OCP too
                switch (ButtonData.NodeTypeProp.getObjectClassPropName())
                {
                case PropertyName.Fulfill:
                    CswNbtObjClassContainer NodeAsContainer = null;
                    switch (ButtonData.SelectedText)
                    {
                    case FulfillMenu.Dispense:
                        NodeAsContainer = _CswNbtResources.Nodes.GetNode(Container.RelatedNodeId);
                        if (null != NodeAsContainer && null != NodeAsContainer.Dispense.NodeTypeProp)
                        {
                            NbtButtonData DispenseData = new NbtButtonData(NodeAsContainer.Dispense.NodeTypeProp);
                            NodeAsContainer.triggerOnButtonClick(DispenseData);
                            ButtonData.clone(DispenseData);
                        }
                        else
                        {
                            ButtonData.Data["containernodetypeid"]    = Container.TargetId;
                            ButtonData.Data["containerobjectclassid"] = Container.TargetId;
                            JObject InitialQuantity = null;
                            if (null != Size.RelatedNodeId && Int32.MinValue != Size.RelatedNodeId.PrimaryKey)
                            {
                                CswNbtObjClassSize NodeAsSize = _CswNbtResources.Nodes[Size.RelatedNodeId];
                                if (null != NodeAsSize)
                                {
                                    InitialQuantity = new JObject();
                                    NodeAsSize.InitialQuantity.ToJSON(InitialQuantity);
                                    ButtonData.Data["initialQuantity"] = InitialQuantity;
                                }
                            }
                            else if (false == Quantity.Empty)
                            {
                                InitialQuantity = new JObject();
                                Quantity.ToJSON(InitialQuantity);
                            }
                            if (null != InitialQuantity)
                            {
                                ButtonData.Data["initialQuantity"] = InitialQuantity;
                            }
                            ButtonData.Action = CswEnumNbtButtonAction.dispense;
                        }
                        break;
                    }     //switch( ButtonData.SelectedText )

                    _getNextStatus(ButtonData.SelectedText);
                    ButtonData.Data["requestitem"] = ButtonData.Data["requestitem"] ?? new JObject();
                    ButtonData.Data["requestitem"]["requestitemid"] = NodeId.ToString();
                    ButtonData.Data["requestitem"]["materialid"]    = (Material.RelatedNodeId ?? new CswPrimaryKey()).ToString();
                    ButtonData.Data["requestitem"]["containerid"]   = (Container.RelatedNodeId ?? new CswPrimaryKey()).ToString();
                    ButtonData.Data["requestitem"]["locationid"]    = (Location.SelectedNodeId ?? new CswPrimaryKey()).ToString();
                    break;     //case PropertyName.Fulfill:
                }
            }
            return(true);
        }