private CswNbtMetaDataObjectClass _createPermissionGroupClass(PermissionSetAttributes PermSet)
        {
            CswNbtMetaDataObjectClass PermissionGroupOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass(PermSet.GroupClassName);

            if (null == PermissionGroupOC)
            {
                PermissionGroupOC = _CswNbtSchemaModTrnsctn.createObjectClass(PermSet.GroupClassName, "smallicons.png", false);

                _CswNbtSchemaModTrnsctn.createObjectClassProp(new CswNbtWcfMetaDataModel.ObjectClassProp(PermissionGroupOC)
                {
                    PropName    = CswNbtObjClassReportGroup.PropertyName.Name,
                    FieldType   = CswEnumNbtFieldType.Text,
                    IsRequired  = true,
                    SetValOnAdd = true
                });
                _CswNbtSchemaModTrnsctn.createObjectClassProp(new CswNbtWcfMetaDataModel.ObjectClassProp(PermissionGroupOC)
                {
                    PropName    = CswNbtObjClassReportGroup.PropertyName.Description,
                    FieldType   = CswEnumNbtFieldType.Memo,
                    SetValOnAdd = true
                });

                CswNbtMetaDataObjectClassProp TargetsGridOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp(new CswNbtWcfMetaDataModel.ObjectClassProp(PermissionGroupOC)
                {
                    PropName  = PermSet.GroupTargetPropName,
                    FieldType = CswEnumNbtFieldType.Grid
                });

                CswNbtMetaDataObjectClass     TargetOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass(PermSet.TargetClassName);
                CswNbtMetaDataObjectClassProp GroupOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp(new CswNbtWcfMetaDataModel.ObjectClassProp(TargetOC)
                {
                    PropName   = PermSet.TargetGroupPropName,
                    FieldType  = CswEnumNbtFieldType.Relationship,
                    IsFk       = true,
                    FkType     = CswEnumNbtViewRelatedIdType.ObjectClassId.ToString(),
                    FkValue    = PermissionGroupOC.ObjectClassId,
                    IsRequired = true
                });
                CswNbtView TargetsView = _CswNbtSchemaModTrnsctn.makeView();
                TargetsView.ViewName = PermSet.GroupTargetPropName;
                TargetsView.ViewMode = CswEnumNbtViewRenderingMode.Grid;
                CswNbtViewRelationship GroupRel  = TargetsView.AddViewRelationship(PermissionGroupOC, false);
                CswNbtViewRelationship TargetRel = TargetsView.AddViewRelationship(GroupRel, CswEnumNbtViewPropOwnerType.Second, GroupOCP, true);
                for (int i = 0; i < PermSet.TargetsGridProperties.Count; i++)
                {
                    TargetsView.AddViewProperty(TargetRel, TargetOC.getObjectClassProp(PermSet.TargetsGridProperties[i]), i + 1);
                }
                _CswNbtSchemaModTrnsctn.MetaData.UpdateObjectClassProp(TargetsGridOCP, CswEnumNbtObjectClassPropAttributes.viewxml, TargetsView.ToString());
            }
            return(PermissionGroupOC);
        }
        private void _createPermissionObjClasses()
        {
            PermissionSetAttributes ReportPermissionSet = new PermissionSetAttributes
            {
                TargetClassName       = CswEnumNbtObjectClass.ReportClass,
                GroupClassName        = CswEnumNbtObjectClass.ReportGroupClass,
                PermissionClassName   = CswEnumNbtObjectClass.ReportGroupPermissionClass,
                GroupTargetPropName   = CswNbtObjClassReportGroup.PropertyName.Reports,
                TargetGroupPropName   = CswNbtObjClassReport.PropertyName.ReportGroup,
                TargetsGridProperties = new List <string>
                {
                    CswNbtObjClassReport.PropertyName.ReportName,
                    CswNbtObjClassReport.PropertyName.Category,
                    CswNbtObjClassReport.PropertyName.Instructions
                }
            };
            PermissionSetAttributes MailReportPermissionSet = new PermissionSetAttributes
            {
                TargetClassName       = CswEnumNbtObjectClass.MailReportClass,
                GroupClassName        = CswEnumNbtObjectClass.MailReportGroupClass,
                PermissionClassName   = CswEnumNbtObjectClass.MailReportGroupPermissionClass,
                GroupTargetPropName   = CswNbtObjClassMailReportGroup.PropertyName.MailReports,
                TargetGroupPropName   = CswNbtObjClassMailReport.PropertyName.MailReportGroup,
                TargetsGridProperties = new List <string>
                {
                    CswNbtObjClassMailReport.PropertyName.Name,
                    CswNbtObjClassMailReport.PropertyName.Type,
                    CswNbtObjClassMailReport.PropertyName.NextDueDate
                }
            };
            CswNbtMetaDataObjectClass ReportPermissionGroupOC     = _createPermissionGroupClass(ReportPermissionSet);
            CswNbtMetaDataObjectClass MailReportPermissionGroupOC = _createPermissionGroupClass(MailReportPermissionSet);

            _createPermissionClass(ReportPermissionSet);
            _createPermissionClass(MailReportPermissionSet);
            _createGroupPermissionsGridProp(ReportPermissionGroupOC, ReportPermissionSet);
            _createGroupPermissionsGridProp(MailReportPermissionGroupOC, MailReportPermissionSet);
        }
        private void _createGroupPermissionsGridProp(CswNbtMetaDataObjectClass PermissionGroupOC, PermissionSetAttributes PermSet)
        {
            CswNbtMetaDataObjectClassProp PermissionsGridOCP = PermissionGroupOC.getObjectClassProp("Permissions");

            if (null == PermissionsGridOCP)
            {
                PermissionsGridOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp(new CswNbtWcfMetaDataModel.ObjectClassProp(PermissionGroupOC)
                {
                    PropName  = CswNbtObjClassReportGroup.PropertyName.Permissions,
                    FieldType = CswEnumNbtFieldType.Grid
                });

                CswNbtMetaDataObjectClass     PermissionOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass(PermSet.PermissionClassName);
                CswNbtMetaDataObjectClassProp PermGroupOCP = PermissionOC.getObjectClassProp(CswNbtPropertySetPermission.PropertyName.PermissionGroup);
                CswNbtView PermissionsView = _CswNbtSchemaModTrnsctn.makeView();
                PermissionsView.ViewName = PermSet.GroupTargetPropName;
                PermissionsView.ViewMode = CswEnumNbtViewRenderingMode.Grid;
                CswNbtViewRelationship RootRel = PermissionsView.AddViewRelationship(PermissionGroupOC, false);
                CswNbtViewRelationship PermRel = PermissionsView.AddViewRelationship(RootRel, CswEnumNbtViewPropOwnerType.Second, PermGroupOCP, true);
                PermissionsView.AddViewProperty(PermRel, PermissionOC.getObjectClassProp(CswNbtPropertySetPermission.PropertyName.PermissionGroup), 1);
                PermissionsView.AddViewProperty(PermRel, PermissionOC.getObjectClassProp(CswNbtPropertySetPermission.PropertyName.Role), 2);
                PermissionsView.AddViewProperty(PermRel, PermissionOC.getObjectClassProp(CswNbtPropertySetPermission.PropertyName.WorkUnit), 3);
                PermissionsView.AddViewProperty(PermRel, PermissionOC.getObjectClassProp(CswNbtPropertySetPermission.PropertyName.View), 4);
                PermissionsView.AddViewProperty(PermRel, PermissionOC.getObjectClassProp(CswNbtPropertySetPermission.PropertyName.Edit), 5);
                _CswNbtSchemaModTrnsctn.MetaData.UpdateObjectClassProp(PermissionsGridOCP, CswEnumNbtObjectClassPropAttributes.viewxml, PermissionsView.ToString());
            }
        }
        private void _createPermissionClass(PermissionSetAttributes PermSet)
        {
            CswNbtMetaDataObjectClass PermissionOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass(PermSet.PermissionClassName);

            if (null == PermissionOC)
            {
                PermissionOC = _CswNbtSchemaModTrnsctn.createObjectClass(PermSet.PermissionClassName, "doc.png", false);

                CswNbtMetaDataObjectClass GroupOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass(PermSet.GroupClassName);
                _CswNbtSchemaModTrnsctn.createObjectClassProp(new CswNbtWcfMetaDataModel.ObjectClassProp(PermissionOC)
                {
                    PropName    = CswNbtPropertySetPermission.PropertyName.PermissionGroup,
                    FieldType   = CswEnumNbtFieldType.Relationship,
                    IsRequired  = true,
                    SetValOnAdd = true,
                    IsFk        = true,
                    FkType      = CswEnumNbtViewRelatedIdType.ObjectClassId.ToString(),
                    FkValue     = GroupOC.ObjectClassId
                });
                CswNbtMetaDataObjectClass     WorkUnitOC  = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass(CswEnumNbtObjectClass.WorkUnitClass);
                CswNbtMetaDataObjectClassProp WorkUnitOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp(new CswNbtWcfMetaDataModel.ObjectClassProp(PermissionOC)
                {
                    PropName    = CswNbtPropertySetPermission.PropertyName.WorkUnit,
                    FieldType   = CswEnumNbtFieldType.Relationship,
                    SetValOnAdd = true,
                    IsFk        = true,
                    FkType      = CswEnumNbtViewRelatedIdType.ObjectClassId.ToString(),
                    FkValue     = WorkUnitOC.ObjectClassId
                });
                CswNbtMetaDataObjectClassProp ApplyToAllWorkUnitsOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp(new CswNbtWcfMetaDataModel.ObjectClassProp(PermissionOC)
                {
                    PropName    = CswNbtPropertySetPermission.PropertyName.ApplyToAllWorkUnits,
                    FieldType   = CswEnumNbtFieldType.Logical,
                    IsRequired  = true,
                    SetValOnAdd = true
                });
                _CswNbtSchemaModTrnsctn.MetaData.SetObjectClassPropDefaultValue(ApplyToAllWorkUnitsOCP, CswEnumTristate.False);
                WorkUnitOCP.setFilter(ApplyToAllWorkUnitsOCP, ApplyToAllWorkUnitsOCP.getFieldTypeRule().SubFields.Default, CswEnumNbtFilterMode.Equals, CswEnumTristate.False);
                CswNbtMetaDataObjectClass     RoleOC  = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass(CswEnumNbtObjectClass.RoleClass);
                CswNbtMetaDataObjectClassProp RoleOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp(new CswNbtWcfMetaDataModel.ObjectClassProp(PermissionOC)
                {
                    PropName    = CswNbtPropertySetPermission.PropertyName.Role,
                    FieldType   = CswEnumNbtFieldType.Relationship,
                    SetValOnAdd = true,
                    IsFk        = true,
                    FkType      = CswEnumNbtViewRelatedIdType.ObjectClassId.ToString(),
                    FkValue     = RoleOC.ObjectClassId
                });
                CswNbtMetaDataObjectClassProp ApplyToAllRolesOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp(new CswNbtWcfMetaDataModel.ObjectClassProp(PermissionOC)
                {
                    PropName    = CswNbtPropertySetPermission.PropertyName.ApplyToAllRoles,
                    FieldType   = CswEnumNbtFieldType.Logical,
                    IsRequired  = true,
                    SetValOnAdd = true
                });
                _CswNbtSchemaModTrnsctn.MetaData.SetObjectClassPropDefaultValue(ApplyToAllRolesOCP, CswEnumTristate.False);
                RoleOCP.setFilter(ApplyToAllRolesOCP, ApplyToAllRolesOCP.getFieldTypeRule().SubFields.Default, CswEnumNbtFilterMode.Equals, CswEnumTristate.False);
                CswNbtMetaDataObjectClassProp ViewOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp(new CswNbtWcfMetaDataModel.ObjectClassProp(PermissionOC)
                {
                    PropName    = CswNbtPropertySetPermission.PropertyName.View,
                    FieldType   = CswEnumNbtFieldType.Logical,
                    IsRequired  = true,
                    SetValOnAdd = true
                });
                _CswNbtSchemaModTrnsctn.MetaData.SetObjectClassPropDefaultValue(ViewOCP, CswEnumTristate.False);
                CswNbtMetaDataObjectClassProp EditOCP = _CswNbtSchemaModTrnsctn.createObjectClassProp(new CswNbtWcfMetaDataModel.ObjectClassProp(PermissionOC)
                {
                    PropName    = CswNbtPropertySetPermission.PropertyName.Edit,
                    FieldType   = CswEnumNbtFieldType.Logical,
                    IsRequired  = true,
                    SetValOnAdd = true
                });
                _CswNbtSchemaModTrnsctn.MetaData.SetObjectClassPropDefaultValue(EditOCP, CswEnumTristate.False);
            }
        }