00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 using System;
00013 using System.Collections;
00014 using System.Collections.Generic;
00015 using System.Globalization;
00016 using Mcs.Epm.MicrosoftProject.mpFx.CustomFieldsWebService;
00017 using Microsoft.Office.Project.Server.Library;
00018
00019 namespace Mcs.Epm.MicrosoftProject.mpFx
00020 {
00021
00022
00023
00024 public class CustomFields : IEnumerable<Guid>
00025 {
00026 #region Static Methods
00027
00028
00029
00030
00031
00032
00033 public static CustomField.Type GetTypeFromName(string name)
00034 {
00035 name = name.ToUpper(CultureInfo.InvariantCulture);
00036
00037 foreach (CustomField.Type type in Enum.GetValues(typeof(CustomField.Type)))
00038 {
00039 if (type.ToString().ToUpper(CultureInfo.InvariantCulture) == name)
00040 {
00041 return type;
00042 }
00043 }
00044
00045 throw new IndexOutOfRangeException("name");
00046 }
00047
00048 #endregion
00049
00050 #region Private Static Methods
00051
00052
00053
00054
00055
00056
00057
00058 private static CustomFieldDataSet.CustomFieldsRow TransformDefintionToPsiField(CustomFieldDefinition customFieldDefinition, ref CustomFieldDataSet.CustomFieldsRow customField)
00059 {
00060 customField.MD_PROP_UID = customFieldDefinition.Guid;
00061 customField.MD_ENT_TYPE_UID = customFieldDefinition.EntityGuid;
00062 customField.MD_PROP_NAME = customFieldDefinition.Name;
00063 customField.MD_PROP_IS_REQUIRED = customFieldDefinition.IsRequired;
00064 customField.MD_PROP_TYPE_ENUM = (byte)customFieldDefinition.Type;
00065 customField.MD_PROP_MAX_VALUES = (int)customFieldDefinition.MultiSelect;
00066
00067 if (customFieldDefinition.LookupTableGuid != Guid.Empty)
00068 {
00069 customField.MD_PROP_IS_LEAF_NODE_ONLY = customFieldDefinition.LeafOnly;
00070 customField.MD_LOOKUP_TABLE_UID = customFieldDefinition.LookupTableGuid;
00071
00072 if (customFieldDefinition.DefaultValueGuid == Guid.Empty)
00073 {
00074 customField.SetMD_PROP_DEFAULT_VALUENull();
00075 }
00076 else
00077 {
00078 customField.MD_PROP_DEFAULT_VALUE = customFieldDefinition.DefaultValueGuid;
00079 }
00080 }
00081
00082 customField.MD_PROP_MAX_VALUES = (int)customFieldDefinition.MultiSelect;
00083
00084 customField.MD_PROP_GRAPHICAL_INDICATOR = customFieldDefinition.NonSummaryCriteriaString;
00085 customField.MD_PROP_SUMM_GRAPHICAL_INDICATOR = customFieldDefinition.ProjectSummaryCriteriaString;
00086 customField.MD_PROP_PROJ_SUMM_GRAPHICAL_INDICATOR = customFieldDefinition.ProjectSummaryCriteriaString;
00087
00088 customField.MD_PROP_GRAPHICAL_INDICATOR_TOOLTIP = customFieldDefinition.ShowValuesInTooltip;
00089
00090 return customField;
00091 }
00092
00093 #endregion
00094
00095 #region Instance Data
00096
00097 private Dictionary<Guid, string> _CustomFieldsCollection;
00098
00099 #endregion
00100
00101 #region Internal Properties
00102
00103 protected internal ProjectServer Parent { get; private set; }
00104
00105 #endregion
00106
00107 #region Public Properties
00108
00109
00110
00111
00112 public Dictionary<Guid, string> CustomFieldsCollection
00113 {
00114 get
00115 {
00116 if (_CustomFieldsCollection == null)
00117 {
00118 LoadCustomFields();
00119 }
00120
00121 return _CustomFieldsCollection;
00122 }
00123 set
00124 {
00125 _CustomFieldsCollection = value;
00126 }
00127 }
00128
00129 #endregion
00130
00131 #region Constructor
00132
00133
00134
00135
00136
00137 public CustomFields(ProjectServer parent)
00138 {
00139 if (parent == null)
00140 {
00141 throw new ArgumentNullException("parent");
00142 }
00143
00144 Parent = parent;
00145 }
00146
00147 #endregion
00148
00149 #region Public Methods
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159 public IEnumerator<Guid> GetEnumerator()
00160 {
00161 if (_CustomFieldsCollection == null)
00162 {
00163 LoadCustomFields();
00164 }
00165
00166 foreach (KeyValuePair<Guid, string> valuePair in CustomFieldsCollection)
00167 {
00168 yield return valuePair.Key;
00169 }
00170 }
00171
00172
00173
00174
00175
00176
00177 public CustomFieldDataSet.CustomFieldsRow GetCustomFieldInfo(Guid propertyGuid)
00178 {
00179 string filter = CustomFieldFilters.CreateGetAllInfoFilter(propertyGuid);
00180
00181 using (CustomFieldDataSet customFieldDataSet = Parent.WebServices.CustomFields.ReadCustomFields(filter, false))
00182 {
00183 if (customFieldDataSet != null && customFieldDataSet.CustomFields.Rows.Count == 1)
00184 {
00185 return customFieldDataSet.CustomFields[0];
00186 }
00187 return null;
00188 }
00189 }
00190
00191
00192
00193
00194
00195
00196 public CustomFieldDataSet GetCustomFieldDataSet(Guid propertyGuid)
00197 {
00198 string filter = CustomFieldFilters.CreateGetAllInfoFilter(propertyGuid);
00199
00200 using (CustomFieldDataSet customFieldDataSet = Parent.WebServices.CustomFields.ReadCustomFields(filter, false))
00201 {
00202 return customFieldDataSet;
00203 }
00204 }
00205
00206
00207
00208
00209
00210 public void CheckOut(Guid[] propertyGuids)
00211 {
00212 Parent.WebServices.CustomFields.CheckOutCustomFields(propertyGuids);
00213 }
00214
00215
00216
00217
00218
00219
00220 public void CheckIn(Guid propertyGuid, bool force)
00221 {
00222 Parent.WebServices.CustomFields.CheckInCustomFields(new[] { propertyGuid }, force);
00223 }
00224
00225
00226
00227
00228
00229
00230
00231 public void Create(CustomFieldDefinition customFieldDefinition, bool validateOnly, bool autoCheckin)
00232 {
00233 using (CustomFieldDataSet customFieldDataSet = new CustomFieldDataSet())
00234 {
00235 Guid mdPropUID = Guid.NewGuid();
00236
00237 CustomFieldDataSet.CustomFieldsRow customField = customFieldDataSet.CustomFields.NewCustomFieldsRow();
00238
00239 customField = TransformDefintionToPsiField(customFieldDefinition, ref customField);
00240 customField.MD_PROP_UID = mdPropUID;
00241
00242 customFieldDataSet.CustomFields.AddCustomFieldsRow(customField);
00243
00244 Parent.WebServices.CustomFields.CreateCustomFields(customFieldDataSet, validateOnly, autoCheckin);
00245 }
00246 }
00247
00248
00249
00250
00251
00252 public void Delete(Guid[] propertyGuids)
00253 {
00254 Parent.WebServices.CustomFields.DeleteCustomFields(propertyGuids);
00255 }
00256
00257
00258
00259
00260
00261
00262
00263
00264 public void Update(CustomFieldDataSet customFieldDataSet,
00265 CustomFieldDefinition customFieldDefinition,
00266 bool validateOnly,
00267 bool autoCheckin)
00268 {
00269
00270 CustomFieldDataSet.CustomFieldsRow customField = customFieldDataSet.CustomFields.FindByMD_PROP_UID(customFieldDefinition.Guid);
00271
00272 TransformDefintionToPsiField(customFieldDefinition, ref customField);
00273
00274 Parent.WebServices.CustomFields.UpdateCustomFields(customFieldDataSet, validateOnly, autoCheckin);
00275 }
00276
00277
00278
00279
00280
00281
00282
00283 public void Update(CustomFieldDataSet customFieldDataSet, bool validateOnly, bool autoCheckin)
00284 {
00285 Parent.WebServices.CustomFields.UpdateCustomFields(customFieldDataSet, validateOnly, autoCheckin);
00286 }
00287
00288
00289
00290
00291
00292
00293 public bool ContainsKey(Guid propertyGuid)
00294 {
00295 return CustomFieldsCollection.ContainsKey(propertyGuid);
00296 }
00297
00298 #endregion
00299
00300 #region Private Methods
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310 IEnumerator IEnumerable.GetEnumerator()
00311 {
00312 return ((IEnumerable<Guid>) this).GetEnumerator();
00313 }
00314
00315 #endregion
00316
00317 #region Internal Methods
00318
00319
00320
00321
00322 internal void LoadCustomFields()
00323 {
00324 if (_CustomFieldsCollection == null)
00325 {
00326 _CustomFieldsCollection = new Dictionary<Guid, string>();
00327 }
00328 else
00329 {
00330 _CustomFieldsCollection.Clear();
00331 }
00332
00333 using (CustomFieldDataSet customFieldDataSet = Parent.WebServices.CustomFields.ReadCustomFields(CustomFieldFilters.ListMinimumInformation, false))
00334 {
00335 foreach (CustomFieldDataSet.CustomFieldsRow customField in customFieldDataSet.CustomFields.Rows)
00336 {
00337 _CustomFieldsCollection.Add(customField.MD_PROP_UID, customField.MD_PROP_NAME);
00338 }
00339 }
00340 }
00341
00342 #endregion
00343
00344 #region Public Indexers
00345
00346 public string this[Guid guid]
00347 {
00348 get { return CustomFieldsCollection[guid]; }
00349 }
00350
00351 #endregion
00352
00353 }
00354 }