public override void update()
        {

            #region NodeTypes

            CswNbtMetaDataObjectClass RequestOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.RequestClass );
            string RequestNodeTypeName = "Request";
            CswNbtMetaDataNodeType RequestNt = _CswNbtSchemaModTrnsctn.MetaData.getNodeType( RequestNodeTypeName );

            if( null != RequestNt && RequestNt.ObjectClassId != RequestOc.ObjectClassId )
            {
                RequestNodeTypeName = "CISPro Request";
                RequestNt = _CswNbtSchemaModTrnsctn.MetaData.getNodeType( RequestNodeTypeName );
            }
            if( null != RequestNt && RequestNt.ObjectClassId != RequestOc.ObjectClassId )
            {
                throw new CswDniException( ErrorType.Error, "Could not create a unique Request NodeType", "Request nodetypes named 'Request' and 'CISPro Request' already exist." );
            }
            if( null == RequestNt )
            {
                RequestNt = _CswNbtSchemaModTrnsctn.MetaData.makeNewNodeType( new CswNbtWcfMetaDataModel.NodeType( RequestOc )
                                                                     {
                                                                         Category = "Requests",
                                                                         NodeTypeName = RequestNodeTypeName
                                                                     } );

            }
            CswNbtMetaDataNodeTypeProp NameNtp = RequestNt.getNodeTypePropByObjectClassProp( CswNbtObjClassRequest.PropertyName.Name.ToString() );
            CswNbtMetaDataNodeTypeProp UserNtp = RequestNt.getNodeTypePropByObjectClassProp( CswNbtObjClassRequest.PropertyName.Requestor.ToString() );
            CswNbtMetaDataNodeTypeProp DateNtp = RequestNt.getNodeTypePropByObjectClassProp( CswNbtObjClassRequest.PropertyName.SubmittedDate.ToString() );
            RequestNt.NameTemplateValue = "";
            RequestNt.addNameTemplateText( NameNtp.PropName );
            RequestNt.addNameTemplateText( UserNtp.PropName );
            RequestNt.addNameTemplateText( DateNtp.PropName );

            CswNbtMetaDataObjectClass RequestItemOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.RequestItemClass );
            string RequestItemNodeTypeName = "Request Item";
            CswNbtMetaDataNodeType RequestItemNt = _CswNbtSchemaModTrnsctn.MetaData.getNodeType( RequestItemNodeTypeName );

            if( null != RequestItemNt && RequestItemNt.ObjectClassId != RequestItemOc.ObjectClassId )
            {
                RequestItemNodeTypeName = "CISPro Request Item";
                RequestNt = _CswNbtSchemaModTrnsctn.MetaData.getNodeType( RequestItemNodeTypeName );
            }
            if( null != RequestItemNt && RequestItemNt.ObjectClassId != RequestItemOc.ObjectClassId )
            {
                throw new CswDniException( ErrorType.Error, "Could not create a unique Request Item NodeType", "Request nodetypes named 'Request Item' and 'CISPro Request Item' already exist." );
            }
            if( null == RequestItemNt )
            {
                RequestItemNt = _CswNbtSchemaModTrnsctn.MetaData.makeNewNodeType(new CswNbtWcfMetaDataModel.NodeType(RequestItemOc)
                    {
                        Category = "Requests",
                        NodeTypeName = RequestItemNodeTypeName
                    });
            }
            CswNbtMetaDataNodeTypeProp RequestItemRequestNtp = RequestItemNt.getNodeTypePropByObjectClassProp( CswNbtObjClassRequestItem.PropertyName.Request );
            RequestItemRequestNtp.SetFK( NbtViewRelatedIdType.NodeTypeId.ToString(), RequestNt.NodeTypeId );

            CswNbtMetaDataNodeTypeProp TypeNtp = RequestItemNt.getNodeTypePropByObjectClassProp( CswNbtObjClassRequestItem.PropertyName.Type );
            CswNbtMetaDataNodeTypeProp StatusNtp = RequestItemNt.getNodeTypePropByObjectClassProp( CswNbtObjClassRequestItem.PropertyName.Status );
            CswNbtMetaDataNodeTypeProp ExternalOrderNoNtp = RequestItemNt.getNodeTypePropByObjectClassProp( CswNbtObjClassRequestItem.PropertyName.ExternalOrderNumber );
            CswNbtMetaDataNodeTypeProp QuantityNtp = RequestItemNt.getNodeTypePropByObjectClassProp( CswNbtObjClassRequestItem.PropertyName.Quantity );
            CswNbtMetaDataNodeTypeProp CountNtp = RequestItemNt.getNodeTypePropByObjectClassProp( CswNbtObjClassRequestItem.PropertyName.Count );
            CswNbtMetaDataNodeTypeProp SizeNtp = RequestItemNt.getNodeTypePropByObjectClassProp( CswNbtObjClassRequestItem.PropertyName.Size );
            CswNbtMetaDataNodeTypeProp MaterialNtp = RequestItemNt.getNodeTypePropByObjectClassProp( CswNbtObjClassRequestItem.PropertyName.Material );
            CswNbtMetaDataNodeTypeProp ContainerNtp = RequestItemNt.getNodeTypePropByObjectClassProp( CswNbtObjClassRequestItem.PropertyName.Container );
            CswNbtMetaDataNodeTypeProp LocationNtp = RequestItemNt.getNodeTypePropByObjectClassProp( CswNbtObjClassRequestItem.PropertyName.Location );
            CswNbtMetaDataNodeTypeProp NumberNtp = RequestItemNt.getNodeTypePropByObjectClassProp( CswNbtObjClassRequestItem.PropertyName.Number );

            Int32 SequenceId = _CswNbtSchemaModTrnsctn.makeSequence( new CswSequenceName( "Request Items" ), "R", "", 6, 1 );
            NumberNtp.setSequence( SequenceId );

            RequestItemNt.addNameTemplateText( RequestItemRequestNtp.PropName );
            RequestItemNt.addNameTemplateText( NumberNtp.PropName );
            RequestItemNt.addNameTemplateText( TypeNtp.PropName );

            #endregion NodeTypes

            #region Tabs

            CswNbtMetaDataNodeTypeTab RequestItemsNtt = RequestNt.getNodeTypeTab( "Request Items" );
            if( null == RequestItemsNtt )
            {
                RequestItemsNtt = _CswNbtSchemaModTrnsctn.MetaData.makeNewTab( RequestNt, "Request Items",
                                                                              RequestNt.getNodeTypeTabIds().Count );
            }
            CswNbtMetaDataFieldType GridFt =
                _CswNbtSchemaModTrnsctn.MetaData.getFieldType( CswNbtMetaDataFieldType.NbtFieldType.Grid );
            CswNbtMetaDataNodeTypeProp RequestItemsGridNtp =
                _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( RequestNt,
                                                                                                     GridFt,
                                                                                                     "Request Items" )
                                                                 {
                                                                     TabId = RequestItemsNtt.TabId
                                                                 } );
            CswNbtView GridView = _CswNbtSchemaModTrnsctn.ViewSelect.restoreView( RequestItemsGridNtp.ViewId );
            GridView.ViewName = "Requested Items";
            GridView.Visibility = NbtViewVisibility.Property;
            GridView.ViewMode = NbtViewRenderingMode.Grid;
            GridView.Category = "Requests";
            GridView.Root.ChildRelationships.Clear();
            CswNbtViewRelationship RequestRel = GridView.AddViewRelationship( RequestNt, false );
            CswNbtViewRelationship RequestItemRel = GridView.AddViewRelationship( RequestRel,
                                                                                 NbtViewPropOwnerType.Second,
                                                                                 RequestItemRequestNtp, false );
            GridView.AddViewProperty( RequestItemRel, NumberNtp );
            GridView.AddViewProperty( RequestItemRel, TypeNtp );
            GridView.AddViewProperty( RequestItemRel, ExternalOrderNoNtp );
            GridView.AddViewProperty( RequestItemRel, StatusNtp );
            GridView.AddViewProperty( RequestItemRel, QuantityNtp );
            GridView.AddViewProperty( RequestItemRel, CountNtp );
            GridView.AddViewProperty( RequestItemRel, SizeNtp );
            GridView.AddViewProperty( RequestItemRel, MaterialNtp );
            GridView.AddViewProperty( RequestItemRel, ContainerNtp );
            GridView.AddViewProperty( RequestItemRel, LocationNtp );
            GridView.save();


            #endregion Tabs

            #region Views

            string MyRequestViewName = "My Request History";
            bool UniqueView = _CswNbtSchemaModTrnsctn.restoreViews( MyRequestViewName ).Count == 0;
            if( false == UniqueView )
            {
                MyRequestViewName = "My CISPro Request History";
                UniqueView = _CswNbtSchemaModTrnsctn.restoreViews( MyRequestViewName ).Count == 0;
            }
            if( UniqueView )
            {
                CswNbtView MyRequestsView = _CswNbtSchemaModTrnsctn.makeView();
                MyRequestsView.makeNew( MyRequestViewName, NbtViewVisibility.Global );
                MyRequestsView.Category = "Requests";
                MyRequestsView.ViewMode = NbtViewRenderingMode.Tree;
                CswNbtViewRelationship RequestVr = MyRequestsView.AddViewRelationship( RequestNt, true );
                MyRequestsView.AddViewPropertyAndFilter( RequestVr, RequestNt.getNodeTypePropByObjectClassProp( CswNbtObjClassRequest.PropertyName.SubmittedDate.ToString() ), FilterMode: CswNbtPropFilterSql.PropertyFilterMode.NotNull );
                MyRequestsView.save();
            }
            #endregion Views

        }//Update()
        public override void update()
        {

            CswNbtMetaDataObjectClass feedbackOC = _CswNbtSchemaModTrnsctn.createObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.FeedbackClass, "docs.gif", false, false );

            CswNbtMetaDataObjectClassProp caseNumberOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( feedbackOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
             {
                 PropName = CswNbtObjClassFeedback.CaseNumberPropertyName,
                 FieldType = CswNbtMetaDataFieldType.NbtFieldType.Sequence
             } );

            Int32 userOCID = _CswNbtSchemaModTrnsctn.MetaData.getObjectClassId( CswNbtMetaDataObjectClass.NbtObjectClass.UserClass );
            CswNbtMetaDataObjectClassProp authorOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( feedbackOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
             {
                 PropName = CswNbtObjClassFeedback.AuthorPropertyName,
                 FieldType = CswNbtMetaDataFieldType.NbtFieldType.Relationship,
                 IsFk = true,
                 FkType = NbtViewRelatedIdType.ObjectClassId.ToString(),
                 FkValue = userOCID,
                 ServerManaged = true,
                 SetValOnAdd = true
             } );

            CswNbtMetaDataObjectClassProp dateSubmittedOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( feedbackOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
            {
                PropName = CswNbtObjClassFeedback.DateSubmittedPropertyName,
                FieldType = CswNbtMetaDataFieldType.NbtFieldType.DateTime,
                Extended = CswNbtNodePropDateTime.DateDisplayMode.DateTime.ToString(),
                ServerManaged = true,

                SetValOnAdd = true
            } );

            CswNbtMetaDataObjectClassProp categoryOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( feedbackOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
            {
                PropName = CswNbtObjClassFeedback.CategoryPropertyName,
                FieldType = CswNbtMetaDataFieldType.NbtFieldType.List,
                ListOptions = "Bug Report,Feature Request,Question,Praise",
                SetValOnAdd = true
            } );

            CswNbtMetaDataObjectClassProp subjectOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( feedbackOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
             {
                 PropName = CswNbtObjClassFeedback.SubjectPropertyName,
                 FieldType = CswNbtMetaDataFieldType.NbtFieldType.Text,
                 SetValOnAdd = true
             } );

            _CswNbtSchemaModTrnsctn.createObjectClassProp( feedbackOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
            {
                PropName = CswNbtObjClassFeedback.SummaryPropertyName,
                FieldType = CswNbtMetaDataFieldType.NbtFieldType.Memo,
                SetValOnAdd = true
            } );

            CswNbtMetaDataObjectClassProp statusOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( feedbackOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
            {
                PropName = CswNbtObjClassFeedback.StatusPropertyName,
                FieldType = CswNbtMetaDataFieldType.NbtFieldType.List,
                ListOptions = "Pending review,Resolved,Awaiting author response"
            } );
            statusOCP.DefaultValue.Field1 = "Pending review"; //indicates the ball is in supports/admins court
            statusOCP.DefaultValue.Gestalt = "Pending review";

            _CswNbtSchemaModTrnsctn.createObjectClassProp( feedbackOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
            {
                PropName = CswNbtObjClassFeedback.LoadUserContextPropertyName,
                FieldType = CswNbtMetaDataFieldType.NbtFieldType.Button
            } );

            CswNbtMetaDataObjectClassProp commentsOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( feedbackOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
             {
                 PropName = CswNbtObjClassFeedback.DiscussionPropertyName,
                 FieldType = CswNbtMetaDataFieldType.NbtFieldType.Comments
             } );

            _CswNbtSchemaModTrnsctn.createObjectClassProp( feedbackOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
            {
                PropName = CswNbtObjClassFeedback.SelectedNodeIDPropertyName,
                FieldType = CswNbtMetaDataFieldType.NbtFieldType.Text,
                ServerManaged = true
            } );

            _CswNbtSchemaModTrnsctn.createObjectClassProp( feedbackOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
            {
                PropName = CswNbtObjClassFeedback.ViewPropertyName,
                //FieldType = CswNbtMetaDataFieldType.NbtFieldType.ViewPickList,
                FieldType = CswNbtMetaDataFieldType.NbtFieldType.ViewReference,
                ServerManaged = true
            } );

            _CswNbtSchemaModTrnsctn.createObjectClassProp( feedbackOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
            {
                PropName = CswNbtObjClassFeedback.ActionPropertyName,
                FieldType = CswNbtMetaDataFieldType.NbtFieldType.Text,
                ServerManaged = true
            } );

            _CswNbtSchemaModTrnsctn.createObjectClassProp( feedbackOC, new CswNbtWcfMetaDataModel.ObjectClassProp()
            {
                PropName = CswNbtObjClassFeedback.CurrentViewModePropertyName,
                FieldType = CswNbtMetaDataFieldType.NbtFieldType.Text,
                ServerManaged = true
            } );

            //create a default node-type of feedbackobj called feedback
            CswNbtMetaDataNodeType feedbackNT = _CswNbtSchemaModTrnsctn.MetaData.makeNewNodeType( feedbackOC.ObjectClassId, "Feedback", "System" );
            feedbackNT.setNameTemplateText( CswNbtMetaData.MakeTemplateEntry( CswNbtObjClassFeedback.CaseNumberPropertyName ) );

            CswNbtMetaDataObjectClass roleObj = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.RoleClass );

            //set default permissions
            Collection<CswNbtNode> roles = roleObj.getNodes( false, true );
            foreach( CswNbtObjClassRole role in roles )
            {
                _CswNbtSchemaModTrnsctn.Permit.set( Security.CswNbtPermit.NodeTypePermission.Create, feedbackNT, role, true );
                _CswNbtSchemaModTrnsctn.Permit.set( Security.CswNbtPermit.NodeTypePermission.View, feedbackNT, role, true );
                _CswNbtSchemaModTrnsctn.Permit.set( Security.CswNbtPermit.NodeTypePermission.Edit, feedbackNT, role, true );
            }

            Int32 sequenceId = _CswNbtSchemaModTrnsctn.makeSequence( new CswSequenceName( "Feedback CaseNo" ), "F", "", 6, 1 );
            CswNbtMetaDataNodeTypeProp caseNumberNTP = feedbackNT.getNodeTypePropByObjectClassProp( CswNbtObjClassFeedback.CaseNumberPropertyName );
            caseNumberNTP.setSequence( sequenceId );
            caseNumberNTP.ReadOnly = true; //default to read-only, but allow it to be changed

            CswNbtMetaDataNodeTypeProp authorNTP = feedbackNT.getNodeTypePropByObjectClassProp( CswNbtObjClassFeedback.AuthorPropertyName );
            authorNTP.removeFromLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Add );

            CswNbtMetaDataNodeTypeProp dateNTP = feedbackNT.getNodeTypePropByObjectClassProp( CswNbtObjClassFeedback.DateSubmittedPropertyName );
            dateNTP.removeFromLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Add );

            CswNbtMetaDataNodeTypeProp viewNTP = feedbackNT.getNodeTypePropByObjectClassProp( CswNbtObjClassFeedback.ViewPropertyName );
            viewNTP.removeFromLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit );

            CswNbtMetaDataNodeTypeProp actionNTP = feedbackNT.getNodeTypePropByObjectClassProp( CswNbtObjClassFeedback.ActionPropertyName );
            actionNTP.removeFromLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit );

            CswNbtMetaDataNodeTypeProp selectedNodeIdNTP = feedbackNT.getNodeTypePropByObjectClassProp( CswNbtObjClassFeedback.SelectedNodeIDPropertyName );
            selectedNodeIdNTP.removeFromLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit );

            CswNbtMetaDataNodeTypeProp currentViewModeNTP = feedbackNT.getNodeTypePropByObjectClassProp( CswNbtObjClassFeedback.CurrentViewModePropertyName );
            currentViewModeNTP.removeFromLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit );
            currentViewModeNTP.removeFromLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Add );

            //create the role view for admins
            CswNbtNode adminRoleNode = _CswNbtSchemaModTrnsctn.Nodes.makeRoleNodeFromRoleName( "Administrator" );
            if( null != adminRoleNode )
            {
                CswNbtView feedbackView = _CswNbtSchemaModTrnsctn.makeView();

                feedbackView.makeNew( "Feedback", NbtViewVisibility.Role, adminRoleNode.NodeId );
                feedbackView.Category = "System";

                //add root
                CswNbtViewRelationship ParentRelationship = feedbackView.AddViewRelationship( feedbackOC, true );

                //add properties
                CswNbtViewProperty caseNumberVP = feedbackView.AddViewProperty( ParentRelationship, caseNumberOCP );
                CswNbtViewProperty dateSubmittedVp = feedbackView.AddViewProperty( ParentRelationship, dateSubmittedOCP );
                CswNbtViewProperty categoryVP = feedbackView.AddViewProperty( ParentRelationship, categoryOCP );
                CswNbtViewProperty authorVP = feedbackView.AddViewProperty( ParentRelationship, authorOCP );
                CswNbtViewProperty subjectVP = feedbackView.AddViewProperty( ParentRelationship, subjectOCP );
                CswNbtViewProperty statusVP = feedbackView.AddViewProperty( ParentRelationship, statusOCP );
                CswNbtViewProperty commentsVP = feedbackView.AddViewProperty( ParentRelationship, commentsOCP );

                caseNumberVP.Order = 1;
                dateSubmittedVp.Order = 2;
                categoryVP.Order = 3;
                authorVP.Order = 4;
                subjectVP.Order = 5;
                statusVP.Order = 6;
                commentsVP.Order = 7;

                caseNumberVP.Width = 15;
                dateSubmittedVp.Width = 20;
                categoryVP.Width = 20;
                authorVP.Width = 20;
                subjectVP.Width = 25;
                statusVP.Width = 20;
                commentsVP.Width = 100;

                feedbackView.SetViewMode( NbtViewRenderingMode.Grid );

                CswNbtViewPropertyFilter feedbackViewFilter = feedbackView.AddViewPropertyFilter( statusVP, FilterMode: CswNbtPropFilterSql.PropertyFilterMode.Equals, Value: "Pending review", ShowAtRuntime: true );
                feedbackView.save();
            }

            // create the global view for all users to view their own feedback
            CswNbtView myFeedbackView = _CswNbtSchemaModTrnsctn.makeView();

            myFeedbackView.makeNew( "My Feedback", NbtViewVisibility.Global );
            myFeedbackView.Category = "System";

            //add root
            CswNbtViewRelationship myParentRelationship = myFeedbackView.AddViewRelationship( feedbackOC, true );

            //add properties
            CswNbtViewProperty myCaseNumberVP = myFeedbackView.AddViewProperty( myParentRelationship, caseNumberOCP );
            CswNbtViewProperty myDateSubmittedVp = myFeedbackView.AddViewProperty( myParentRelationship, dateSubmittedOCP );
            CswNbtViewProperty myCategoryVP = myFeedbackView.AddViewProperty( myParentRelationship, categoryOCP );
            CswNbtViewProperty myAuthorVP = myFeedbackView.AddViewProperty( myParentRelationship, authorOCP );
            CswNbtViewProperty mySubjectVP = myFeedbackView.AddViewProperty( myParentRelationship, subjectOCP );
            CswNbtViewProperty myStatusVP = myFeedbackView.AddViewProperty( myParentRelationship, statusOCP );
            CswNbtViewProperty myCommentsVP = myFeedbackView.AddViewProperty( myParentRelationship, commentsOCP );

            myCaseNumberVP.Order = 1;
            myDateSubmittedVp.Order = 2;
            myCategoryVP.Order = 3;
            myAuthorVP.Order = 4;
            mySubjectVP.Order = 5;
            myStatusVP.Order = 6;
            myCommentsVP.Order = 7;

            myCaseNumberVP.Width = 15;
            myDateSubmittedVp.Width = 20;
            myCategoryVP.Width = 20;
            myAuthorVP.Width = 20;
            mySubjectVP.Width = 25;
            myStatusVP.Width = 20;
            myCommentsVP.Width = 100;

            myFeedbackView.SetViewMode( NbtViewRenderingMode.Grid );

            //observe "me", this is voodoo (or magic...w/e) and sets it to the current user (from steve)
            CswNbtViewPropertyFilter myFeedbackViewFilter = myFeedbackView.AddViewPropertyFilter( myAuthorVP, FilterMode: CswNbtPropFilterSql.PropertyFilterMode.Equals, Value: "me", ShowAtRuntime: false );
            myFeedbackView.save();

        }//Update()
示例#3
0
        public override void update()
        {
            #region Update UnitOfMeasure ObjClassProps - delete UnitType, add BaseUnit and Fractional

            CswNbtMetaDataObjectClass UnitOfMeasureOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.UnitOfMeasureClass );

            CswNbtMetaDataObjectClassProp UnitTypeOCP = UnitOfMeasureOC.getObjectClassProp( "Unit Type" );
            _CswNbtSchemaModTrnsctn.MetaData.DeleteObjectClassProp( UnitTypeOCP, true );

            _CswNbtSchemaModTrnsctn.createObjectClassProp(
                CswNbtMetaDataObjectClass.NbtObjectClass.UnitOfMeasureClass,
                CswNbtObjClassUnitOfMeasure.BaseUnitPropertyName,
                CswNbtMetaDataFieldType.NbtFieldType.Text,
                ServerManaged: true );

            _CswNbtSchemaModTrnsctn.createObjectClassProp(
                CswNbtMetaDataObjectClass.NbtObjectClass.UnitOfMeasureClass,
                CswNbtObjClassUnitOfMeasure.FractionalPropertyName,
                CswNbtMetaDataFieldType.NbtFieldType.Logical );

            _CswNbtSchemaModTrnsctn.createObjectClassProp(
                CswNbtMetaDataObjectClass.NbtObjectClass.UnitOfMeasureClass,
                CswNbtObjClassUnitOfMeasure.UnitTypePropertyName,
                CswNbtMetaDataFieldType.NbtFieldType.List,
                ServerManaged: true,
                ListOptions: String.Join( ",", CswNbtObjClassUnitOfMeasure.UnitTypes._All )
                );
            #endregion

            #region Delete Unit Of Measure ViewSelect View

            _CswNbtSchemaModTrnsctn.deleteView( "Units of Measure (IMCS)", true );

            #endregion

            #region Delete UnitOfMeasure NodeType (and Nodes)

            CswNbtMetaDataNodeType UnitOfMeasureNodeType = _CswNbtSchemaModTrnsctn.MetaData.getNodeType( "Unit of Measure" );
            if( null != UnitOfMeasureNodeType )
            {
                _CswNbtSchemaModTrnsctn.MetaData.DeleteNodeType( UnitOfMeasureNodeType );
            }

            #endregion

            #region Delete UnitType ObjectClass, NodeTypes and Nodes

            CswNbtMetaDataObjectClass UnitTypeOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( "UnitTypeClass" );
            if( null != UnitTypeOC )
            {
                _CswNbtSchemaModTrnsctn.MetaData.DeleteObjectClass( UnitTypeOC );
            }

            #endregion

            #region Add the new NodeTypes and Nodes

            CswNbtMetaDataNodeType WeightUnitNodeType = _CswNbtSchemaModTrnsctn.MetaData.makeNewNodeType( "UnitOfMeasureClass", "Weight Unit", "Units" );
            WeightUnitNodeType.setNameTemplateText( CswNbtMetaData.MakeTemplateEntry( CswNbtObjClassUnitOfMeasure.NamePropertyName ) );
            CswNbtMetaDataNodeTypeProp WeightBaseUnitProp = WeightUnitNodeType.getNodeTypeProp( CswNbtObjClassUnitOfMeasure.BaseUnitPropertyName );
            WeightBaseUnitProp.DefaultValue.AsText.Text = "kg";
            CswNbtMetaDataNodeTypeProp WeightUnitTypeProp = WeightUnitNodeType.getNodeTypeProp( CswNbtObjClassUnitOfMeasure.UnitTypePropertyName );
            WeightUnitTypeProp.DefaultValue.AsList.Value = CswNbtObjClassUnitOfMeasure.UnitTypes.Weight.ToString();

            createUnitOfMeasureNode( WeightUnitNodeType.NodeTypeId, "kg", 1.0, 0, Tristate.True );
            createUnitOfMeasureNode( WeightUnitNodeType.NodeTypeId, "g", 1.0, 3, Tristate.True );
            createUnitOfMeasureNode( WeightUnitNodeType.NodeTypeId, "mg", 1.0, 6, Tristate.True );
            createUnitOfMeasureNode( WeightUnitNodeType.NodeTypeId, "lb", 2.20462262, 0, Tristate.True );
            createUnitOfMeasureNode( WeightUnitNodeType.NodeTypeId, "ounces", 3.52739619, 1, Tristate.True );

            CswNbtMetaDataNodeType VolumeUnitNodeType = _CswNbtSchemaModTrnsctn.MetaData.makeNewNodeType( "UnitOfMeasureClass", "Volume Unit", "Units" );
            VolumeUnitNodeType.setNameTemplateText( CswNbtMetaData.MakeTemplateEntry( CswNbtObjClassUnitOfMeasure.NamePropertyName ) );
            CswNbtMetaDataNodeTypeProp VolumeBaseUnitProp = VolumeUnitNodeType.getNodeTypeProp( CswNbtObjClassUnitOfMeasure.BaseUnitPropertyName );
            VolumeBaseUnitProp.DefaultValue.AsText.Text = "Liters";
            CswNbtMetaDataNodeTypeProp VolumeUnitTypeProp = VolumeUnitNodeType.getNodeTypeProp( CswNbtObjClassUnitOfMeasure.UnitTypePropertyName );
            VolumeUnitTypeProp.DefaultValue.AsList.Value = CswNbtObjClassUnitOfMeasure.UnitTypes.Volume.ToString();

            createUnitOfMeasureNode( VolumeUnitNodeType.NodeTypeId, "Liters", 1.0, 0, Tristate.True );
            createUnitOfMeasureNode( VolumeUnitNodeType.NodeTypeId, "mL", 1.0, 3, Tristate.True );
            createUnitOfMeasureNode( VolumeUnitNodeType.NodeTypeId, "µL", 1.0, 6, Tristate.True );
            createUnitOfMeasureNode( VolumeUnitNodeType.NodeTypeId, "gal", 2.64172052, -1, Tristate.True );
            createUnitOfMeasureNode( VolumeUnitNodeType.NodeTypeId, "fluid ounces", 3.38140227, 1, Tristate.True );

            CswNbtMetaDataNodeType EachUnitNodeType = _CswNbtSchemaModTrnsctn.MetaData.makeNewNodeType( "UnitOfMeasureClass", "Each Unit", "Units" );
            EachUnitNodeType.setNameTemplateText( CswNbtMetaData.MakeTemplateEntry( CswNbtObjClassUnitOfMeasure.NamePropertyName ) );
            CswNbtMetaDataNodeTypeProp EachBaseUnitProp = EachUnitNodeType.getNodeTypeProp( CswNbtObjClassUnitOfMeasure.BaseUnitPropertyName );
            EachBaseUnitProp.DefaultValue.AsText.Text = "Each";
            CswNbtMetaDataNodeTypeProp EachUnitTypeProp = EachUnitNodeType.getNodeTypeProp( CswNbtObjClassUnitOfMeasure.UnitTypePropertyName );
            EachUnitTypeProp.DefaultValue.AsList.Value = CswNbtObjClassUnitOfMeasure.UnitTypes.Each.ToString();

            createUnitOfMeasureNode( EachUnitNodeType.NodeTypeId, "Each", 1.0, 0, Tristate.False );
            createUnitOfMeasureNode( EachUnitNodeType.NodeTypeId, "Boxes", Int32.MinValue, Int32.MinValue, Tristate.False );
            createUnitOfMeasureNode( EachUnitNodeType.NodeTypeId, "Cases", Int32.MinValue, Int32.MinValue, Tristate.False );
            createUnitOfMeasureNode( EachUnitNodeType.NodeTypeId, "Cylinders", Int32.MinValue, Int32.MinValue, Tristate.False );

            CswNbtMetaDataNodeType TimeUnitNodeType = _CswNbtSchemaModTrnsctn.MetaData.makeNewNodeType( "UnitOfMeasureClass", "Time Unit", "Units" );
            TimeUnitNodeType.setNameTemplateText( CswNbtMetaData.MakeTemplateEntry( CswNbtObjClassUnitOfMeasure.NamePropertyName ) );
            CswNbtMetaDataNodeTypeProp TimeBaseUnitProp = TimeUnitNodeType.getNodeTypeProp( CswNbtObjClassUnitOfMeasure.BaseUnitPropertyName );
            TimeBaseUnitProp.DefaultValue.AsText.Text = "Days";
            CswNbtMetaDataNodeTypeProp TimeUnitTypeProp = TimeUnitNodeType.getNodeTypeProp( CswNbtObjClassUnitOfMeasure.UnitTypePropertyName );
            TimeUnitTypeProp.DefaultValue.AsList.Value = CswNbtObjClassUnitOfMeasure.UnitTypes.Time.ToString();

            createUnitOfMeasureNode( TimeUnitNodeType.NodeTypeId, "Days", 1.0, 0, Tristate.True );
            createUnitOfMeasureNode( TimeUnitNodeType.NodeTypeId, "Weeks", 1.42857143, -1, Tristate.True );
            createUnitOfMeasureNode( TimeUnitNodeType.NodeTypeId, "Years", 2.73790926, -3, Tristate.True );
            createUnitOfMeasureNode( TimeUnitNodeType.NodeTypeId, "Hours", 2.4, 1, Tristate.True );
            createUnitOfMeasureNode( TimeUnitNodeType.NodeTypeId, "Minutes", 1.44, 3, Tristate.True );
            createUnitOfMeasureNode( TimeUnitNodeType.NodeTypeId, "Seconds", 8.64, 4, Tristate.True );

            #endregion

            #region Create new UnitOfMeasure ViewSelect View

            CswNbtView UnitsView = _CswNbtSchemaModTrnsctn.makeView();
            UnitsView.makeNew( "Units of Measurement", NbtViewVisibility.Global );
            UnitsView.Category = "System";
            UnitsView.ViewMode = NbtViewRenderingMode.Tree;

            CswNbtViewRelationship UnitRelationship = UnitsView.AddViewRelationship( UnitOfMeasureOC, true );

            UnitsView.save();

            #endregion
        }//Update()
        public override void update()
        {
            // Make the Batch Operation Object Class and default NodeType
            CswNbtMetaDataObjectClass BatchOpOC = _CswNbtSchemaModTrnsctn.createObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.BatchOpClass, "clock.gif", false, false );
            CswNbtMetaDataObjectClass UserOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.UserClass );

            CswCommaDelimitedString StatusOptions = new CswCommaDelimitedString() { 
                NbtBatchOpStatus.Pending.ToString(),  
                NbtBatchOpStatus.Processing.ToString(),  
                NbtBatchOpStatus.Completed.ToString(),  
                NbtBatchOpStatus.Error.ToString()
            };

            CswNbtMetaDataObjectClassProp BatchDataOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( CswNbtMetaDataObjectClass.NbtObjectClass.BatchOpClass, CswNbtObjClassBatchOp.BatchDataPropertyName, CswNbtMetaDataFieldType.NbtFieldType.Memo, ServerManaged: true );
            CswNbtMetaDataObjectClassProp EndDateOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( CswNbtMetaDataObjectClass.NbtObjectClass.BatchOpClass, CswNbtObjClassBatchOp.EndDatePropertyName, CswNbtMetaDataFieldType.NbtFieldType.DateTime, ServerManaged: true );
            CswNbtMetaDataObjectClassProp LogOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( CswNbtMetaDataObjectClass.NbtObjectClass.BatchOpClass, CswNbtObjClassBatchOp.LogPropertyName, CswNbtMetaDataFieldType.NbtFieldType.Comments, ServerManaged: true );
            CswNbtMetaDataObjectClassProp OpNameOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( CswNbtMetaDataObjectClass.NbtObjectClass.BatchOpClass, CswNbtObjClassBatchOp.OpNamePropertyName, CswNbtMetaDataFieldType.NbtFieldType.List, ServerManaged: true );
            CswNbtMetaDataObjectClassProp PercentDoneOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( CswNbtMetaDataObjectClass.NbtObjectClass.BatchOpClass, CswNbtObjClassBatchOp.PercentDonePropertyName, CswNbtMetaDataFieldType.NbtFieldType.Number, ServerManaged: true );
            CswNbtMetaDataObjectClassProp PriorityOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( CswNbtMetaDataObjectClass.NbtObjectClass.BatchOpClass, CswNbtObjClassBatchOp.PriorityPropertyName, CswNbtMetaDataFieldType.NbtFieldType.Number );
            CswNbtMetaDataObjectClassProp CreatedDateOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( CswNbtMetaDataObjectClass.NbtObjectClass.BatchOpClass, CswNbtObjClassBatchOp.CreatedDatePropertyName, CswNbtMetaDataFieldType.NbtFieldType.DateTime, ServerManaged: true );
            CswNbtMetaDataObjectClassProp StartDateOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( CswNbtMetaDataObjectClass.NbtObjectClass.BatchOpClass, CswNbtObjClassBatchOp.StartDatePropertyName, CswNbtMetaDataFieldType.NbtFieldType.DateTime, ServerManaged: true );
            CswNbtMetaDataObjectClassProp StatusOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( CswNbtMetaDataObjectClass.NbtObjectClass.BatchOpClass, CswNbtObjClassBatchOp.StatusPropertyName, CswNbtMetaDataFieldType.NbtFieldType.List, 
                                                                                                     ServerManaged: true, 
                                                                                                     ListOptions: StatusOptions.ToString() );
            CswNbtMetaDataObjectClassProp UserOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp( CswNbtMetaDataObjectClass.NbtObjectClass.BatchOpClass, CswNbtObjClassBatchOp.UserPropertyName, CswNbtMetaDataFieldType.NbtFieldType.Relationship,
                                                                                                   IsFk: true,
                                                                                                   FkType: NbtViewRelatedIdType.ObjectClassId.ToString(),
                                                                                                   FkValue: UserOC.ObjectClassId );

            PriorityOCP.DefaultValue.Field1_Numeric = 0;
            PriorityOCP.DefaultValue.Gestalt = "0";
            PercentDoneOCP.DefaultValue.Field1_Numeric = 0;
            PercentDoneOCP.DefaultValue.Gestalt = "0";

            _CswNbtSchemaModTrnsctn.MetaData.UpdateObjectClassProp( CreatedDateOCP, CswNbtMetaDataObjectClassProp.ObjectClassPropAttributes.extended, CswNbtNodePropDateTime.DateDisplayMode.DateTime.ToString() );
            _CswNbtSchemaModTrnsctn.MetaData.UpdateObjectClassProp( StartDateOCP, CswNbtMetaDataObjectClassProp.ObjectClassPropAttributes.extended, CswNbtNodePropDateTime.DateDisplayMode.DateTime.ToString() );
            _CswNbtSchemaModTrnsctn.MetaData.UpdateObjectClassProp( EndDateOCP, CswNbtMetaDataObjectClassProp.ObjectClassPropAttributes.extended, CswNbtNodePropDateTime.DateDisplayMode.DateTime.ToString() );

            CswNbtMetaDataNodeType BatchOpNT = _CswNbtSchemaModTrnsctn.MetaData.makeNewNodeType( BatchOpOC.ObjectClassId, "Batch Operation", "System" );
            BatchOpNT.setNameTemplateText( CswNbtMetaData.MakeTemplateEntry( OpNameOCP.PropName ) + " " + CswNbtMetaData.MakeTemplateEntry( CreatedDateOCP.PropName ) );

            CswNbtMetaDataNodeTypeTab BatchOpTab = BatchOpNT.getFirstNodeTypeTab();

            CswNbtMetaDataNodeTypeProp OpNameNTP = BatchOpNT.getNodeTypePropByObjectClassProp( CswNbtObjClassBatchOp.OpNamePropertyName );
            CswNbtMetaDataNodeTypeProp UserNTP = BatchOpNT.getNodeTypePropByObjectClassProp( CswNbtObjClassBatchOp.UserPropertyName );
            CswNbtMetaDataNodeTypeProp PercentDoneNTP = BatchOpNT.getNodeTypePropByObjectClassProp( CswNbtObjClassBatchOp.PercentDonePropertyName );
            CswNbtMetaDataNodeTypeProp PriorityNTP = BatchOpNT.getNodeTypePropByObjectClassProp( CswNbtObjClassBatchOp.PriorityPropertyName );
            CswNbtMetaDataNodeTypeProp StatusNTP = BatchOpNT.getNodeTypePropByObjectClassProp( CswNbtObjClassBatchOp.StatusPropertyName );
            CswNbtMetaDataNodeTypeProp CreatedDateNTP = BatchOpNT.getNodeTypePropByObjectClassProp( CswNbtObjClassBatchOp.CreatedDatePropertyName );
            CswNbtMetaDataNodeTypeProp StartDateNTP = BatchOpNT.getNodeTypePropByObjectClassProp( CswNbtObjClassBatchOp.StartDatePropertyName );
            CswNbtMetaDataNodeTypeProp EndDateNTP = BatchOpNT.getNodeTypePropByObjectClassProp( CswNbtObjClassBatchOp.EndDatePropertyName );
            CswNbtMetaDataNodeTypeProp BatchDataNTP = BatchOpNT.getNodeTypePropByObjectClassProp( CswNbtObjClassBatchOp.BatchDataPropertyName );
            CswNbtMetaDataNodeTypeProp LogNTP = BatchOpNT.getNodeTypePropByObjectClassProp( CswNbtObjClassBatchOp.LogPropertyName );

            // Set tab layout
            OpNameNTP.updateLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit, true, BatchOpTab.TabId, 1, 1 );
            UserNTP.updateLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit, true, BatchOpTab.TabId, 2, 1 );
            PriorityNTP.updateLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit, true, BatchOpTab.TabId, 3, 1 );
            PercentDoneNTP.updateLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit, true, BatchOpTab.TabId, 4, 1 );
            StatusNTP.updateLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit, true, BatchOpTab.TabId, 5, 1 );
            CreatedDateNTP.updateLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit, true, BatchOpTab.TabId, 6, 1 );
            StartDateNTP.updateLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit, true, BatchOpTab.TabId, 7, 1 );
            EndDateNTP.updateLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit, true, BatchOpTab.TabId, 8, 1 );
            BatchDataNTP.updateLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit, true, BatchOpTab.TabId, 9, 1 );
            LogNTP.updateLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit, true, BatchOpTab.TabId, 10, 1 );

            _CswNbtSchemaModTrnsctn.MetaData.refreshAll();

            // Batch Operations (all) view for chemsw_admin_role
            CswNbtNode ChemSwAdminRole = _CswNbtSchemaModTrnsctn.Nodes.makeRoleNodeFromRoleName( CswNbtObjClassRole.ChemSWAdminRoleName );

            CswNbtView BatchOpView = _CswNbtSchemaModTrnsctn.makeView();
            BatchOpView.makeNew( "Batch Operations (all)", NbtViewVisibility.Role, ChemSwAdminRole.NodeId );
            BatchOpView.Category = "System";
            BatchOpView.SetViewMode( NbtViewRenderingMode.Grid );

            CswNbtViewRelationship BatchOpViewRel = BatchOpView.AddViewRelationship( BatchOpOC, true );
            BatchOpView.AddViewProperty( BatchOpViewRel, OpNameOCP );
            BatchOpView.AddViewProperty( BatchOpViewRel, UserOCP );
            CswNbtViewProperty BatchStatusViewProp = BatchOpView.AddViewProperty( BatchOpViewRel, StatusOCP );
            CswNbtViewProperty BatchPriorityViewProp = BatchOpView.AddViewProperty( BatchOpViewRel, PriorityOCP );
            BatchOpView.AddViewPropertyFilter( BatchStatusViewProp,
                                               Value: NbtBatchOpStatus.Completed.ToString(),
                                               FilterMode: CswNbtPropFilterSql.PropertyFilterMode.NotEquals,
                                               ShowAtRuntime: true );
            BatchOpView.setSortProperty( BatchPriorityViewProp, NbtViewPropertySortMethod.Descending );
            BatchOpView.save();

            // Batch Operations (all) view for Administrator
            CswNbtNode AdminRole = _CswNbtSchemaModTrnsctn.Nodes.makeRoleNodeFromRoleName( "Administrator" );
            if( AdminRole != null )
            {
                CswNbtView BatchOpView2 = _CswNbtSchemaModTrnsctn.makeView();
                BatchOpView2.makeNew( "Batch Operations (all)", NbtViewVisibility.Role, AdminRole.NodeId, null, BatchOpView );
                BatchOpView2.save();
            }


            // My Batch Operations view for everyone else
            CswNbtView BatchOpView3 = _CswNbtSchemaModTrnsctn.makeView();
            BatchOpView3.makeNew( "My Batch Operations", NbtViewVisibility.Global );
            BatchOpView3.Category = "System";
            BatchOpView3.SetViewMode( NbtViewRenderingMode.Tree );

            CswNbtViewRelationship BatchOpViewRel3 = BatchOpView3.AddViewRelationship( BatchOpOC, true );
            BatchOpView3.AddViewPropertyAndFilter( BatchOpViewRel3,
                                                   StatusOCP,
                                                   Value: NbtBatchOpStatus.Completed.ToString(),
                                                   FilterMode: CswNbtPropFilterSql.PropertyFilterMode.NotEquals,
                                                   ShowAtRuntime: true );
            BatchOpView3.AddViewPropertyAndFilter( BatchOpViewRel3,
                                                   UserOCP,
                                                   Value: "me",
                                                   FilterMode: CswNbtPropFilterSql.PropertyFilterMode.Equals );
            BatchOpView3.save();

            // Batch operation scheduled rule
            _CswNbtSchemaModTrnsctn.createScheduledRule( Sched.NbtScheduleRuleNames.BatchOp, MtSched.Core.Recurrence.NSeconds, 5 );


            // Batch threshold config var
            _CswNbtSchemaModTrnsctn.createConfigurationVariable( "batchthreshold", "If an operation affects this number of nodes, run as a batch operation instead", "10", false );

            // case 26446 - All users should have View permissions to batch ops
            CswNbtMetaDataObjectClass RoleOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.RoleClass );
            foreach( CswNbtObjClassRole RoleNode in RoleOC.getNodes( false, false ) )
            {
                _CswNbtSchemaModTrnsctn.Permit.set( Security.CswNbtPermit.NodeTypePermission.View, BatchOpNT, RoleNode, true );
            }

        }//Update()
        public override void update()
        {
            CswNbtMetaDataObjectClass InventoryLevelOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.InventoryLevelClass );
            CswNbtMetaDataObjectClass LocationOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.LocationClass );
            CswNbtMetaDataObjectClassProp IlMaterialOcp = InventoryLevelOc.getObjectClassProp( CswNbtObjClassInventoryLevel.PropertyName.Material );
            CswNbtMetaDataObjectClassProp IlLocationOcp = InventoryLevelOc.getObjectClassProp( CswNbtObjClassInventoryLevel.PropertyName.Location );
            CswNbtMetaDataObjectClassProp IlTypeOcp = InventoryLevelOc.getObjectClassProp( CswNbtObjClassInventoryLevel.PropertyName.Type );
            CswNbtMetaDataObjectClassProp IlLevelOcp = InventoryLevelOc.getObjectClassProp( CswNbtObjClassInventoryLevel.PropertyName.Level );
            CswNbtMetaDataObjectClassProp IlStatusOcp = InventoryLevelOc.getObjectClassProp( CswNbtObjClassInventoryLevel.PropertyName.Status );
            CswNbtMetaDataObjectClassProp IlCurrentQuantityOcp = InventoryLevelOc.getObjectClassProp( CswNbtObjClassInventoryLevel.PropertyName.CurrentQuantity );

            foreach( CswNbtMetaDataNodeType LocationNt in LocationOc.getLatestVersionNodeTypes() )
            {
                CswNbtMetaDataNodeTypeTab LevelTab = LocationNt.getNodeTypeTab( "Inventory Levels" );
                if( null == LevelTab )
                {
                    LevelTab = _CswNbtSchemaModTrnsctn.MetaData.makeNewTab( LocationNt, "Inventory Levels", LocationNt.getNodeTypeTabIds().Count );
                }
                CswNbtMetaDataNodeTypeProp LevelsNtp = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( LocationNt, _CswNbtSchemaModTrnsctn.MetaData.getFieldType( CswNbtMetaDataFieldType.NbtFieldType.Grid ), "Inventory Levels" )
                {
                    TabId = LevelTab.TabId
                } );

                CswNbtView LevelsView = _CswNbtSchemaModTrnsctn.restoreView( LevelsNtp.ViewId );
                if( null == LevelsView )
                {
                    LevelsView = _CswNbtSchemaModTrnsctn.makeView();
                    LevelsNtp.ViewId = LevelsView.ViewId;
                }

                LevelsView.Root.ChildRelationships.Clear();
                LevelsView.ViewMode = NbtViewRenderingMode.Grid;
                LevelsView.Visibility = NbtViewVisibility.Property;

                CswNbtViewRelationship RootRel = LevelsView.AddViewRelationship( LocationNt, true );
                CswNbtViewRelationship LevelRel = LevelsView.AddViewRelationship( RootRel, NbtViewPropOwnerType.Second, IlLocationOcp, true );
                LevelsView.AddViewProperty( LevelRel, IlMaterialOcp );
                LevelsView.AddViewProperty( LevelRel, IlTypeOcp );
                LevelsView.AddViewProperty( LevelRel, IlLevelOcp );
                LevelsView.AddViewProperty( LevelRel, IlStatusOcp );
                LevelsView.AddViewProperty( LevelRel, IlCurrentQuantityOcp );
                LevelsView.save();
            }

            CswNbtView AboveMinimumInventoryView = _CswNbtSchemaModTrnsctn.makeView();
            AboveMinimumInventoryView.makeNew( "Above Maximum Inventory", NbtViewVisibility.Global );
            AboveMinimumInventoryView.ViewMode = NbtViewRenderingMode.Grid;
            AboveMinimumInventoryView.Category = "Materials";
            CswNbtViewRelationship AmivRel = AboveMinimumInventoryView.AddViewRelationship( InventoryLevelOc, true );
            AboveMinimumInventoryView.AddViewProperty( AmivRel, IlMaterialOcp );
            AboveMinimumInventoryView.AddViewProperty( AmivRel, IlLocationOcp );
            AboveMinimumInventoryView.AddViewPropertyAndFilter( AmivRel, IlTypeOcp, CswNbtObjClassInventoryLevel.Types.Maximum );
            AboveMinimumInventoryView.AddViewProperty( AmivRel, IlLevelOcp );
            AboveMinimumInventoryView.AddViewPropertyAndFilter( AmivRel, IlStatusOcp, CswNbtObjClassInventoryLevel.Statuses.Above );
            AboveMinimumInventoryView.AddViewProperty( AmivRel, IlCurrentQuantityOcp );
            AboveMinimumInventoryView.save();

            CswNbtView BelowMinimumInventoryView = _CswNbtSchemaModTrnsctn.makeView();
            BelowMinimumInventoryView.makeNew( "Below Minimum Inventory", NbtViewVisibility.Global );
            BelowMinimumInventoryView.ViewMode = NbtViewRenderingMode.Grid;
            BelowMinimumInventoryView.Category = "Materials";
            CswNbtViewRelationship BmivRel = BelowMinimumInventoryView.AddViewRelationship( InventoryLevelOc, true );
            BelowMinimumInventoryView.AddViewProperty( BmivRel, IlMaterialOcp );
            BelowMinimumInventoryView.AddViewProperty( BmivRel, IlLocationOcp );
            BelowMinimumInventoryView.AddViewPropertyAndFilter( BmivRel, IlTypeOcp, CswNbtObjClassInventoryLevel.Types.Minimum ); 
            BelowMinimumInventoryView.AddViewProperty( BmivRel, IlLevelOcp );
            BelowMinimumInventoryView.AddViewPropertyAndFilter( BmivRel, IlStatusOcp, CswNbtObjClassInventoryLevel.Statuses.Below );
            BelowMinimumInventoryView.AddViewProperty( BmivRel, IlCurrentQuantityOcp );
            BelowMinimumInventoryView.save();



        }//Update()                  
示例#6
0
        public override void update()
        {
            // cispro grid views: category=Containers , scope=global
            // name=Expiring Containers (expiration<=today+30) mode=grid, struct=container>size>material
            CswNbtMetaDataObjectClass contOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.ContainerClass );
            CswNbtMetaDataObjectClassProp contSizeProp = contOC.getObjectClassProp( CswNbtObjClassContainer.SizePropertyName );
            CswNbtMetaDataObjectClassProp contBarcodeProp = contOC.getObjectClassProp( CswNbtObjClassContainer.BarcodePropertyName );
            CswNbtMetaDataObjectClassProp contQuantityProp = contOC.getObjectClassProp( CswNbtObjClassContainer.QuantityPropertyName );
            CswNbtMetaDataObjectClassProp contLocationProp = contOC.getObjectClassProp( CswNbtObjClassContainer.LocationPropertyName );
            CswNbtMetaDataObjectClassProp contExpiresProp = contOC.getObjectClassProp( CswNbtObjClassContainer.ExpirationDatePropertyName );
            CswNbtMetaDataObjectClassProp contMissingProp = contOC.getObjectClassProp( CswNbtObjClassContainer.MissingPropertyName );
            CswNbtMetaDataObjectClass sizeOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.SizeClass );
            CswNbtMetaDataObjectClassProp sizeMatProp = sizeOC.getObjectClassProp( CswNbtObjClassSize.MaterialPropertyName );
            CswNbtMetaDataObjectClass matOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.MaterialClass );
            CswNbtMetaDataObjectClassProp matTradenameProp = matOC.getObjectClassProp( CswNbtObjClassMaterial.TradenamePropertyName );
            CswNbtMetaDataObjectClassProp matSupplierProp = matOC.getObjectClassProp( CswNbtObjClassMaterial.SupplierPropertyName );
            CswNbtMetaDataObjectClassProp matPartNumberProp = matOC.getObjectClassProp( CswNbtObjClassMaterial.PartNumberPropertyName );

            CswNbtView expView = _CswNbtSchemaModTrnsctn.makeView();
            expView.makeNew( "Expiring Containers", NbtViewVisibility.Global );
            expView.ViewMode = NbtViewRenderingMode.Grid;
            CswNbtViewRelationship contRelationship = expView.AddViewRelationship( contOC, true );
            //add size
            CswNbtViewRelationship sizeRelationship = expView.AddViewRelationship( contRelationship, NbtViewPropOwnerType.First, contSizeProp, true );
            //add material
            CswNbtViewRelationship matRelationship = expView.AddViewRelationship( sizeRelationship, NbtViewPropOwnerType.First, sizeMatProp, true );
            //add props
            CswNbtViewProperty bcViewProp = expView.AddViewProperty( contRelationship, contBarcodeProp );
            bcViewProp.Order = 1;
            CswNbtViewProperty expViewProp = expView.AddViewProperty( contRelationship, contExpiresProp );
            expViewProp.Order = 2;
            CswNbtViewProperty tnameViewProp = expView.AddViewProperty( matRelationship, matTradenameProp );
            tnameViewProp.Order = 3;
            CswNbtViewProperty suppViewProp = expView.AddViewProperty( matRelationship, matSupplierProp );
            suppViewProp.Order = 4;
            CswNbtViewProperty partViewProp = expView.AddViewProperty( matRelationship, matPartNumberProp );
            partViewProp.Order = 5;
            CswNbtViewProperty qtyViewProp = expView.AddViewProperty( contRelationship, contQuantityProp );
            qtyViewProp.Order = 6;
            CswNbtViewProperty locViewProp = expView.AddViewProperty( contRelationship, contLocationProp );
            locViewProp.Order = 7;
            expView.save();


            // Missing Containers (missing==true)
            CswNbtView missingView = _CswNbtSchemaModTrnsctn.makeView();
            missingView.makeNew( "Missing Containers", NbtViewVisibility.Global, null, null, expView );
            missingView.save();


            //add filters
            expView.AddViewPropertyFilter(
                                             expViewProp,
                                             CswNbtSubField.SubFieldName.Value,
                                             CswNbtPropFilterSql.PropertyFilterMode.LessThanOrEquals,
                                             "today+30",
                                             false );
            expView.save();


            CswNbtViewProperty missingViewProp = expView.AddViewProperty( contRelationship, contMissingProp );
            missingViewProp.Order = 8;
            missingViewProp.ShowInGrid = false;
            missingView.AddViewPropertyFilter(
                                               missingViewProp,
                                               CswNbtSubField.SubFieldName.Value,
                                               CswNbtPropFilterSql.PropertyFilterMode.Equals,
                                               true.ToString(),
                                               false );
            missingView.save();


        }//Update()