public override void update()
        {

            CswNbtMetaDataPropertySet PhrasePS = _CswNbtSchemaModTrnsctn.MetaData.getPropertySet( CswEnumNbtPropertySetName.PhraseSet );
            if( null == PhrasePS )
            {
                PhrasePS = _CswNbtSchemaModTrnsctn.MetaData.makeNewPropertySet( CswEnumNbtPropertySetName.PhraseSet, "warning.png" );

                //Update the DSD and GHS Phrases
                CswTableUpdate TableUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "updatePhrasePropSets", "jct_propertyset_objectclass" );

                DataTable ObjClassTbl = TableUpdate.getEmptyTable();
                DataRow GHSRow = ObjClassTbl.NewRow();
                DataRow DSDRow = ObjClassTbl.NewRow();

                GHSRow["propertysetid"] = PhrasePS.PropertySetId;
                GHSRow["objectclassid"] = _CswNbtSchemaModTrnsctn.MetaData.getObjectClassId( CswEnumNbtObjectClass.GHSPhraseClass );

                DSDRow["propertysetid"] = PhrasePS.PropertySetId;
                DSDRow["objectclassid"] = _CswNbtSchemaModTrnsctn.MetaData.getObjectClassId( CswEnumNbtObjectClass.DSDPhraseClass );

                ObjClassTbl.Rows.Add( GHSRow );
                ObjClassTbl.Rows.Add( DSDRow );

                TableUpdate.update( ObjClassTbl );
            }
            
        } // update()
Пример #2
0
        public override void update()
        {
            // Insert license into licenses table
            CswTableUpdate LicenseUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "30086_license_update", "license" );
            DataTable LicenseTable = LicenseUpdate.getEmptyTable();
            DataRow lRow = LicenseTable.NewRow();
            lRow["activedate"] = DateTime.Now;
            lRow["licensetxt"] = @"These ""Terms of Use"" set forth the terms and conditions that apply to your use of ChemSWLive (the ""Web Site""). By using the Web Site (other than to read this page for the first time), you agree to comply with all of the Terms of Use set forth herein. The right to use the Web Site is personal to you and is not transferable to any other person or entity.
        
Copyrights and Trademarks
    A. All materials contained on the Web Site are Copyright 2006-2013, ChemSW, Inc. All rights reserved.
    B. No person is authorized to use, copy or distribute any portion the Web Site including related graphics.
    C. ChemSWLive and other trademarks and/or service marks (including logos and designs) found on the Web Site are trademarks/service marks that identify ChemSW, Inc. and the goods and/or services provided by ChemSW, Inc.. Such marks may not be used under any circumstances without the prior written authorization of ChemSW, Inc.
        
Links to Third-Party Web Site
ChemSW, Inc. may provide hyperlinks to third-party web sites as a convenience to users of the Web Site. ChemSW, Inc. does not control third-party web sites and is not responsible for the contents of any linked-to, third-party web sites or any hyperlink in a linked-to web site. ChemSW, Inc. does not endorse, recommend or approve any third-party web site hyperlinked from the Web Site. ChemSW, Inc. will have no liability to any entity for the content or use of the content available through such hyperlink.

No Representations or Warranties; Limitations on Liability
The information and materials on the Web Site could include technical inaccuracies or typographical errors. Changes are periodically made to the information contained herein. ChemSW, Inc. MAKES NO REPRESENTATIONS OR WARRANTIES WITH RESPECT TO ANY INFORMATION, MATERIALS OR GRAPHICS ON THE WEB SITE, ALL OF WHICH IS PROVIDED ON A STRICTLY ""AS IS"" BASIS, WITHOUT WARRANTY OF ANY KIND AND HEREBY EXPRESSLY DISCLAIMS ALL WARRANTIES WITH REGARD TO ANY INFORMATION, MATERIALS OR GRAPHICS ON THE WEB SITE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. UNDER NO CIRCUMSTANCES SHALL THE SITE OWNER OR PUBLISHER BE LIABLE UNDER ANY THEORY OF RECOVERY, AT LAW OR IN EQUITY, FOR ANY DAMAGES, INCLUDING WITHOUT LIMITATION, SPECIAL, DIRECT, INCIDENTAL, CONSEQUENTIAL OR PUNITIVE DAMAGES (INCLUDING, BUT NOT LIMITED TO LOSS OF USE OR LOST PROFITS), ARISING OUT OF OR IN ANY MANNER CONNECTED WITH THE USE OF INFORMATION OR SERVICES, OR THE FAILURE TO PROVIDE INFORMATION OR SERVICES, FROM THE WEB SITE.

Changes to These Terms of Use
ChemSW, Inc. reserves the right to change these Terms of Use at any time by posting new Terms of Use at this location. You can send e-mail to ChemSW, Inc. with any questions relating to these Terms of Use at [email protected].";

            LicenseTable.Rows.Add( lRow );
            LicenseUpdate.update( LicenseTable );
        }
Пример #3
0
        } // saveSessionData(Search)

        /// <summary>
        /// Save a view to the session data collection.  Sets the SessionViewId on the view.
        /// </summary>
        public CswNbtSessionDataId saveSessionData( CswNbtView View, bool IncludeInQuickLaunch, bool KeepInQuickLaunch = false, bool UpdateCache = false )
        {
            CswTableUpdate SessionViewsUpdate = _CswNbtResources.makeCswTableUpdate( "saveSessionView_update", SessionDataTableName );
            DataTable SessionViewTable;
            if( View.SessionViewId != null && View.SessionViewId.isSet() ) //Get existing session view by SessionViewId
                SessionViewTable = SessionViewsUpdate.getTable( SessionDataColumn_PrimaryKey, View.SessionViewId.get(), "where sessionid = '" + SessionId + "'", false );
            else if( View.ViewId != null && View.ViewId.isSet() ) //Get existing session view by ViewId
                SessionViewTable = SessionViewsUpdate.getTable( SessionDataColumn_ViewId, View.ViewId.get(), "where sessionid = '" + SessionId + "'", false );
            else //Save new Session View
                SessionViewTable = SessionViewsUpdate.getEmptyTable();
            if( SessionViewTable.Rows.Count == 0 )
            {
                UpdateCache = true;
            }

            DataRow SessionViewRow = _getSessionViewRow( SessionViewTable, View.ViewName, CswEnumNbtSessionDataType.View, IncludeInQuickLaunch, KeepInQuickLaunch );
            if( UpdateCache && false == ( _CswNbtResources.CurrentNbtUser is CswNbtSystemUser ) )//Overwrite
            {
                SessionViewRow[SessionDataColumn_ViewId] = CswConvert.ToDbVal( View.ViewId.get() );
                SessionViewRow[SessionDataColumn_ViewMode] = View.ViewMode.ToString();
                SessionViewRow[SessionDataColumn_ViewXml] = View.ToString();
                SessionViewsUpdate.update( SessionViewTable );
            }

            return new CswNbtSessionDataId( CswConvert.ToInt32( SessionViewRow[SessionDataColumn_PrimaryKey] ) );

        } // saveSessionData(View)
        //public void clear()
        //{
        //}//clear()

        public void makeNewNodeEntry(CswNbtNode Node, bool SyncProps)
        {
            // Don't sync for temp nodes
            if (false == Node.IsTemp)
            {
                string         TableName      = Node.getNodeType().TableName;
                string         PkColumnName   = _CswNbtResources.getPrimeKeyColName(TableName);
                CswTableUpdate CswTableUpdate = _CswNbtResources.makeCswTableUpdate("CswNbtNodeWriterRelationalDb.makeNewNodeEntry_update", TableName);

                DataTable NewNodeTable = CswTableUpdate.getEmptyTable();
                DataRow   NewNodeRow   = NewNodeTable.NewRow();
                NewNodeTable.Rows.Add(NewNodeRow);

                Node.RelationalId = new CswPrimaryKey(TableName, CswConvert.ToInt32(NewNodeTable.Rows[0][PkColumnName]));

                CswTableUpdate.update(NewNodeTable);

                if (SyncProps)
                {
                    // It is possible for the node to have existed as a temp node, and therefore already have property values.
                    // Now that the node has a relationalid, this will sync the current property values to the new relational row
                    Node.Properties.update(Node,
                                           IsCopy: false,
                                           OverrideUniqueValidation: false,
                                           Creating: false,
                                           AllowAuditing: true,
                                           SkipEvents: false);
                }
            }
        }
Пример #5
0
        }//createBiologicalOC()

        private void _linkBiologicalOCtoPS()
        {

            //Update the NodeTypeProps' OCPs to point to Biological's OCPs - if NonChemical does not have an OCP with the given NTP name, the NTP is deleted.
            CswNbtMetaDataObjectClass BiologicalOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.BiologicalClass );

            // Populate jct_propertyset_objectclass
                CswTableUpdate JctOCUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "28160_jct_update", "jct_propertyset_objectclass" );
                DataTable JctOCTable = JctOCUpdate.getEmptyTable();

                DataRow NewRow = JctOCTable.NewRow();
                NewRow["objectclassid"] = BiologicalOC.ObjectClassId;
                NewRow["propertysetid"] = CswConvert.ToDbVal( _CswNbtSchemaModTrnsctn.MetaData.getPropertySetId( CswEnumNbtPropertySetName.MaterialSet ) );
                JctOCTable.Rows.Add( NewRow );

                JctOCUpdate.update( JctOCTable );


           // Populate jct_propertyset_objectclassprop
                CswTableUpdate JctOCPUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "28160_jct2_update", "jct_propertyset_ocprop" );
                DataTable JctOCPTable = JctOCPUpdate.getEmptyTable();

                foreach( CswNbtMetaDataObjectClassProp ObjectClassProp in BiologicalOC.getObjectClassProps() )
                {
                    string[] PropsToAdd = new string[]
                        {
                            CswNbtObjClassBiological.PropertyName.TradeName,
                            CswNbtObjClassBiological.PropertyName.LegacyMaterialId,
                            CswNbtObjClassBiological.PropertyName.ApprovedForReceiving,
                            CswNbtObjClassBiological.PropertyName.C3ProductId,
                            CswNbtObjClassBiological.PropertyName.ContainerExpirationLocked,
                            CswNbtObjClassBiological.PropertyName.MaterialId,
                            CswNbtObjClassBiological.PropertyName.Supplier,
                            CswNbtObjClassBiological.PropertyName.PartNumber,
                            CswNbtObjClassBiological.PropertyName.Receive,
                            CswNbtObjClassBiological.PropertyName.Request,
                            CswNbtObjClassBiological.PropertyName.IsConstituent,
                            CswNbtObjClassBiological.PropertyName.Documents,
                            CswNbtObjClassBiological.PropertyName.Synonyms
                        };

                    if( PropsToAdd.Contains( ObjectClassProp.PropName ) )
                    {
                        NewRow = JctOCPTable.NewRow();
                        NewRow["objectclasspropid"] = ObjectClassProp.PropId;
                        NewRow["propertysetid"] = CswConvert.ToDbVal( _CswNbtSchemaModTrnsctn.MetaData.getPropertySetId( CswEnumNbtPropertySetName.MaterialSet ) );
                        JctOCPTable.Rows.Add( NewRow );
                    }// if the prop is a PSP, insert a jct record

                } //  foreach property in the biological class

                JctOCPUpdate.update( JctOCPTable );

        }//linkBiologicalOCtoPS
Пример #6
0
        public override void update()
        {
            CswTableUpdate JctPSOCPUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "29499_jctpsocp_update", "jct_propertyset_ocprop" );
            DataTable JctPSOCPTable = JctPSOCPUpdate.getEmptyTable();

            CswNbtMetaDataPropertySet DocumentPS = _CswNbtSchemaModTrnsctn.MetaData.getPropertySet( CswEnumNbtPropertySetName.DocumentSet );
            foreach( CswNbtMetaDataObjectClass DocOC in DocumentPS.getObjectClasses() )
            {
                _createProps( DocOC, JctPSOCPTable, DocumentPS.PropertySetId );
            }

            JctPSOCPUpdate.update( JctPSOCPTable );
        } // update()
Пример #7
0
        public void isFavoriteTestReturnsTrue()
        {
            CswNbtNode     TestNode        = TestData.Nodes.createControlZoneNode();
            Int32          UserId          = 1;
            CswTableUpdate FavoritesUpdate = TestData.CswNbtResources.makeCswTableUpdate("favoritesUpdate", "favorites");
            DataTable      FavoritesTable  = FavoritesUpdate.getEmptyTable();
            DataRow        FavoritesRow    = FavoritesTable.NewRow();

            FavoritesRow["userid"] = UserId;
            FavoritesRow["itemid"] = TestNode.NodeId.PrimaryKey;
            FavoritesTable.Rows.Add(FavoritesRow);
            FavoritesUpdate.update(FavoritesTable);
            Assert.IsTrue(TestNode.isFavorite(UserId));
        }
Пример #8
0
        public override void update()
        {
            CswNbtMetaDataObjectClass DesignNtpOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.DesignNodeTypePropClass );

            foreach( CswNbtMetaDataNodeType DesignNtpNT in DesignNtpOC.getNodeTypes() )
            {
                // Set existing values of hidden
                foreach( CswNbtObjClassDesignNodeTypeProp DesignNtpNode in DesignNtpNT.getNodes( false, true ) )
                {
                    DesignNtpNode.Hidden.Checked = CswConvert.ToTristate( DesignNtpNode.RelationalNodeTypeProp.Hidden );
                    DesignNtpNode.postChanges( false );
                }

                // Fix layout
                CswNbtMetaDataNodeTypeProp HiddenNTP = DesignNtpNT.getNodeTypePropByObjectClassProp( CswNbtObjClassDesignNodeTypeProp.PropertyName.Hidden );
                CswNbtMetaDataNodeTypeProp ReadOnlyNTP = DesignNtpNT.getNodeTypePropByObjectClassProp( CswNbtObjClassDesignNodeTypeProp.PropertyName.ReadOnly );
                _CswNbtSchemaModTrnsctn.MetaData.NodeTypeLayout.updatePropLayout( CswEnumNbtLayoutType.Edit, HiddenNTP, ReadOnlyNTP, true );
            }

            // Synchronize property with nodetype_props.hidden
            CswTableUpdate jctUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "51775_jctddntp_update", "jct_dd_ntp" );
            DataTable jctTable = jctUpdate.getEmptyTable();
            foreach( CswNbtMetaDataNodeType DesignNtpNT in DesignNtpOC.getNodeTypes() )
            {
                _CswNbtSchemaModTrnsctn.CswDataDictionary.setCurrentColumn( "nodetype_props", "hidden" );
                CswNbtMetaDataNodeTypeProp HiddenNTP = DesignNtpNT.getNodeTypePropByObjectClassProp( CswNbtObjClassDesignNodeTypeProp.PropertyName.Hidden );

                DataRow NodeTypeNameRow = jctTable.NewRow();
                NodeTypeNameRow["nodetypepropid"] = HiddenNTP.PropId;
                NodeTypeNameRow["datadictionaryid"] = _CswNbtSchemaModTrnsctn.CswDataDictionary.TableColId;
                if( null != HiddenNTP.getFieldTypeRule().SubFields.Default )
                {
                    NodeTypeNameRow["subfieldname"] = HiddenNTP.getFieldTypeRule().SubFields.Default.Name;
                }
                jctTable.Rows.Add( NodeTypeNameRow );
            }
            jctUpdate.update( jctTable );


            // make Request module require the Multi-Inventory-Group module
            _CswNbtSchemaModTrnsctn.execArbitraryPlatformNeutralSql( @"update modules 
                                                                          set prereq = (select moduleid from modules 
                                                                                         where name = '" + CswEnumNbtModuleName.MultiInventoryGroup + @"')
                                                                        where name = '" + CswEnumNbtModuleName.Requesting + @"'" );

        } // update()
Пример #9
0
        public override void update()
        {
            CswTableUpdate LayoutTabUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "layout_tab_update", "layout_tab" );
            DataTable LayoutTabTable = LayoutTabUpdate.getEmptyTable();
            CswArbitrarySelect OldLayoutTabsSelect = _CswNbtSchemaModTrnsctn.makeCswArbitrarySelect( "layout_tab_update", 
@"select 
  l.layouttype, 
  t.tabname, 
  t.taborder,
  l.nodetypeid, 
  n.nodeid design_nodetype_nodeid,
  l.nodetypetabsetid, 
  n3.nodeid design_nodetypetab_nodeid
from nodetype_layout l
left join nodetype_tabset t on l.nodetypetabsetid = t.nodetypetabsetid
left join nodes n on n.relationalid = l.nodetypeid and n.relationaltable = 'nodetypes'
left join nodes n3 on n3.relationalid = l.nodetypetabsetid and n3.relationaltable = 'nodetype_tabset'
group by l.layouttype, t.tabname, t.taborder, l.nodetypeid, l.nodetypetabsetid, n.nodeid, n3.nodeid
order by l.nodetypeid, l.layouttype" );
            DataTable OldLayoutTabsTable = OldLayoutTabsSelect.getTable();
            foreach( DataRow OldLayoutRow in OldLayoutTabsTable.Rows )
            {
                DataRow LayoutTabRow = LayoutTabTable.NewRow();
                LayoutTabRow["layout_type"] = OldLayoutRow["layouttype"].ToString().ToLower();
                if( LayoutTabRow["layout_type"].ToString() == "table" )
                {
                    LayoutTabRow["layout_type"] = "search";
                }
                LayoutTabRow["tab_type"] = "main";
                if( OldLayoutRow["tabname"].ToString() == "Identity" )
                {
                    LayoutTabRow["tab_type"] = "identity";
                }
                LayoutTabRow["tab_name"] = OldLayoutRow["tabname"];
                LayoutTabRow["tab_order"] = OldLayoutRow["taborder"];
                if( LayoutTabRow["tab_order"].ToString() == "" )
                {
                    LayoutTabRow["tab_order"] = 1;
                }
                LayoutTabRow["metadata_nodetypeid"] = OldLayoutRow["nodetypeid"];
                LayoutTabRow["design_nodetype_nodeid"] = OldLayoutRow["design_nodetype_nodeid"];
                LayoutTabRow["design_nodetypetab_nodeid"] = OldLayoutRow["design_nodetypetab_nodeid"];
                LayoutTabTable.Rows.Add( LayoutTabRow );
            }
            LayoutTabUpdate.update( LayoutTabTable );
        } // update()
Пример #10
0
        public override void update()
        {
            //Rename sched rule
            CswTableUpdate schedRulesTU = _CswNbtSchemaModTrnsctn.makeCswTableUpdate("RenameFingerprintRule", "scheduledrules");
            DataTable      schedRules   = schedRulesTU.getTable("where rulename = 'MolFingerprints'");

            if (schedRules.Rows.Count > 0)
            {
                schedRules.Rows[0]["rulename"] = CswEnumNbtScheduleRuleNames.MolData.ToString();
            }
            schedRulesTU.update(schedRules);

            //Get all Mol NTP ids
            CswCommaDelimitedString molNTPs = new CswCommaDelimitedString();

            foreach (CswNbtMetaDataNodeTypeProp molNTP in _CswNbtSchemaModTrnsctn.MetaData.getNodeTypeProps(CswEnumNbtFieldType.MOL))
            {
                molNTPs.Add(molNTP.PropId.ToString());
            }

            CswTableUpdate molDataUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate("moldataUpdate_52735", "mol_data");
            DataTable      molDataTbl    = molDataUpdate.getEmptyTable();

            CswTableUpdate molDataPropsTblUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate("molselect_52735", "jct_nodes_props");
            DataTable      propsWithMols         = molDataPropsTblUpdate.getTable("where nodetypepropid in (" + molNTPs.ToString() + ") and clobdata is not null");

            foreach (DataRow molPropRow in propsWithMols.Rows)
            {
                string molString     = molPropRow["clobdata"].ToString();
                int    jctnodepropid = CswConvert.ToInt32(molPropRow["jctnodepropid"]);

                DataRow newMolDataTblRow = molDataTbl.NewRow();
                newMolDataTblRow["jctnodepropid"] = jctnodepropid;
                newMolDataTblRow["originalmol"]   = Encoding.UTF8.GetBytes(molString);
                newMolDataTblRow["contenttype"]   = ".mol";
                newMolDataTblRow["nodeid"]        = molPropRow["nodeid"];
                molDataTbl.Rows.Add(newMolDataTblRow);

                molPropRow["clobdata"] = string.Empty;
                molPropRow["field1"]   = "1";
            }

            molDataUpdate.update(molDataTbl);
            molDataPropsTblUpdate.update(propsWithMols);
        }
Пример #11
0
        public override void update()
        {
           CswNbtMetaDataObjectClass BiologicalOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.BiologicalClass );
           CswNbtMetaDataObjectClass SupplyOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.NonChemicalClass );
            CswNbtMetaDataNodeType TimeUoM_OC = _CswNbtSchemaModTrnsctn.MetaData.getNodeType( "Unit Time" );

            CswTableUpdate JctPropSetOCP = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "52990_JCT_PS_OCP", "jct_propertyset_ocprop" );
            DataTable JctTable = JctPropSetOCP.getEmptyTable();

            foreach( CswNbtMetaDataObjectClass MaterialOC in new[] {BiologicalOC, SupplyOC} )
            {

                CswNbtMetaDataObjectClassProp ExpireInterval = _CswNbtSchemaModTrnsctn.createObjectClassProp( MaterialOC, new CswNbtWcfMetaDataModel.ObjectClassProp
                {
                    PropName = CswNbtPropertySetMaterial.PropertyName.ExpirationInterval,
                    FieldType = CswEnumNbtFieldType.Quantity,
                    IsFk = true,
                    FkType = "NodeTypeId",
                    FkValue = TimeUoM_OC.NodeTypeId
                } );

                CswNbtMetaDataObjectClassProp OpenExpireInterval = _CswNbtSchemaModTrnsctn.createObjectClassProp( MaterialOC, new CswNbtWcfMetaDataModel.ObjectClassProp
                {
                    PropName = CswNbtPropertySetMaterial.PropertyName.OpenExpireInterval,
                    FieldType = CswEnumNbtFieldType.Quantity,
                    IsFk = true,
                    FkType = "NodeTypeId",
                    FkValue = TimeUoM_OC.NodeTypeId
                } );

                DataRow Row = JctTable.NewRow();
                Row["propertysetid"] = MaterialOC.getPropertySet().PropertySetId;
                Row["objectclasspropid"] = ExpireInterval.ObjectClassPropId;
                JctTable.Rows.Add( Row );

                Row = JctTable.NewRow();
                Row["propertysetid"] = MaterialOC.getPropertySet().PropertySetId;
                Row["objectclasspropid"] = OpenExpireInterval.ObjectClassPropId;
                JctTable.Rows.Add( Row );
            }

            JctPropSetOCP.update( JctTable );
        } // update()
Пример #12
0
 public override void update()
 {
     CswTableUpdate T2RangeCodesUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "t2_range_codes_update", "tier2_rangecodes" );
     DataTable RangeCodesTable = T2RangeCodesUpdate.getEmptyTable();
     _addRangeCode( RangeCodesTable, "01", 0, 99 );
     _addRangeCode( RangeCodesTable, "02", 100, 499 );
     _addRangeCode( RangeCodesTable, "03", 500, 999 );
     _addRangeCode( RangeCodesTable, "04", 1000, 4999 );
     _addRangeCode( RangeCodesTable, "05", 5000, 9999 );
     _addRangeCode( RangeCodesTable, "06", 10000, 24999 );
     _addRangeCode( RangeCodesTable, "07", 25000, 49999 );
     _addRangeCode( RangeCodesTable, "08", 50000, 74999 );
     _addRangeCode( RangeCodesTable, "09", 75000, 99999 );
     _addRangeCode( RangeCodesTable, "10", 100000, 499999 );
     _addRangeCode( RangeCodesTable, "11", 500000, 999999 );
     _addRangeCode( RangeCodesTable, "12", 1000000, 9999999 );
     _addRangeCode( RangeCodesTable, "13", 10000000, Int32.MaxValue - 1 );
     T2RangeCodesUpdate.update( RangeCodesTable );
 } // update()
Пример #13
0
        } // saveSessionData(Action)

        /// <summary>
        /// Save a search to the session data collection.
        /// </summary>
        public CswNbtSessionDataId saveSessionData( CswNbtSearch Search, bool IncludeInQuickLaunch, bool KeepInQuickLaunch = false )
        {
            CswTableUpdate SessionViewsUpdate = _CswNbtResources.makeCswTableUpdate( "saveSessionView_update", SessionDataTableName );
            DataTable SessionViewTable = null;
            if( Search.SessionDataId != null )
            {
                SessionViewTable = SessionViewsUpdate.getTable( SessionDataColumn_PrimaryKey, Search.SessionDataId.get(), "where sessionid = '" + SessionId + "'", false );
            }
            else
            {
                SessionViewTable = SessionViewsUpdate.getEmptyTable();
            }
            DataRow SessionViewRow = _getSessionViewRow( SessionViewTable, Search.Name, CswEnumNbtSessionDataType.Search, IncludeInQuickLaunch, KeepInQuickLaunch );
            //SessionViewRow[SessionDataColumn_SearchId] = CswConvert.ToDbVal( Search.SearchId );
            SessionViewRow[SessionDataColumn_ViewXml] = Search.ToString();
            SessionViewsUpdate.update( SessionViewTable );

            return new CswNbtSessionDataId( CswConvert.ToInt32( SessionViewRow[SessionDataColumn_PrimaryKey] ) );

        } // saveSessionData(Search)
Пример #14
0
        public override void update()
        {
            // Create OpenUrl DocumentPS property
            CswTableUpdate JctPSOCPUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "31210_jctpsocp_update", "jct_propertyset_ocprop" );
            DataTable JctPSOCPTable = JctPSOCPUpdate.getEmptyTable();

            CswNbtMetaDataPropertySet DocumentPS = _CswNbtSchemaModTrnsctn.MetaData.getPropertySet( CswEnumNbtPropertySetName.DocumentSet );
            foreach( CswNbtMetaDataObjectClass DocOC in DocumentPS.getObjectClasses() )
            {
                CswNbtMetaDataObjectClassProp OpenFileOCP = DocOC.getObjectClassProp( CswNbtPropertySetDocument.PropertyName.OpenFile );
                if( null == OpenFileOCP )
                {
                    OpenFileOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( DocOC, new CswNbtWcfMetaDataModel.ObjectClassProp( DocOC )
                    {
                        PropName = CswNbtPropertySetDocument.PropertyName.OpenFile,
                        FieldType = CswEnumNbtFieldType.Button
                    } );

                    DataRow NewJctPSOCPRow = JctPSOCPTable.NewRow();
                    NewJctPSOCPRow["objectclasspropid"] = OpenFileOCP.PropId;
                    NewJctPSOCPRow["propertysetid"] = CswConvert.ToDbVal( DocumentPS.PropertySetId );
                    JctPSOCPTable.Rows.Add( NewJctPSOCPRow );
                }
            }
            JctPSOCPUpdate.update( JctPSOCPTable );

            // Create ChemWatch property on SDSDocumentOC
            CswNbtMetaDataObjectClass SDSDocumentOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.SDSDocumentClass );
            CswNbtMetaDataObjectClassProp ChemWatchOCP = SDSDocumentOC.getObjectClassProp( CswNbtObjClassSDSDocument.PropertyName.ChemWatch );
            if( null == ChemWatchOCP )
            {
                _CswNbtSchemaModTrnsctn.createObjectClassProp( SDSDocumentOC, new CswNbtWcfMetaDataModel.ObjectClassProp( SDSDocumentOC )
                    {
                        PropName = CswNbtObjClassSDSDocument.PropertyName.ChemWatch,
                        FieldType = CswEnumNbtFieldType.Text,
                        ReadOnly = true
                    } );
            }

        } // update()
Пример #15
0
        /// <summary>
        /// Copy views from one role to another
        /// </summary>
        /// <param name="OriginalRoleId">role from which to copy views</param>
        /// <param name="NewRoleId">role to receive the new views</param>
        public void copyViewsByRoleId(CswPrimaryKey OriginalRoleId, CswPrimaryKey NewRoleId)
        {
            CswTableUpdate viewsUpdate   = _CswNbtResources.makeCswTableUpdate("getRoleViews_select", "node_views");
            DataTable      originalViews = viewsUpdate.getTable("where roleid = " + OriginalRoleId.PrimaryKey.ToString());
            DataTable      newViews      = viewsUpdate.getEmptyTable();

            foreach (DataRow OldView in originalViews.Rows)
            {
                DataRow NewView = newViews.NewRow();
                foreach (DataColumn Column in originalViews.Columns)
                {
                    if (Column.ColumnName != "nodeviewid" && Column.ColumnName != "roleid")
                    {
                        NewView[Column.ColumnName] = OldView[Column.ColumnName];
                    }
                }
                NewView["roleid"] = NewRoleId.PrimaryKey;
                newViews.Rows.Add(NewView);
            }

            viewsUpdate.update(newViews);
        }
Пример #16
0
        public override void update()
        {

            CswTableSelect CswTableSelect = _CswNbtSchemaModTrnsctn.makeCswTableSelect( "retrieve-rule-pk", "scheduledrules" );
            Int32 UpdatePropValsPk = Int32.MinValue;
            DataTable DataTableSelect = CswTableSelect.getTable( @"where lower( rulename ) = 'updtpropvals'" );
            if( 1 == DataTableSelect.Rows.Count )
            {
                UpdatePropValsPk = CswConvert.ToInt32( DataTableSelect.Rows[0]["scheduledruleid"] );
            }


            CswTableUpdate CswTableUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "Add-nodes-per-cycle", "scheduledruleparams" );
            DataTable DataTableUpdate = CswTableUpdate.getEmptyTable();
            DataRow NewRow = DataTableUpdate.NewRow();
            NewRow["scheduledruleid"] = UpdatePropValsPk;
            NewRow["paramname"] = "NodesPerCycle";
            NewRow["paramval"] = 25;
            DataTableUpdate.Rows.Add( NewRow );
            CswTableUpdate.update( DataTableUpdate );

        }//Update()
        private void _createPermissionPropertySet()
        {
            CswNbtMetaDataPropertySet PermissionPS = _CswNbtSchemaModTrnsctn.MetaData.getPropertySet(CswEnumNbtPropertySetName.PermissionSet);

            if (null == PermissionPS)
            {
                PermissionPS = _CswNbtSchemaModTrnsctn.MetaData.makeNewPropertySet(CswEnumNbtPropertySetName.PermissionSet, "check.png");

                CswTableUpdate JctPSOCUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate("29570_jctpsoc_update", "jct_propertyset_objectclass");
                DataTable      JctPSOCTable  = JctPSOCUpdate.getEmptyTable();
                _addObjClassToPropertySetPermission(JctPSOCTable, CswEnumNbtObjectClass.InventoryGroupPermissionClass, PermissionPS.PropertySetId);
                _addObjClassToPropertySetPermission(JctPSOCTable, CswEnumNbtObjectClass.ReportGroupPermissionClass, PermissionPS.PropertySetId);
                _addObjClassToPropertySetPermission(JctPSOCTable, CswEnumNbtObjectClass.MailReportGroupPermissionClass, PermissionPS.PropertySetId);
                JctPSOCUpdate.update(JctPSOCTable);

                CswTableUpdate JctPSOCPUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate("29570_jctpsocp_update", "jct_propertyset_ocprop");
                DataTable      JctPSOCPTable  = JctPSOCPUpdate.getEmptyTable();
                _addObjClassPropsToPropertySetPermission(JctPSOCPTable, CswEnumNbtObjectClass.InventoryGroupPermissionClass, PermissionPS.PropertySetId);
                _addObjClassPropsToPropertySetPermission(JctPSOCPTable, CswEnumNbtObjectClass.ReportGroupPermissionClass, PermissionPS.PropertySetId);
                _addObjClassPropsToPropertySetPermission(JctPSOCPTable, CswEnumNbtObjectClass.MailReportGroupPermissionClass, PermissionPS.PropertySetId);
                JctPSOCPUpdate.update(JctPSOCPTable);
            }
        }
Пример #18
0
        /// <summary>
        /// Save search to row in 'search' table.  Returns searchid.
        /// </summary>
        public bool SaveToDb()
        {
            CswTableUpdate SearchUpdate = _CswNbtResources.makeCswTableUpdate("CswNbtSearch_SaveToDb", CswNbtSearchManager.SearchTableName);
            DataTable      SearchTable  = null;
            DataRow        SearchRow    = null;

            if (null != SearchId && Int32.MinValue != SearchId.PrimaryKey)
            {
                SearchTable = SearchUpdate.getTable("where searchid = " + SearchId.PrimaryKey);
                if (SearchTable.Rows.Count > 0)
                {
                    SearchRow = SearchTable.Rows[0];
                }
            }
            if (null == SearchRow)
            {
                SearchTable = SearchUpdate.getEmptyTable();
                SearchRow   = SearchTable.NewRow();
                SearchTable.Rows.Add(SearchRow);
                SearchId = new CswPrimaryKey(CswNbtSearchManager.SearchTableName, CswConvert.ToInt32(SearchRow["searchid"]));
            }

            if (null != SearchRow)
            {
                //SearchRow["searchid"] = CswConvert.ToDbVal(SearchId);
                SearchRow["name"]       = Name;
                SearchRow["category"]   = Category;
                SearchRow["searchdata"] = ToString();
                if (null != UserId)
                {
                    SearchRow["userid"] = CswConvert.ToDbVal(UserId.PrimaryKey);
                }
            }

            SearchUpdate.update(SearchTable);
            return(true);
        } // SaveToDb()
Пример #19
0
        /// <summary>
        /// Stores data in temporary Oracle tables
        /// </summary>
        public static Int32 storeData(CswNbtResources CswNbtResources, string FileName, string FullFilePath, string ImportDefinitionName, bool Overwrite)
        {
            CswNbtSchemaModTrnsctn _CswNbtSchemaModTrnsctn = new CswNbtSchemaModTrnsctn(CswNbtResources);

            //StringCollection ret = new StringCollection();
            DataSet ExcelDataSet = ReadExcel(FullFilePath);

            // Store the job reference in import_data_job
            CswTableUpdate ImportDataJobUpdate = CswNbtResources.makeCswTableUpdate("Importer_DataJob_Insert", CswNbtImportTables.ImportDataJob.TableName);
            DataTable      ImportDataJobTable  = ImportDataJobUpdate.getEmptyTable();
            DataRow        DataJobRow          = ImportDataJobTable.NewRow();

            DataJobRow[CswNbtImportTables.ImportDataJob.filename]    = FileName;
            DataJobRow[CswNbtImportTables.ImportDataJob.userid]      = CswNbtResources.CurrentNbtUser.UserId.PrimaryKey;
            DataJobRow[CswNbtImportTables.ImportDataJob.datestarted] = CswConvert.ToDbVal(DateTime.Now);
            ImportDataJobTable.Rows.Add(DataJobRow);
            Int32 JobId = CswConvert.ToInt32(DataJobRow[CswNbtImportTables.ImportDataJob.importdatajobid]);

            ImportDataJobUpdate.update(ImportDataJobTable);

            foreach (DataTable ExcelDataTable in ExcelDataSet.Tables)
            {
                string          SheetName  = ExcelDataTable.TableName;
                CswNbtImportDef Definition = null;
                //try
                //{
                Definition = new CswNbtImportDef(CswNbtResources, ImportDefinitionName, SheetName);
                //}
                //catch( Exception ex )
                //{
                //    //OnMessage( "Sheet '" + SheetName + "' is invalid: " + ex.Message );
                //}

                // ignore bad sheetnames
                if (null != Definition)
                {
                    // Determine Oracle table name
                    Int32  i = 1;
                    string ImportDataTableName = CswNbtImportTables.ImportDataN.TableNamePrefix + i.ToString();
                    while (_CswNbtSchemaModTrnsctn.isTableDefinedInDataBase(ImportDataTableName))
                    {
                        i++;
                        ImportDataTableName = CswNbtImportTables.ImportDataN.TableNamePrefix + i.ToString();
                    }

                    // Generate an Oracle table for storing and manipulating data
                    _CswNbtSchemaModTrnsctn.addTable(ImportDataTableName, CswNbtImportTables.ImportDataN.PkColumnName);
                    _CswNbtSchemaModTrnsctn.addBooleanColumn(ImportDataTableName, CswNbtImportTables.ImportDataN.error, "", false);
                    _CswNbtSchemaModTrnsctn.addClobColumn(ImportDataTableName, CswNbtImportTables.ImportDataN.errorlog, "", false);
                    foreach (DataColumn ExcelColumn in ExcelDataTable.Columns)
                    {
                        _CswNbtSchemaModTrnsctn.addStringColumn(ImportDataTableName, CswNbtImportDefBinding.SafeColName(ExcelColumn.ColumnName), "", false, 4000);
                    }
                    foreach (CswNbtImportDefOrder Order in Definition.ImportOrder.Values)
                    {
                        _CswNbtSchemaModTrnsctn.addLongColumn(ImportDataTableName, Order.PkColName, "", false);
                    }
                    CswNbtResources.commitTransaction();
                    CswNbtResources.beginTransaction();
                    CswNbtResources.DataDictionary.refresh();

                    // Store the sheet reference in import_data_map
                    CswTableUpdate ImportDataMapUpdate = CswNbtResources.makeCswTableUpdate("Importer_DataMap_Insert", CswNbtImportTables.ImportDataMap.TableName);
                    DataTable      ImportDataMapTable  = ImportDataMapUpdate.getEmptyTable();
                    DataRow        DataMapRow          = ImportDataMapTable.NewRow();
                    DataMapRow[CswNbtImportTables.ImportDataMap.datatablename]   = ImportDataTableName;
                    DataMapRow[CswNbtImportTables.ImportDataMap.importdefid]     = Definition.ImportDefinitionId;
                    DataMapRow[CswNbtImportTables.ImportDataMap.importdatajobid] = JobId;
                    DataMapRow[CswNbtImportTables.ImportDataMap.overwrite]       = CswConvert.ToDbVal(Overwrite);
                    DataMapRow[CswNbtImportTables.ImportDataMap.completed]       = CswConvert.ToDbVal(false);
                    ImportDataMapTable.Rows.Add(DataMapRow);
                    ImportDataMapUpdate.update(ImportDataMapTable);

                    // Copy the Excel data into the Oracle table
                    CswTableUpdate ImportDataUpdate = CswNbtResources.makeCswTableUpdate("Importer_Update", ImportDataTableName);
                    DataTable      ImportDataTable  = ImportDataUpdate.getEmptyTable();
                    foreach (DataRow ExcelRow in ExcelDataTable.Rows)
                    {
                        bool    hasData   = false;
                        DataRow ImportRow = ImportDataTable.NewRow();
                        ImportRow[CswNbtImportTables.ImportDataN.error] = CswConvert.ToDbVal(false);
                        foreach (DataColumn ExcelColumn in ExcelDataTable.Columns)
                        {
                            if (ExcelRow[ExcelColumn] != DBNull.Value)
                            {
                                hasData = true;
                            }
                            ImportRow[CswNbtImportDefBinding.SafeColName(ExcelColumn.ColumnName)] = ExcelRow[ExcelColumn];
                        }
                        if (hasData == true)
                        {
                            ImportDataTable.Rows.Add(ImportRow);
                        }
                    }
                    ImportDataUpdate.update(ImportDataTable);
                    //OnMessage( "Sheet '" + SheetName + "' is stored in Table '" + ImportDataTableName + "'" );
                } // if( null != Definition )
            }     // foreach( DataTable ExcelDataTable in ExcelDataSet.Tables )

            CswNbtResources.commitTransaction();
            CswNbtResources.beginTransaction();

            //return ret;
            return(JobId);
        }
Пример #20
0
        public override void update()
        {
            string SQLQuery = @"with layouttabs as
(select lt.*,
  case lt.layout_type
    when 'edit' then lt.tab_name
    else lt.layout_type
  end as uniquename
  from layout_tab lt),
oldlayouttabs as
(select 
  l.layouttype, 
  t.tabname, 
  l.tabgroup, 
  t.taborder,
  l.display_row, 
  l.display_column,
  l.nodetypeid, 
  l.nodetypepropid, 
  l.nodetypetabsetid, 
  case l.layouttype
    when 'Add' then 'add'
    when 'Preview' then 'preview'
    when 'Table' then 'search'
    else t.tabname
  end as tabtype
from nodetype_layout l
left join nodetype_tabset t on l.nodetypetabsetid = t.nodetypetabsetid)
select
  l.layouttype,
  l.tabname,
  l.tabgroup,
  l.display_column,
  ntp.propname,
  l.nodetypepropid, 
  n2.nodeid design_nodetypeprop_nodeid,
  lt.layout_tab_id
from oldlayouttabs l
join nodetype_props ntp on l.nodetypepropid = ntp.nodetypepropid
left join nodes n2 on n2.relationalid = l.nodetypepropid and n2.relationaltable = 'nodetype_props'
left join nodes n3 on n3.relationalid = l.nodetypetabsetid and n3.relationaltable = 'nodetype_tabset'
left join layouttabs lt on 
      lt.layout_type = lower(decode(l.layouttype, 'Table', 'search', l.layouttype)) 
      and lt.metadata_nodetypeid = l.nodetypeid 
where lt.uniquename = l.tabtype
order by l.nodetypeid, l.layouttype, l.taborder, l.display_column, l.display_row";
            CswTableUpdate LayoutColumnUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "layout_column_update", "layout_column" );
            DataTable LayoutColumnTable = LayoutColumnUpdate.getEmptyTable();
            CswTableUpdate LayoutPropsUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "layout_property_update", "layout_property" );
            DataTable LayoutPropsTable = LayoutPropsUpdate.getEmptyTable();
            CswArbitrarySelect OldLayoutPropsSelect = _CswNbtSchemaModTrnsctn.makeCswArbitrarySelect( "old_layout_props_select", SQLQuery );
            DataTable OldLayoutPropsTable = OldLayoutPropsSelect.getTable();
            int colpk = 1;
            int rownum = 1;
            int colnum = 1;
            string layouttype = "";
            string tabname = "";
            string tabgroup = "";
            foreach( DataRow OldLayoutPropRow in OldLayoutPropsTable.Rows )
            {
                if( CswConvert.ToInt32( OldLayoutPropRow["display_column"] ) != colnum ||
                    OldLayoutPropRow["layouttype"].ToString() != layouttype ||
                    OldLayoutPropRow["tabname"].ToString() != tabname )
                {
                    DataRow LayoutColumnRow = LayoutColumnTable.NewRow();
                    LayoutColumnRow["column_order"] = OldLayoutPropRow["display_column"];
                    LayoutColumnRow["parent_id"] = OldLayoutPropRow["layout_tab_id"];
                    LayoutColumnRow["parent_type"] = "tab";
                    LayoutColumnTable.Rows.Add( LayoutColumnRow );
                    colnum = CswConvert.ToInt32( OldLayoutPropRow["display_column"] );
                    colpk = CswConvert.ToInt32( LayoutColumnRow["layout_column_id"] );
                    rownum = 1;
                    layouttype = OldLayoutPropRow["layouttype"].ToString();
                    tabname = OldLayoutPropRow["tabname"].ToString();
                }
                if( false == String.IsNullOrEmpty( OldLayoutPropRow["tabgroup"].ToString() ) &&
                    OldLayoutPropRow["tabgroup"].ToString() != tabgroup )
                {
                    DataRow LayoutColumnRow = LayoutColumnTable.NewRow();
                    LayoutColumnRow["column_name"] = OldLayoutPropRow["tabgroup"].ToString();
                    LayoutColumnRow["column_order"] = rownum;
                    LayoutColumnRow["parent_id"] = colpk;
                    LayoutColumnRow["parent_type"] = "column";
                    LayoutColumnTable.Rows.Add( LayoutColumnRow );
                    colpk = CswConvert.ToInt32( LayoutColumnRow["layout_column_id"] );
                    tabgroup = OldLayoutPropRow["tabgroup"].ToString();
                    rownum = 1;
                }
                if( String.IsNullOrEmpty( OldLayoutPropRow["tabgroup"].ToString() ) )
                {
                    DataRow LayoutPropRow = LayoutPropsTable.NewRow();
                    LayoutPropRow["prop_order"] = rownum;
                    if( OldLayoutPropRow["propname"].ToString() == "Save" )
                    {
                        LayoutPropRow["prop_order"] = Int32.MaxValue;
                    }
                    LayoutPropRow["column_id"] = colpk;
                    LayoutPropRow["metadata_nodetypepropid"] = OldLayoutPropRow["nodetypepropid"];
                    LayoutPropRow["design_nodetypeprop_nodeid"] = OldLayoutPropRow["design_nodetypeprop_nodeid"];
                    LayoutPropsTable.Rows.Add( LayoutPropRow );
                    rownum++;
                }
            }
            LayoutColumnUpdate.update( LayoutColumnTable );
            LayoutPropsUpdate.update( LayoutPropsTable );
        } // update()
Пример #21
0
        public override void update()
        {
            string SQLQuery = @"with layouttabs as
(select lt.*,
  case lt.layout_type
    when 'edit' then lt.tab_name
    else lt.layout_type
  end as uniquename
  from layout_tab lt),
oldlayouttabs as
(select 
  l.layouttype, 
  t.tabname, 
  l.tabgroup, 
  t.taborder,
  l.display_row, 
  l.display_column,
  l.nodetypeid, 
  l.nodetypepropid, 
  l.nodetypetabsetid, 
  case l.layouttype
    when 'Add' then 'add'
    when 'Preview' then 'preview'
    when 'Table' then 'search'
    else t.tabname
  end as tabtype
from nodetype_layout l
left join nodetype_tabset t on l.nodetypetabsetid = t.nodetypetabsetid)
select 
  l.layouttype, 
  l.display_row, 
  l.display_column,
  n2.nodename nodetype_propname,
  ntp.propname,
  l.nodetypeid, 
  n.nodeid design_nodetype_nodeid,
  l.nodetypepropid, 
  n2.nodeid design_nodetypeprop_nodeid,
  lt.layout_tab_id,
  lc.layout_column_id,
  ntp.filterpropid,
  ntp.filtersubfield,
  ntp.filtermode,
  ntp.filtervalue,
  lp.layout_property_id,
  lp2.layout_property_id parent_property
from oldlayouttabs l
join nodetype_props ntp on l.nodetypepropid = ntp.nodetypepropid
left join nodes n on n.relationalid = l.nodetypeid and n.relationaltable = 'nodetypes'
left join nodes n2 on n2.relationalid = l.nodetypepropid and n2.relationaltable = 'nodetype_props'
left join layouttabs lt on 
      lt.layout_type = lower(decode(l.layouttype, 'Table', 'search', l.layouttype)) 
      and lt.metadata_nodetypeid = l.nodetypeid 
left join layout_column lc on lt.layout_tab_id = lc.parent_id and lc.column_order = l.display_column
left join layout_property lp on lp.metadata_nodetypepropid = ntp.nodetypepropid and lp.column_id = lc.layout_column_id
left join layout_property lp2 on lp2.metadata_nodetypepropid = ntp.filterpropid --and lp2.column_id = lc.layout_column_id
left join layout_column lc2 on lc2.layout_column_id = lp2.column_id
left join layout_tab lt2 on lt2.layout_tab_id = lc2.parent_id
where lt.uniquename = l.tabtype
and ntp.filtersubfield is not null
and lt2.layout_type = lower(decode(l.layouttype, 'Table', 'search', l.layouttype))
order by l.nodetypeid, l.layouttype, l.taborder, ntp.filtervalue, l.display_column, l.display_row";
            CswTableUpdate LayoutColumnUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "layout_column_update", "layout_column" );
            DataTable LayoutColumnTable = LayoutColumnUpdate.getEmptyTable();
            CswArbitrarySelect ConditionalPropsSelect = _CswNbtSchemaModTrnsctn.makeCswArbitrarySelect( "conditional_props_select", SQLQuery );
            DataTable ConditionalPropsTable = ConditionalPropsSelect.getTable();
            int colpk = 1;
            int colorder = 1;
            int rownum = 1;
            int parentpropid = 1;
            string filtervalue = "";
            foreach( DataRow ConditionalPropRow in ConditionalPropsTable.Rows )
            {
                if( CswConvert.ToInt32( ConditionalPropRow["parent_property"] ) != parentpropid ||
                    ConditionalPropRow["filtervalue"].ToString() != filtervalue )
                {
                    if( CswConvert.ToInt32( ConditionalPropRow["parent_property"] ) != parentpropid )
                    {
                        colorder = 1;
                    }
                    DataRow LayoutColumnRow = LayoutColumnTable.NewRow();
                    LayoutColumnRow["column_order"] = colorder;
                    LayoutColumnRow["column_name"] = 
                        ConditionalPropRow["filtersubfield"] + " " +
                        ( String.IsNullOrEmpty( ConditionalPropRow["filtermode"].ToString() ) ? "Null" : ConditionalPropRow["filtermode"] ) + " " + 
                        ConditionalPropRow["filtervalue"];
                    LayoutColumnRow["parent_id"] = ConditionalPropRow["parent_property"];
                    LayoutColumnRow["parent_type"] = "property";
                    LayoutColumnTable.Rows.Add( LayoutColumnRow );
                    parentpropid = CswConvert.ToInt32( ConditionalPropRow["parent_property"] );
                    colpk = CswConvert.ToInt32( LayoutColumnRow["layout_column_id"] );
                    colorder++;
                    filtervalue = ConditionalPropRow["filtervalue"].ToString();
                    rownum = 1;
                }
                _CswNbtSchemaModTrnsctn.execArbitraryPlatformNeutralSql( @"update layout_property set prop_order = " + rownum + 
                    ", column_id = " + colpk + " where layout_property_id = " + ConditionalPropRow["layout_property_id"] );
                rownum++;
            }
            LayoutColumnUpdate.update( LayoutColumnTable );

            _CswNbtSchemaModTrnsctn.execArbitraryPlatformNeutralSql( "alter table layout_property add foreign key (column_id) references layout_column (layout_column_id)" );
        } // update()
Пример #22
0
 public void initEmptyLandingPageTable()
 {
     _LandingPageUpdate = _CswNbtResources.makeCswTableUpdate("AddLandingPageItem_Update", "landingpage");
     _LandingPageTable  = _LandingPageUpdate.getEmptyTable();
     _ItemRow           = _LandingPageTable.NewRow();
 }
        public override void update()
        {
            // Add new 'GHS Classification' object class
            CswNbtMetaDataObjectClass GHSClassOC = _CswNbtSchemaModTrnsctn.createObjectClass( CswEnumNbtObjectClass.GHSClassificationClass, "warning.png", false );

            _CswNbtSchemaModTrnsctn.createObjectClassProp( GHSClassOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
                {
                    FieldType = CswEnumNbtFieldType.List,
                    PropName = CswNbtObjClassGHSClassification.PropertyName.Category,
                    ListOptions = "Physical,Health,Environmental"
                } );

            // Language properties
            foreach( string Language in CswNbtPropertySetPhrase.SupportedLanguages.All )
            {
                _CswNbtSchemaModTrnsctn.createObjectClassProp( GHSClassOC, new CswNbtWcfMetaDataModel.ObjectClassProp( GHSClassOC )
                {
                    PropName = Language,
                    FieldType = CswEnumNbtFieldType.Text
                } );
            }

            // Add new object class to 'Phrase' Property Set
            CswNbtMetaDataPropertySet PhrasePS = _CswNbtSchemaModTrnsctn.MetaData.getPropertySet( CswEnumNbtPropertySetName.PhraseSet );
            CswTableUpdate jctUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "31074_jctPropSets_update", "jct_propertyset_objectclass" );
            DataTable jctTable = jctUpdate.getEmptyTable();
            DataRow row = jctTable.NewRow();
            row["propertysetid"] = PhrasePS.PropertySetId;
            row["objectclassid"] = GHSClassOC.ObjectClassId;
            jctTable.Rows.Add( row );
            jctUpdate.update( jctTable );


            CswNbtMetaDataObjectClass GhsOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.GHSClass );

            // Delete old GHS properties
            string[] doomedPropNames = new string[]
                {
                    "Classification",
                    "Class Codes Grid",
                    "Class Codes",
                    "Add Class Codes"
                };
            foreach( string doomedPropName in doomedPropNames )
            {
                CswNbtMetaDataObjectClassProp doomedOCP = GhsOC.getObjectClassProp( doomedPropName );
                if( null != doomedOCP )
                {
                    _CswNbtSchemaModTrnsctn.MetaData.DeleteObjectClassProp( doomedOCP, true );
                }
            }

            // Add new GHS properties
            _CswNbtSchemaModTrnsctn.createObjectClassProp( GhsOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
            {
                FieldType = CswEnumNbtFieldType.Grid,
                PropName = CswNbtObjClassGHS.PropertyName.ClassificationsGrid,
                Extended = CswEnumNbtGridPropMode.Small.ToString(),
                NumberMaxValue = 10
            } );

            _CswNbtSchemaModTrnsctn.createObjectClassProp( GhsOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
            {
                FieldType = CswEnumNbtFieldType.MultiList,
                PropName = CswNbtObjClassGHS.PropertyName.Classifications
            } );


        } // update()
        public override void update()
        {
            CswTableUpdate jctUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "29311_jctddntp_update", "jct_dd_ntp" );
            DataTable jctTable = jctUpdate.getEmptyTable();

            // Set up Sequence Nodetype
            CswNbtMetaDataObjectClass SequenceOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.DesignSequenceClass );
            CswNbtMetaDataNodeType SequenceNT = _CswNbtSchemaModTrnsctn.MetaData.makeNewNodeTypeNew( new CswNbtWcfMetaDataModel.NodeType( SequenceOC )
                {
                    NodeTypeName = "Design Sequence",
                    Category = "Design",
                    IconFileName = "wrench.png"
                } );
            //SequenceNT.addNameTemplateText( CswNbtObjClassDesignSequence.PropertyName.Name );
            SequenceNT._DataRow["nametemplate"] = CswNbtMetaData.TemplateTextToTemplateValue( SequenceNT.getNodeTypeProps(), CswNbtMetaData.MakeTemplateEntry( CswNbtObjClassDesignSequence.PropertyName.Name ) );

            Int32 TabId = SequenceNT.getFirstNodeTypeTab().TabId;

            CswNbtMetaDataNodeTypeProp SeqNameNTP = SequenceNT.getNodeTypePropByObjectClassProp( CswNbtObjClassDesignSequence.PropertyName.Name );
            CswNbtMetaDataNodeTypeProp SeqNextValueNTP = SequenceNT.getNodeTypePropByObjectClassProp( CswNbtObjClassDesignSequence.PropertyName.NextValue );
            CswNbtMetaDataNodeTypeProp SeqPadNTP = SequenceNT.getNodeTypePropByObjectClassProp( CswNbtObjClassDesignSequence.PropertyName.Pad );
            CswNbtMetaDataNodeTypeProp SeqPostNTP = SequenceNT.getNodeTypePropByObjectClassProp( CswNbtObjClassDesignSequence.PropertyName.Post );
            CswNbtMetaDataNodeTypeProp SeqPreNTP = SequenceNT.getNodeTypePropByObjectClassProp( CswNbtObjClassDesignSequence.PropertyName.Pre );

            // Edit Layout
            SeqNameNTP.updateLayout( CswEnumNbtLayoutType.Edit, true, TabId, DisplayRow: 1, DisplayColumn: 1 );
            SeqPreNTP.updateLayout( CswEnumNbtLayoutType.Edit, true, TabId, DisplayRow: 2, DisplayColumn: 1 );
            SeqPostNTP.updateLayout( CswEnumNbtLayoutType.Edit, true, TabId, DisplayRow: 3, DisplayColumn: 1 );
            SeqPadNTP.updateLayout( CswEnumNbtLayoutType.Edit, true, TabId, DisplayRow: 4, DisplayColumn: 1 );
            SeqNextValueNTP.updateLayout( CswEnumNbtLayoutType.Edit, true, TabId, DisplayRow: 5, DisplayColumn: 1 );

            // Add Layout
            SeqNameNTP.updateLayout( CswEnumNbtLayoutType.Add, false, Int32.MinValue, DisplayRow: 1, DisplayColumn: 1 );
            SeqPreNTP.updateLayout( CswEnumNbtLayoutType.Add, false, Int32.MinValue, DisplayRow: 2, DisplayColumn: 1 );
            SeqPostNTP.updateLayout( CswEnumNbtLayoutType.Add, false, Int32.MinValue, DisplayRow: 3, DisplayColumn: 1 );
            SeqPadNTP.updateLayout( CswEnumNbtLayoutType.Add, false, Int32.MinValue, DisplayRow: 4, DisplayColumn: 1 );
            SeqNextValueNTP.removeFromLayout( CswEnumNbtLayoutType.Add );

            // Populate nodes
            // Very important that this happens BEFORE we map to the nodetypes table, or else we'll end up duplicating rows!
            Dictionary<Int32, CswNbtObjClassDesignSequence> SequenceNodeMap = new Dictionary<int, CswNbtObjClassDesignSequence>();
            CswTableSelect SequencesTableSelect = _CswNbtSchemaModTrnsctn.makeCswTableSelect( "29311_sequencetable_select", "sequences" );
            DataTable SequencesTable = SequencesTableSelect.getTable();
            foreach( DataRow SeqRow in SequencesTable.Rows )
            {
                CswNbtObjClassDesignSequence node = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( SequenceNT.NodeTypeId, OverrideUniqueValidation: true, OnAfterMakeNode: delegate( CswNbtNode NewNode )
                    {
                        CswNbtObjClassDesignSequence NewSeqNode = NewNode;
                        NewSeqNode.Name.Text = SeqRow["sequencename"].ToString();
                        NewSeqNode.Pad.Value = CswConvert.ToInt32( SeqRow["pad"] );
                        NewSeqNode.Post.Text = SeqRow["post"].ToString();
                        NewSeqNode.Pre.Text = SeqRow["prep"].ToString();
                    } );
                node.RelationalId = new CswPrimaryKey( "sequences", CswConvert.ToInt32( SeqRow["sequenceid"] ) );
                node.postChanges( false );
                SequenceNodeMap.Add( node.RelationalId.PrimaryKey, node );
            }

            // Here's where the extra special super-secret magic comes in

            //SequenceNT.TableName = "sequences";
            SequenceNT._DataRow["tablename"] = "sequences";

            _addJctRow( jctTable, SeqNameNTP, SequenceNT.TableName, "sequencename" );
            _addJctRow( jctTable, SeqPadNTP, SequenceNT.TableName, "pad" );
            _addJctRow( jctTable, SeqPostNTP, SequenceNT.TableName, "post" );
            _addJctRow( jctTable, SeqPreNTP, SequenceNT.TableName, "prep" );
            jctUpdate.update( jctTable );

            // Set up existing relationships to sequences
            Dictionary<Int32, CswNbtObjClassDesignSequence> SequenceValueMap = new Dictionary<Int32, CswNbtObjClassDesignSequence>();
            string Sql = @"select n.nodeid, r.sequenceid
                             from nodetype_props p
                             join nodetypes t on p.nodetypeid = t.nodetypeid
                             join nodes n on t.nodetypeid = n.nodetypeid
                             join nodetype_props r on n.relationalid = r.nodetypepropid
                            where p.propname = 'Sequence' and t.nodetypename like 'Design%'";
            CswArbitrarySelect ExistingSequenceIdSelect = _CswNbtSchemaModTrnsctn.makeCswArbitrarySelect( "getExistingSequenceIds", Sql );
            DataTable ExistingSequenceIdTable = ExistingSequenceIdSelect.getTable();
            foreach( DataRow row in ExistingSequenceIdTable.Rows )
            {
                Int32 thisSeqId = CswConvert.ToInt32( row["sequenceid"] );
                if( Int32.MinValue != thisSeqId && SequenceNodeMap.ContainsKey( thisSeqId ) )
                {
                    SequenceValueMap.Add( CswConvert.ToInt32( row["nodeid"] ), SequenceNodeMap[thisSeqId] );
                }
            }

            foreach( CswEnumNbtFieldType ft in new CswEnumNbtFieldType[] { CswEnumNbtFieldType.Barcode, CswEnumNbtFieldType.Sequence } )
            {
                CswNbtMetaDataNodeType PropNT = _CswNbtSchemaModTrnsctn.MetaData.getNodeType( CswNbtObjClassDesignNodeTypeProp.getNodeTypeName( ft ) );
                //CswNbtFieldTypeRuleSequence Rule = (CswNbtFieldTypeRuleSequence) _CswNbtSchemaModTrnsctn.MetaData.getFieldTypeRule( ft );
                //CswNbtFieldTypeAttribute SequenceAttribute = Rule.getAttributes().FirstOrDefault( a => a.Name == CswEnumNbtPropertyAttributeName.Sequence );
                CswNbtMetaDataNodeTypeProp SequenceNTP = PropNT.getNodeTypeProp( CswEnumNbtPropertyAttributeName.Sequence );
                SequenceNTP.SetFKDeprecated( CswEnumNbtViewRelatedIdType.ObjectClassId.ToString(), SequenceOC.ObjectClassId );

                CswNbtViewId ViewId = SequenceNTP.DesignNode.AttributeProperty[CswNbtFieldTypeRuleRelationship.AttributeName.View].AsViewReference.ViewId;
                CswNbtView View = _CswNbtSchemaModTrnsctn.ViewSelect.restoreView( ViewId );
                CswNbtFieldTypeRuleDefaultImpl.setDefaultView( _CswNbtSchemaModTrnsctn.MetaData, SequenceNTP.DesignNode, View, CswEnumNbtViewRelatedIdType.ObjectClassId.ToString(), SequenceOC.ObjectClassId, false );

                foreach( CswNbtObjClassDesignNodeTypeProp PropNode in PropNT.getNodes( false, true ) )
                {
                    if( SequenceValueMap.ContainsKey( PropNode.NodeId.PrimaryKey ) )
                    {
                        CswNbtObjClassDesignSequence SeqNode = SequenceValueMap[PropNode.NodeId.PrimaryKey];
                        if( null != SeqNode )
                        {
                            PropNode.Node.Properties[SequenceNTP].AsRelationship.RelatedNodeId = SeqNode.NodeId;
                            PropNode.postChanges( false );
                        }
                    }
                }
            } // foreach( CswEnumNbtFieldType ft in new CswEnumNbtFieldType[] {CswEnumNbtFieldType.Barcode, CswEnumNbtFieldType.Sequence} )

        } // update()
Пример #25
0
        public override void update()
        {
            Dictionary<CswEnumNbtPropertySetName, Int32> PropSetDict = new Dictionary<CswEnumNbtPropertySetName, Int32>();
            {
                // Populate property_set
                CswTableUpdate PropSetUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "28160_ps_update", "property_set" );
                DataTable PropSetTable = PropSetUpdate.getEmptyTable();
                foreach( CswEnumNbtPropertySetName PropSetName in CswEnumNbtPropertySetName.All )
                {
                    if( PropSetName != CswEnumNbtPropertySetName.MaterialSet )
                    {
                        DataRow Row = PropSetTable.NewRow();
                        Row["name"] = PropSetName;
                        switch( PropSetName )
                        {
                            case CswEnumNbtPropertySetName.GeneratorTargetSet: Row["iconfilename"] = "clipboardcheck.png"; break;
                            case CswEnumNbtPropertySetName.InspectionParentSet: Row["iconfilename"] = "target.png"; break;
                            case CswEnumNbtPropertySetName.RequestItemSet: Row["iconfilename"] = "cart.png"; break;
                            case CswEnumNbtPropertySetName.SchedulerSet: Row["iconfilename"] = "calendar.png"; break;
                        }
                        PropSetTable.Rows.Add( Row );

                        PropSetDict[PropSetName] = CswConvert.ToInt32( Row["propertysetid"] );
                    }
                }
                PropSetUpdate.update( PropSetTable );
            }

            Dictionary<CswEnumNbtObjectClass, CswEnumNbtPropertySetName> Dict = new Dictionary<CswEnumNbtObjectClass, CswEnumNbtPropertySetName>();
            Dict.Add( CswEnumNbtObjectClass.InspectionDesignClass, CswEnumNbtPropertySetName.GeneratorTargetSet );
            Dict.Add( CswEnumNbtObjectClass.TaskClass, CswEnumNbtPropertySetName.GeneratorTargetSet );
            Dict.Add( CswEnumNbtObjectClass.InspectionTargetClass, CswEnumNbtPropertySetName.InspectionParentSet );
            Dict.Add( CswEnumNbtObjectClass.RequestContainerDispenseClass, CswEnumNbtPropertySetName.RequestItemSet );
            Dict.Add( CswEnumNbtObjectClass.RequestContainerUpdateClass, CswEnumNbtPropertySetName.RequestItemSet );
            Dict.Add( CswEnumNbtObjectClass.RequestMaterialCreateClass, CswEnumNbtPropertySetName.RequestItemSet );
            Dict.Add( CswEnumNbtObjectClass.RequestMaterialDispenseClass, CswEnumNbtPropertySetName.RequestItemSet );
            Dict.Add( CswEnumNbtObjectClass.GeneratorClass, CswEnumNbtPropertySetName.SchedulerSet );
            Dict.Add( CswEnumNbtObjectClass.MailReportClass, CswEnumNbtPropertySetName.SchedulerSet );

            {
                // Populate jct_propertyset_objectclass
                CswTableUpdate JctUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "28160_jct_update", "jct_propertyset_objectclass" );
                DataTable JctTable = JctUpdate.getEmptyTable();

                foreach( CswEnumNbtObjectClass oc in Dict.Keys )
                {
                    DataRow NewRow = JctTable.NewRow();
                    NewRow["objectclassid"] = _CswNbtSchemaModTrnsctn.MetaData.getObjectClassId( oc );
                    NewRow["propertysetid"] = CswConvert.ToDbVal( PropSetDict[Dict[oc]] );
                    JctTable.Rows.Add( NewRow );
                }
                JctUpdate.update( JctTable );
            }

            {
                // Populate jct_propertyset_objectclassprop
                CswTableUpdate JctUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "28160_jct2_update", "jct_propertyset_ocprop" );
                DataTable JctTable = JctUpdate.getEmptyTable();

                foreach( CswEnumNbtObjectClass oc in Dict.Keys )
                {
                    CswNbtMetaDataObjectClass ObjectClass = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( oc );
                    foreach( CswNbtMetaDataObjectClassProp ObjectClassProp in ObjectClass.getObjectClassProps() )
                    {
                        bool doInsert = false;
                        switch( Dict[oc] )
                        {
                            case CswEnumNbtPropertySetName.GeneratorTargetSet:
                                doInsert = ( ObjectClassProp.PropName == CswNbtPropertySetGeneratorTarget.PropertyName.CreatedDate ||
                                             ObjectClassProp.PropName == CswNbtPropertySetGeneratorTarget.PropertyName.DueDate ||
                                             ObjectClassProp.PropName == CswNbtPropertySetGeneratorTarget.PropertyName.Generator ||
                                             ObjectClassProp.PropName == CswNbtPropertySetGeneratorTarget.PropertyName.IsFuture );
                                break;

                            case CswEnumNbtPropertySetName.RequestItemSet:
                                doInsert = ( ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.AssignedTo ||
                                             ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.Comments ||
                                             ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.Description ||
                                             ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.ExternalOrderNumber ||
                                             ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.Fulfill ||
                                             ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.InventoryGroup ||
                                             ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.Location ||
                                             ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.Material ||
                                             ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.Name ||
                                             ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.NeededBy ||
                                             ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.Number ||
                                             ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.Priority ||
                                             ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.Request ||
                                             ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.RequestedFor ||
                                             ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.Requestor ||
                                             ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.Status ||
                                             ObjectClassProp.PropName == CswNbtPropertySetRequestItem.PropertyName.Type );
                                break;

                            case CswEnumNbtPropertySetName.InspectionParentSet:
                                doInsert = ( ObjectClassProp.PropName == "Status" );
                                break;

                            case CswEnumNbtPropertySetName.SchedulerSet:
                                doInsert = ( ObjectClassProp.PropName == "Status" ||
                                             ObjectClassProp.PropName == "Final Due Date" ||
                                             ObjectClassProp.PropName == "Next Due Date" ||
                                             ObjectClassProp.PropName == "Run Status" ||
                                             ObjectClassProp.PropName == "Warning Days" ||
                                             ObjectClassProp.PropName == "Due Date Interval" ||
                                             ObjectClassProp.PropName == "Run Time" ||
                                             ObjectClassProp.PropName == "Enabled" );
                                break;
                        }


                        if( doInsert )
                        {
                            DataRow NewRow = JctTable.NewRow();
                            NewRow["objectclasspropid"] = ObjectClassProp.PropId;
                            NewRow["propertysetid"] = CswConvert.ToDbVal( PropSetDict[Dict[oc]] );
                            JctTable.Rows.Add( NewRow );
                        }
                    } //  foreach( CswNbtMetaDataObjectClassProp ObjectClassProp in ObjectClass.getObjectClassProps() )
                } //  foreach( NbtObjectClass oc in OcPsDict.Keys )
                JctUpdate.update( JctTable );
            }

        } // update()
Пример #26
0
        public override void update()
        {

            #region Create GHS Signal Word OC
            
            CswNbtMetaDataObjectClass SignalWordOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.GHSSignalWordClass );
            if( null == SignalWordOC )
            {
                SignalWordOC = _CswNbtSchemaModTrnsctn.createObjectClass( CswEnumNbtObjectClass.GHSSignalWordClass, "warning.png", false );

                _CswNbtSchemaModTrnsctn.createObjectClassProp( SignalWordOC, new CswNbtWcfMetaDataModel.ObjectClassProp( SignalWordOC )
                    {
                        PropName = CswNbtObjClassGHSSignalWord.PropertyName.Code,
                        FieldType = CswEnumNbtFieldType.Text
                    } );

                foreach( string Language in CswNbtPropertySetPhrase.SupportedLanguages.All )
                {
                    _CswNbtSchemaModTrnsctn.createObjectClassProp( SignalWordOC, new CswNbtWcfMetaDataModel.ObjectClassProp( SignalWordOC )
                        {
                            PropName = Language,
                            FieldType = CswEnumNbtFieldType.Text
                        } );
                }

                //Attached this new OC to the Phrase PS
                CswNbtMetaDataPropertySet PhrasePS = _CswNbtSchemaModTrnsctn.MetaData.getPropertySet( CswEnumNbtPropertySetName.PhraseSet );
                CswTableUpdate TableUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "updatePhrasePropSets", "jct_propertyset_objectclass" );
                DataTable ObjClassTbl = TableUpdate.getEmptyTable();
                DataRow SignalWordRow = ObjClassTbl.NewRow();

                SignalWordRow["propertysetid"] = PhrasePS.PropertySetId;
                SignalWordRow["objectclassid"] = SignalWordOC.ObjectClassId;

                ObjClassTbl.Rows.Add( SignalWordRow );

                TableUpdate.update( ObjClassTbl );
            }

            #endregion

            #region Make GHS Signal Word prop a relationship

            CswNbtMetaDataObjectClass GHS_OC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.GHSClass );
            CswNbtMetaDataObjectClassProp SignalWordOCP = GHS_OC.getObjectClassProp( CswNbtObjClassGHS.PropertyName.SignalWord );
            CswNbtMetaDataFieldType RelationshipFieldType = _CswNbtSchemaModTrnsctn.MetaData.getFieldType( CswEnumNbtFieldType.Relationship );

            CswTableUpdate SignalWordOCPTableUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "UpdateSignalWord", "object_class_props" );
            DataTable ObjClassPropsTbl = SignalWordOCPTableUpdate.getTable( "where objectclasspropid = " + SignalWordOCP.ObjectClassPropId );
            foreach( DataRow row in ObjClassPropsTbl.Rows )
            {
                row["fieldtypeid"] = RelationshipFieldType.FieldTypeId;
                row["isfk"] = CswConvert.ToDbVal( true );
                row["fkvalue"] = SignalWordOC.ObjectClassId;
                row["fktype"] = "ObjectClassId";
            }
            SignalWordOCPTableUpdate.update( ObjClassPropsTbl );

            CswTableUpdate SignalWordNTPTableUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "UpdateSignalWord", "nodetype_props" );
            DataTable NodeTypePropsTbl = SignalWordNTPTableUpdate.getTable( "where objectclasspropid = " + SignalWordOCP.ObjectClassPropId );
            foreach( DataRow row in NodeTypePropsTbl.Rows )
            {
                row["fieldtypeid"] = RelationshipFieldType.FieldTypeId;
                row["isfk"] = CswConvert.ToDbVal( true );
                row["fkvalue"] = SignalWordOC.ObjectClassId;
                row["fktype"] = "ObjectClassId";
            }
            SignalWordNTPTableUpdate.update( NodeTypePropsTbl );

            #endregion

        } // update()
        //bool load( string SessionId )
        //{
        //    return ( false ); //deliberate policy: we don't _want_ to read stats with this class
        //}//load()

        //DateTime LastSave { get; }


        //public void release()
        //{
        //}//release()


        public void save(CswNbtStatisticsEntry CswNbtStatisticsEntry)
        {
            if (_CswNbtResources != null)
            {
                if (CswNbtStatisticsEntry.Stats_servertime_count > 0)   // protects against repeats
                {
                    CswTableUpdate StatisticsTableCaddy = _CswNbtResources.makeCswTableUpdate("CswNbtStatisticsEntryNbt", "Statistics");
                    DataTable      StatisticsTable      = StatisticsTableCaddy.getEmptyTable();

                    DataRow NewStatisticsRow = StatisticsTable.NewRow();
                    NewStatisticsRow["userid"]        = CswNbtStatisticsEntry.UserId.PrimaryKey;
                    NewStatisticsRow["username"]      = CswNbtStatisticsEntry.UserName;
                    NewStatisticsRow["logindate"]     = CswNbtStatisticsEntry.LoginDate.ToString();
                    NewStatisticsRow["logoutdate"]    = DateTime.Now.ToString();
                    NewStatisticsRow["userloggedout"] = CswConvert.ToDbVal(CswNbtStatisticsEntry.Stats_LoggedOut);

                    // Statistics on Actions
                    NewStatisticsRow["count_actionloads"] = CswNbtStatisticsEntry.Stats_count_actionloads.ToString();
                    NewStatisticsRow["count_multiedit"]   = CswNbtStatisticsEntry.Stats_count_multiedit.ToString();
                    NewStatisticsRow["count_reportruns"]  = CswNbtStatisticsEntry.Stats_count_reportruns.ToString();

                    // Statistics on Views
                    NewStatisticsRow["count_viewloads"]      = CswNbtStatisticsEntry.Stats_count_viewloads.ToString();
                    NewStatisticsRow["count_viewsedited"]    = CswNbtStatisticsEntry.Stats_count_viewsedited.ToString();
                    NewStatisticsRow["count_searches"]       = CswNbtStatisticsEntry.Stats_count_searches.ToString();
                    NewStatisticsRow["count_viewfiltermods"] = CswNbtStatisticsEntry.Stats_count_viewfiltermod.ToString();

                    // Statistics on Nodes
                    NewStatisticsRow["count_nodessaved"]   = CswNbtStatisticsEntry.Stats_count_nodessaved.ToString();
                    NewStatisticsRow["count_nodesadded"]   = CswNbtStatisticsEntry.Stats_count_nodesadded.ToString();
                    NewStatisticsRow["count_nodescopied"]  = CswNbtStatisticsEntry.Stats_count_nodescopied.ToString();
                    NewStatisticsRow["count_nodesdeleted"] = CswNbtStatisticsEntry.Stats_count_nodesdeleted.ToString();

                    // Statistics on Page Lifecycle
                    NewStatisticsRow["count_lifecycles"]   = CswNbtStatisticsEntry.Stats_servertime_count.ToString();
                    NewStatisticsRow["average_servertime"] = (CswNbtStatisticsEntry.Stats_servertime_total / CswNbtStatisticsEntry.Stats_servertime_count).ToString();
                    NewStatisticsRow["count_errors"]       = CswNbtStatisticsEntry.Stats_errors.ToString();

                    StatisticsTable.Rows.Add(NewStatisticsRow);
                    Int32 StatisticsId = CswConvert.ToInt32(NewStatisticsRow["statisticsid"]);
                    StatisticsTableCaddy.update(StatisticsTable);

                    // Store views used:
                    CswTableUpdate StatisticsViewsTableCaddy = _CswNbtResources.makeCswTableUpdate("CswNbtStatisticsEntryNbt", "Statistics_Views");
                    DataTable      StatisticsViewsTable      = StatisticsViewsTableCaddy.getEmptyTable();
                    foreach (string ViewId in CswNbtStatisticsEntry.ViewsEdited.Keys)
                    {
                        _makeNewStatisticsViewsRow(StatisticsViewsTable, StatisticsId, new CswNbtViewId(CswConvert.ToInt32(ViewId)), CswConvert.ToInt32(CswNbtStatisticsEntry.ViewsEdited[ViewId]), "edit");
                    }
                    foreach (string ViewId in CswNbtStatisticsEntry.ViewsMultiEdited.Keys)
                    {
                        _makeNewStatisticsViewsRow(StatisticsViewsTable, StatisticsId, new CswNbtViewId(CswConvert.ToInt32(ViewId)), CswConvert.ToInt32(CswNbtStatisticsEntry.ViewsMultiEdited[ViewId]), "multiedit");
                    }
                    foreach (string ViewId in CswNbtStatisticsEntry.ViewsLoaded.Keys)
                    {
                        _makeNewStatisticsViewsRow(StatisticsViewsTable, StatisticsId, new CswNbtViewId(CswConvert.ToInt32(ViewId)), CswConvert.ToInt32(CswNbtStatisticsEntry.ViewsLoaded[ViewId]), "load");
                    }
                    StatisticsViewsTableCaddy.update(StatisticsViewsTable);


                    // Store search properties and View Filter Modifications
                    CswTableUpdate StatisticsSearchesTableCaddy = _CswNbtResources.makeCswTableUpdate("CswNbtStatisticsEntryNbt", "Statistics_Searches");
                    DataTable      StatisticsSearchesTable      = StatisticsSearchesTableCaddy.getEmptyTable();
                    foreach (string NodeTypePropId in CswNbtStatisticsEntry.NodeTypePropsSearched.Keys)
                    {
                        _makeNewStatisticsSearchesRow(StatisticsSearchesTable, StatisticsId, CswConvert.ToInt32(NodeTypePropId), Int32.MinValue, CswConvert.ToInt32(CswNbtStatisticsEntry.NodeTypePropsSearched[NodeTypePropId]), "load");
                    }
                    foreach (string ObjectClassPropId in CswNbtStatisticsEntry.ObjectClassPropsSearched.Keys)
                    {
                        _makeNewStatisticsSearchesRow(StatisticsSearchesTable, StatisticsId, Int32.MinValue, CswConvert.ToInt32(ObjectClassPropId), CswConvert.ToInt32(CswNbtStatisticsEntry.ObjectClassPropsSearched[ObjectClassPropId]), "load");
                    }
                    foreach (string NodeTypePropId in CswNbtStatisticsEntry.NodeTypePropsFilterMod.Keys)
                    {
                        _makeNewStatisticsSearchesRow(StatisticsSearchesTable, StatisticsId, CswConvert.ToInt32(NodeTypePropId), Int32.MinValue, CswConvert.ToInt32(CswNbtStatisticsEntry.NodeTypePropsFilterMod[NodeTypePropId]), "modify");
                    }
                    foreach (string ObjectClassPropId in CswNbtStatisticsEntry.ObjectClassPropsFilterMod.Keys)
                    {
                        _makeNewStatisticsSearchesRow(StatisticsSearchesTable, StatisticsId, Int32.MinValue, CswConvert.ToInt32(ObjectClassPropId), CswConvert.ToInt32(CswNbtStatisticsEntry.ObjectClassPropsFilterMod[ObjectClassPropId]), "modify");
                    }
                    StatisticsSearchesTableCaddy.update(StatisticsSearchesTable);


                    // Store node object classes:
                    CswTableUpdate StatisticsNodeTypesTableCaddy = _CswNbtResources.makeCswTableUpdate("CswNbtStatisticsEntryNbt", "Statistics_NodeTypes");
                    DataTable      StatisticsNodeTypesTable      = StatisticsNodeTypesTableCaddy.getEmptyTable();
                    foreach (string NodeTypeId in CswNbtStatisticsEntry.NodeTypesSaved.Keys)
                    {
                        _makeNewStatisticsNodeTypesRow(StatisticsNodeTypesTable, StatisticsId, CswConvert.ToInt32(NodeTypeId), CswConvert.ToInt32(CswNbtStatisticsEntry.NodeTypesSaved[NodeTypeId]), "save");
                    }
                    foreach (string NodeTypeId in CswNbtStatisticsEntry.NodeTypesCopied.Keys)
                    {
                        _makeNewStatisticsNodeTypesRow(StatisticsNodeTypesTable, StatisticsId, CswConvert.ToInt32(NodeTypeId), CswConvert.ToInt32(CswNbtStatisticsEntry.NodeTypesCopied[NodeTypeId]), "copy");
                    }
                    foreach (string NodeTypeId in CswNbtStatisticsEntry.NodeTypesDeleted.Keys)
                    {
                        _makeNewStatisticsNodeTypesRow(StatisticsNodeTypesTable, StatisticsId, CswConvert.ToInt32(NodeTypeId), CswConvert.ToInt32(CswNbtStatisticsEntry.NodeTypesDeleted[NodeTypeId]), "delete");
                    }
                    foreach (string NodeTypeId in CswNbtStatisticsEntry.NodeTypesAdded.Keys)
                    {
                        _makeNewStatisticsNodeTypesRow(StatisticsNodeTypesTable, StatisticsId, CswConvert.ToInt32(NodeTypeId), CswConvert.ToInt32(CswNbtStatisticsEntry.NodeTypesAdded[NodeTypeId]), "add");
                    }
                    StatisticsNodeTypesTableCaddy.update(StatisticsNodeTypesTable);


                    // Store reports:
                    CswTableUpdate StatisticsReportsTableCaddy = _CswNbtResources.makeCswTableUpdate("CswNbtStatisticsEntryNbt", "Statistics_Reports");
                    DataTable      StatisticsReportsTable      = StatisticsReportsTableCaddy.getEmptyTable();
                    foreach (string ReportId in CswNbtStatisticsEntry.ReportsLoaded.Keys)
                    {
                        _makeNewStatisticsReportsRow(StatisticsReportsTable, StatisticsId, CswConvert.ToInt32(ReportId), CswConvert.ToInt32(CswNbtStatisticsEntry.ReportsLoaded[ReportId]), "load");
                    }
                    StatisticsReportsTableCaddy.update(StatisticsReportsTable);

                    // Store actions:
                    CswTableUpdate StatisticsActionsTableCaddy = _CswNbtResources.makeCswTableUpdate("CswNbtStatisticsEntryNbt", "Statistics_Actions");
                    DataTable      StatisticsActionsTable      = StatisticsActionsTableCaddy.getEmptyTable();
                    foreach (string ActionId in CswNbtStatisticsEntry.ActionsLoaded.Keys)
                    {
                        _makeNewStatisticsActionsRow(StatisticsActionsTable, StatisticsId, CswConvert.ToInt32(ActionId), CswConvert.ToInt32(CswNbtStatisticsEntry.ActionsLoaded[ActionId]), "load");
                    }
                    StatisticsActionsTableCaddy.update(StatisticsActionsTable);

                    CswNbtStatisticsEntry.ClearStatistics();
                }
            }
        }