Example #1
0
        protected void Button1_Click(object sender, EventArgs e)
        {
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                try
                {
                    // Get the template Guid from the selected item in the list
                    Guid templateGuid = new Guid(ListBox1.SelectedValue);

                    SPWeb spWeb = SPContext.Current.Web;
                    {
                        // Create instance of Project
                        WebSvcProject.Project project = new WebSvcProject.Project();
                        project.Url = ViewState["siteURL"] + "/_vti_bin/psi/project.asmx";
                        project.UseDefaultCredentials = true;

                        // Guid for new project
                        Guid newProjectGuid = Guid.NewGuid();

                        if (templateGuid == Guid.Empty)
                        {
                            WebSvcProject.ProjectDataSet dsProjectDataSet      = new WebSvcProject.ProjectDataSet();
                            WebSvcProject.ProjectDataSet.ProjectRow projectRow = dsProjectDataSet.Project.NewProjectRow();
                            projectRow.PROJ_UID             = newProjectGuid;
                            projectRow.PROJ_NAME            = ViewState["projectName"].ToString();
                            projectRow.PROJ_INFO_START_DATE = System.DateTime.Now;
                            projectRow.PROJ_TYPE            = 0; //0 is for project and 1 is for template
                            dsProjectDataSet.Project.AddProjectRow(projectRow);

                            //create a project
                            Guid job = Guid.NewGuid();
                            project.QueueCreateProject(job, dsProjectDataSet, false);
                            WaitForQueue(job);

                            job = Guid.NewGuid();
                            project.QueuePublish(job, newProjectGuid, true, spWeb.Url);
                            WaitForQueue(job);
                        }
                        else
                        {
                            SPSecurity.RunWithElevatedPrivileges(delegate()
                            {
                                Guid owner     = getResourceUid();
                                newProjectGuid = project.CreateProjectFromTemplate(templateGuid, ViewState["projectName"].ToString());

                                WebSvcProject.ProjectDataSet templateProject;
                                Guid jobGuid     = Guid.NewGuid();
                                Guid sessionGuid = Guid.NewGuid();

                                project.CheckOutProject(newProjectGuid, sessionGuid, "");
                                templateProject = project.ReadProject(newProjectGuid, WebSvcProject.DataStoreEnum.WorkingStore);
                                WebSvcProject.ProjectDataSet temp = ((WebSvcProject.ProjectDataSet)(templateProject.Copy()));


                                temp.Tables[temp.Project.TableName].Rows[0][temp.Project.ProjectOwnerIDColumn] = owner;
                                WebSvcProject.ProjectDataSet updateProjectDataSet = new WebSvcProject.ProjectDataSet();
                                updateProjectDataSet.Project.Merge(temp.Tables[temp.Project.TableName], true);
                                updateProjectDataSet = ((WebSvcProject.ProjectDataSet)updateProjectDataSet.GetChanges(DataRowState.Modified));

                                project.QueueUpdateProject(jobGuid, sessionGuid, updateProjectDataSet, false);
                                WaitForQueue(jobGuid);

                                jobGuid = Guid.NewGuid();
                                project.QueueCheckInProject(jobGuid, newProjectGuid, true, sessionGuid, "");
                                WaitForQueue(jobGuid);
                            });
                        }

                        SPList list = spWeb.Lists["Project Center"];
                        spWeb.AllowUnsafeUpdates = true;
                        // Find the item by ID
                        SPListItem item = list.Items.GetItemById(itemId);
                        // Set the new project Guid in the List
                        item["projectguid"] = newProjectGuid;
                        item.SystemUpdate();
                        pwaUrl      = ViewState["siteURL"].ToString();
                        projectName = item.Title;
                        // Add record to PublisherCheck Table
                        InsertRowIntoPublisherCheck(newProjectGuid);

                        pnlOpenProject.Visible = true;
                        pnlNewProject.Visible  = false;

                        string url    = pwaUrl + "/Project%20Detail%20Pages/Schedule.aspx?ProjUid=" + newProjectGuid + "&isDlg=1";
                        string source = Request["source"];
                        if (source != null && source != "")
                        {
                            if (url.Contains("?"))
                            {
                                url += "&source=" + source;
                            }
                            else
                            {
                                url += "?source=" + source;
                            }
                        }
                        Response.Redirect(url);
                    }
                }
                catch (SoapException ex)
                {
                    PSLibrary.PSClientError error  = new PSLibrary.PSClientError(ex);
                    PSLibrary.PSErrorInfo[] errors = error.GetAllErrors();
                    string errMess = "Error: ";
                    for (int i = 0; i < errors.Length; i++)
                    {
                        errMess += ex.Message.ToString() + "  ";
                        errMess += "PSCLientError Output: ";
                        errMess += errors[i].ErrId.ToString() + "  ";

                        for (int j = 0; j < errors[i].ErrorAttributes.Length; j++)
                        {
                            errMess += "  " + errors[i].ErrorAttributeNames()[j] + ": " + errors[i].ErrorAttributes[j];
                        }
                    }
                    lblError.Text = errMess;
                }
                catch (WebException ex)
                {
                    string errMess = ex.Message.ToString() +
                                     "\n\nLog on, or check the Project Server Queuing Service";
                    ClientScript.RegisterClientScriptBlock(this.GetType(), "Error", "<script language='javascript'>alert('" + errMess + "');</script>");
                }
                catch (Exception ex)
                {
                    ClientScript.RegisterClientScriptBlock(this.GetType(), "Error", "<script language='javascript'>alert('" + ex.Message + "');</script>");
                }
            });
        }