예제 #1
0
        private string _makeRealKey(string InKey)
        {
            CswDelimitedString RealKey = new CswDelimitedString('_');

            RealKey.Add(InKey);
            RealKey.Add(_SessionId);
            return(RealKey.ToString());
        }
예제 #2
0
            public override string ToString()
            {
                CswDelimitedString DelimStr = new CswDelimitedString(_Delimiter);

                DelimStr.Add(Role.Name.Text);
                DelimStr.Add(NodeType.NodeTypeName);
                return(DelimStr.ToString());
            }
예제 #3
0
 private void _construct(CswPrimaryKey NodeId, Int32 PropId)
 {
     _DelimitedString = new CswDelimitedString(PropIdDelim);
     if (NodeId != null)
     {
         _DelimitedString.Add(NodeId.TableName);
         _DelimitedString.Add(NodeId.PrimaryKey.ToString());
     }
     else
     {
         _DelimitedString.Add("new");
         _DelimitedString.Add("");
     }
     _DelimitedString.Add(PropId.ToString());
 }
예제 #4
0
        public override void update()
        {
            // This fixes what CswUpdateSchema_02G_Case30473 failed to do correctly

            CswNbtMetaDataObjectClass GhsOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.GHSClass );
            foreach( CswNbtMetaDataNodeType GhsNT in GhsOC.getNodeTypes() )
            {
                foreach( CswNbtObjClassGHS GhsNode in GhsNT.getNodes( false, true ) )
                {
                    CswDelimitedString oldVals = GhsNode.Pictograms.Value;
                    CswDelimitedString newVals = new CswDelimitedString( CswNbtNodePropImageList.Delimiter );
                    foreach( string oldVal in oldVals )
                    {
                        if( oldVal.IndexOf( "/ghs/" ) >= 0 )
                        {
                            char testChar = oldVal[( oldVal.IndexOf( "/ghs/" ) + "/ghs/".Length )];
                            string newVal;
                            if( CswTools.IsNumeric( testChar ) )
                            {
                                newVal = oldVal.Replace( "/ghs/600/", "/ghs/512/" );
                            }
                            else
                            {
                                newVal = oldVal.Replace( "/ghs/", "/ghs/512/" );
                            }
                            newVals.Add( newVal );
                        }
                    }
                    GhsNode.Pictograms.Value = newVals;
                    GhsNode.postChanges( false );
                } // foreach( CswNbtObjClassGHS GhsNode in GhsNT.getNodes( false, true ) )
            } // foreach( CswNbtMetaDataNodeType GhsNT in GhsOC.getNodeTypes() )

        } // update()
예제 #5
0
        /// <summary>
        /// Add a value to the set of selected values
        /// </summary>
        public void AddValue(string ValueToAdd)
        {
            CswDelimitedString myValue = Value;

            myValue.Add(ValueToAdd);
            Value = myValue;
        }
예제 #6
0
        public CswDelimitedString ToDelimitedString()
        {
            CswDelimitedString ret = new CswDelimitedString(CswNbtView.delimiter);

            ret.Add(CswEnumNbtViewNodeType.CswNbtViewPropertyFilter.ToString());
            ret.Add(Conjunction.ToString());
            ret.Add(Value);
            ret.Add(FilterMode.ToString());
            ret.Add(CaseSensitive.ToString());
            ret.Add(ArbitraryId.ToString());
            ret.Add(SubfieldName.ToString());
            ret.Add(ShowAtRuntime.ToString());
            ret.Add(ResultMode.ToString());

            return(ret);
        }
예제 #7
0
        public override void SyncGestalt()
        {
            CswDelimitedString NewGestalt = new CswDelimitedString(Delimiter);

            foreach (string Key in Value)
            {
                if (Options.ContainsKey(Key))
                {
                    NewGestalt.Add(Options[Key]);
                }
            }
            SetPropRowValue(CswEnumNbtSubFieldName.Gestalt, CswEnumNbtPropColumn.Gestalt, NewGestalt.ToString());
        } // _setGestalt()
예제 #8
0
        public void OnPictorgramsChange(CswNbtNodeProp Prop, bool Creating)
        {
            // Save the pictorgrams in the same order they are presented on the client
            CswDelimitedString CurrentPictograms = Pictograms.Value;
            CswDelimitedString OrderedPictograms = new CswDelimitedString(CswNbtNodePropImageList.Delimiter);

            foreach (KeyValuePair <string, string> keyValuePair in Pictograms.Options)
            {
                if (CurrentPictograms.Contains(keyValuePair.Key))
                {
                    OrderedPictograms.Add(keyValuePair.Key);
                }
            }
            Pictograms.Value = OrderedPictograms;
        }
예제 #9
0
        public override void ReadJSON(JObject JObject, Dictionary <Int32, Int32> NodeMap, Dictionary <Int32, Int32> NodeTypeMap)
        {
            if (null != JObject[_ValueSubField.ToXmlNodeName(true)])
            {
                CswDelimitedString NewValue = new CswDelimitedString(Delimiter);
                NewValue.FromString(JObject[_ValueSubField.ToXmlNodeName(true)].ToString());

                if (false == AllowMultiple)
                {
                    string SingleValue = NewValue[0];
                    NewValue.Clear();
                    NewValue.Add(SingleValue);
                }
                Value = NewValue;
            }
        }
예제 #10
0
        private void _makeNbtTreeNode(CswNbtTreeNode ParentNode,
                                      string ElemName,
                                      CswPrimaryKey NodeId,
                                      string NodeName,
                                      Int32 NodeTypeId,
                                      Int32 ObjectClassId,
                                      string Icon,
                                      bool Selectable,
                                      CswNbtViewNode ViewNode,
                                      CswEnumNbtNodeSpecies Species,
                                      bool ShowInTree,
                                      bool Locked,
                                      bool Included,
                                      bool Favorited,
                                      CswPrimaryKey RelationalId,
                                      out CswNbtTreeNode NewNode,
                                      out CswNbtNodeKey NewNodeKey)
        {
            // Make the object
            NewNode = new CswNbtTreeNode(NodeId, NodeName, NodeTypeId, ObjectClassId, RelationalId)
            {
                ElementName  = ElemName,
                IconFileName = Icon,
                Selectable   = Selectable,
                ShowInTree   = ShowInTree,
                Locked       = Locked,
                Included     = Included,
                Favorited    = Favorited,
                ChildNodes   = new Collection <CswNbtTreeNode>(),
                ChildProps   = new Collection <CswNbtTreeNodeProp>()
            };

            CswNbtNodeKey      ParentNodeKey = null;
            CswDelimitedString NodeCountPath = new CswDelimitedString(CswNbtNodeKey.NodeCountDelimiter);

            if (ParentNode != null)
            {
                ParentNodeKey = _getKey(ParentNode);
                string ParentNodeCountPath = ParentNodeKey.NodeCountPath.ToString();
                NodeCountPath.FromString(ParentNodeCountPath);
                NodeCountPath.Add(((ParentNode.ChildNodes.Count()) + 1).ToString());
                ParentNode.ChildNodes.Add(NewNode);
                NewNode.ParentNode = ParentNode;
            }

            // Make the key
            NewNodeKey               = new CswNbtNodeKey();
            NewNodeKey.TreeKey       = _CswNbtTreeKey;
            NewNodeKey.NodeSpecies   = Species;
            NewNodeKey.NodeCountPath = NodeCountPath;
            if (NewNode.ElementName == Elements.Node)
            {
                NewNodeKey.NodeId        = NodeId;
                NewNodeKey.NodeTypeId    = NodeTypeId;
                NewNodeKey.ObjectClassId = ObjectClassId;
                if (ViewNode != null)
                {
                    NewNodeKey.ViewNodeUniqueId = ViewNode.UniqueId;
                }
            }
            else if (NewNode.ElementName == Elements.Tree || NewNode.ElementName == Elements.Group)
            {
                // Nothing
            }
            else if (NewNode.ElementName == Elements.Prop)
            {
                throw (new CswDniException("_makeNbtTreeNode called on an NbtNodeProp element"));
            }
            else
            {
                throw (new CswDniException("Unknown element: " + NewNode.ElementName));
            }

            // Dictionaries
            if (NodeId != null)
            {
                if (false == NodesById.ContainsKey(NodeId))
                {
                    NodesById.Add(NodeId, new Collection <CswNbtNodeKey>());
                }
                NodesById[NodeId].Add(NewNodeKey);
            }
            if (ParentNodeKey != null && !NodesAndParents.ContainsKey(NewNodeKey))
            {
                NodesAndParents.Add(NewNodeKey, ParentNodeKey);
            }

            NewNode.NodeKey = NewNodeKey;
        }
예제 #11
0
        public override void update()
        {
            // Fix DSD Picto Paths
            CswNbtMetaDataObjectClass ChemicalOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.ChemicalClass );
            foreach( CswNbtMetaDataNodeType ChemicalNT in ChemicalOC.getNodeTypes() )
            {

                CswDelimitedString PictoPaths = new CswDelimitedString( '\n' )
                    {
                        "Images/cispro/DSD/512/none.gif",
                        "Images/cispro/DSD/512/e.gif",
                        "Images/cispro/DSD/512/o.gif",
                        "Images/cispro/DSD/512/f.gif",
                        "Images/cispro/DSD/512/f_plus.gif",
                        "Images/cispro/DSD/512/t.gif",
                        "Images/cispro/DSD/512/t_plus.gif",
                        "Images/cispro/DSD/512/xn.gif",
                        "Images/cispro/DSD/512/xi.gif",
                        "Images/cispro/DSD/512/c.gif",
                        "Images/cispro/DSD/512/n.gif"
                    };
                CswNbtMetaDataNodeTypeProp PictogramsNTP = ChemicalNT.getNodeTypePropByObjectClassProp( CswNbtObjClassChemical.PropertyName.Pictograms );
                PictogramsNTP.DesignNode.AttributeProperty[CswNbtFieldTypeRuleImageList.AttributeName.ImageUrls].AsMemo.Text = PictoPaths.ToString();
                PictogramsNTP.DesignNode.AttributeProperty[CswNbtFieldTypeRuleImageList.AttributeName.HeightInPixels].AsNumber.Value = 77;
                PictogramsNTP.DesignNode.AttributeProperty[CswNbtFieldTypeRuleImageList.AttributeName.WidthInPixels].AsNumber.Value = 77;
                PictogramsNTP.DesignNode.postChanges( false );

                foreach( CswNbtObjClassChemical ChemicalNode in ChemicalNT.getNodes( false, true ) )
                {
                    CswDelimitedString oldVals = ChemicalNode.Pictograms.Value;
                    CswDelimitedString newVals = new CswDelimitedString( CswNbtNodePropImageList.Delimiter );
                    foreach( string oldVal in oldVals )
                    {
                        if( oldVal.IndexOf( "/DSD/" ) >= 0 && oldVal.IndexOf( "/DSD/512" ) == 0 )
                        {
                            newVals.Add( oldVal.Replace( "/DSD/", "/DSD/512/" ) );
                        }
                        else
                        {
                            newVals.Add( oldVal );
                        }
                    }
                    ChemicalNode.Pictograms.Value = newVals;
                    ChemicalNode.postChanges( false );
                } // foreach( CswNbtObjClassChemical ChemicalNode in ChemicalNT.getNodes( false, true ) )
            } // foreach( CswNbtMetaDataNodeType ChemicalNT in ChemicalOC.getNodeTypes() )

            // Example DSD Print Label
            CswNbtMetaDataObjectClass ContainerOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.ContainerClass );
            CswNbtMetaDataObjectClass PrintLabelOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.PrintLabelClass );
            if( null != PrintLabelOC )
            {
                CswNbtMetaDataNodeType PrintLabelNT = PrintLabelOC.FirstNodeType;
                if( null != PrintLabelNT )
                {
                    CswNbtObjClassPrintLabel DsdLabel = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( PrintLabelNT.NodeTypeId );
                    DsdLabel.LabelName.Text = "Example DSD Label";
                    if( null != ContainerOC )
                    {
                        foreach(CswNbtMetaDataNodeType ContainerNT in ContainerOC.getNodeTypes())
                        {
                            DsdLabel.NodeTypes.SelectedNodeTypeIds.Add( ContainerNT.NodeTypeId.ToString() );
                        }
                    }
                    DsdLabel.EplText.Text = @"I8,0,001
S2
OD
JF
WN
D12
ZB
q375
N
A25,15,0,2,1,1,N,""{Material}""
B25,45,0,1,3,6,40,N,""{Barcode}""
A25,80,0,2,1,1,N,""{Barcode}""
A25,130,0,2,1,1,N,""{NBTDSDB}""
GW0,160,{NBTDSDPICTOS}
GW128,160,{NBTDSDPICTOS_2}
GW256,160,{NBTDSDPICTOS_3}
P1";
                    DsdLabel.postChanges( false );
                }
            }


        } // update()
예제 #12
0
        public static void getDemoDataGrid(ICswResources CswResources, CswNbtDemoDataReturn Return, object Request)
        {
            CswNbtResources CswNbtResources = (CswNbtResources)CswResources;



            //Build table infrastructure
            DataTable GridTable = new DataTable("demodatatable");

            GridTable.Columns.Add(CswNbtDemoDataReturn.ColumnNames.NodeId, typeof(Int32));
            GridTable.Columns.Add(CswNbtDemoDataReturn.ColumnNames.Name, typeof(string));
            GridTable.Columns.Add(CswNbtDemoDataReturn.ColumnNames.Type, typeof(string));
            GridTable.Columns.Add(CswNbtDemoDataReturn.ColumnNames.IsUsedBy, typeof(int));
            GridTable.Columns.Add(CswNbtDemoDataReturn.ColumnNames.IsRequiredBy, typeof(int));
            GridTable.Columns.Add(CswNbtDemoDataReturn.ColumnNames.ConvertToNonDemo, typeof(Boolean));
            GridTable.Columns.Add(CswNbtDemoDataReturn.ColumnNames.Delete, typeof(Boolean));
            GridTable.Columns.Add(CswNbtDemoDataReturn.ColumnNames.MenuOptions, typeof(string));


            _ColumnTypeOverrides.Clear();
            _ColumnTypeOverrides.Add(CswNbtDemoDataReturn.ColumnNames.IsUsedBy.ToString(), typeof(sbyte));
            _ColumnTypeOverrides.Add(CswNbtDemoDataReturn.ColumnNames.IsRequiredBy.ToString(), typeof(sbyte));

            //*****************************
            //Populate views
            string ViewQuery = @"select v.viewname, v.nodeviewid
                                  from node_views v
                                 where isdemo = '1'
                                   and visibility <> 'Property'
                                   and visibility <> 'Hidden'
                                 order by lower(viewname)";

            CswArbitrarySelect ArbitraryViewsSelect = CswNbtResources.makeCswArbitrarySelect("select_demo_nodes", ViewQuery);
            DataTable          DemoViewsTable       = ArbitraryViewsSelect.getTable();

            foreach (DataRow CurrentDemoViewRow in DemoViewsTable.Rows)
            {
                DataRow NewGridRowOfDemoViews = GridTable.NewRow();
                GridTable.Rows.Add(NewGridRowOfDemoViews);
                NewGridRowOfDemoViews[CswNbtDemoDataReturn.ColumnNames.NodeId]       = CurrentDemoViewRow["nodeviewid"].ToString();
                NewGridRowOfDemoViews[CswNbtDemoDataReturn.ColumnNames.Name]         = CurrentDemoViewRow["viewname"].ToString();
                NewGridRowOfDemoViews[CswNbtDemoDataReturn.ColumnNames.Type]         = "View";
                NewGridRowOfDemoViews[CswNbtDemoDataReturn.ColumnNames.IsUsedBy]     = 0;
                NewGridRowOfDemoViews[CswNbtDemoDataReturn.ColumnNames.IsRequiredBy] = 0;
            } //iterate demo views rows


            //*****************************
            //Populate views
            string NodesQuery = @"select n." + CswNbtDemoDataReturn.ColumnNames.NodeId + @",n.nodename,t.nodetypename, t.enabled
                                                from nodes n 
                                                join nodetypes t on (n.nodetypeid=t.nodetypeid )
                                                where n.isdemo = '1'
                                                order by lower( n.nodename ), lower( t.nodetypename )";



            CswArbitrarySelect ArbitraryNodesSelect = CswNbtResources.makeCswArbitrarySelect("select_demo_nodes", NodesQuery);
            DataTable          DemoNodesTable       = ArbitraryNodesSelect.getTable();

            foreach (DataRow CurrentDemoNodeRow in DemoNodesTable.Rows)
            {
                bool   NodeEnabled   = CswConvert.ToBoolean(CurrentDemoNodeRow["enabled"].ToString());
                String DisabledLabel = NodeEnabled ? "" : "(Disabled) ";

                DataRow NewGridRowOfNodes = GridTable.NewRow();
                GridTable.Rows.Add(NewGridRowOfNodes);
                NewGridRowOfNodes[CswNbtDemoDataReturn.ColumnNames.NodeId] = CurrentDemoNodeRow["nodeid"].ToString();
                NewGridRowOfNodes[CswNbtDemoDataReturn.ColumnNames.Name]   = CurrentDemoNodeRow["nodename"].ToString();
                NewGridRowOfNodes[CswNbtDemoDataReturn.ColumnNames.Type]   = DisabledLabel + CurrentDemoNodeRow["nodetypename"].ToString();

                CswDelimitedString UsedByNodeIds = new CswDelimitedString(',');
                Int32 UsedByCount = 0;

                CswDelimitedString RequiredByNodeIds = new CswDelimitedString(',');
                Int32 RequiredByCount = 0;


                string nodeid             = CurrentDemoNodeRow["nodeid"].ToString();
                string node_used_by_query = @"select n." + CswNbtDemoDataReturn.ColumnNames.NodeId + @", n.nodename,t.nodetypename,n.isdemo, p.isrequired 
                                                from jct_nodes_props j 
                                                join nodetype_props p on (j.nodetypepropid=p.nodetypepropid)
                                                join field_types f on ( p.fieldtypeid = f.fieldtypeid )
                                                join nodes n on (j.nodeid=n.nodeid) 
                                                join nodetypes t on (n.nodetypeid=t.nodetypeid)
                                                where ( f.fieldtype='Relationship' or f.fieldtype='Location' )
                                                and j.field1_fk='" + nodeid + "'";

                CswArbitrarySelect ArbitraryUsedBySelect = CswNbtResources.makeCswArbitrarySelect("select_nodesusedby_nodeid_" + nodeid, node_used_by_query);
                DataTable          NodesUsedByTable      = ArbitraryUsedBySelect.getTable();


                foreach (DataRow CurrentUsedByRow in NodesUsedByTable.Rows)
                {
                    string CurrentNodeId = CurrentUsedByRow["nodeid"].ToString();
                    if (true == CswConvert.ToBoolean(CurrentUsedByRow["isrequired"].ToString()))
                    {
                        RequiredByNodeIds.Add(CurrentNodeId);
                        RequiredByCount++;
                    }
                    else
                    {
                        UsedByNodeIds.Add(CurrentNodeId);
                        UsedByCount++;
                    } //if-else it's required
                }     //iterate nodes used by rows


                NewGridRowOfNodes[CswNbtDemoDataReturn.ColumnNames.MenuOptions]  = "{ \"requiredby\" : [" + RequiredByNodeIds.ToString() + "],\"usedby\" :[" + UsedByNodeIds.ToString() + "], \"nodename\": \" " + CurrentDemoNodeRow["nodename"].ToString() + "\" }";
                NewGridRowOfNodes[CswNbtDemoDataReturn.ColumnNames.IsUsedBy]     = UsedByCount;
                NewGridRowOfNodes[CswNbtDemoDataReturn.ColumnNames.IsRequiredBy] = RequiredByCount;
            } //iterate node rows



            CswNbtGrid Grid = new CswNbtGrid(CswNbtResources);

            Return.Data.Grid = Grid.DataTableToGrid(GridTable, IncludeEditFields: false, ColumnTypeOverrides: _ColumnTypeOverrides);
        } //getDemoDataGrid()
예제 #13
0
        public CswDelimitedString ToDelimitedString()
        {
            CswDelimitedString ret = new CswDelimitedString(CswNbtView.delimiter);

            ret.Add(CswEnumNbtViewNodeType.CswNbtViewProperty.ToString());
            ret.Add(Type.ToString());
            ret.Add(NodeTypePropId.ToString());
            ret.Add(Name.ToString());
            ret.Add(ArbitraryId.ToString());
            ret.Add(SortBy.ToString());
            ret.Add(SortMethod.ToString());

            if (FieldType != CswNbtResources.UnknownEnum)
            {
                ret.Add(FieldType.ToString());
            }
            else
            {
                ret.Add("");
            }

            if (Order != Int32.MinValue)
            {
                ret.Add(Order.ToString());
            }
            else
            {
                ret.Add("");
            }

            if (Width != Int32.MinValue)
            {
                ret.Add(Width.ToString());
            }
            else
            {
                ret.Add("");
            }

            ret.Add(ShowInGrid.ToString());

            ret.Add(ObjectClassPropId.ToString());
            return(ret);
        }
예제 #14
0
        /// <summary>
        /// Create a dictionary of the unique key values of related nodes
        /// As a side effect, also populate MergeInfoData.NodePair.NodeReferences
        /// </summary>
        private Dictionary <CswDelimitedString, CswPrimaryKey> _getUniqueKeysDict(MergeInfoData.MergeInfoNodePair NodePair, CswNbtNode Node, CswNbtMetaDataNodeTypeProp NodeReferenceProp)
        {
            Dictionary <CswDelimitedString, CswPrimaryKey> ret = new Dictionary <CswDelimitedString, CswPrimaryKey>();
            char delimiter = '|';

            // Find unique properties for this reference's nodetype
            IEnumerable <CswNbtMetaDataNodeTypeProp> UniqueProps = NodeReferenceProp.getNodeType().getUniqueProps();

            // Create a view of nodes that point to the target node via this reference
            CswNbtView             view = new CswNbtView(_CswNbtResources);
            CswNbtViewRelationship rel1 = view.AddViewRelationship(Node.getNodeType(), false);

            rel1.NodeIdsToFilterIn.Add(Node.NodeId);
            CswNbtViewRelationship rel2 = view.AddViewRelationship(rel1, CswEnumNbtViewPropOwnerType.Second, NodeReferenceProp, false);

            foreach (CswNbtMetaDataNodeTypeProp uniqueProp in UniqueProps)
            {
                view.AddViewProperty(rel2, uniqueProp);
            }

            // Iterate children and store unique property values in a dictionary key
            ICswNbtTree tree = _CswNbtResources.Trees.getTreeFromView(view, RequireViewPermissions: false, IncludeHiddenNodes: true, IncludeSystemNodes: true);

            if (tree.getChildNodeCount() > 0)
            {
                tree.goToNthChild(0);
                for (Int32 c = 0; c < tree.getChildNodeCount(); c++)
                {
                    tree.goToNthChild(c);
                    CswPrimaryKey thisNodeId = tree.getNodeIdForCurrentPosition();

                    // Populate MergeInfoData.NodePair.NodeReferences while we're here
                    NodePair.NodeReferences.Add(new MergeInfoData.MergeInfoNodeReference()
                    {
                        NodeId         = thisNodeId.ToString(),
                        NodeTypePropId = NodeReferenceProp.PropId
                    });

                    CswDelimitedString key;
                    if (_AllUniqueKeys.ContainsKey(thisNodeId))
                    {
                        // If we've seen this node before, use the existing key but override the merge property
                        // (this will allow us to merge correctly if a nodetype has
                        //  multiple compound unique references that are all involved in the merge)
                        key = _AllUniqueKeys[thisNodeId];
                        for (Int32 u = 0; u < UniqueProps.Count(); u++)
                        {
                            if (UniqueProps.ElementAt(u).PropId == NodeReferenceProp.PropId)
                            {
                                // This value will be equal after the merge
                                key[u] = "[mergeresult]";
                            }
                        } // foreach( CswNbtMetaDataNodeTypeProp uniqueProp in UniqueProps )
                    }     // if( _AllUniqueKeys.ContainsKey( thisNodeId ) )
                    else
                    {
                        // generate a new key
                        key = new CswDelimitedString(delimiter);
                        foreach (CswNbtMetaDataNodeTypeProp uniqueProp in UniqueProps)
                        {
                            CswNbtTreeNodeProp prop = tree.getChildNodePropsOfNode().FirstOrDefault(p => p.NodeTypePropId == uniqueProp.PropId);
                            if (null != prop)
                            {
                                if (prop.NodeTypePropId == NodeReferenceProp.PropId)
                                {
                                    // This value will be equal after the merge
                                    key.Add("[mergeresult]");
                                }
                                else
                                {
                                    key.Add(prop.Gestalt);
                                }
                            }
                            else
                            {
                                key.Add("");
                            }
                        } // foreach( CswNbtMetaDataNodeTypeProp uniqueProp in UniqueProps )
                    }     // if-else( _AllUniqueKeys.ContainsKey( thisNodeId ) )

                    if (key.Count > 0)
                    {
                        ret.Add(key, thisNodeId);
                        _AllUniqueKeys[thisNodeId] = key;
                    }

                    tree.goToParentNode();
                } // for( Int32 c = 0; c < tree.getChildNodeCount(); c++ )
            }     // if( tree.getChildNodeCount() > 0 )
            return(ret);
        }         // _getUniqueKeysDict()