Beispiel #1
0
    //ProjectTeamDataSet ds = new ProjectTeamDataSet();
    //ProjectTeamDataSet.ProjectTeamRow row = ds.ProjectTeam.NewProjectTeamRow();
    //row.PROJ_UID = projectGuid;
    //row.RES_UID = resourceGuid;
    //row.NEW_RES_UID = resourceGuid;
    //ds.ProjectTeam.AddProjectTeamRow(row);
    public void QueueUpdateProjectTeam(Guid sessionUid, Guid projectUid, ProjectTeamDataSet dataset)
    {
        Guid jobUid = Guid.NewGuid();

        try
        {
            this.projectSvc.QueueUpdateProjectTeam(jobUid, sessionUid, projectUid, dataset);
        }
        catch (SoapException soapException)
        {
            List <string> queueErrors = new List <string>();
            queueErrors.Add(soapException.Message);
            Library.PSClientError clientError = new Library.PSClientError(soapException);
            Library.PSErrorInfo[] errors      = clientError.GetAllErrors();
            foreach (Library.PSErrorInfo error in errors)
            {
                queueErrors.Add(error.ErrId.ToString());
            }
        }
    }
        public static string HandleSoapException(SoapException ex)
        {
            PSLibrary.PSClientError error  = new PSLibrary.PSClientError(ex);
            PSLibrary.PSErrorInfo[] errors = error.GetAllErrors();
            string errMess = "==============================\r\nError: \r\n";

            for (int i = 0; i < errors.Length; i++)
            {
                errMess += "\n" + ex.Message.ToString() + "\r\n";
                errMess += "".PadRight(30, '=') + "\r\nPSCLientError Output:\r\n \r\n";
                errMess += errors[i].ErrId.ToString() + "\n";

                for (int j = 0; j < errors[i].ErrorAttributes.Length; j++)
                {
                    errMess += "\r\n\t" + errors[i].ErrorAttributeNames()[j] + ": "
                               + errors[i].ErrorAttributes[j];
                }
                errMess += "\r\n".PadRight(30, '=');
            }
            return(errMess);
        }
Beispiel #3
0
        /// <summary>
        /// Extract a PSClientError object from the ServiceModel.FaultException,
        /// for use in output of the GetPSClientError stack of errors.
        /// </summary>
        /// <param name="e"></param>
        /// <param name="errOut">Shows that FaultException has more information 
        /// about the errors than PSClientError has. FaultException can also contain 
        /// other types of errors, such as failure to connect to the server.</param>
        /// <returns>PSClientError object, for enumerating errors.</returns>
        public static PSLibrary.PSClientError GetPSClientError(FaultException e, 
                                                               out string errOut)
        {
            const string PREFIX = "GetPSClientError() returns null: ";
            errOut = string.Empty;
            PSLibrary.PSClientError psClientError = null;

            if (e == null)
            {
                errOut = PREFIX + "Null parameter (FaultException e) passed in.";
                psClientError = null;
            }
            else
            {
                // Get a ServiceModel.MessageFault object.
                var messageFault = e.CreateMessageFault();

                if (messageFault.HasDetail)
                {
                    using (var xmlReader = messageFault.GetReaderAtDetailContents())
                    {
                        var xml = new XmlDocument();
                        xml.Load(xmlReader);

                        var serverExecutionFault = xml["ServerExecutionFault"];
                        if (serverExecutionFault != null)
                        {
                            var exceptionDetails = serverExecutionFault["ExceptionDetails"];
                            if (exceptionDetails != null)
                            {
                                try
                                {
                                    errOut = exceptionDetails.InnerXml + "\r\n";
                                    psClientError =
                                        new PSLibrary.PSClientError(exceptionDetails.InnerXml);
                                }
                                catch (InvalidOperationException ex)
                                {
                                    errOut = PREFIX + "Unable to convert fault exception info ";
                                    errOut += "a valid Project Server error message. Message: \n\t";
                                    errOut += ex.Message;
                                    psClientError = null;
                                }
                            }
                            else
                            {
                                errOut = PREFIX + "The FaultException e is a ServerExecutionFault, "
                                    + "but does not have ExceptionDetails.";
                            }
                        }
                        else
                        {
                            errOut = PREFIX + "The FaultException e is not a ServerExecutionFault.";
                        }
                    }
                }
                else // No detail in the MessageFault.
                {
                    errOut = PREFIX + "The FaultException e does not have any detail.";
                }
            }
            errOut += "\r\n" + e.ToString() + "\r\n";
            return psClientError;
        }
Beispiel #4
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>");
                }
            });
        }
Beispiel #5
0
        internal static void UpdateLookupTables(LookupTableDataSet lookupTableDataSet)
        {
            using (OperationContextScope scope = new OperationContextScope(lookupTableClient.InnerChannel))
            {
                try
                {
                    WcfHelpers.UseCorrectHeaders(true);
                    lookupTableClient.CheckOutLookupTables(new Guid[] { new Guid(Constants.LOOKUP_ENTITY_ID) });
                    lookupTableClient.UpdateLookupTables(lookupTableDataSet, false, true, 1033);
                    //lookupTableClient.CheckInLookupTables(new Guid[] { new Guid(Constants.LOOKUP_ENTITY_ID) },true);
                }
                catch (SoapException ex)
                {
                    string errMess = "";
                    // Pass the exception to the PSClientError constructor to get
                    // all error information.
                    PSLib.PSClientError psiError = new PSLib.PSClientError(ex);
                    PSLib.PSErrorInfo[] psiErrors = psiError.GetAllErrors();

                    for (int j = 0; j < psiErrors.Length; j++)
                    {
                        errMess += psiErrors[j].ErrId.ToString() + "\n";
                    }
                    errMess += "\n" + ex.Message.ToString();
                    // Send error string to console or message box.
                }
            }
        }
        public void CreateEnterpriseProjectType(string pwaOrigem, string pwaDestino, string nameProjecType, Guid Uid)
        {
            //SvcWorkflow.WorkflowDataSet.EnterpriseProjectTypeDataTable dt = new SvcWorkflow.WorkflowDataSet.EnterpriseProjectTypeDataTable();
            try
            {
                SvcWorkflow.WorkflowClient clientWorkflowOrigem = new SvcWorkflow.WorkflowClient(Binding, endPointAdress(pwaOrigem, "/_vti_bin/psi/Workflow.asmx"));
                clientWorkflowOrigem.ClientCredentials.Windows.ClientCredential = new NetworkCredential(this.User, this.PassWord, this.Domain);

                SvcWorkflow.WorkflowClient clientWorkflowDestino = new SvcWorkflow.WorkflowClient(Binding, endPointAdress(pwaDestino, "/_vti_bin/psi/Workflow.asmx"));
                clientWorkflowDestino.ClientCredentials.Windows.ClientCredential = new NetworkCredential(this.User, this.PassWord, this.Domain);

                SvcWorkflow.WorkflowDataSet dsEnterpriseOrigem   = clientWorkflowOrigem.ReadEnterpriseProjectType(Uid);
                SvcWorkflow.WorkflowDataSet dsEnterpriseDestino  = new SvcWorkflow.WorkflowDataSet();
                SvcWorkflow.WorkflowDataSet dsEnterpriseDestino2 = clientWorkflowDestino.ReadEnterpriseProjectTypeList();

                //SvcWorkflow.WorkflowDataSet.EnterpriseProjectTypePDPsDataTable dtPDP = clientWorkflowOrigem.read

                Guid ENTERPRISE_PROJECT_TYPE_UID = Guid.Empty;

                foreach (SvcWorkflow.WorkflowDataSet.EnterpriseProjectTypeRow itemEnterprise in dsEnterpriseOrigem.EnterpriseProjectType.Rows)
                {
                    SvcWorkflow.WorkflowDataSet.EnterpriseProjectTypeRow oRow = dsEnterpriseDestino.EnterpriseProjectType.NewEnterpriseProjectTypeRow();
                    foreach (DataColumn itemColumn in dsEnterpriseOrigem.EnterpriseProjectType.Columns)
                    {
                        if (!dsEnterpriseDestino.EnterpriseProjectType.Columns.Contains(itemColumn.ToString()))
                        {
                            continue;
                        }

                        if (itemColumn.ToString().Equals("WORKFLOW_ASSOCIATION_UID") || itemColumn.ToString().Equals("WORKFLOW_ASSOCIATION_NAME"))
                        {
                            continue;
                        }

                        var dnsEquals = GetDnsName(pwaOrigem) == GetDnsName(pwaDestino);

                        if (nameProjecType.Length > 0 && itemColumn.ToString().Equals("ENTERPRISE_PROJECT_TYPE_NAME"))
                        {
                            oRow[itemColumn.ToString()] = nameProjecType;
                            continue;
                        }

                        if (itemColumn.ToString().Equals("ENTERPRISE_PROJECT_TYPE_UID"))
                        {
                            ENTERPRISE_PROJECT_TYPE_UID = Guid.Parse(itemEnterprise[itemColumn.ToString()].ToString());
                        }

                        if (itemColumn.ToString().Equals("ENTERPRISE_PROJECT_TYPE_UID") && dnsEquals)
                        {
                            ENTERPRISE_PROJECT_TYPE_UID = Guid.NewGuid();
                            oRow[itemColumn.ToString()] = ENTERPRISE_PROJECT_TYPE_UID;
                            continue;
                        }

                        if (itemColumn.ToString().Equals("ENTERPRISE_PROJECT_WORKSPACE_TEMPLATE_NAME"))
                        {
                            oRow[itemColumn.ToString()] = "ProjectSite#0";
                            continue;
                        }

                        if (itemColumn.ToString().Equals("ENTERPRISE_PROJECT_TYPE_IMAGE_URL"))
                        {
                            oRow[itemColumn.ToString()] = string.Format("/_layouts/15/inc/{0}/images/CenterNormalProject.png", GetPwaName(pwaDestino).Replace("/", string.Empty));
                            continue;
                        }

                        //EnterpriseProjectTypeInvalidWorkspaceTemplateName

                        if (itemEnterprise[itemColumn.ToString()] != null && !itemColumn.ReadOnly)
                        {
                            oRow[itemColumn.ToString()] = itemEnterprise[itemColumn.ToString()];
                        }
                    }
                    dsEnterpriseDestino.EnterpriseProjectType.AddEnterpriseProjectTypeRow(oRow);
                    //dsWorkflow.EnterpriseProjectType.AddEnterpriseProjectTypeRow(oRow);
                }

                foreach (SvcWorkflow.WorkflowDataSet.EnterpriseProjectTypePDPsRow itemPDPs in dsEnterpriseOrigem.EnterpriseProjectTypePDPs.Rows)
                {
                    SvcWorkflow.WorkflowDataSet.EnterpriseProjectTypePDPsRow oRowPDP = dsEnterpriseDestino.EnterpriseProjectTypePDPs.NewEnterpriseProjectTypePDPsRow();
                    foreach (DataColumn itemColumn in dsEnterpriseOrigem.EnterpriseProjectTypePDPs.Columns)
                    {
                        if (itemColumn.ToString().Equals("PDP_UID"))
                        {
                            continue;
                        }

                        if (itemColumn.ToString().Equals("PDP_NAME"))
                        {
                            var oDataRow = dsEnterpriseDestino2.EnterpriseProjectTypePDPs.Select(string.Format("PDP_NAME = '{0}'", itemPDPs[itemColumn.ToString()])).FirstOrDefault();
                            if (oDataRow != null)
                            {
                                oRowPDP["PDP_UID"] = oDataRow["PDP_UID"];
                            }
                            else
                            {
                                var oDataRow2 = dsEnterpriseDestino2.EnterpriseProjectTypePDPs.Select().FirstOrDefault();
                                oRowPDP["PDP_UID"] = oDataRow2["PDP_UID"];
                            }
                        }

                        if (itemColumn.ToString().Equals("ENTERPRISE_PROJECT_TYPE_UID"))
                        {
                            oRowPDP[itemColumn.ToString()] = ENTERPRISE_PROJECT_TYPE_UID;
                            continue;
                        }

                        if (itemPDPs[itemColumn.ToString()] != null && !itemColumn.ReadOnly)
                        {
                            oRowPDP[itemColumn.ToString()] = itemPDPs[itemColumn.ToString()];
                        }
                    }
                    dsEnterpriseDestino.EnterpriseProjectTypePDPs.AddEnterpriseProjectTypePDPsRow(oRowPDP);
                }
                //dsWorkflow.EnterpriseProjectType.AcceptChanges();
                //dsWorkflow.EnterpriseProjectTypePDPs.AcceptChanges();
                clientWorkflowDestino.CreateEnterpriseProjectType(dsEnterpriseDestino);
            }
            catch (SoapException ex)
            {
                string errMess = "";
                // Pass the exception to the PSClientError constructor to
                // get all error information.
                PSLibrary.PSClientError psiError  = new PSLibrary.PSClientError(ex);
                PSLibrary.PSErrorInfo[] psiErrors = psiError.GetAllErrors();

                for (int j = 0; j < psiErrors.Length; j++)
                {
                    errMess += psiErrors[j].ErrId.ToString() + "\n";
                }
                errMess += "\n" + ex.Message.ToString();

                MessageBox.Show(errMess);
                // Send error string to console or message box.
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Metodo para criar as Lookuptable e suas dependencias
        /// </summary>
        /// <param name="pwaDestino">Destino</param>
        /// <param name="itemRow">Item CustomField</param>
        /// <param name="ds">Data Set LookupTable</param>
        public void CreateLooukupTable(string pwaOrigem, string pwaDestino, string pLT_NAME)
        {
            try
            {
                //verificando se já existe a lookuptable no destino
                dsLookupTableDestino = GetLookupTable(pwaDestino);

                DataRow[] dataRowDestino = dsLookupTableDestino.Tables[0].Select("LT_NAME = '" + pLT_NAME + "'");

                if (dataRowDestino.Count() > 0)
                {
                    return;
                }

                if (dsLookupTableOrigem == null)
                {
                    dsLookupTableOrigem = GetLookupTable(pwaOrigem);
                }

                DataRow[] dataRow = dsLookupTableOrigem.Tables[0].Select("LT_NAME = '" + pLT_NAME + "'");

                SvcLookupTable.LookupTableDataSet ltDS = new LookupTableDataSet();

                SvcLookupTable.LookupTableClient clientLookupTable = new LookupTableClient(Binding, endPointAdress(pwaDestino, "/_vti_bin/psi/LookupTable.asmx"));
                clientLookupTable.ClientCredentials.Windows.ClientCredential = new NetworkCredential(this.User, this.PassWord, this.Domain);

                foreach (SvcLookupTable.LookupTableDataSet.LookupTablesRow item in dataRow)
                {
                    SvcLookupTable.LookupTableDataSet.LookupTablesRow ltRow = ltDS.LookupTables.NewLookupTablesRow();
                    Guid LT_UID = Guid.NewGuid();

                    ltRow.LT_UID = LT_UID;

                    ltRow.LT_FILL_ALL_LEVELS = item.LT_FILL_ALL_LEVELS;
                    ltRow.LT_NAME            = item.LT_NAME;

                    if (!item.IsAPP_ENTITY_UIDNull())
                    {
                        ltRow.APP_ENTITY_UID = item.APP_ENTITY_UID;
                    }

                    if (!item.IsLT_PRIMARY_LCIDNull())
                    {
                        ltRow.LT_PRIMARY_LCID = item.LT_PRIMARY_LCID;
                    }

                    if (!item.IsLT_SORT_ORDER_ENUMNull())
                    {
                        ltRow.LT_SORT_ORDER_ENUM = item.LT_SORT_ORDER_ENUM;
                    }

                    ltDS.LookupTables.Rows.Add(ltRow);


                    foreach (SvcLookupTable.LookupTableDataSet.LookupTableMasksRow itemMaskRow in dsLookupTableOrigem.LookupTableMasks.Select("LT_UID = '" + item.LT_UID + "'"))
                    {
                        SvcLookupTable.LookupTableDataSet.LookupTableMasksRow ltMasksRow = ltDS.LookupTableMasks.NewLookupTableMasksRow();
                        foreach (DataColumn itemColumn in dsLookupTableOrigem.LookupTableMasks.Columns)
                        {
                            if (!ltDS.LookupTableMasks.Columns.Contains(itemColumn.ToString()))
                            {
                                continue;
                            }

                            if (itemColumn.ToString() == "LT_UID")
                            {
                                ltMasksRow[itemColumn.ToString()] = LT_UID;
                                continue;
                            }

                            if (itemMaskRow[itemColumn.ToString()] != null && !itemColumn.ReadOnly)
                            {
                                ltMasksRow[itemColumn.ToString()] = itemMaskRow[itemColumn.ToString()];
                            }
                        }

                        //ltMasksRow.LT_MASK_STRUCT_LEVEL = itemMaskRow.LT_MASK_STRUCT_LEVEL;
                        //ltMasksRow.LT_MASK_STRUCT_TYPE_ENUM = itemMaskRow.LT_MASK_STRUCT_TYPE_ENUM;
                        //ltMasksRow.LT_MASK_STRUCT_LENGTH = itemMaskRow.LT_MASK_STRUCT_LENGTH;
                        //ltMasksRow.LT_MASK_VALUE_SEPARATOR = itemMaskRow.LT_MASK_VALUE_SEPARATOR;

                        ltDS.LookupTableMasks.Rows.Add(ltMasksRow);
                    }



                    foreach (SvcLookupTable.LookupTableDataSet.LookupTableTreesRow itemTreesRow in dsLookupTableOrigem.LookupTableTrees.Select("LT_UID = '" + item.LT_UID + "'"))
                    {
                        //ltTreesRow.LT_UID = ltDS.LookupTables[0].LT_UID;
                        SvcLookupTable.LookupTableDataSet.LookupTableTreesRow ltTreesRow = ltDS.LookupTableTrees.NewLookupTableTreesRow();
                        foreach (DataColumn itemColumn in dsLookupTableOrigem.LookupTableTrees.Columns)
                        {
                            if (!ltDS.LookupTableTrees.Columns.Contains(itemColumn.ToString()))
                            {
                                continue;
                            }

                            //if (itemColumn.ToString() == "LT_STRUCT_UID")
                            //{
                            //    ltTreesRow[itemColumn.ToString()] = Guid.NewGuid();
                            //    continue;
                            //}

                            if (itemColumn.ToString() == "LT_UID")
                            {
                                ltTreesRow[itemColumn.ToString()] = LT_UID;
                                continue;
                            }


                            if (itemTreesRow[itemColumn.ToString()] != null && !itemColumn.ReadOnly)
                            {
                                ltTreesRow[itemColumn.ToString()] = itemTreesRow[itemColumn.ToString()];
                            }
                        }

                        ltDS.LookupTableTrees.Rows.Add(ltTreesRow);
                    }

                    try
                    {
                        bool validateOnly = false;
                        bool autoCheckIn  = true;

                        clientLookupTable.CreateLookupTables(ltDS, validateOnly, autoCheckIn);
                    }
                    catch (SoapException ex)
                    {
                        string errMess = "";
                        // Pass the exception to the PSClientError constructor to
                        // get all error information.
                        PSLibrary.PSClientError psiError  = new PSLibrary.PSClientError(ex);
                        PSLibrary.PSErrorInfo[] psiErrors = psiError.GetAllErrors();

                        for (int j = 0; j < psiErrors.Length; j++)
                        {
                            errMess += psiErrors[j].ErrId.ToString() + "\n";
                        }
                        errMess += "\n" + ex.Message.ToString();

                        MessageBox.Show(errMess);
                        // Send error string to console or message box.
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Metodo para criar o Custom Field no Detino
        /// </summary>
        /// <param name="source">Origem</param>
        /// <param name="target">Destino</param>
        /// <param name="field">Nome CustomField</param>
        public void CreateCustomField(string source, string target, string field, string lookupTable)
        {
            CustomFieldDataSet cfDS = new CustomFieldDataSet();
            var RowField            = this.dsGenerico.Tables[0].Select("MD_PROP_NAME ='" + field + "'").CopyToDataTable();

            SvcCustomFields.CustomFieldsClient fieldTarget = new CustomFieldsClient(Binding, endPointAdress(target, "/_vti_bin/psi/CustomFields.asmx"));
            fieldTarget.ClientCredentials.Windows.ClientCredential = new NetworkCredential(this.User, this.PassWord, this.Domain);

            Guid cfUid = Guid.NewGuid();

            foreach (DataRow item in RowField.Rows)
            {
                SvcCustomFields.CustomFieldDataSet.CustomFieldsRow cfRow = cfDS.CustomFields.NewCustomFieldsRow();

                foreach (DataColumn itemColumn in RowField.Columns)
                {
                    if (!cfDS.CustomFields.Columns.Contains(itemColumn.ToString()))
                    {
                        continue;
                    }

                    if (itemColumn.ToString() == "MD_LOOKUP_TABLE_UID" && lookupTable != string.Empty)
                    {
                        var  lt     = GetLookupTable(target).Tables[0].Select("LT_NAME ='" + lookupTable + "'").CopyToDataTable();
                        Guid lt_Uid = Guid.Parse(lt.Rows[0]["LT_UID"].ToString());
                        cfRow[itemColumn.ToString()] = lt_Uid;
                        continue;
                    }

                    if (itemColumn.ToString().Equals("MD_PROP_UID"))
                    {
                        cfRow[itemColumn.ToString()] = cfUid;
                        continue;
                    }

                    if (itemColumn.ToString().Equals("MD_PROP_DEFAULT_VALUE"))
                    {
                        continue;
                    }

                    if (item[itemColumn.ToString()] != null && !itemColumn.ReadOnly)
                    {
                        cfRow[itemColumn.ToString()] = item[itemColumn.ToString()];
                    }
                }
                cfDS.CustomFields.Rows.Add(cfRow);
            }

            try
            {
                bool validateOnly = false;
                bool autoCheckIn  = true;
                fieldTarget.CreateCustomFields(cfDS, validateOnly, autoCheckIn);
            }
            catch (SoapException ex)
            {
                string errMess = "";
                PSLibrary.PSClientError psiError  = new PSLibrary.PSClientError(ex);
                PSLibrary.PSErrorInfo[] psiErrors = psiError.GetAllErrors();

                for (int j = 0; j < psiErrors.Length; j++)
                {
                    errMess += psiErrors[j].ErrId.ToString() + "\n";
                }
                errMess += "\n" + ex.Message.ToString();
                throw ex;
            }
        }
        /// <summary>
        /// Create a hierarchical text lookup table, with code masks and values.
        /// </summary>
        /// <param name="lookupTable">SvcLookupTable.LookupTable object</param>
        /// <param name="ltName">Name of the lookup table</param>
        /// <param name="maskSequence">Array of code mask sequences and separator characters</param>
        /// <param name="maskValues"></param>
        /// <param name="ltValues">Array of lookup table values: Name, description, level, default</param>
        /// <param name="ltRowDefaultUid">GUID of default value (out)</param>
        /// <returns>GUID of lookup table</returns>
        public Guid CreateLookupTable(
            SvcLookupTable.LookupTable lookupTable,
            string ltName,
            byte[] maskSequence,
            string[,] maskValues,
            string[,] ltValues,
            out Guid ltRowDefaultUid)
        {
            // Além região variáveis ​​método, há três regiões
            // Com um bloco try-catch:
            // 1. Criar linhas de tabela de pesquisa com máscaras de código em um LookupTableDataSet
            // 2 Adicionar valores herarchical para cada linha na tabela de pesquisa
            // 3. CreateLookupTables chamada com o LookupTableDataSet

            const string ANY     = "any";
            const string DEFAULT = "default";

            #region Method variables
            int    levelLength;
            string sLevelLength;
            bool   error = false;

            // Save the return GUIDS for lookup table and default value (if any)
            Guid[] returnIds = new Guid[2];
            int    numLtRows = ltValues.Length / 4;   // There are 4 strings for each lookup table row
            int    maxLevels = maskValues.Length / 2; // There are 2 strings for each mask level

            if (maxLevels != maskSequence.Length || maxLevels > 5)
            {
                // Error: The number of rows in the maskSequence and maskValues arrays must be the same.
                //        The hierarchical levels can't be more than five levels deep.
                ltRowDefaultUid = Guid.Empty;
                return(Guid.Empty);
            }
            int[]  parentIndex = new int[numLtRows];  // Index of each lookup table row parent
            Guid[] parentUid   = new Guid[numLtRows]; // Parent GUIDs of lookup table tree rows

            for (int i = 0; i < numLtRows; i++)
            {
                parentIndex[i] = Convert.ToInt32(ltValues[i, 2]);
            }

            SvcLookupTable.LookupTableDataSet lookupTableDataSet =
                new SvcLookupTable.LookupTableDataSet();
            #endregion

            #region Criar uma linha da tabela de pesquisa com máscaras de código
            try
            {
                //Criar uma linha da tabela de pesquisa a partir da instância LookupTableDataSet
                SvcLookupTable.LookupTableDataSet.LookupTablesRow lookupTableRow =
                    lookupTableDataSet.LookupTables.NewLookupTablesRow();

                Guid lookupTableGuid = Guid.NewGuid();
                // Set the lookup table ID
                returnIds[0] = lookupTableGuid;

                lookupTableRow.LT_UID             = lookupTableGuid;
                lookupTableRow.LT_NAME            = ltName;
                lookupTableRow.LT_SORT_ORDER_ENUM =
                    (byte)PSLibrary.LookupTables.SortOrder.Ascending;

                lookupTableDataSet.LookupTables.Rows.Add(lookupTableRow);

                // Create the code mask and rows
                SvcLookupTable.LookupTableDataSet.LookupTableMasksDataTable masksDataTable =
                    new SvcLookupTable.LookupTableDataSet.LookupTableMasksDataTable();

                SvcLookupTable.LookupTableDataSet.LookupTableMasksRow ltMasksRow =
                    masksDataTable.NewLookupTableMasksRow();

                for (int level = 0; level < maxLevels; level++)
                {
                    sLevelLength = maskValues[level, 0];
                    if (string.Compare(sLevelLength, ANY, true) == 0)
                    {
                        levelLength = PSLibrary.LookupTables.ANY_LENGTH_SEQUENCE;
                    }
                    else
                    {
                        levelLength = Convert.ToInt32(maskValues[level, 0]);
                    }

                    ltMasksRow = CreateLookupTableMasksRow(
                        lookupTableDataSet,
                        level + 1,
                        maskSequence[level],
                        levelLength,
                        maskValues[level, 1]);
                    lookupTableDataSet.LookupTableMasks.Rows.Add(ltMasksRow);
                }
            }
            catch (DataException ex)
            {
                // Add exception handler for ex
                error = true;
            }
            catch (SoapException ex)
            {
                // Add exception handler for ex
                error = true;
            }
            #endregion

            #region Add values to each row
            // Add the lookup table values
            try
            {
                SvcLookupTable.LookupTableDataSet.LookupTableTreesRow ltTreeRow =
                    lookupTableDataSet.LookupTableTrees.NewLookupTableTreesRow();

                if (!error)
                {
                    int    thisNode;
                    int    nextNode;
                    int    indexDiff;                      // Difference in levels between nodes
                    int    rowLevel;                       // Level of the current row
                    Guid   rowUid;                         // GUID of the current level
                    Guid[] previousLevelUid = new Guid[4]; // GUIDs of up to five previous levels
                                                           //     [0]: level 1; ... ; [4]: level 5
                    parentUid[0] = Guid.Empty;             // Initialize the first parentUid

                    for (int row = 0; row < numLtRows; row++)
                    {
                        rowUid   = Guid.NewGuid();
                        thisNode = row;
                        nextNode = thisNode + 1;
                        rowLevel = parentIndex[row];
                        previousLevelUid[rowLevel] = rowUid;  // Reset the previous level

                        ltTreeRow = AddLookupTableValues(
                            lookupTableDataSet,
                            parentUid[row],        // Parent GUID
                            rowUid,                // Current row GUID
                            ltValues[row, 0],      // Value
                            ltValues[row, 1]       // Description
                            );
                        // Set the parentUid of the next node.
                        if (row < numLtRows - 1)
                        {
                            if (parentIndex[nextNode] == 0)
                            {
                                parentUid[nextNode] = Guid.Empty;
                            }
                            else
                            {
                                indexDiff = parentIndex[nextNode] - parentIndex[thisNode];
                                switch (indexDiff)
                                {
                                case 1:
                                    parentUid[nextNode] = rowUid;
                                    break;

                                case 0:
                                    parentUid[nextNode] = parentUid[thisNode];
                                    break;

                                case -1:
                                case -2:
                                case -3:
                                    indexDiff          -= 1;
                                    parentUid[nextNode] = previousLevelUid[rowLevel + indexDiff];
                                    break;
                                }
                            }
                        }
                        // Check for the default GUID
                        if (ltValues[row, 3] == DEFAULT)
                        {
                            returnIds[1] = rowUid;
                        }
                        lookupTableDataSet.LookupTableTrees.Rows.Add(ltTreeRow);
                    }
                }
            }
            catch (SoapException ex)
            {
                // Add exception handler for ex
                error = true;
            }
            catch (Exception ex)
            {
                // Add exception handler for ex
                error = true;
            }
            #endregion

            #region Create and return the lookup table
            try
            {
                if (!error)
                {
                    bool validateOnly = false;
                    bool autoCheckIn  = true;
                    lookupTable.CreateLookupTables(lookupTableDataSet,
                                                   validateOnly, autoCheckIn);
                }
            }
            catch (SoapException ex)
            {
                string errMess = "";
                // Pass the exception to the PSClientError constructor to get
                // all error information.
                PSLibrary.PSClientError psiError  = new PSLibrary.PSClientError(ex);
                PSLibrary.PSErrorInfo[] psiErrors = psiError.GetAllErrors();

                for (int j = 0; j < psiErrors.Length; j++)
                {
                    errMess += psiErrors[j].ErrId.ToString() + "\n";
                }
                errMess += "\n" + ex.Message.ToString();
                // Send error string to console or message box.

                error = true;
            }
            if (error)
            {
                returnIds[0] = Guid.Empty;
                returnIds[1] = Guid.Empty;
            }
            ltRowDefaultUid = returnIds[1];
            return(returnIds[0]);

            #endregion
        }