コード例 #1
0
        public void ImportListToFolder(string ektronConnectionId, string sharepointConnectionId, long folderId, MappingTask map, bool isDeleteallowed, int languageid)
        {
            Log.WriteVerbose(string.Format(BeginLogMessage, CLASS_NAME, "ImportListToFolder(string ektronConnectionId, string sharepointConnectionId, string objectDefinitionId, long folderId, List<ObjectInstance> objectinstancelist, Dictionary<string, string> SharePointFieldToMetaId = null)"));
            TaskManagerClient taskClient = new TaskManagerClient();
            EventManagerClient eventClient = new EventManagerClient();

            string workflowName = string.Empty;
            if (isDeleteallowed)
                workflowName = string.Concat("SharepointDeleteAllowed|Ektron|", map.SourceObject.Id, "|", folderId, "|ListDependant;" + languageid);
            else
                workflowName = string.Concat("Sharepoint|Ektron|", map.SourceObject.Id, "|", folderId, "|ListDependant;" + languageid);

            //check workflow and delete if it already exists.
            DxhWorkflow workflow = taskClient.GetWorkflow(workflowName);
            if (workflow != null)
            {
                taskClient.DeleteWorkflow(workflowName);
            }

            //1. Create workflow tasks
            LoginTask login = taskClient.CreateLoginTask("Ektron", ektronConnectionId);
            SaveObjectInstanceTask saveSharepointToEktron = taskClient.CreateSaveObjectTask("Ektron");
            LogoutTask logout = taskClient.CreateLogoutTask("Ektron");

            //2. Assemble and save workflow
            workflow = taskClient.CreateWorkflow(workflowName);
            ((ICollection<ContextBusTask>)workflow.Tasks).Add(login);
            ((ICollection<ContextBusTask>)workflow.Tasks).Add(map);
            ((ICollection<ContextBusTask>)workflow.Tasks).Add(saveSharepointToEktron);
            ((ICollection<ContextBusTask>)workflow.Tasks).Add(logout);
            taskClient.SaveWorkflow(workflow);
            DxHUtils.SaveMapping(AdapterName, sharepointConnectionId, map, workflow, Ektron.Cms.Common.EkEnumeration.CMSObjectTypes.Folder, folderId, "", languageid);

            //3. Create associated Event Defintions for workflow.
            EventDefinition eventDef = new EventDefinition()
            {
                Id = workflowName,
                Payload = map.SourceObject
            };
            eventClient.AssociateWorkflowsToEvent(new List<string> { workflow.WorkflowName }, eventDef);

            if (this.GetListType(map.SourceObject.Id).ToLower() == "list")
            {
                eventDef = new EventDefinition()
                {
                    Id = string.Concat("SP|List|SPReceiverEvent|", this.GetSiteUrlandListTitle(map.SourceObject.Id)),
                    Payload = map.SourceObject
                };
                eventClient.AssociateWorkflowsToEvent(new List<string> { workflow.WorkflowName }, eventDef);

                eventDef = new EventDefinition()
                {
                    Id = string.Concat("SP|ListItemAttachment|SPReceiverEvent|", this.GetSiteUrlandListTitle(map.SourceObject.Id)),
                    Payload = map.SourceObject
                };
                eventClient.AssociateWorkflowsToEvent(new List<string> { workflow.WorkflowName }, eventDef);
            }
            else if (this.GetListType(map.SourceObject.Id).ToLower() == "documentlibrary")
            {

                eventDef = new EventDefinition()
                {
                    Id = string.Concat("SP|DocumentLibrary|SPReceiverEvent|", this.GetSiteUrlandListTitle(map.SourceObject.Id)),
                    Payload = map.SourceObject
                };
                eventClient.AssociateWorkflowsToEvent(new List<string> { workflow.WorkflowName }, eventDef);
            }

            if (isDeleteallowed)
            {
                string deleteworkflowname = string.Concat("SharepointDelete|Ektron|", map.SourceObject.Id, "|", folderId, "|ListDependant;" + languageid);
                DxhWorkflow deleteworkflow = taskClient.GetWorkflow(deleteworkflowname);
                if (deleteworkflow != null)
                {
                    taskClient.DeleteWorkflow(deleteworkflowname);
                }

                // Create Delete Workflow Tasks
                LoginTask deletelogin = taskClient.CreateLoginTask("Ektron", ektronConnectionId);
                DeleteObjectInstanceTask deleteObjecttask = taskClient.CreateDeleteObjectTask("Ektron");
                LogoutTask deletelogout = taskClient.CreateLogoutTask("Ektron");

                //Assemble the Workflow
                deleteworkflow = taskClient.CreateWorkflow(deleteworkflowname);
                ((ICollection<ContextBusTask>)deleteworkflow.Tasks).Add(deletelogin);
                ((ICollection<ContextBusTask>)deleteworkflow.Tasks).Add(map);
                ((ICollection<ContextBusTask>)deleteworkflow.Tasks).Add(deleteObjecttask);
                ((ICollection<ContextBusTask>)deleteworkflow.Tasks).Add(deletelogout);
                taskClient.SaveWorkflow(deleteworkflow);

                eventDef = new EventDefinition()
                {
                    Id = string.Concat("SPReceiverEvent|Delete|", this.GetSiteUrlandListTitle(map.SourceObject.Id)),
                    Payload = map.SourceObject
                };
                eventClient.AssociateWorkflowsToEvent(new List<string> { deleteworkflow.WorkflowName }, eventDef);
            }

            ////4. Retrieve Sharepoint items and raise event for each one.
            SharePointClientImportHelper.GetInstance().StartImport(sharepointConnectionId, AdapterName, workflowName, map.SourceObject);

            Log.WriteVerbose(string.Format(FinishLogMessage, CLASS_NAME, "ImportListToFolder(string ektronConnectionId, string sharepointConnectionId, string objectDefinitionId, long folderId, List<ObjectInstance> objectinstancelist, Dictionary<string, string> SharePointFieldToMetaId = null)"));
        }
コード例 #2
0
        public void ImportItemsToFolderWithOutListDependency(string ektronConnectionId, string sharepointConnectionId, string objectDefinitionId, long folderId, ConcurrentDictionary<int, MappingTask> listIdWithMappingTask, bool isDeleteallowed, int languageid)
        {
            Log.WriteVerbose(string.Format(BeginLogMessage, CLASS_NAME, "ImportItemsToFolderWithOutListDependency(string ektronConnectionId, string sharepointConnectionId, string objectDefinitionId, long folderId, IEnumerable<int> objectsharepointIdList)"));
            foreach (var listAndMapping in listIdWithMappingTask)
            {

                List<ObjectInstance> objectinstancelist = this.GetFilteredObjectInstanceList(sharepointConnectionId, listAndMapping.Value.SourceObject, new List<int>() { listAndMapping.Key });

                TaskManagerClient taskClient = new TaskManagerClient();
                EventManagerClient eventClient = new EventManagerClient();

                foreach (ObjectInstance item in objectinstancelist)
                {

                    string id = item.Fields.Single(p => p.Id.ToLower().Equals("id")).Value.ToString();

                    string workflowName = string.Empty;
                    if (isDeleteallowed)
                        workflowName = string.Concat("SharepointDeleteAllowed|Ektron|", objectDefinitionId, "|", folderId, "|ItemDependant|" + id + ";" + languageid);
                    else
                        workflowName = string.Concat("Sharepoint|Ektron|", objectDefinitionId, "|", folderId, "|ItemDependant|" + id + ";" + languageid);

                    //check workflow and delete if it already exists.
                    DxhWorkflow workflow = taskClient.GetWorkflow(workflowName);
                    if (workflow != null)
                    {
                        taskClient.DeleteWorkflow(workflowName);
                    }

                    //1. Create workflow tasks
                    LoginTask login = taskClient.CreateLoginTask("Ektron", ektronConnectionId);
                    SaveObjectInstanceTask saveSharepointToEktron = taskClient.CreateSaveObjectTask("Ektron");
                    LogoutTask logout = taskClient.CreateLogoutTask("Ektron");

                    //2. Assemble and save workflow
                    workflow = taskClient.CreateWorkflow(workflowName);
                    ((ICollection<ContextBusTask>)workflow.Tasks).Add(login);
                    ((ICollection<ContextBusTask>)workflow.Tasks).Add(listAndMapping.Value);
                    ((ICollection<ContextBusTask>)workflow.Tasks).Add(saveSharepointToEktron);
                    ((ICollection<ContextBusTask>)workflow.Tasks).Add(logout);
                    taskClient.SaveWorkflow(workflow);
                    DxHUtils.SaveMapping(AdapterName, sharepointConnectionId, listAndMapping.Value, workflow, Ektron.Cms.Common.EkEnumeration.CMSObjectTypes.Folder, folderId, "", languageid);

                    //3. Create associated Event Defintions for workflow.
                    EventDefinition eventDef = new EventDefinition()
                    {
                        Id = workflowName,
                        Payload = listAndMapping.Value.SourceObject
                    };
                    eventClient.AssociateWorkflowsToEvent(new List<string> { workflow.WorkflowName }, eventDef);

                    if (this.GetListType(objectDefinitionId).ToLower() == "list")
                    {
                        eventDef = new EventDefinition()
                        {
                            Id = string.Concat("SP|List|SPReceiverEvent|", this.GetSiteUrlandListTitle(objectDefinitionId)),
                            Payload = listAndMapping.Value.SourceObject
                        };
                        eventClient.AssociateWorkflowsToEvent(new List<string> { workflow.WorkflowName }, eventDef);

                        eventDef = new EventDefinition()
                        {
                            Id = string.Concat("SP|ListItemAttachment|SPReceiverEvent|", this.GetSiteUrlandListTitle(objectDefinitionId)),
                            Payload = listAndMapping.Value.SourceObject
                        };
                        eventClient.AssociateWorkflowsToEvent(new List<string> { workflow.WorkflowName }, eventDef);
                    }
                    else if (this.GetListType(objectDefinitionId).ToLower() == "documentlibrary")
                    {

                        eventDef = new EventDefinition()
                        {
                            Id = string.Concat("SP|DocumentLibrary|SPReceiverEvent|", this.GetSiteUrlandListTitle(objectDefinitionId)),
                            Payload = listAndMapping.Value.SourceObject
                        };
                        eventClient.AssociateWorkflowsToEvent(new List<string> { workflow.WorkflowName }, eventDef);
                    }

                    if (isDeleteallowed)
                    {
                        string deleteworkflowname = string.Concat("SharepointDelete|Ektron|", objectDefinitionId, "|", folderId, "|ItemDependant|" + id + ";" + languageid);
                        DxhWorkflow deleteworkflow = taskClient.GetWorkflow(deleteworkflowname);
                        if (deleteworkflow != null)
                        {
                            taskClient.DeleteWorkflow(deleteworkflowname);
                        }

                        // Create Delete Workflow Tasks
                        LoginTask deletelogin = taskClient.CreateLoginTask("Ektron", ektronConnectionId);
                        DeleteObjectInstanceTask deleteObjecttask = taskClient.CreateDeleteObjectTask("Ektron");
                        LogoutTask deletelogout = taskClient.CreateLogoutTask("Ektron");

                        //Assemble the Workflow
                        deleteworkflow = taskClient.CreateWorkflow(deleteworkflowname);
                        ((ICollection<ContextBusTask>)deleteworkflow.Tasks).Add(deletelogin);
                        ((ICollection<ContextBusTask>)deleteworkflow.Tasks).Add(listAndMapping.Value);
                        ((ICollection<ContextBusTask>)deleteworkflow.Tasks).Add(deleteObjecttask);
                        ((ICollection<ContextBusTask>)deleteworkflow.Tasks).Add(deletelogout);
                        taskClient.SaveWorkflow(deleteworkflow);

                        eventDef = new EventDefinition()
                        {
                            Id = string.Concat("SPReceiverEvent|Delete|", this.GetSiteUrlandListTitle(objectDefinitionId)),
                            Payload = listAndMapping.Value.SourceObject
                        };
                        eventClient.AssociateWorkflowsToEvent(new List<string> { deleteworkflow.WorkflowName }, eventDef);
                    }

                    item.Fields.Where(p => p.Id.Equals("DxHSource")).FirstOrDefault().Value = "FromEktron";
                    EventInstance itemEvent = new EventInstance()
                    {
                        Id = workflowName,
                        Payload = item
                    };
                    eventClient.RaiseEvent(itemEvent);
                }
                Log.WriteVerbose(string.Format(FinishLogMessage, CLASS_NAME, "ImportItemsToFolderWithOutListDependency(string ektronConnectionId, string sharepointConnectionId, string objectDefinitionId, long folderId, IEnumerable<int> objectsharepointIdList)"));
            }
        }