private void Relationship_Insert_Or_Delete_After(object sender, ObjectEventArgs e) { RelationshipInfo RelationshipObj = (RelationshipInfo)e.Object; RelationshipNameInfo RelationshipNameObj = RelationshipNameInfo.Provider.Get(RelationshipObj.RelationshipNameId); if (IsCustomAdhocRelationshipName(RelationshipNameObj)) { TreeNode LeftNode = new DocumentQuery().WhereEquals("NodeID", RelationshipObj.LeftNodeId).FirstOrDefault(); if (RelHelper.IsStagingEnabled(LeftNode.NodeSiteID)) { DocumentSynchronizationHelper.LogDocumentChange(LeftNode.NodeSiteName, LeftNode.NodeAliasPath, TaskTypeEnum.UpdateDocument, LeftNode.TreeProvider); } } }
private void ProcessTask_After(object sender, StagingSynchronizationEventArgs e) { if (e.TaskType == TaskTypeEnum.UpdateDocument || e.TaskType == TaskTypeEnum.CreateDocument || e.TaskType == TaskTypeEnum.MoveDocument || e.TaskType == TaskTypeEnum.PublishDocument || e.TaskType == TaskTypeEnum.ArchiveDocument) { // Seems the first table is always the node's table, the table name dose change by the document page type. DataTable NodeTable = e.TaskData.Tables[0]; if (NodeTable != null && NodeTable.Columns.Contains("NodeGuid")) { // Don't want to trigger updates as we set the data in the database, so we won't log synchronziations TreeNode NodeObj = new DocumentQuery().WhereEquals("NodeGUID", NodeTable.Rows[0]["NodeGuid"]).FirstOrDefault(); using (new CMSActionContext() { LogSynchronization = false, LogIntegration = false }) { List <int> NewNodeCategoryIDs = RelHelper.NewBoundObjectIDs(e, TreeCategoryInfo.OBJECT_TYPE, "NodeID", "CategoryID", CategoryInfo.TYPEINFO); // Now handle categories, deleting categories not found, and adding ones that are not set yet. TreeCategoryInfo.Provider.Get().WhereEquals("NodeID", NodeObj.NodeID).WhereNotIn("CategoryID", NewNodeCategoryIDs).ForEachObject(x => x.Delete()); List <int> CurrentCategories = TreeCategoryInfo.Provider.Get().WhereEquals("NodeID", NodeObj.NodeID).Select(x => x.CategoryID).ToList(); foreach (int NewCategoryID in NewNodeCategoryIDs.Except(CurrentCategories)) { TreeCategoryInfo.Provider.Add(NodeObj.NodeID, NewCategoryID); } } if (RelHelper.IsStagingEnabled(NodeObj.NodeSiteID)) { TaskTypeEnum TaskTypeToUse = e.TaskType; switch (e.TaskType) { case TaskTypeEnum.MoveDocument: TaskTypeToUse = TaskTypeEnum.UpdateDocument; break; } // Check if we need to generate a task for a server that isn't the origin server RelHelper.CheckIfTaskCreationShouldOccur(NodeObj.NodeGUID, TaskTypeToUse); } } else { Service.Resolve <IEventLogService>().LogEvent(EventTypeEnum.Error, "RelationshipExended", "No Node Table Found", eventDescription: "First Table in the incoming Staging Task did not contain the Node GUID, could not processes."); } } }