CustomFields.ReadCustomFieldsByMdPropUids2 方法
获取基于指定的自定义域的唯一标识符,全局权限的自定义字段定义公式中的语言相关格式的位置。
命名空间: WebSvcCustomFields
程序集: ProjectServerServices(位于 ProjectServerServices.dll 中)
语法
声明
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/CustomFields/ReadCustomFieldsByMdPropUids2", RequestNamespace := "https://schemas.microsoft.com/office/project/server/webservices/CustomFields/", _
ResponseNamespace := "https://schemas.microsoft.com/office/project/server/webservices/CustomFields/", _
Use := SoapBindingUse.Literal, ParameterStyle := SoapParameterStyle.Wrapped)> _
Public Function ReadCustomFieldsByMdPropUids2 ( _
md_prop_uids As Guid(), _
autoCheckOut As Boolean _
) As CustomFieldDataSet
用法
Dim instance As CustomFields
Dim md_prop_uids As Guid()
Dim autoCheckOut As Boolean
Dim returnValue As CustomFieldDataSet
returnValue = instance.ReadCustomFieldsByMdPropUids2(md_prop_uids, _
autoCheckOut)
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/CustomFields/ReadCustomFieldsByMdPropUids2", RequestNamespace = "https://schemas.microsoft.com/office/project/server/webservices/CustomFields/",
ResponseNamespace = "https://schemas.microsoft.com/office/project/server/webservices/CustomFields/",
Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
public CustomFieldDataSet ReadCustomFieldsByMdPropUids2(
Guid[] md_prop_uids,
bool autoCheckOut
)
参数
md_prop_uids
类型:[]自定义域 Guid 的数组
autoCheckOut
类型:System.Boolean如果true,签出的自定义字段进行修改。
返回值
类型:WebSvcCustomFields.CustomFieldDataSet
备注
Project Server 2010中的新方法。如果自定义域或图形指示器计算的公式,则ReadCustomFieldsByMdPropUids2方法将返回CustomFieldDataSet中的公式转换为取决于运行 Project Server 的计算机的区域和语言选项控制面板中指定的区域设置的格式。相比之下, ReadCustomFieldsByMdPropUids方法返回CustomFieldDataSet独立于区域设置公式在何处。
Project Server 权限
权限 |
说明 |
---|---|
允许用户加载企业全局模板。全局权限。 |
|
允许用户修改企业自定义域和查阅表格值的定义。全局权限。 |
|
允许用户修改企业自定义域和查阅表格值的定义。全局权限。 |
|
允许用户将一个新项目添加到 Project Server 数据库。全局权限。 |
|
允许用户访问资源中心和查看资源分配数据。全局权限。 |
|
允许用户访问资源计划页。全局权限。 |
|
允许用户创建项目组合分析。全局权限。 |
|
示例
下面的示例使用ReadCustomFieldsByMdPropUids和ReadCustomFieldsByMdPropUids2读取自定义字段中,并将写入customFieldDS内容CustomFieldDataSet.xml和CustomFieldDataSet2.xml,分别。除了MD_PROP_FORMULA,这两种方法返回相同的数据。
For more information, including a procedure that shows how to use Project Web App and Project Professional 2010 with the same formula, see Using Formulas and Graphical Indicators with Custom Fields.
返回由ReadCustomFieldsByMdPropUids公式域MD_PROP_FORMULA取决于的区域设置 (服务器与 Project 安装的语言) 并将以下代码所示。
<MD_PROP_FORMULA>Switch(Not ([MSPJ188743724] >= #01/01/1984# And [MSPJ188743724] < #01/01/2050#),
"No Baseline", ([MSPJ188743685] + 1) / ([MSPJ188743686] + 1) > 1.2, "Overbudget by 20% or more",
([MSPJ188743685] + 1) / ([MSPJ188743686] + 1) > 1, "Overbudget", True, "Under budget")</MD_PROP_FORMULA>
是独立于区域设置公式域MD_PROP_FORMULA返回ReadCustomFieldsByMdPropUids2 (如以下代码所示)。它适用于不同语言安装的相同的方式。因此, ReadCustomFieldsByMdPropUids2方法优于ReadCustomFieldsByMdPropUids方法。
<MD_PROP_FORMULA><MD_PROP_FORMULA>Switch(Not ([Baseline Estimated Finish] >= #1/1/1984# And [Baseline Estimated Finish] < #1/1/2050#),
"No Baseline", ([Cost] + 1) / ([Baseline Cost] + 1) > 1.2, "Overbudget by 20% or more",
([Cost] + 1) / ([Baseline Cost] + 1) > 1, "Overbudget", True, "Under budget")</MD_PROP_FORMULA>
此外,示例修改公式和调用UpdateCustomFields2方法来更新的自定义字段,然后将更新的数据集写入到UpdatedCustomFieldData.xml
它调用CheckInCustomFields修改完成后,签入的自定义字段,并调用CheckOutCustomFields修改它们之前签出的自定义域。
The example uses the SvcCustomFields namespace in the ProjectServerServices.dll proxy assembly. The ConfigClientEndpoints method and the SetClientEndpoints method use 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 Project 2013 中基于 WCF 的代码示例的先决条件.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.ServiceModel;
namespace Microsoft.SDK.Project.Samples.TestCustomFields
{
class CustomFields
{
private static SvcCustomFields.CustomFieldsClient customFieldClient;
private static SvcResource.ResourceClient resourceClient;
private const string RES_ENDPOINT = "basicHttp_Resource";
private const string CUST_ENDPOINT = "basicHttp_CustomFields";
private const string OUTPUT_FILES = @"C:\Projects\Samples\Output\";
private static string outFilePathCustomFields;
private static string outFilePathCustomFields2;
private static string outFilePathCustomFields3;
static void Main(string[] args)
{
try
{
Guid[] customFieldID = new Guid[1];
customFieldID[0] = new Guid("4bfa524a-ce48-4a31-a2d6-5e8baa6c9d29");
ConfigClientEndpoints(CUST_ENDPOINT);
SetClientEndpoints(RES_ENDPOINT);
// 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.
outFilePathCustomFields = OUTPUT_FILES + "CustomFieldData.xml";
outFilePathCustomFields2 = OUTPUT_FILES + "CustomFieldData2.xml";
outFilePathCustomFields3 = OUTPUT_FILES + "UpdatedCustomFieldData.xml";
// Create a custom fields dataset.
SvcCustomFields.CustomFieldDataSet customFieldDS =
new SvcCustomFields.CustomFieldDataSet();
// Read the custom fields data by using ReadCustomFieldsByMdPropUids.
customFieldDS = customFieldClient.ReadCustomFieldsByMdPropUids(
new Guid[] { customFieldID[0] }, false);
// Write the dataset to an XML file
customFieldDS.WriteXml(outFilePathCustomFields);
Console.WriteLine("\nSee XML output of the CustomFieldDataSet at {0}",
outFilePathCustomFields);
// Read the custom fields data by using ReadCustomFieldsByMdPropUids2.
customFieldDS = customFieldClient.ReadCustomFieldsByMdPropUids2(
new Guid[] { customFieldID[0] }, false);
// Write the dataset to an XML file.
customFieldDS.WriteXml(outFilePathCustomFields2);
bool checkedOut = false;
// Get the ID of the user.
Guid me = resourceClient.GetCurrentUserUid();
// Check whether the custom field to be updated is checked out.
foreach (SvcCustomFields.CustomFieldDataSet.CustomFieldsRow custRow in customFieldDS.CustomFields)
{
if (custRow.MD_PROP_UID.ToString() == customFieldID[0].ToString())
{
if (custRow.IsNull("MD_PROP_CHECKOUTBY")) // If the custom field is not checked out.
{
// Check out the custom field.
customFieldClient.CheckOutCustomFields(new Guid[] { custRow.MD_PROP_UID });
checkedOut = true;
Console.WriteLine("Custom field checked out.....");
break;
}
else
{
// Check whether the custom field is checked out by you.
if (custRow.MD_PROP_CHECKOUTBY == me)
{
checkedOut = true;
Console.WriteLine("The custom field is already checked out by you");
break;
}
else
{
// The custom field is checked out by some other user.
checkedOut = false;
Console.WriteLine("This custom field has already been checked out");
Console.ReadLine();
break;
}
}
}
}
if (checkedOut)
{
// Modify the formula field of the custom field.
// Type the following statement in a single line.
customFieldDS.CustomFields[0].MD_PROP_FORMULA =
"Switch(Not ([Baseline Estimated Finish] >= #1/1/1984# And [Baseline Estimated Finish] < #1/1/2050#),
\"No Baseline\", ([Cost] + 1) / ([Baseline Cost] + 1) > 1.5, \"Overbudget by 50% or more\",
([Cost] + 1) / ([Baseline Cost] + 1) > 1, \"Overbudget\", True, \"Under budget\")";
// Update the dataset.
customFieldClient.UpdateCustomFields2(customFieldDS, false, false);
customFieldDS.WriteXml(outFilePathCustomFields3);
// Write the custom field data to an XML file.
Console.WriteLine("\nSee XML output of the CustomFieldDataSet at {0}",
outFilePathCustomFields3);
// Check in the custom field.
customFieldClient.CheckInCustomFields(new Guid[] { customFieldID[0] }, false);
}
}
catch (CommunicationException e)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("\n***System.ServiceModel.CommunicationException:");
Console.WriteLine(e.ToString());
Console.ResetColor();
}
finally
{
Console.Write("\r\n\r\nPress any key....");
Console.ReadKey();
}
}
// Configure the custom field client endpoints.
public static void ConfigClientEndpoints(string endpt)
{
customFieldClient = new SvcCustomFields.CustomFieldsClient(endpt);
}
// Configure the resource client endpoints.
public static void SetClientEndpoints(string ept)
{
resourceClient = new SvcResource.ResourceClient(ept);
}
}
}
使用修改后的公式域MD_PROP_FORMULA中,更新的数据集被写入UpdatedCustomFieldData.xml ,如下面的代码中所示。
<?xml version="1.0" standalone="yes"?>
<CustomFieldDataSet xmlns="https://schemas.microsoft.com/office/project/server/webservices/CustomFieldDataSet/">
<CustomFields>
<MD_PROP_UID>4bfa524a-ce48-4a31-a2d6-5e8baa6c9d29</MD_PROP_UID>
<MD_PROP_ID>188776464</MD_PROP_ID>
<MD_PROP_UID_SECONDARY>64546b89-9a2a-49d8-b3ce-190119a3c562</MD_PROP_UID_SECONDARY> <MD_PROP_ID_SECONDARY>255885317</MD_PROP_ID_SECONDARY>
<MD_ENT_TYPE_UID>ebad93e7-2149-410d-9a39-a8680738329d</MD_ENT_TYPE_UID>
<MD_PROP_NAME>Budget Indicator</MD_PROP_NAME>
<MD_PROP_IS_WORKFLOW_CONTROLLED>false</MD_PROP_IS_WORKFLOW_CONTROLLED>
<MD_PROP_IS_REQUIRED>false</MD_PROP_IS_REQUIRED>
<MD_AGGREGATION_TYPE_ENUM>9</MD_AGGREGATION_TYPE_ENUM>
<MD_PROP_TYPE_ENUM>21</MD_PROP_TYPE_ENUM>
<MD_PROP_IS_MULTILINE_TEXT>false</MD_PROP_IS_MULTILINE_TEXT>
<MD_PROP_DESCRIPTION>Test for graphical indicator example in SDK</MD_PROP_DESCRIPTION>
<MD_PROP_MAX_VALUES>1</MD_PROP_MAX_VALUES>
<MD_PROP_FORMULA>Switch(Not ([Baseline Estimated Finish] >= #1/1/1984# And [Baseline Estimated Finish] < #1/1/2050#),
"No Baseline", ([Cost] + 1) / ([Baseline Cost] + 1) > 1.5, "Overbudget by 50% or more",
([Cost] + 1) / ([Baseline Cost] + 1) > 1, "Overbudget", True, "Under budget")</MD_PROP_FORMULA>
<MD_PROP_GRAPHICAL_INDICATOR>[[==No baseline][5]][[==Overbudget by 50% or more][3]]
[[==Overbudget][2]][[==Under budget][1]]</MD_PROP_GRAPHICAL_INDICATOR>
<MD_PROP_SUMM_GRAPHICAL_INDICATOR>[[==No baseline][5]][[==Overbudget by 50% or more][3]]
[[==Overbudget][2]][[==Under budget][1]]</MD_PROP_SUMM_GRAPHICAL_INDICATOR>
<MD_PROP_PROJ_SUMM_GRAPHICAL_INDICATOR>[[==No baseline][5]][[==Overbudget by 50% or more][3]]
[[==Overbudget][2]][[==Under budget][1]]</MD_PROP_PROJ_SUMM_GRAPHICAL_INDICATOR>
<MD_PROP_GRAPHICAL_INDICATOR_TOOLTIP>false</MD_PROP_GRAPHICAL_INDICATOR_TOOLTIP>
<MD_PROP_ROLLDOWN_TO_ASSN>false</MD_PROP_ROLLDOWN_TO_ASSN>
<MD_PROP_COPY_ON_REASSIGNMENT>false</MD_PROP_COPY_ON_REASSIGNMENT>
<MD_PROP_CHECKOUTDATE>2010-02-08T10:57:21.21-08:00</MD_PROP_CHECKOUTDATE>
<MOD_DATE>2010-02-08T11:12:40.78-08:00</MOD_DATE>
</CustomFields>
</CustomFieldDataSet>