Метод Security.CreateProjectCategories
Создание категории проекта для веб-безопасности.
Пространство имен: WebSvcSecurity
Сборка: ProjectServerServices (в ProjectServerServices.dll)
Синтаксис
'Декларация
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Security/CreateProjectCategories", RequestNamespace := "https://schemas.microsoft.com/office/project/server/webservices/Security/", _
ResponseNamespace := "https://schemas.microsoft.com/office/project/server/webservices/Security/", _
Use := SoapBindingUse.Literal, ParameterStyle := SoapParameterStyle.Wrapped)> _
Public Sub CreateProjectCategories ( _
categories As SecurityProjectCategoriesDataSet _
)
'Применение
Dim instance As Security
Dim categories As SecurityProjectCategoriesDataSet
instance.CreateProjectCategories(categories)
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Security/CreateProjectCategories", RequestNamespace = "https://schemas.microsoft.com/office/project/server/webservices/Security/",
ResponseNamespace = "https://schemas.microsoft.com/office/project/server/webservices/Security/",
Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
public void CreateProjectCategories(
SecurityProjectCategoriesDataSet categories
)
Параметры
- categories
Тип: WebSvcSecurity.SecurityProjectCategoriesDataSet
Замечания
Функция разрешения Project позволяет пользователям или группам, которым предоставлено разрешение категории «Управление безопасностью базового проекта» для предоставления доступа пользователей и групп для проектов, которые им принадлежат. Они работают как категории безопасности. Для получения дополнительных сведений см https://blogs.msdn.com/b/project/archive/2010/03/04/project-2010-project-permissions.aspx[](https://blogs.msdn.com/b/project/archive/2010/03/04/project-2010-project-permissions.aspx)
Разрешения Project Server
Разрешение |
Описание |
---|---|
Нестандартные |
Необходимо иметь глобальное разрешение ManageWorkflow или ChangeWorkflow глобальное разрешение. Если у вас есть разрешения на ChangeWorkflow , необходимо также иметь разрешение категории OpenProject и разрешение категории SaveProject . |
Примеры
The example uses the SvcSecurity namespace in the ProjectServerServices.dll proxy assembly. The ConfigureClientEndPoints method uses an app.config file for setting the WCF binding, behavior, and endpoint. For information about creating a PSI proxy assembly and an app.config file, see Необходимые условия для примеров кода на основе WCF в Project 2013.
Примечание
В этом примере предполагается, что проект не имеет какой-либо категории, назначенные ему.
В примере вызывается метод ReadProjectList для получения списка проектов. Он вызывает CreateProjectCategories для создания ProjectCategoriesDataset и записывает в файл XML Categories.xml, как показано в следующем коде.
<?xml version="1.0" standalone="yes"?>
<SecurityProjectCategoriesDataSet xmlns="https://schemas.microsoft.com/office/project/server/
webservices/SecurityProjectCategoriesDataSet/">
<ProjectCategories>
<WSEC_CAT_UID>
321f7584-1f8b-4065-a432-a59b9412d8ba</WSEC_CAT_UID>
<PROJ_UID>ff9c1198-fb7b-4e9d-88a9-1415d46a3443</PROJ_UID>
</ProjectCategories>
</SecurityProjectCategoriesDataSet>
Метод UpdateProjectCategories вызывается для обновления ProjectCategoriesDataset. Обновленный набор данных записывается в файл UpdatedCategories.xml , как показано в следующем фрагменте.
<?xml version="1.0" standalone="yes"?>
<SecurityProjectCategoriesDataSet xmlns="https://schemas.microsoft.com/office/project/server/
webservices/SecurityProjectCategoriesDataSet/">
<ProjectCategories>
<WSEC_CAT_UID>
8ce0a52b-6218-4670-bf53-8e8df21af590</WSEC_CAT_UID>
<PROJ_UID>aed0e69b-4470-4ddb-b063-184a9c06c9de</PROJ_UID>
</ProjectCategories>
</SecurityProjectCategoriesDataSet>
Метод DeleteProjectCategories принимает массив идентификаторов GUID проекта и удаляет записи в ProjectCategoriesDataset. Ниже приведен полный пример кода.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.ServiceModel;
namespace Microsoft.SDK.Project.Samples.Security
{
class Security
{
private const string ENDPOINT_S = "basicHttp_Security";
private const string ENDPOINT_P = "basicHttp_Project";
private const string OUTPUT_FILES = @"C:\Projects\Samples\Output\";
private static string outFilePathCategories;
private static string outFilePathUpdatedCategories;
private static SvcSecurity.SecurityClient securityClient;
private static SvcProject.ProjectClient projectClient;
static void Main(string[] args)
{
// If directory does not exist, create it.
if (!Directory.Exists(OUTPUT_FILES))
{
Directory.CreateDirectory(OUTPUT_FILES);
}
// Assign the path where the output XML file will be saved.
outFilePathCategories = OUTPUT_FILES + "Categories.xml";
outFilePathUpdatedCategories = OUTPUT_FILES + "UpdatedCategories.xml";
// Configure the endpoints.
bool configResult = false;
configResult = ConfigClientEndpoints(ENDPOINT_P);
configResult = ConfigClientEndpoints(ENDPOINT_S);
try
{
// Create a project DataSet.
SvcProject.ProjectDataSet pDS = new SvcProject.ProjectDataSet();
pDS = projectClient.ReadProjectList();
// Create a project category.
SvcSecurity.SecurityProjectCategoriesDataSet projectCategoryDataSet1 =
new SvcSecurity.SecurityProjectCategoriesDataSet();
SvcSecurity.SecurityProjectCategoriesDataSet.ProjectCategoriesRow row1 =
projectCategoryDataSet1.ProjectCategories.NewProjectCategoriesRow();
row1.WSEC_CAT_UID = Guid.NewGuid();
row1.PROJ_UID = pDS.Project[2].PROJ_UID;
projectCategoryDataSet1.ProjectCategories.AddProjectCategoriesRow(row1);
securityClient.CreateProjectCategories(projectCategoryDataSet1);
// Read project category DataSet.
SvcSecurity.SecurityProjectCategoriesDataSet projectCategoryDataSet =
securityClient.ReadProjectCategory(row1.PROJ_UID);
// Write the project category DataSet to an XML file.
Console.WriteLine("\nWriting the ProjectCategoryDataSet to an XML file...");
projectCategoryDataSet.WriteXml(outFilePathCategories);
Console.WriteLine("\nSee XML output of ProjectCategoryDataSet at {0}",
outFilePathCategories);
Console.Write("\nPress any key to continue: ");
Console.ReadKey(true);
// Update project category DataSet.
SvcSecurity.SecurityProjectCategoriesDataSet projectCategoryDataSet3 =
new SvcSecurity.SecurityProjectCategoriesDataSet();
SvcSecurity.SecurityProjectCategoriesDataSet.ProjectCategoriesRow row2 =
projectCategoryDataSet3.ProjectCategories.NewProjectCategoriesRow();
row2.WSEC_CAT_UID = Guid.NewGuid();
row2.PROJ_UID = pDS.Project[3].PROJ_UID;
projectCategoryDataSet3.ProjectCategories.AddProjectCategoriesRow(row2);
securityClient.UpdateProjectCategories(projectCategoryDataSet3);
// Read project category DataSet.
SvcSecurity.SecurityProjectCategoriesDataSet updatedPDS =
securityClient.ReadProjectCategory(row2.PROJ_UID);
// Write the updated project category DataSet to an XML file.
Console.WriteLine("\nWriting the ProjectCategoryDataSet to an XML file...");
updatedPDS.WriteXml(outFilePathUpdatedCategories);
Console.WriteLine("\nSee XML output of ProjectCategoryDataSet at {0}",
outFilePathUpdatedCategories);
Console.Write("\nPress any key to continue: ");
Console.ReadKey(true);
// Delete project categories.
Guid[] guidarray = new Guid[2];
guidarray[0] = row1.PROJ_UID;
guidarray[1] = row2.PROJ_UID;
securityClient.DeleteProjectCategories(guidarray);
}
catch (CommunicationException e)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(
"\n***System.ServiceModel.CommunicationException:");
Console.WriteLine(e.ToString());
Console.ResetColor();
}
}
// Configure the PSI client endpoints.
public static bool ConfigClientEndpoints(string endpt)
{
bool result = true;
switch (endpt)
{
case ENDPOINT_P:
projectClient = new SvcProject.ProjectClient(endpt);
break;
case ENDPOINT_S:
securityClient = new SvcSecurity.SecurityClient(endpt);
break;
default:
result = false;
Console.WriteLine("Invalid endpoint: {0}", endpt);
break;
}
return result;
}
}
}