public int saveFile(string PropIdAttr, byte[] BlobData, string ContentType, string FileName, out string Href, int BlobDataId = Int32.MinValue, bool PostChanges = true, CswNbtNode Node = null) { CswPropIdAttr PropId = new CswPropIdAttr(PropIdAttr); CswNbtMetaDataNodeTypeProp MetaDataProp = _CswNbtResources.MetaData.getNodeTypeProp(PropId.NodeTypePropId); if (null == Node) { Node = _CswNbtResources.Nodes[PropId.NodeId]; } CswNbtNodePropWrapper FileProp = Node.Properties[MetaDataProp]; if (_CswNbtResources.Permit.canNodeType(CswEnumNbtNodeTypePermission.Edit, MetaDataProp.getNodeType(), _CswNbtResources.CurrentNbtUser) && _CswNbtResources.Permit.isPropWritable(CswEnumNbtNodeTypePermission.Edit, MetaDataProp, null, FileProp)) { if (Int32.MinValue == FileProp.JctNodePropId) { FileProp.makePropRow(); //if we don't have a jct_node_prop row for this prop, we do now if (PostChanges) { Node.postChanges(true); } } if (FileProp.getFieldType().FieldType == CswEnumNbtFieldType.Image) { //case 29692: support EXIF image rotation metadata to properly orient photos bool img_ok = false; MemoryStream ms = new MemoryStream(BlobData, 0, BlobData.Length); ms.Write(BlobData, 0, BlobData.Length); System.Drawing.Image img = null; try { img = Image.FromStream(ms, true); img_ok = true; } catch { } if (img_ok == true) { FixOrientation(ref img); ImageConverter converter = new ImageConverter(); BlobData = (byte[])converter.ConvertTo(img, typeof(byte[])); } } //Save the file to blob_data CswTableUpdate BlobUpdate = _CswNbtResources.makeCswTableUpdate("saveBlob", "blob_data"); string whereClause = "where jctnodepropid = " + FileProp.JctNodePropId; if (Int32.MinValue != BlobDataId) { whereClause += " and blobdataid = " + BlobDataId; } DataTable BlobTbl = BlobUpdate.getTable(whereClause); if (BlobTbl.Rows.Count > 0 && (Int32.MinValue != BlobDataId || FileProp.getFieldTypeValue() == CswEnumNbtFieldType.File || FileProp.getFieldTypeValue() == CswEnumNbtFieldType.MOL)) { BlobTbl.Rows[0]["blobdata"] = BlobData; BlobTbl.Rows[0]["contenttype"] = ContentType; BlobTbl.Rows[0]["filename"] = FileName; BlobTbl.Rows[0]["auditlevel"] = MetaDataProp.AuditLevel; BlobDataId = CswConvert.ToInt32(BlobTbl.Rows[0]["blobdataid"]); } else { DataRow NewRow = BlobTbl.NewRow(); NewRow["jctnodepropid"] = FileProp.JctNodePropId; NewRow["blobdata"] = BlobData; NewRow["contenttype"] = ContentType; NewRow["filename"] = FileName; NewRow["auditlevel"] = MetaDataProp.AuditLevel; BlobDataId = CswConvert.ToInt32(NewRow["blobdataid"]); BlobTbl.Rows.Add(NewRow); } BlobUpdate.update(BlobTbl); if (Node.getObjectClass().ObjectClass == CswEnumNbtObjectClass.ReportClass) { CswNbtObjClassReport Report = Node; CswFilePath FilePathTools = new CswFilePath(_CswNbtResources); string ReportPath = FilePathTools.getFullReportFilePath(Report.RPTFile.JctNodePropId.ToString()); _createReportFile(ReportPath, Report.RPTFile.JctNodePropId, BlobData); } if (CswEnumNbtFieldType.File == FileProp.getFieldTypeValue()) { SetLastModified(FileProp); } FileProp.SyncGestalt(); if (PostChanges) { Node.postChanges(false); } Href = CswNbtNodePropBlob.getLink(FileProp.JctNodePropId, PropId.NodeId, BlobDataId); } //canNodeType() && isPropWritable() else { Href = string.Empty; //To satifsy the "ref string Href" throw new CswDniException(CswEnumErrorType.Error, "You do not have sufficient priveledges to save files", "User " + _CswNbtResources.CurrentNbtUser.UserId + " attemped to save blobdata on JctNodeProp " + FileProp.JctNodePropId); } return(BlobDataId); }
protected override void OnEnable() { #if DEBUG if (_CswNbtResources.ConfigVbls.doesConfigVarExist(CswEnumConfigurationVariableNames.Logging_Level)) { _CswNbtResources.ConfigVbls.setConfigVariableValue(CswEnumConfigurationVariableNames.Logging_Level.ToString(), "Info"); } _CswNbtResources.SetupVbls.writeSetting(CswEnumSetupVariableNames.ShowFullExceptions, "true"); CswNbtMetaDataNodeType FieldTypeNt = _CswNbtResources.MetaData.getNodeType("Csw Dev FieldType Test"); if (null == FieldTypeNt) { FieldTypeNt = _CswNbtResources.MetaData.makeNewNodeType( new CswNbtWcfMetaDataModel.NodeType(_CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.GenericClass)) { NodeTypeName = "Csw Dev FieldType Test", Category = "Csw Dev" }); CswNbtMetaDataNodeTypeTab SimpleTab = FieldTypeNt.getNodeTypeTab("Csw Dev FieldType Test"); if (null != SimpleTab) { //SimpleTab.TabName = "Simple"; SimpleTab.DesignNode.TabName.Text = "Simple"; SimpleTab.DesignNode.postChanges(false); } else { SimpleTab = _CswNbtResources.MetaData.makeNewTab(FieldTypeNt, "Simple", 1); } CswNbtMetaDataNodeTypeTab LessSimpleTab = _CswNbtResources.MetaData.makeNewTab(FieldTypeNt, "Less Simple", 2); CswNbtMetaDataNodeTypeTab ComplexTab = _CswNbtResources.MetaData.makeNewTab(FieldTypeNt, "Complex", 3); foreach (CswNbtMetaDataFieldType FieldType in _CswNbtResources.MetaData.getFieldTypes()) { switch (FieldType.FieldType) { case CswEnumNbtFieldType.Barcode: case CswEnumNbtFieldType.DateTime: case CswEnumNbtFieldType.Image: case CswEnumNbtFieldType.List: case CswEnumNbtFieldType.Logical: case CswEnumNbtFieldType.Memo: case CswEnumNbtFieldType.Number: case CswEnumNbtFieldType.PropertyReference: case CswEnumNbtFieldType.Sequence: case CswEnumNbtFieldType.Static: case CswEnumNbtFieldType.Text: _CswNbtResources.MetaData.makeNewProp(new CswNbtWcfMetaDataModel.NodeTypeProp(FieldTypeNt, FieldType, FieldType.FieldType.ToString()) { TabId = SimpleTab.TabId }); break; case CswEnumNbtFieldType.Comments: case CswEnumNbtFieldType.Composite: case CswEnumNbtFieldType.File: case CswEnumNbtFieldType.ImageList: case CswEnumNbtFieldType.Link: case CswEnumNbtFieldType.MOL: case CswEnumNbtFieldType.MTBF: case CswEnumNbtFieldType.Password: case CswEnumNbtFieldType.Quantity: case CswEnumNbtFieldType.Scientific: case CswEnumNbtFieldType.ViewReference: _CswNbtResources.MetaData.makeNewProp(new CswNbtWcfMetaDataModel.NodeTypeProp(FieldTypeNt, FieldType, FieldType.FieldType.ToString()) { TabId = LessSimpleTab.TabId }); break; case CswEnumNbtFieldType.Grid: case CswEnumNbtFieldType.Location: case CswEnumNbtFieldType.LogicalSet: case CswEnumNbtFieldType.MultiList: case CswEnumNbtFieldType.Question: case CswEnumNbtFieldType.NFPA: case CswEnumNbtFieldType.NodeTypeSelect: case CswEnumNbtFieldType.Relationship: case CswEnumNbtFieldType.TimeInterval: case CswEnumNbtFieldType.ViewPickList: case CswEnumNbtFieldType.UserSelect: _CswNbtResources.MetaData.makeNewProp(new CswNbtWcfMetaDataModel.NodeTypeProp(FieldTypeNt, FieldType, FieldType.FieldType.ToString()) { TabId = ComplexTab.TabId }); break; } } CswNbtView FieldTypeView = new CswNbtView(_CswNbtResources); FieldTypeView.saveNew("Field Types", CswEnumNbtViewVisibility.User, null, _CswNbtResources.Nodes.makeUserNodeFromUsername(CswNbtObjClassUser.ChemSWAdminUsername).NodeId); FieldTypeView.AddViewRelationship(FieldTypeNt, false); FieldTypeView.Category = "Csw Dev"; FieldTypeView.save(); CswNbtNode Node1 = _CswNbtResources.Nodes.makeNodeFromNodeTypeId(FieldTypeNt.NodeTypeId); CswNbtNode Node2 = _CswNbtResources.Nodes.makeNodeFromNodeTypeId(FieldTypeNt.NodeTypeId); Node1.IsDemo = true; Node1.postChanges(ForceUpdate: false); Node2.IsDemo = true; Node2.postChanges(ForceUpdate: false); } _CswNbtResources.Modules.EnableModule(CswEnumNbtModuleName.NBTManager); CswNbtMetaDataNodeType CustomerNt = _CswNbtResources.MetaData.getNodeType("Csw Dev Customers"); if (null == CustomerNt) { CustomerNt = _CswNbtResources.MetaData.makeNewNodeType(new CswNbtWcfMetaDataModel.NodeType(_CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.CustomerClass)) { NodeTypeName = "Csw Dev Customers" }); CswNbtView CustomersView = new CswNbtView(_CswNbtResources); CustomersView.saveNew("Csw Dev Customers", CswEnumNbtViewVisibility.Global); CustomersView.Category = "Csw Dev"; CustomersView.AddViewRelationship(CustomerNt, IncludeDefaultFilters: true); CustomersView.save(); foreach (string AccessId in _CswNbtResources.CswDbCfgInfo.AccessIds) { _CswNbtResources.Nodes.makeNodeFromNodeTypeId(CustomerNt.NodeTypeId, delegate(CswNbtNode NewNode) { ((CswNbtObjClassCustomer)NewNode).CompanyID.Text = AccessId; }); } } #endif }
public override void update() { CswNbtMetaDataObjectClass GenericOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.GenericClass ); CswNbtMetaDataObjectClass MaterialOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.MaterialClass ); CswNbtMetaDataFieldType TextFT = _CswNbtSchemaModTrnsctn.MetaData.getFieldType( CswNbtMetaDataFieldType.NbtFieldType.Text ); CswNbtMetaDataFieldType ListFT = _CswNbtSchemaModTrnsctn.MetaData.getFieldType( CswNbtMetaDataFieldType.NbtFieldType.List ); CswNbtMetaDataFieldType GridFT = _CswNbtSchemaModTrnsctn.MetaData.getFieldType( CswNbtMetaDataFieldType.NbtFieldType.Grid ); CswNbtMetaDataFieldType ImageListFT = _CswNbtSchemaModTrnsctn.MetaData.getFieldType( CswNbtMetaDataFieldType.NbtFieldType.ImageList ); CswNbtMetaDataFieldType RelationshipFT = _CswNbtSchemaModTrnsctn.MetaData.getFieldType( CswNbtMetaDataFieldType.NbtFieldType.Relationship ); //// Jurisdiction NodeType //CswNbtMetaDataNodeType JurisdictionNT = _CswNbtSchemaModTrnsctn.MetaData.makeNewNodeType( new CswNbtWcfMetaDataModel.NodeType( GenericOC ) //{ // NodeTypeName = "Jurisdiction", // Category = "System", // IconFileName = "globe.gif" //} ); //CswNbtMetaDataNodeTypeProp JurisdictionNameNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( JurisdictionNT, TextFT, "Name" ) ); //JurisdictionNT.setNameTemplateText( CswNbtMetaData.MakeTemplateEntry( "Name" ) ); //// Default Jurisdictions //CswNbtNode JurisNorthAmericaNode = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( JurisdictionNT.NodeTypeId, CswNbtNodeCollection.MakeNodeOperation.WriteNode ); //JurisNorthAmericaNode.Properties[JurisdictionNameNTP].AsText.Text = "North America"; //JurisNorthAmericaNode.postChanges( false ); //CswNbtNode JurisEuropeNode = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( JurisdictionNT.NodeTypeId, CswNbtNodeCollection.MakeNodeOperation.WriteNode ); //JurisEuropeNode.Properties[JurisdictionNameNTP].AsText.Text = "Europe"; //JurisEuropeNode.postChanges( false ); // GHS Phrase NodeType CswNbtMetaDataNodeType GHSPhraseNT = _CswNbtSchemaModTrnsctn.MetaData.makeNewNodeType( new CswNbtWcfMetaDataModel.NodeType( GenericOC ) { NodeTypeName = "GHS Phrase", Category = "System", IconFileName = "group.gif" } ); CswNbtMetaDataNodeTypeProp GHSPhraseCodeNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( GHSPhraseNT, TextFT, "Code" ) ); CswNbtMetaDataNodeTypeProp GHSPhraseCategoryNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( GHSPhraseNT, ListFT, "Category" ) ); CswNbtMetaDataNodeTypeProp GHSPhraseEnglishNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( GHSPhraseNT, TextFT, "English" ) ); CswNbtMetaDataNodeTypeProp GHSPhraseChineseNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( GHSPhraseNT, TextFT, "Chinese" ) ); CswNbtMetaDataNodeTypeProp GHSPhraseDanishNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( GHSPhraseNT, TextFT, "Danish" ) ); CswNbtMetaDataNodeTypeProp GHSPhraseDutchNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( GHSPhraseNT, TextFT, "Dutch" ) ); CswNbtMetaDataNodeTypeProp GHSPhraseFrenchNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( GHSPhraseNT, TextFT, "French" ) ); CswNbtMetaDataNodeTypeProp GHSPhraseGermanNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( GHSPhraseNT, TextFT, "German" ) ); CswNbtMetaDataNodeTypeProp GHSPhraseSpanishNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( GHSPhraseNT, TextFT, "Spanish" ) ); GHSPhraseCategoryNTP.ListOptions = "Physical,Health,Environmental"; GHSPhraseNT.setNameTemplateText( CswNbtMetaData.MakeTemplateEntry( "Code" ) ); _CswNbtSchemaModTrnsctn.createModuleNodeTypeJunction( CswNbtResources.CswNbtModule.CISPro, GHSPhraseNT.NodeTypeId ); // GHS NodeType CswNbtMetaDataNodeType GHSNT = _CswNbtSchemaModTrnsctn.MetaData.makeNewNodeType( new CswNbtWcfMetaDataModel.NodeType( GenericOC ) { NodeTypeName = "GHS", Category = "Materials", IconFileName = "ball_redS.gif" } ); CswNbtMetaDataNodeTypeProp GHSTypeNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( GHSNT, ListFT, "Type" ) { IsRequired = true } ); CswNbtMetaDataNodeTypeProp GHSMaterialNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( GHSNT, RelationshipFT, "Material" ) { IsRequired = true } ); CswNbtMetaDataNodeTypeProp GHSGHSPhraseNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( GHSNT, RelationshipFT, "GHS Phrase" ) { IsRequired = true } ); //CswNbtMetaDataNodeTypeProp GHSJurisdictionNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( GHSNT, RelationshipFT, "Jurisdiction" ) { IsRequired = true } ); CswNbtMetaDataNodeTypeProp GHSJurisdictionNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( GHSNT, ListFT, "Jurisdiction" ) { IsRequired = true } ); GHSTypeNTP.ListOptions = "Class Code, Label Code"; GHSMaterialNTP.SetFK( NbtViewRelatedIdType.ObjectClassId.ToString(), MaterialOC.ObjectClassId ); GHSGHSPhraseNTP.SetFK( NbtViewRelatedIdType.NodeTypeId.ToString(), GHSPhraseNT.NodeTypeId ); //GHSJurisdictionNTP.SetFK( NbtViewRelatedIdType.NodeTypeId.ToString(), JurisdictionNT.NodeTypeId ); GHSJurisdictionNTP.ListOptions = "North America, China, Europe, Japan"; _CswNbtSchemaModTrnsctn.createModuleNodeTypeJunction( CswNbtResources.CswNbtModule.CISPro, GHSNT.NodeTypeId ); // Chemical GHS Tab CswNbtMetaDataNodeType ChemicalNT = _CswNbtSchemaModTrnsctn.MetaData.getNodeType( "Chemical" ); if( null != ChemicalNT ) { foreach( CswNbtMetaDataNodeTypeTab Tab in ChemicalNT.getNodeTypeTabs() ) { if( Tab.TabOrder >= 3 ) Tab.TabOrder += 1; } CswNbtMetaDataNodeTypeTab GHSTab = ChemicalNT.getNodeTypeTab( "GHS" ); if( null == GHSTab ) { GHSTab = _CswNbtSchemaModTrnsctn.MetaData.makeNewTab( ChemicalNT, "GHS", 3 ); } GHSTab.TabOrder = 3; // Chemical GHS properties CswNbtMetaDataNodeTypeProp ChemicalGHSClassificationNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( ChemicalNT, ListFT, "GHS Classification" ) ); CswNbtMetaDataNodeTypeProp ChemicalGHSClassCodesNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( ChemicalNT, GridFT, "GHS Class Codes" ) ); CswNbtMetaDataNodeTypeProp ChemicalGHSSignalWordNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( ChemicalNT, ListFT, "GHS Signal Word" ) ); CswNbtMetaDataNodeTypeProp ChemicalGHSLabelCodesNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( ChemicalNT, GridFT, "GHS Label Codes" ) ); CswNbtMetaDataNodeTypeProp ChemicalGHSPictosNTP = _CswNbtSchemaModTrnsctn.MetaData.makeNewProp( new CswNbtWcfMetaDataModel.NodeTypeProp( ChemicalNT, ImageListFT, "GHS Pictos" ) ); CswCommaDelimitedString GHSClasses = new CswCommaDelimitedString(){ "Category 1", "Category 1 / 1A / 1B", "Category 1A", "Category 1A / 1B", "Category 1A / 1B / 1C", "Category 1B", "Category 2", "Category 2 (skin)/2A (eye)", "Category 2A", "Category 2B", "Category 3", "Category 4", "Category 5", "Type A", "Type B", "Type C&D", "Type E&F", "Compressed Gas", "Liquified Gas", "Dissolved Gas", "Refridgerated Liquidified Gas" }; ChemicalGHSClassificationNTP.ListOptions = GHSClasses.ToString(); ChemicalGHSSignalWordNTP.ListOptions = "Danger,Warning"; ChemicalGHSClassificationNTP.removeFromLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Add ); ChemicalGHSClassCodesNTP.removeFromLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Add ); ChemicalGHSSignalWordNTP.removeFromLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Add ); ChemicalGHSLabelCodesNTP.removeFromLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Add ); ChemicalGHSPictosNTP.removeFromLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Add ); ChemicalGHSClassificationNTP.updateLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit, true, GHSTab.TabId, 1, 1, "Hazard Classification" ); ChemicalGHSClassCodesNTP.updateLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit, true, GHSTab.TabId, 2, 1, "Hazard Classification" ); ChemicalGHSSignalWordNTP.updateLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit, true, GHSTab.TabId, 3, 1, "Hazard Label" ); ChemicalGHSLabelCodesNTP.updateLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit, true, GHSTab.TabId, 4, 1, "Hazard Label" ); ChemicalGHSPictosNTP.updateLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit, true, GHSTab.TabId, 5, 1, "Hazard Label" ); // Grid Views CswNbtView GHSClassCodesView = _CswNbtSchemaModTrnsctn.restoreView( ChemicalGHSClassCodesNTP.ViewId ); GHSClassCodesView.Root.ChildRelationships.Clear(); CswNbtViewRelationship ChemicalVR1 = GHSClassCodesView.AddViewRelationship( ChemicalNT, false ); CswNbtViewRelationship GHSVR1 = GHSClassCodesView.AddViewRelationship( ChemicalVR1, NbtViewPropOwnerType.Second, GHSMaterialNTP, true ); CswNbtViewRelationship GHSPhraseVR1 = GHSClassCodesView.AddViewRelationship( GHSVR1, NbtViewPropOwnerType.First, GHSGHSPhraseNTP, true ); GHSClassCodesView.AddViewProperty( GHSPhraseVR1, GHSPhraseCodeNTP ); GHSClassCodesView.AddViewProperty( GHSPhraseVR1, GHSPhraseCategoryNTP ); GHSClassCodesView.AddViewProperty( GHSPhraseVR1, GHSPhraseEnglishNTP ); GHSClassCodesView.AddViewProperty( GHSPhraseVR1, GHSPhraseChineseNTP ); GHSClassCodesView.AddViewProperty( GHSPhraseVR1, GHSPhraseDanishNTP ); GHSClassCodesView.AddViewProperty( GHSPhraseVR1, GHSPhraseDutchNTP ); GHSClassCodesView.AddViewProperty( GHSPhraseVR1, GHSPhraseFrenchNTP ); GHSClassCodesView.AddViewProperty( GHSPhraseVR1, GHSPhraseGermanNTP ); GHSClassCodesView.AddViewProperty( GHSPhraseVR1, GHSPhraseSpanishNTP ); GHSClassCodesView.AddViewPropertyAndFilter( GHSVR1, GHSTypeNTP, Value: "Class Code" ); GHSClassCodesView.AddViewPropertyAndFilter( GHSVR1, GHSJurisdictionNTP, Value: "North America", ShowAtRuntime: true ); GHSClassCodesView.save(); CswNbtView GHSLabelCodesView = _CswNbtSchemaModTrnsctn.restoreView( ChemicalGHSLabelCodesNTP.ViewId ); GHSLabelCodesView.Root.ChildRelationships.Clear(); CswNbtViewRelationship ChemicalVR2 = GHSLabelCodesView.AddViewRelationship( ChemicalNT, false ); CswNbtViewRelationship GHSVR2 = GHSLabelCodesView.AddViewRelationship( ChemicalVR2, NbtViewPropOwnerType.Second, GHSMaterialNTP, true ); CswNbtViewRelationship GHSPhraseVR2 = GHSLabelCodesView.AddViewRelationship( GHSVR2, NbtViewPropOwnerType.First, GHSGHSPhraseNTP, true ); GHSLabelCodesView.AddViewProperty( GHSPhraseVR2, GHSPhraseCodeNTP ); GHSLabelCodesView.AddViewProperty( GHSPhraseVR2, GHSPhraseCategoryNTP ); GHSLabelCodesView.AddViewProperty( GHSPhraseVR2, GHSPhraseEnglishNTP ); GHSLabelCodesView.AddViewProperty( GHSPhraseVR2, GHSPhraseChineseNTP ); GHSLabelCodesView.AddViewProperty( GHSPhraseVR2, GHSPhraseDanishNTP ); GHSLabelCodesView.AddViewProperty( GHSPhraseVR2, GHSPhraseDutchNTP ); GHSLabelCodesView.AddViewProperty( GHSPhraseVR2, GHSPhraseFrenchNTP ); GHSLabelCodesView.AddViewProperty( GHSPhraseVR2, GHSPhraseGermanNTP ); GHSLabelCodesView.AddViewProperty( GHSPhraseVR2, GHSPhraseSpanishNTP ); GHSLabelCodesView.AddViewPropertyAndFilter( GHSVR2, GHSTypeNTP, Value: "Label Code" ); GHSLabelCodesView.AddViewPropertyAndFilter( GHSVR2, GHSJurisdictionNTP, Value: "North America", ShowAtRuntime: true ); GHSLabelCodesView.save(); // Picto Options ChemicalGHSPictosNTP.Extended = "true"; // allow multiple values ChemicalGHSPictosNTP.TextAreaColumns = 100; ChemicalGHSPictosNTP.TextAreaRows = 100; CswDelimitedString PictoNames = new CswDelimitedString( '\n' ) { "Chemical", "Explosive", "Flammable", "Natural", "Oxidizer", "Danger", "X" }; CswDelimitedString PictoPaths = new CswDelimitedString( '\n' ) { //"Images/cispro/1-1.gif", //"Images/cispro/1-2.gif", //"Images/cispro/1-3.gif", //"Images/cispro/1-4.gif", //"Images/cispro/1-5.gif", //"Images/cispro/1-6.gif", //"Images/cispro/5-2.gif", "Images/cispro/acide.gif", //"Images/cispro/acide2.gif", //"Images/cispro/blan-red.gif", //"Images/cispro/bleu4.gif", //"Images/cispro/bleu4-noir.gif", "Images/cispro/bottle.gif", "Images/cispro/exclam.gif", "Images/cispro/explos.gif", "Images/cispro/flamme.gif", //"Images/cispro/jaune5-1.gif", "Images/cispro/pollu.gif", "Images/cispro/rondflam.gif", //"Images/cispro/rouge2.gif", //"Images/cispro/rouge2_noir.gif", //"Images/cispro/rouge3.gif", //"Images/cispro/rouge3_noir.gif", "Images/cispro/silouete.gif", "Images/cispro/skull.gif" //"Images/cispro/skull_2.gif", //"Images/cispro/skull6.gif", //"Images/cispro/stripes.gif", //"Images/cispro/vert.gif" }; ChemicalGHSPictosNTP.ListOptions = PictoNames.ToString(); ChemicalGHSPictosNTP.ValueOptions = PictoPaths.ToString(); } //GHS Phrase nodes Dictionary<Int32, string> GHSPhraseCodes = new Dictionary<Int32, string>(); //Physical GHSPhraseCodes.Add( 200, "Unstable explosive" ); GHSPhraseCodes.Add( 201, "Explosive; mass explosion hazard" ); GHSPhraseCodes.Add( 202, "Explosive; severe projection hazard" ); GHSPhraseCodes.Add( 203, "Explosive; fire, blast or projection hazard" ); GHSPhraseCodes.Add( 204, "Fire or projection hazard" ); GHSPhraseCodes.Add( 205, "May mass explode in fire" ); GHSPhraseCodes.Add( 220, "Extremely flammable gas" ); GHSPhraseCodes.Add( 221, "Flammable gas" ); GHSPhraseCodes.Add( 222, "Extremely flammable material" ); GHSPhraseCodes.Add( 223, "Flammable material" ); GHSPhraseCodes.Add( 224, "Extremely flammable liquid and vapour" ); GHSPhraseCodes.Add( 225, "Highly flammable liquid and vapour" ); GHSPhraseCodes.Add( 226, "Flammable liquid and vapour" ); GHSPhraseCodes.Add( 227, "Combustible liquid" ); GHSPhraseCodes.Add( 228, "Flammable solid" ); GHSPhraseCodes.Add( 240, "Heating may cause an explosion" ); GHSPhraseCodes.Add( 241, "Heating may cause a fire or explosion" ); GHSPhraseCodes.Add( 242, "Heating may cause a fire" ); GHSPhraseCodes.Add( 250, "Catches fire spontaneously if exposed to air" ); GHSPhraseCodes.Add( 251, "Self-heating; may catch fire" ); GHSPhraseCodes.Add( 252, "Self-heating in large quantities; may catch fire" ); GHSPhraseCodes.Add( 260, "In contact with water releases flammable gases which may ignite spontaneously" ); GHSPhraseCodes.Add( 261, "In contact with water releases flammable gas" ); GHSPhraseCodes.Add( 270, "May cause or intensify fire; oxidizer" ); GHSPhraseCodes.Add( 271, "May cause fire or explosion; strong oxidizer" ); GHSPhraseCodes.Add( 272, "May intensify fire; oxidizer" ); GHSPhraseCodes.Add( 280, "Contains gas under pressure; may explode if heated" ); GHSPhraseCodes.Add( 281, "Contains refrigerated gas; may cause cryogenic burns or injury" ); GHSPhraseCodes.Add( 290, "May be corrosive to metals" ); //Health GHSPhraseCodes.Add( 300, "Fatal if swallowed" ); GHSPhraseCodes.Add( 301, "Toxic if swallowed" ); GHSPhraseCodes.Add( 302, "Harmful if swallowed" ); GHSPhraseCodes.Add( 303, "May be harmful if swallowed" ); GHSPhraseCodes.Add( 304, "May be fatal if swallowed and enters airways" ); GHSPhraseCodes.Add( 305, "May be harmful if swallowed and enters airways" ); GHSPhraseCodes.Add( 310, "Fatal in contact with skin" ); GHSPhraseCodes.Add( 311, "Toxic in contact with skin" ); GHSPhraseCodes.Add( 312, "Harmful in contact with skin" ); GHSPhraseCodes.Add( 313, "May be harmful in contact with skin" ); GHSPhraseCodes.Add( 314, "Causes severe skin burns and eye damage" ); GHSPhraseCodes.Add( 315, "Causes skin irritation" ); GHSPhraseCodes.Add( 316, "Causes mild skin irritation" ); GHSPhraseCodes.Add( 317, "May cause an allergic skin reaction" ); GHSPhraseCodes.Add( 318, "Causes serious eye damage" ); GHSPhraseCodes.Add( 319, "Causes serious eye irritation" ); GHSPhraseCodes.Add( 320, "Causes eye irritation" ); GHSPhraseCodes.Add( 330, "Fatal if inhaled" ); GHSPhraseCodes.Add( 331, "Toxic if inhaled" ); GHSPhraseCodes.Add( 332, "Harmful if inhaled" ); GHSPhraseCodes.Add( 333, "May be harmful if inhaled" ); GHSPhraseCodes.Add( 334, "May cause allergy or asthma symptoms of breathing difficulties if inhaled" ); GHSPhraseCodes.Add( 335, "May cause respiratory irritation" ); GHSPhraseCodes.Add( 336, "May cause drowsiness or dizziness" ); GHSPhraseCodes.Add( 340, "May cause genetic defects" ); GHSPhraseCodes.Add( 341, "Suspected of causing genetic defects" ); GHSPhraseCodes.Add( 350, "May cause cancer" ); GHSPhraseCodes.Add( 351, "Suspected of causing cancer" ); GHSPhraseCodes.Add( 360, "May damage fertility or the unborn child" ); GHSPhraseCodes.Add( 361, "Suspected of damaging fertility or the unborn child" ); GHSPhraseCodes.Add( 362, "May cause harm to breast-fed children" ); GHSPhraseCodes.Add( 370, "Causes damage to organs" ); GHSPhraseCodes.Add( 371, "May cause damage to organs" ); GHSPhraseCodes.Add( 372, "Causes damage to organs through prolonged or repeated exposure" ); GHSPhraseCodes.Add( 373, "May cause damage to organs through prolonged or repeated exposure" ); // Environmental GHSPhraseCodes.Add( 400, "Very toxic to aquatic life" ); GHSPhraseCodes.Add( 401, "Toxic to aquatic life" ); GHSPhraseCodes.Add( 402, "Harmful to aquatic life" ); GHSPhraseCodes.Add( 410, "Very toxic to aquatic life with long lasting effects" ); GHSPhraseCodes.Add( 411, "Toxic to aquatic life with long lasting effects" ); GHSPhraseCodes.Add( 412, "Harmful to aquatic life with long lasting effects" ); GHSPhraseCodes.Add( 413, "May cause long lasting harmful effects to aquatic life" ); foreach( Int32 Code in GHSPhraseCodes.Keys ) { string Category = "Physical"; if( Code > 299 ) { Category = "Health"; } else if( Code > 399 ) { Category = "Environmental"; } CswNbtNode GHSPhraseNode = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( GHSPhraseNT.NodeTypeId, CswNbtNodeCollection.MakeNodeOperation.WriteNode ); GHSPhraseNode.Properties[GHSPhraseCodeNTP].AsText.Text = "H" + Code.ToString(); GHSPhraseNode.Properties[GHSPhraseCategoryNTP].AsList.Value = Category; GHSPhraseNode.Properties[GHSPhraseEnglishNTP].AsText.Text = GHSPhraseCodes[Code]; GHSPhraseNode.postChanges( false ); } // foreach( Int32 Code in GHSPhraseCodes.Keys ) }//Update()
public override void update() { { CswCommaDelimitedString LogicalsMissingValidDefaultValues = new CswCommaDelimitedString(); foreach (CswNbtMetaDataNodeType NodeType in _CswNbtSchemaModTrnsctn.MetaData.getNodeTypes()) { foreach (CswNbtMetaDataNodeTypeProp Logical in NodeType.getNodeTypeProps(CswEnumNbtFieldType.Logical)) { if (Logical.IsRequired && (false == Logical.HasDefaultValue() || (CswEnumTristate.False != Logical.DefaultValue.AsLogical.Checked && CswEnumTristate.True != Logical.DefaultValue.AsLogical.Checked))) { LogicalsMissingValidDefaultValues.Add(Logical.PropId.ToString()); Logical.DefaultValue.AsLogical.Checked = CswEnumTristate.False; } } } if (LogicalsMissingValidDefaultValues.Count > 0) { string NodesToUpdateSql = @" select nodeid, nodetypepropid from jct_nodes_props where nodetypepropid in (" + LogicalsMissingValidDefaultValues.ToString() + ")"; CswArbitrarySelect ArbSelect = _CswNbtSchemaModTrnsctn.makeCswArbitrarySelect("logicals_missing_default_values", NodesToUpdateSql); DataTable NodeTable = ArbSelect.getTable(); foreach (DataRow Row in NodeTable.Rows) { CswPrimaryKey NodeId = new CswPrimaryKey("nodes", CswConvert.ToInt32(Row["nodeid"])); CswNbtNode Node = _CswNbtSchemaModTrnsctn.Nodes[NodeId]; if (null != Node) { Int32 NodeTypePropId = CswConvert.ToInt32(Row["nodetypepropid"]); CswNbtNodePropWrapper PropWrapper = Node.Properties[NodeTypePropId]; if (null != PropWrapper) { if (CswEnumTristate.False != PropWrapper.AsLogical.Checked && CswEnumTristate.True != PropWrapper.AsLogical.Checked) { PropWrapper.SetDefaultValue(); } } Node.postChanges(ForceUpdate: false); } } } } { CswCommaDelimitedString ImageListsWithDefaultValue = new CswCommaDelimitedString(); foreach (CswNbtMetaDataNodeType NodeType in _CswNbtSchemaModTrnsctn.MetaData.getNodeTypes()) { foreach (CswNbtMetaDataNodeTypeProp ImageList in NodeType.getNodeTypeProps(CswEnumNbtFieldType.ImageList)) { if (ImageList.IsRequired && ImageList.HasDefaultValue()) { ImageListsWithDefaultValue.Add(ImageList.PropId.ToString()); } } } if (ImageListsWithDefaultValue.Count > 0) { string NodesToUpdateSql = @" select nodeid, nodetypepropid from jct_nodes_props where nodetypepropid in (" + ImageListsWithDefaultValue.ToString() + ")"; CswArbitrarySelect ArbSelect = _CswNbtSchemaModTrnsctn.makeCswArbitrarySelect("imagelists_default_values", NodesToUpdateSql); DataTable NodeTable = ArbSelect.getTable(); foreach (DataRow Row in NodeTable.Rows) { CswPrimaryKey NodeId = new CswPrimaryKey("nodes", CswConvert.ToInt32(Row["nodeid"])); CswNbtNode Node = _CswNbtSchemaModTrnsctn.Nodes[NodeId]; if (null != Node) { Int32 NodeTypePropId = CswConvert.ToInt32(Row["nodetypepropid"]); CswNbtNodePropWrapper PropWrapper = Node.Properties[NodeTypePropId]; if (null != PropWrapper) { if (PropWrapper.Empty) { PropWrapper.SetDefaultValue(); } } Node.postChanges(ForceUpdate: false); } } } } }
} // getPercentDone() /// <summary> /// Run the next iteration of this batch operation /// </summary> public void runBatchOp(CswNbtObjClassBatchOp BatchNode) { if (BatchNode != null && BatchNode.OpNameValue == CswEnumNbtBatchOpName.BulkEdit) { try { bool NoErrors = true; BatchNode.start(); BulkEditBatchData BatchData = new BulkEditBatchData(BatchNode.BatchData.Text); if (BatchData.CurrentRow < BatchData.TotalRows) { if (null != BatchData.excelData.Columns["nodeid"]) { int NodesProcessedPerIteration = CswConvert.ToInt32(_CswNbtResources.ConfigVbls.getConfigVariableValue(CswEnumConfigurationVariableNames.NodesProcessedPerCycle)); Int32 r; for (r = BatchData.CurrentRow; r < BatchData.excelData.Rows.Count && (r - BatchData.CurrentRow) < NodesProcessedPerIteration && NoErrors; r++) { try { DataRow row = BatchData.excelData.Rows[r]; CswPrimaryKey NodeId = new CswPrimaryKey(); NodeId.FromString(row["nodeid"].ToString()); if (CswTools.IsPrimaryKey(NodeId)) { CswNbtNode Node = _CswNbtResources.Nodes[NodeId]; if (null != Node) { foreach (DataColumn col in BatchData.excelData.Columns) { if (NoErrors) { try { if (col.ColumnName != "nodeid") { CswNbtMetaDataNodeTypeProp Prop = Node.getNodeType().getNodeTypeProp(col.ColumnName); CswNbtSubField SubField; if (null != Prop) { SubField = Prop.getFieldTypeRule().SubFields.Default; } else { string propName = col.ColumnName.Substring(0, col.ColumnName.LastIndexOf(" ")); string subFieldName = col.ColumnName.Substring(col.ColumnName.LastIndexOf(" ") + 1); Prop = Node.getNodeType().getNodeTypeProp(propName); SubField = Prop.getFieldTypeRule().SubFields[(CswEnumNbtSubFieldName)subFieldName]; } Node.Properties[Prop].SetSubFieldValue(SubField, row[col.ColumnName]); } // if( col.ColumnName != "nodeid" ) } // try catch (Exception ex) { BatchNode.error(ex, "Error on row: " + (r + 1).ToString() + ", column: " + col.ColumnName + "; "); NoErrors = false; } } } // foreach( DataColumn col in BatchData.excelData.Columns ) } // if( null != Node ) Node.postChanges(false); } // if( CswTools.IsPrimaryKey( NodeId ) ) } // try catch (Exception ex) { BatchNode.error(ex, "Error on row: " + (r + 1).ToString() + "; "); NoErrors = false; } } // for if (NoErrors) { // Setup for next iteration BatchData.CurrentRow = r; BatchNode.BatchData.Text = BatchData.ToString(); BatchNode.PercentDone.Value = getPercentDone(BatchNode); } } // if( null != BatchData.excelData.Columns["nodeid"] ) } // if(BatchData.CurrentRow < BatchData.TotalRows) else { BatchNode.finish(); } BatchNode.postChanges(false); } catch (Exception ex) { BatchNode.error(ex); } } // if( BatchNode != null && BatchNode.OpNameValue == NbtBatchOpName.MultiEdit ) } // runBatchOp()
private void _updateInspectionNode(CswNbtSdInspectionsDataModels.InspectionData.CswNbtInspection Inspection, CswNbtSdInspectionsDataModels.InspectionUpdateData UpdateCollection) { if (Int32.MinValue != Inspection.InspectionId) { CswPrimaryKey InspectionPk = new CswPrimaryKey("nodes", Inspection.InspectionId); CswNbtNode InspectionNode = _CswNbtResources.Nodes.GetNode(InspectionPk, Inspection.DesignId); if (null != InspectionNode) { CswNbtObjClassInspectionDesign NodeAsDesign = (CswNbtObjClassInspectionDesign)InspectionNode; if (NodeAsDesign.Status.Value == Completed || NodeAsDesign.Status.Value == CompletedLate) { UpdateCollection.Completed.Add(Inspection); } else if (NodeAsDesign.Status.Value == Cancelled) { UpdateCollection.Cancelled.Add(Inspection); } else if (NodeAsDesign.Status.Value == Missed) { UpdateCollection.Missed.Add(Inspection); } else { Inspection.Counts = new CswNbtSdInspectionsDataModels.InspectionData.CswNbtInspection.QuestionCounts(); /* We loop once to set the property values */ CswNbtMetaDataNodeType InspectionNt = InspectionNode.getNodeType(); if (null != InspectionNt) { //Can edit the nodetype if (_CswNbtResources.Permit.canNodeType(CswEnumNbtNodeTypePermission.Edit, InspectionNt)) { foreach (CswNbtSdInspectionsDataModels.InspectionData.CswNbtInspection.QuestionAnswer Question in Inspection.Questions) { CswNbtMetaDataNodeTypeProp Ntp = InspectionNt.getNodeTypeProp(Question.QuestionId); if (null != Ntp && null != Ntp.FirstEditLayout) { CswNbtMetaDataNodeTypeTab Tab = InspectionNt.getNodeTypeTab(Ntp.FirstEditLayout.TabId); if (null != Tab) { bool CanEdit = ( _CswNbtResources.Permit.canTab(CswEnumNbtNodeTypePermission.Edit, InspectionNt, Tab) || _CswNbtResources.Permit.isPropWritable(CswEnumNbtNodeTypePermission.Edit, Ntp, Tab) ); CswNbtNodePropQuestion PropAsQuestion = InspectionNode.Properties[Ntp]; if (CanEdit) { PropAsQuestion.Answer = Question.Answer; PropAsQuestion.CorrectiveAction = Question.CorrectiveAction; DateTime DateAnswered = CswConvert.ToDateTime(Question.DateAnswered); if (DateTime.MinValue != DateAnswered) { PropAsQuestion.DateAnswered = DateAnswered; } DateTime DateCorrected = CswConvert.ToDateTime(Question.DateCorrected); if (DateTime.MinValue != DateCorrected) { PropAsQuestion.DateCorrected = DateCorrected; } PropAsQuestion.Comments = Question.Comments; } if (false == string.IsNullOrEmpty(Question.Answer)) { Inspection.Counts.Answered += 1; } else { Inspection.Counts.UnAnswered += 1; } if (false == PropAsQuestion.IsCompliant) { Inspection.Counts.Ooc += 1; } Inspection.Counts.Total += 1; } } } InspectionNode.postChanges(true); if (false == string.IsNullOrEmpty(Inspection.Action) && (Inspection.Action.ToLower() == "finish" || Inspection.Action.ToLower() == "cancel")) { CswNbtMetaDataNodeTypeProp ButtonNtp = null; if (Inspection.Action.ToLower() == "finish") { ButtonNtp = InspectionNode.getNodeType().getNodeTypeProp(CswNbtObjClassInspectionDesign.PropertyName.Finish); } else if (Inspection.Action.ToLower() == "cancel") { ButtonNtp = InspectionNode.getNodeType().getNodeTypeProp(CswNbtObjClassInspectionDesign.PropertyName.Cancel); } if (null != ButtonNtp && null != ButtonNtp.FirstEditLayout) { CswNbtMetaDataNodeTypeTab ButtonTab = _CswNbtResources.MetaData.getNodeTypeTab(ButtonNtp.FirstEditLayout.TabId); if (null != ButtonTab && ( _CswNbtResources.Permit.canTab(CswEnumNbtNodeTypePermission.Edit, InspectionNt, NodeTypeTab: ButtonTab) || _CswNbtResources.Permit.isPropWritable(CswEnumNbtNodeTypePermission.Edit, ButtonNtp, ButtonTab) ) ) { _InspectionDesignOc = _InspectionDesignOc ?? _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.InspectionDesignClass); CswNbtObjClass NbtObjClass = CswNbtObjClassFactory.makeObjClass(_CswNbtResources, _InspectionDesignOc, InspectionNode); CswNbtObjClass.NbtButtonData ButtonData = new CswNbtObjClass.NbtButtonData(ButtonNtp); NbtObjClass.triggerOnButtonClick(ButtonData); } } } } } /* Reinit since state has changed. */ NodeAsDesign = InspectionNode; if (NodeAsDesign.Status.Value == Completed || NodeAsDesign.Status.Value == CompletedLate) { /* Nothing to do */ } else if (NodeAsDesign.Status.Value == ActionRequired) { Inspection.Status = NodeAsDesign.Status.Value; /* We loop again to modify the return with the status of the Inspection per QuestionAnswer */ foreach (CswNbtSdInspectionsDataModels.InspectionData.CswNbtInspection.QuestionAnswer Question in Inspection.Questions) { Question.Status = NodeAsDesign.Status.Value; } /* In case the Inspection has been modified by someone else */ Inspection.DueDateAsDate = NodeAsDesign.InspectionDate.DateTimeValue; Inspection.InspectionPointName = NodeAsDesign.Target.CachedNodeName; Inspection.LocationPath = NodeAsDesign.Location.CachedValue; UpdateCollection.ActionRequired.Add(Inspection); } else { UpdateCollection.InComplete.Add(Inspection); } } } } }
} // _applyMergeChoicesToNode() public CswNbtView finishMerge(MergeInfoData Choices) { CswNbtView view = new CswNbtView(_CswNbtResources); CswNbtNode firstMergedNode = null; foreach (MergeInfoData.MergeInfoNodePair nodePair in Choices.NodePairs) { // Remove the temp node CswNbtNode NodeTemp = _CswNbtResources.Nodes[nodePair.NodeTempId]; if (null != NodeTemp) { NodeTemp.delete(DeleteAllRequiredRelatedNodes: false, OverridePermissions: true, ValidateRequiredRelationships: false); } // Merge Node1 into Node2, and delete Node1 CswNbtNode Node1 = _CswNbtResources.Nodes[nodePair.Node1Id]; CswNbtNode Node2 = _CswNbtResources.Nodes[nodePair.Node2Id]; if (null != Node1 && null != Node2) { // Store the first node merged to return if (null == firstMergedNode) { firstMergedNode = Node2; } // Apply the merge to Node2 _applyMergeChoicesToNode(Choices, nodePair, Node2); Node2.postChanges(ForceUpdate: false, IsCopy: false, OverrideUniqueValidation: true); // Update any references to point to node2 foreach (MergeInfoData.MergeInfoNodeReference Ref in nodePair.NodeReferences) { CswNbtNode refNode = _CswNbtResources.Nodes[Ref.NodeId]; if (refNode.Properties[Ref.NodeTypePropId].getFieldTypeValue() == CswEnumNbtFieldType.UserSelect) { // Special case: UserSelect refNode.Properties[Ref.NodeTypePropId].AsUserSelect.RemoveUser(Node1.NodeId); refNode.Properties[Ref.NodeTypePropId].AsUserSelect.AddUser(Node2.NodeId); refNode.Properties[Ref.NodeTypePropId].AsUserSelect.SyncGestalt(); } else { // Node Reference refNode.Properties[Ref.NodeTypePropId].AsNodeReference.ReferencedNodeId = Node2.NodeId; refNode.Properties[Ref.NodeTypePropId].AsNodeReference.RefreshNodeName(); } refNode.postChanges(ForceUpdate: false, IsCopy: false, OverrideUniqueValidation: true); } // Delete merged node 1 Node1.delete(DeleteAllRequiredRelatedNodes: false, OverridePermissions: true, ValidateRequiredRelationships: false); } // if( null != Node1 && null != Node2 ) } // foreach( MergeInfoData.MergeInfoNodePair nodePair in Choices.NodePairs ) // Return a view of the first merged node if (null != firstMergedNode) { view = firstMergedNode.getViewOfNode(includeDefaultFilters: false); } return(view); } // finishMerge()