コード例 #1
0
        public CswNbtActDispenseContainer(CswNbtResources CswNbtResources, string SourceContainerNodeId, string DispenseTransactionId = null, string DispenseTransactionProperties = null)
        {
            _CswNbtResources      = CswNbtResources;
            _CswNbtSdTabsAndProps = new CswNbtSdTabsAndProps(_CswNbtResources);

            if (false == String.IsNullOrEmpty(SourceContainerNodeId))
            {
                CswPrimaryKey SourceContainerPK = new CswPrimaryKey();
                SourceContainerPK.FromString(SourceContainerNodeId);
                _SourceContainer = _CswNbtResources.Nodes.GetNode(SourceContainerPK);
                if (false == String.IsNullOrEmpty(DispenseTransactionId))
                {
                    CswPrimaryKey ContainerDispenseTransactionId = new CswPrimaryKey();
                    ContainerDispenseTransactionId.FromString(DispenseTransactionId);
                    _TempDispenseTransaction = _CswNbtResources.Nodes.GetNode(ContainerDispenseTransactionId);
                    if (null != _TempDispenseTransaction)
                    {
                        _CswNbtSdTabsAndProps.saveProps(_TempDispenseTransaction.NodeId, Int32.MinValue, CswConvert.ToJObject(DispenseTransactionProperties), _TempDispenseTransaction.NodeTypeId, null, IsIdentityTab: false, setIsTempToFalse: false);
                    }
                    _SourceContainer.Dispenser = new CswNbtContainerDispenser(_CswNbtResources, new CswNbtContainerDispenseTransactionBuilder(_CswNbtResources, _TempDispenseTransaction), _SourceContainer);
                }
            }
            else
            {
                throw new CswDniException(CswEnumErrorType.Error, "Cannot execute dispense contianer action with an undefined Source Container.", "Attempted to constuct CswNbtActDispenseContainer without a valid Source Container.");
            }
            if (false == _CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.CISPro))
            {
                throw new CswDniException(CswEnumErrorType.Error, "Cannot use the Dispense action without the required module.", "Attempted to constuct CswNbtActSubmitRequest without the required module.");
            }
        }
コード例 #2
0
        /// <summary>
        /// Instance a new EnterprisePart Request Item
        /// </summary>
        public CswNbtObjClassRequestItem makeEnterprisePartRequestItem(CswNbtObjClassEnterprisePart EnterprisePart, CswNbtObjClass.NbtButtonData ButtonData)
        {
            checkForCentralInventoryGroups(_CswNbtResources);
            CswNbtObjClassRequestItem RequestItem   = null;
            CswNbtMetaDataObjectClass RequestItemOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.RequestItemClass);
            CswNbtMetaDataNodeType    RequestItemNT = RequestItemOC.getNodeTypes().FirstOrDefault();
            CswNbtSdTabsAndProps      PropsAction   = new CswNbtSdTabsAndProps(_CswNbtResources);

            if (null != RequestItemNT)
            {
                RequestItem = PropsAction.getAddNodeAndPostChanges(RequestItemNT, delegate(CswNbtNode NewNode)
                {
                    CswNbtObjClassRequestItem RequestItemNode    = NewNode;
                    RequestItemNode.EnterprisePart.RelatedNodeId = EnterprisePart.NodeId;
                    RequestItemNode.Type.Value = CswNbtObjClassRequestItem.Types.EnterprisePart;
                    if (null != _ThisUser.DefaultLocationId)
                    {
                        CswNbtObjClassLocation DefaultAsLocation = _CswNbtResources.Nodes.GetNode(_ThisUser.DefaultLocationId);
                        if (null != DefaultAsLocation)
                        {
                            RequestItemNode.Location.SelectedNodeId = DefaultAsLocation.NodeId;
                            RequestItemNode.Location.CachedNodeName = DefaultAsLocation.Location.CachedNodeName;
                            RequestItemNode.Location.CachedPath     = DefaultAsLocation.Location.CachedPath;
                        }
                    }
                });
            }
            return(RequestItem);
        }
コード例 #3
0
 public CswNbtActReceiving(CswNbtResources CswNbtResources, CswPrimaryKey MaterialNodeId)
 {
     _CswNbtResources      = CswNbtResources;
     _CswNbtSdTabsAndProps = new CswNbtSdTabsAndProps(_CswNbtResources);
     if (false == _CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.Containers))
     {
         throw new CswDniException(CswEnumErrorType.Error, "Cannot use the Receive Material action without the required module.", "Attempted to constuct CswNbtActReceiving without the required module.");
     }
     _MaterialId  = MaterialNodeId;
     _ContainerOc = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.ContainerClass);
 }
コード例 #4
0
        /// <summary>
        /// Instance a new Container Request Item based on the selected button option - the type will either be Dispense, Move, or Dispose.
        /// </summary>
        public CswNbtObjClassRequestItem makeContainerRequestItem(CswNbtObjClassContainer Container, CswNbtObjClass.NbtButtonData ButtonData)
        {
            checkForCentralInventoryGroups(_CswNbtResources);
            CswNbtObjClassRequestItem RequestItem;
            CswNbtMetaDataObjectClass RequestItemOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.RequestItemClass);
            CswNbtMetaDataNodeType    RequestItemNT = RequestItemOC.getNodeTypes().FirstOrDefault();
            CswNbtSdTabsAndProps      PropsAction   = new CswNbtSdTabsAndProps(_CswNbtResources);

            RequestItem = PropsAction.getAddNodeAndPostChanges(RequestItemNT, delegate(CswNbtNode NewNode)
            {
                CswNbtObjClassRequestItem RequestItemNode = NewNode;
                if (null != getCurrentRequestNodeId() && null != Container)
                {
                    RequestItemNode.Container.RelatedNodeId = Container.NodeId;
                    RequestItemNode.Material.RelatedNodeId  = Container.Material.RelatedNodeId;
                    CswPrimaryKey SelectedLocationId        = CswTools.IsPrimaryKey(_ThisUser.DefaultLocationId) ?
                                                              _ThisUser.DefaultLocationId :
                                                              Container.Location.SelectedNodeId;
                    ButtonData.Action = CswEnumNbtButtonAction.request;
                    switch (ButtonData.SelectedText)
                    {
                    case CswEnumNbtContainerRequestMenu.Dispense:
                        RequestItemNode.Type.Value              = CswNbtObjClassRequestItem.Types.ContainerDispense;
                        RequestItemNode.Quantity.UnitId         = Container.Quantity.UnitId;
                        RequestItemNode.Size.RelatedNodeId      = Container.Size.RelatedNodeId;
                        RequestItemNode.Location.SelectedNodeId = SelectedLocationId;
                        //Scope available units of measure on Quantity based on the Container's Material
                        CswNbtNode MaterialNode = _CswNbtResources.Nodes[Container.Material.RelatedNodeId];
                        if (null != MaterialNode)
                        {
                            CswNbtUnitViewBuilder Vb = new CswNbtUnitViewBuilder(_CswNbtResources);
                            Vb.setQuantityUnitOfMeasureView(MaterialNode, RequestItemNode.Quantity);
                        }
                        break;

                    case CswEnumNbtContainerRequestMenu.Dispose:
                        RequestItemNode.Type.Value = CswNbtObjClassRequestItem.Types.ContainerDispose;
                        RequestItemNode.Location.SelectedNodeId = Container.Location.SelectedNodeId;
                        break;

                    case CswEnumNbtContainerRequestMenu.Move:
                        RequestItemNode.Type.Value = CswNbtObjClassRequestItem.Types.ContainerMove;
                        RequestItemNode.Location.SelectedNodeId = SelectedLocationId;
                        break;
                    }
                    RequestItemNode.Location.RefreshNodeName();
                }
            });
            if (null == RequestItem)
            {
                throw new CswDniException(CswEnumErrorType.Error, "Could not generate a new request item.", "Failed to create a new Request Item node.");
            }
            return(RequestItem);
        }
コード例 #5
0
        /// <summary>
        /// Get the Add Layout Properties for the given RequestItem
        /// </summary>
        public JObject getRequestItemAddProps(CswNbtNode RequestItemNode)
        {
            CswEnumNbtNodeEditMode PrevMode = _CswNbtResources.EditMode;

            _CswNbtResources.EditMode = CswEnumNbtNodeEditMode.Add;

            CswNbtSdTabsAndProps PropsAction = new CswNbtSdTabsAndProps(_CswNbtResources);
            JObject Ret = PropsAction.getProps(RequestItemNode, "", null, CswEnumNbtLayoutType.Add);

            _CswNbtResources.EditMode = PrevMode;
            return(Ret);
        }
コード例 #6
0
ファイル: CswNbtObjClass.cs プロジェクト: crfroehlich/legacy
        /// <summary>
        /// After the Object Class Button Click Event is triggered, determine whether any properties were part of the request. If so, return the updated properties for the provided tabs, if any.
        /// </summary>
        private void _onAfterButtonClickSaveProps(string TabId, NbtButtonData ButtonData)
        {
            Int32   TabIdAsInt  = CswConvert.ToInt32(TabId);
            JObject SelectedTab = null;

            if (null != ButtonData.PropsToSave && ButtonData.PropsToSave.HasValues)
            {
                SelectedTab = CswConvert.ToJObject(ButtonData.PropsToSave[TabId]);
            }
            if (TabIdAsInt > 0 || (null != SelectedTab && SelectedTab.HasValues))
            {
                CswNbtSdTabsAndProps Sd = new CswNbtSdTabsAndProps(_CswNbtResources);
                ButtonData.PropsToReturn = Sd.getProps(NodeId.ToString(), null, TabId, NodeTypeId, null, null, ForceReadOnly: false);
            }
        }
コード例 #7
0
        private JObject _tryCreateTempMaterial(Int32 MaterialNodeTypeId, CswPrimaryKey SupplierId, string TradeName, string PartNo, string NodeId, bool IsConstituent)
        {
            JObject Ret = new JObject();

            NewMaterial PotentialMaterial = new NewMaterial(_CswNbtResources, MaterialNodeTypeId, TradeName, SupplierId, IsConstituent, PartNo, NodeId);

            bool MaterialExists = PotentialMaterial.existsInDb();

            Ret["materialexists"] = MaterialExists;
            if (false == MaterialExists)
            {
                CswNbtPropertySetMaterial NodeAsMaterial = PotentialMaterial.Node;
                if (null == NodeAsMaterial)
                {
                    NodeAsMaterial = PotentialMaterial.commit();
                }
                if (null != NodeAsMaterial)
                {
                    Ret["materialid"] = NodeAsMaterial.NodeId.ToString();
                    Ret["tradename"]  = NodeAsMaterial.TradeName.Text;
                    Ret["partno"]     = NodeAsMaterial.PartNumber.Text;
                    Ret["supplier"]   = false == IsConstituent ? NodeAsMaterial.Supplier.CachedNodeName : "";
                    Ret["supplierid"] = false == IsConstituent?SupplierId.ToString() : "";

                    Ret["nodetypeid"] = NodeAsMaterial.NodeTypeId;
                    NodeAsMaterial.Save.setHidden(value: true, SaveToDb: true);
                    CswNbtSdTabsAndProps SdProps = new CswNbtSdTabsAndProps(_CswNbtResources);
                    Ret["properties"] = SdProps.getProps(NodeAsMaterial.Node, string.Empty, null, CswEnumNbtLayoutType.Add);
                    if (_CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.SDS))
                    {
                        CswNbtMetaDataObjectClass SDSDocOC    = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.SDSDocumentClass);
                        CswNbtMetaDataNodeType    SDSNodeType = SDSDocOC.FirstNodeType;
                        if (null != SDSNodeType)
                        {
                            Ret["documenttypeid"] = SDSNodeType.NodeTypeId;
                        }
                    }
                    Ret["noderef"] = NodeAsMaterial.Node.NodeLink; //for the link
                }
            }
            else
            {
                CswNbtPropertySetMaterial ExisitingMaterial = PotentialMaterial.existingMaterial();
                Ret["noderef"] = ExisitingMaterial.Node.NodeLink;
            }

            return(Ret);
        }
コード例 #8
0
        public void getUniqueRow_Test()
        {
            Dictionary <Int32, Collection <Int32> > RowsAndCols = new Dictionary <int, Collection <int> >();

            //(1,1)
            Assert.AreEqual(CswNbtSdTabsAndProps.getUniqueRow(Int32.MinValue, Int32.MinValue, RowsAndCols), 1);
            //(2,1)
            Assert.AreEqual(CswNbtSdTabsAndProps.getUniqueRow(Int32.MinValue, Int32.MinValue, RowsAndCols), 2);
            //(3,1)
            Assert.AreEqual(CswNbtSdTabsAndProps.getUniqueRow(Int32.MinValue, Int32.MinValue, RowsAndCols), 3);
            //(4,1)
            Assert.AreEqual(CswNbtSdTabsAndProps.getUniqueRow(3, Int32.MinValue, RowsAndCols), 4);
            //(5,1)
            Assert.AreEqual(CswNbtSdTabsAndProps.getUniqueRow(Int32.MinValue, 1, RowsAndCols), 5);
            //(1,2)
            Assert.AreEqual(CswNbtSdTabsAndProps.getUniqueRow(Int32.MinValue, 2, RowsAndCols), 1);
            //(2,2)
            Assert.AreEqual(CswNbtSdTabsAndProps.getUniqueRow(Int32.MinValue, 2, RowsAndCols), 2);
        }
コード例 #9
0
ファイル: CswNbtObjClass.cs プロジェクト: crfroehlich/legacy
        /// <summary>
        /// Save any properties before the Object Class Button Click Event is triggered
        /// </summary>
        private void _onBeforeButtonClickSaveProps(string TabId, NbtButtonData ButtonData)
        {
            Int32   TabIdAsInt  = CswConvert.ToInt32(TabId);
            JObject SelectedTab = null;

            if (null != ButtonData.PropsToSave && ButtonData.PropsToSave.HasValues)
            {
                SelectedTab = CswConvert.ToJObject(ButtonData.PropsToSave[TabId]);
            }
            if (TabIdAsInt > 0 || (null != SelectedTab && SelectedTab.HasValues))
            {
                if (canSave(TabId))
                {
                    CswNbtSdTabsAndProps Sd = new CswNbtSdTabsAndProps(_CswNbtResources);
                    ButtonData.Action = CswEnumNbtButtonAction.refresh;
                    Sd.saveProps(this.NodeId, TabIdAsInt, SelectedTab, this.NodeTypeId, null, false);
                }
            }
        }
コード例 #10
0
        /// <summary>
        /// Instance a new Material Request Item based on the selected button option - the type will either be By Bulk or By Size.
        /// </summary>
        public CswNbtObjClassRequestItem makeMaterialRequestItem(CswNbtPropertySetMaterial Material, CswNbtObjClass.NbtButtonData ButtonData)
        {
            checkForCentralInventoryGroups(_CswNbtResources);
            CswNbtObjClassRequestItem RequestItem   = null;
            CswNbtMetaDataObjectClass RequestItemOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.RequestItemClass);
            CswNbtMetaDataNodeType    RequestItemNT = RequestItemOC.getNodeTypes().FirstOrDefault();
            CswNbtSdTabsAndProps      PropsAction   = new CswNbtSdTabsAndProps(_CswNbtResources);

            if (null != RequestItemNT)
            {
                RequestItem = PropsAction.getAddNodeAndPostChanges(RequestItemNT, delegate(CswNbtNode NewNode)
                {
                    CswNbtObjClassRequestItem RequestItemNode = NewNode;
                    RequestItemNode.Material.RelatedNodeId    = Material.NodeId;
                    if (null != _ThisUser.DefaultLocationId)
                    {
                        CswNbtObjClassLocation DefaultAsLocation = _CswNbtResources.Nodes.GetNode(_ThisUser.DefaultLocationId);
                        if (null != DefaultAsLocation)
                        {
                            RequestItemNode.Location.SelectedNodeId = DefaultAsLocation.NodeId;
                            RequestItemNode.Location.CachedNodeName = DefaultAsLocation.Location.CachedNodeName;
                            RequestItemNode.Location.CachedPath     = DefaultAsLocation.Location.CachedPath;
                        }
                    }
                    switch (ButtonData.SelectedText)
                    {
                    case CswNbtPropertySetMaterial.CswEnumRequestOption.Size:
                        RequestItemNode.Type.Value = CswNbtObjClassRequestItem.Types.MaterialSize;
                        break;

                    default:     //Request by Bulk
                        RequestItemNode.Type.Value = CswNbtObjClassRequestItem.Types.MaterialBulk;
                        break;
                    }
                });
            }
            return(RequestItem);
        }
コード例 #11
0
        public JObject saveMaterialProps(CswPrimaryKey NodePk, JObject PropsObj, Int32 NodeTypeId)
        {
            JObject Ret = new JObject();

            if (CswTools.IsPrimaryKey(NodePk))
            {
                CswNbtPropertySetMaterial MaterialNode = _CswNbtResources.Nodes.GetNode(NodePk);

                CswNbtSdTabsAndProps SdTabsAndProps = new CswNbtSdTabsAndProps(_CswNbtResources);
                SdTabsAndProps.saveNodeProps(MaterialNode.Node, PropsObj);

                switch (MaterialNode.ObjectClass.ObjectClass)
                {
                case CswEnumNbtObjectClass.ChemicalClass:
                    CswNbtObjClassChemical ChemicalNode = MaterialNode.Node;
                    Ret["PhysicalState"] = ChemicalNode.PhysicalState.Value;

                    // Add more properties here if you want.

                    break;

                case CswEnumNbtObjectClass.NonChemicalClass:
                    Ret["PhysicalState"] = CswNbtPropertySetMaterial.CswEnumPhysicalState.NA;

                    // Add properties here!
                    break;

                case CswEnumNbtObjectClass.BiologicalClass:
                    CswNbtObjClassBiological BioNode = MaterialNode.Node;
                    Ret["PhysicalState"] = BioNode.PhysicalState.Value;
                    break;
                }
            }

            return(Ret);
        }
コード例 #12
0
 public CswNbtActReceiving(CswNbtResources CswNbtResources)
 {
     _CswNbtResources      = CswNbtResources;
     _CswNbtSdTabsAndProps = new CswNbtSdTabsAndProps(_CswNbtResources);
 }
コード例 #13
0
        private CswNbtNode _commitMaterialNode(JObject MaterialObj)
        {
            CswNbtNode Ret = null;

            Int32 MaterialNodeTypeId = CswConvert.ToInt32(MaterialObj["materialnodetypeid"]);

            if (Int32.MinValue != MaterialNodeTypeId)
            {
                CswNbtMetaDataNodeType MaterialNt = _CswNbtResources.MetaData.getNodeType(MaterialNodeTypeId);
                if (null != MaterialNt)
                {
                    Ret = _CswNbtResources.Nodes[CswConvert.ToString(MaterialObj["materialId"])];
                    if (null != Ret)
                    {
                        // Set the Vendor node property isTemp = false if necessary
                        bool          IsConstituent = CswConvert.ToBoolean(MaterialObj["isConstituent"]);
                        CswPrimaryKey VendorNodePk  = CswConvert.ToPrimaryKey(CswConvert.ToString(MaterialObj["supplierid"]));
                        if (CswTools.IsPrimaryKey(VendorNodePk) && false == IsConstituent)
                        {
                            CswNbtObjClassVendor VendorNode = _CswNbtResources.Nodes.GetNode(VendorNodePk);
                            if (null != VendorNode && VendorNode.IsTemp)
                            {
                                VendorNode.PromoteTempToReal();
                            }
                        }

                        //Ret.IsTemp = false;
                        JObject MaterialProperties          = (JObject)MaterialObj["properties"];
                        CswNbtSdTabsAndProps SdTabsAndProps = new CswNbtSdTabsAndProps(_CswNbtResources);
                        SdTabsAndProps.saveProps(Ret.NodeId, Int32.MinValue, MaterialProperties, Ret.NodeTypeId, null, IsIdentityTab: false, setIsTempToFalse: false);

                        NewMaterial FinalMaterial = new NewMaterial(_CswNbtResources, Ret);
                        FinalMaterial.TradeName = CswConvert.ToString(MaterialObj["tradename"]);
                        if (false == IsConstituent)
                        {
                            FinalMaterial.SupplierId = CswConvert.ToPrimaryKey(CswConvert.ToString(MaterialObj["supplierid"]));
                            FinalMaterial.PartNo     = CswConvert.ToString(MaterialObj["partno"]);
                        }

                        CswNbtPropertySetMaterial NodeAsMaterial = FinalMaterial.commit();
                        NodeAsMaterial.Save.setHidden(value: false, SaveToDb: true);

                        JObject RequestObj = CswConvert.ToJObject(MaterialObj["request"]);
                        if (RequestObj.HasValues)
                        {
                            _processRequest(CswConvert.ToString(RequestObj["requestitemid"]), NodeAsMaterial);
                        }
                        CswNbtActReceiving Receiving = new CswNbtActReceiving(_CswNbtResources);

                        CswPrimaryKey SDSNodeId = new CswPrimaryKey();
                        if (null != MaterialObj["sdsDocId"])
                        {
                            SDSNodeId.FromString(MaterialObj["sdsDocId"].ToString());
                            JObject SDSProps = CswConvert.ToJObject(MaterialObj["sdsDocProperties"]);
                            Receiving.commitSDSDocNode(NodeAsMaterial.NodeId, SDSNodeId, SDSProps);
                        }
                        Ret.PromoteTempToReal();
                    }
                }

                if (null == Ret)
                {
                    throw new CswDniException(CswEnumErrorType.Error,
                                              "Failed to create new material.",
                                              "Attempted to call _commitMaterialNode failed.");
                }
            }
            return(Ret);
        }
コード例 #14
0
 public CswNbtWebServiceTabsAndProps(CswNbtResources CswNbtResources, CswNbtStatisticsEvents CswNbtStatisticsEvents, bool Multi = false, bool ConfigMode = false)
 {
     _TabsPropsSd = new CswNbtSdTabsAndProps(CswNbtResources, CswNbtStatisticsEvents, Multi, ConfigMode);
 }
コード例 #15
0
 public CswNbtActDispenseContainer(CswNbtResources CswNbtResources)
 {
     _CswNbtResources      = CswNbtResources;
     _CswNbtSdTabsAndProps = new CswNbtSdTabsAndProps(_CswNbtResources);
 }
コード例 #16
0
ファイル: CswNbtObjClass.cs プロジェクト: crfroehlich/legacy
        public bool triggerOnButtonClick(NbtButtonData ButtonData)
        {
            bool Ret = false;

            //1: We have Button Data
            if (null != ButtonData)
            {
                //2: Before the Button Click, Save the Node if any tabs and properties have been provided
                Collection <Int32> TabIds = new Collection <int>();
                if (null != ButtonData.TabIds)
                {
                    TabIds = ButtonData.TabIds.ToIntCollection(ExcludeMinVal: true, ExcludeDuplicates: true);
                }

                if (TabIds.Count > 0)
                {
                    foreach (Int32 TabId in TabIds)
                    {
                        _onBeforeButtonClickSaveProps(CswConvert.ToString(TabId), ButtonData);
                    }
                }
                else
                {
                    if (_CswNbtResources.EditMode == CswEnumNbtNodeEditMode.Add)
                    {
                        //Client-side, we are defining a tabid as EditMode + '_tab'. This isn't great, but it's what we've got right now.
                        _onBeforeButtonClickSaveProps(CswEnumNbtNodeEditMode.Add + "_tab", ButtonData);
                    }
                }

                //3: If we're adding, we're always refreshing on add as the default option
                if (_CswNbtResources.EditMode == CswEnumNbtNodeEditMode.Add)
                {
                    ButtonData.Action = CswEnumNbtButtonAction.refreshonadd;
                }

                //4: If this is the Save property, we're done; else execute the click event
                if (null != ButtonData.NodeTypeProp && ButtonData.NodeTypeProp.IsSaveProp)
                {
                    Ret = true;
                }
                else
                {
                    Ret = onButtonClick(ButtonData);
                }

                //5: If we had tabs or props coming in, we should get the current values to send back (they probably changed after the button click)
                if (TabIds.Count > 0)
                {
                    foreach (Int32 TabId in TabIds)
                    {
                        _onAfterButtonClickSaveProps(CswConvert.ToString(TabId), ButtonData);
                    }
                    if (ButtonData.NodeIds.Count > 1)
                    {
                        Collection <CswPrimaryKey> MultiNodePks = new Collection <CswPrimaryKey>();
                        foreach (string CopyToNodeId in ButtonData.NodeIds)
                        {
                            CswPrimaryKey MultiNodePk = CswConvert.ToPrimaryKey(CopyToNodeId);
                            if (null != MultiNodePk && MultiNodePk != NodeId)
                            {
                                MultiNodePks.Add(MultiNodePk);
                            }
                        }
                        if (ButtonData.NodeIds.Count >= CswNbtBatchManager.getBatchThreshold(_CswNbtResources))
                        {
                            if (ButtonData.PropIds.Count > 0)
                            {
                                Collection <Int32> NodeTypePropIds = new Collection <Int32>();
                                foreach (string PropIdAttrStr in ButtonData.PropIds)
                                {
                                    CswPropIdAttr PropIdAttr = new CswPropIdAttr(PropIdAttrStr);
                                    NodeTypePropIds.Add(PropIdAttr.NodeTypePropId);
                                }
                                CswNbtBatchOpMultiEdit op    = new CswNbtBatchOpMultiEdit(_CswNbtResources);
                                CswNbtObjClassBatchOp  Batch = op.makeBatchOp(Node, MultiNodePks, NodeTypePropIds);
                                ButtonData.Action        = CswEnumNbtButtonAction.batchop;
                                ButtonData.Data["batch"] = Batch.Node.NodeLink;
                            }
                            if (ButtonData.MultiClick && null != ButtonData.NodeTypeProp)
                            {
                                CswNbtBatchOpMultiButtonClick op    = new CswNbtBatchOpMultiButtonClick(_CswNbtResources);
                                CswNbtObjClassBatchOp         Batch = op.makeBatchOp(MultiNodePks, ButtonData.NodeTypeProp.PropId);
                                ButtonData.Action        = CswEnumNbtButtonAction.batchop;
                                ButtonData.Data["batch"] = Batch.Node.NodeLink;
                            }
                        }
                        else
                        {
                            if (ButtonData.PropIds.Count > 0)
                            {
                                CswNbtSdTabsAndProps Sd = new CswNbtSdTabsAndProps(_CswNbtResources);
                                Sd.copyPropValues(Node, ButtonData.NodeIds, ButtonData.PropIds);
                            }
                            if (ButtonData.MultiClick)
                            {
                                foreach (CswPrimaryKey MultiNodeId in MultiNodePks)
                                {
                                    CswNbtNode MultiNode = _CswNbtResources.Nodes[MultiNodeId];
                                    if (null != MultiNode)
                                    {
                                        MultiNode.ObjClass.onButtonClick(ButtonData);
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {
                    if (_CswNbtResources.EditMode == CswEnumNbtNodeEditMode.Add)
                    {
                        _onAfterButtonClickSaveProps(CswEnumNbtNodeEditMode.Add + "_tab", ButtonData);
                    }
                }
            }
            return(Ret);
        }