00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 using System;
00013 using System.Web.Services.Protocols;
00014 using System.Windows.Forms;
00015 using Mcs.Epm.MicrosoftProject.mpFx.CustomFieldsWebService;
00016 using Microsoft.Office.Project.Server.Library;
00017
00018 namespace Mcs.Epm.MicrosoftProject.mpFx.WinForms
00019 {
00020
00021
00022
00023 public partial class EditNewCustomFieldForm : Form
00024 {
00025 #region Instance Data
00026
00027 private readonly CustomFieldDefinition _CustomFieldDefinition;
00028 private readonly CustomFieldDataSet _customFieldDataSet;
00029 private readonly bool _IsNew;
00030
00031 private readonly ProjectServer _ProjectServer;
00032
00033 #endregion
00034
00035 #region Public Properties
00036
00037 #endregion
00038
00039 #region Constructor
00040
00041 public EditNewCustomFieldForm(ProjectServer projectServer)
00042 {
00043 _ProjectServer = projectServer;
00044
00045 _CustomFieldDefinition = new CustomFieldDefinition(string.Empty) { Guid = Guid.Empty };
00046
00047 _IsNew = true;
00048
00049 InitializeComponent();
00050
00051 LoadEntities();
00052 LoadTypes();
00053
00054 nameTextBox.Select();
00055 }
00056
00057 public EditNewCustomFieldForm(ProjectServer projectServer,
00058 CustomFieldDataSet customFieldDataSet)
00059 {
00060 _ProjectServer = projectServer;
00061
00062 _customFieldDataSet = customFieldDataSet;
00063
00064 _CustomFieldDefinition = new CustomFieldDefinition((CustomFieldDataSet.CustomFieldsRow)customFieldDataSet.CustomFields.Rows[0]);
00065
00066 _IsNew = false;
00067
00068 InitializeComponent();
00069
00070 LoadEntities();
00071 LoadTypes();
00072
00073 entityList.Enabled = false;
00074 typeList.Enabled = false;
00075
00076 nameTextBox.Text = _CustomFieldDefinition.Name;
00077 requiredCheckBox.Checked = _CustomFieldDefinition.IsRequired;
00078
00079 switch (_CustomFieldDefinition.DisplayType)
00080 {
00081 case CustomFieldDefinition.DisplayTypes.Data:
00082 dataOption.Checked = true;
00083 break;
00084 case CustomFieldDefinition.DisplayTypes.GraphicalIndicators:
00085 grapicalIndicatorsOption.Checked = true;
00086 break;
00087 default:
00088 throw new ArgumentOutOfRangeException();
00089 }
00090
00091 switch (_CustomFieldDefinition.AttributeType)
00092 {
00093 case CustomFieldDefinition.AttributeTypes.None:
00094 noneOption.Checked = true;
00095 lookupTableOption.Enabled = false;
00096 formulaOption.Enabled = false;
00097 break;
00098 case CustomFieldDefinition.AttributeTypes.LookupTable:
00099 lookupTableOption.Checked = true;
00100 formulaOption.Enabled = false;
00101 noneOption.Enabled = false;
00102 break;
00103 case CustomFieldDefinition.AttributeTypes.Formula:
00104 formulaOption.Checked = true;
00105 lookupTableOption.Enabled = false;
00106 noneOption.Enabled = false;
00107 break;
00108 default:
00109 throw new ArgumentOutOfRangeException();
00110 }
00111
00112 nameTextBox.Select();
00113 }
00114
00115 public string FieldName
00116 {
00117 get { return nameTextBox.Text; }
00118 }
00119
00120 public CustomFieldDefinition CustomFieldDefinition
00121 {
00122 get { return _CustomFieldDefinition; }
00123 }
00124
00125 #endregion
00126
00127 #region Private Methods
00128
00129 private void LoadEntities()
00130 {
00131 string displayeName = Utilities.GetEntityTypeDisplayName(_CustomFieldDefinition.EntityGuid);
00132 int selectedIndex = 0;
00133
00134 if (displayeName.Equals("Project", StringComparison.InvariantCultureIgnoreCase))
00135 {
00136 selectedIndex = 0;
00137 }
00138 else if (displayeName.Equals("Task", StringComparison.InvariantCultureIgnoreCase))
00139 {
00140 selectedIndex = 1;
00141 }
00142 else if (displayeName.Equals("Resource", StringComparison.InvariantCultureIgnoreCase))
00143 {
00144 selectedIndex = 2;
00145 }
00146
00147 entityList.Items.Add("Project");
00148 entityList.Items.Add("Task");
00149 entityList.Items.Add("Resource");
00150
00151 entityList.SelectedIndex = selectedIndex;
00152 }
00153
00154 private void LoadTypes()
00155 {
00156 int selectedIndex;
00157
00158 switch (_CustomFieldDefinition.Type)
00159 {
00160 case CustomField.Type.COST:
00161 selectedIndex = 0;
00162 break;
00163 case CustomField.Type.DATE:
00164 selectedIndex = 1;
00165 break;
00166 case CustomField.Type.DURATION:
00167 selectedIndex = 2;
00168 break;
00169 case CustomField.Type.FLAG:
00170 selectedIndex = 3;
00171 break;
00172 case CustomField.Type.NUMBER:
00173 selectedIndex = 4;
00174 break;
00175 case CustomField.Type.TEXT:
00176 selectedIndex = 5;
00177 break;
00178 default:
00179 selectedIndex = 5;
00180 break;
00181
00182 }
00183
00184 typeList.Items.Add("Cost");
00185 typeList.Items.Add("Date");
00186 typeList.Items.Add("Duration");
00187 typeList.Items.Add("Flag");
00188 typeList.Items.Add("Number");
00189 typeList.Items.Add("Text");
00190
00191 typeList.SelectedIndex = selectedIndex;
00192 }
00193
00194 private bool ValidateForm()
00195 {
00196 if (nameTextBox.Text == String.Empty)
00197 {
00198 MessageBox.Show("Please provide a unique name for the field.", "Custom Fields", MessageBoxButtons.OK, MessageBoxIcon.Warning);
00199 nameTextBox.Select();
00200 return false;
00201 }
00202
00203 return true;
00204 }
00205
00206 private bool CreateField()
00207 {
00208 try
00209 {
00210 _CustomFieldDefinition.Guid = new Guid();
00211 _CustomFieldDefinition.Type = CustomFields.GetTypeFromName(typeList.SelectedItem.ToString());
00212 _CustomFieldDefinition.EntityGuid = new Guid(Utilities.GetEntityGuidStringFromName(entityList.SelectedItem.ToString()));
00213 _CustomFieldDefinition.IsRequired = requiredCheckBox.Checked = true;
00214
00215 _ProjectServer.CustomFields.Create(_CustomFieldDefinition, false, true);
00216
00217 return true;
00218 }
00219 catch (Exception exception)
00220 {
00221 MessageBox.Show(exception.Message, "Custom Fields", MessageBoxButtons.OK, MessageBoxIcon.Error);
00222 return false;
00223 }
00224 }
00225
00226 private void UpdateFieldDefinition()
00227 {
00228 if (noneOption.Checked)
00229 {
00230 _CustomFieldDefinition.AttributeType = CustomFieldDefinition.AttributeTypes.None;
00231 }
00232 else if (lookupTableOption.Checked)
00233 {
00234 _CustomFieldDefinition.AttributeType = CustomFieldDefinition.AttributeTypes.LookupTable;
00235 }
00236 if (formulaOption.Checked)
00237 {
00238 _CustomFieldDefinition.AttributeType = CustomFieldDefinition.AttributeTypes.Formula;
00239 }
00240
00241 if (dataOption.Checked)
00242 {
00243 _CustomFieldDefinition.DisplayType = CustomFieldDefinition.DisplayTypes.Data;
00244 }
00245 else if (grapicalIndicatorsOption.Checked)
00246 {
00247 _CustomFieldDefinition.DisplayType = CustomFieldDefinition.DisplayTypes.GraphicalIndicators;
00248 }
00249 }
00250
00251 private bool SaveField()
00252 {
00253 bool checkedOut = false;
00254
00255 try
00256 {
00257 _ProjectServer.CustomFields.CheckOut(new[] { _CustomFieldDefinition.Guid });
00258 checkedOut = true;
00259
00260 _ProjectServer.CustomFields.Update(_customFieldDataSet, _CustomFieldDefinition, false, true);
00261 checkedOut = false;
00262
00263 return true;
00264 }
00265 catch (SoapException exception)
00266 {
00267 MessageBox.Show(this,
00268 Errors.ProcessMSProjectErrors(exception),
00269 "Test",
00270 MessageBoxButtons.OK,
00271 MessageBoxIcon.Error);
00272 }
00273 catch (Exception exception)
00274 {
00275 MessageBox.Show(this,
00276 exception.Message,
00277 "Test",
00278 MessageBoxButtons.OK,
00279 MessageBoxIcon.Error);
00280
00281 }
00282 finally
00283 {
00284 if (checkedOut)
00285 {
00286 _ProjectServer.CustomFields.CheckIn(_CustomFieldDefinition.Guid, true);
00287 }
00288 }
00289
00290 return false;
00291 }
00292
00293 #endregion
00294
00295 #region Event Handlers
00296
00297 private void noneOption_CheckedChanged(object sender, EventArgs e)
00298 {
00299 editCustomAttributesButton.Enabled = !noneOption.Checked;
00300 summaryRowsCalcFormulaOption.Enabled = noneOption.Checked;
00301
00302 UpdateFieldDefinition();
00303 }
00304
00305 private void lookupTableOption_CheckedChanged(object sender, EventArgs e)
00306 {
00307 editCustomAttributesButton.Enabled = lookupTableOption.Checked;
00308
00309 UpdateFieldDefinition();
00310 }
00311
00312 private void formulaOption_CheckedChanged(object sender, EventArgs e)
00313 {
00314 editCustomAttributesButton.Enabled = formulaOption.Checked;
00315
00316 UpdateFieldDefinition();
00317 }
00318
00319 private void dataOption_CheckedChanged(object sender, EventArgs e)
00320 {
00321 editGraphicalIndicators.Enabled = !dataOption.Checked;
00322
00323 UpdateFieldDefinition();
00324 }
00325
00326 private void grapicalIndicatorsOption_CheckedChanged(object sender, EventArgs e)
00327 {
00328 editGraphicalIndicators.Enabled = grapicalIndicatorsOption.Checked;
00329
00330 UpdateFieldDefinition();
00331 }
00332
00333 private void okButton_Click(object sender, EventArgs e)
00334 {
00335 if (ValidateForm())
00336 {
00337 Cursor = Cursors.WaitCursor;
00338
00339 if (grapicalIndicatorsOption.Checked == false)
00340 {
00341 _CustomFieldDefinition.NonSummaryCriteriaString = string.Empty;
00342 _CustomFieldDefinition.ProjectSummaryCriteriaString = string.Empty;
00343 _CustomFieldDefinition.SummaryTaskCriteriaString = string.Empty;
00344 }
00345 if (_IsNew)
00346 {
00347 if (CreateField())
00348 {
00349 Close();
00350 }
00351 }
00352 else
00353 {
00354 if (SaveField())
00355 {
00356 Close();
00357 }
00358 }
00359
00360 Cursor = Cursors.Default;
00361 }
00362 DialogResult = DialogResult.OK;
00363 }
00364
00365 private void editCustomAttributesButton_Click(object sender, EventArgs e)
00366 {
00367 if (lookupTableOption.Checked)
00368 {
00369 Cursor = Cursors.WaitCursor;
00370
00371 EditCustomFieldLookupFieldForm form = new EditCustomFieldLookupFieldForm(_CustomFieldDefinition, _ProjectServer);
00372
00373 if (form.ShowDialog(this) == DialogResult.OK)
00374 {
00375 _CustomFieldDefinition.LookupTableGuid = form.LookupTableGUID;
00376 _CustomFieldDefinition.DefaultValueGuid = form.DefaultValueGUID;
00377 _CustomFieldDefinition.LeafOnly = form.AllowOnlyLeafNode;
00378 _CustomFieldDefinition.MultiSelect = form.AllowMultiSelect ? CustomField.AcceptableMaxValues.TWOHUNDREDFIFTY : CustomField.AcceptableMaxValues.DEFAULT;
00379 }
00380
00381 Cursor = Cursors.Default;
00382 }
00383 else if (formulaOption.Checked)
00384 {
00385 }
00386 }
00387
00388 private void cancelButton_Click(object sender, EventArgs e)
00389 {
00390 Close();
00391 }
00392
00393 private void nameTextBox_TextChanged(object sender, EventArgs e)
00394 {
00395 _CustomFieldDefinition.Name = nameTextBox.Text;
00396 }
00397
00398 private void requiredCheckBox_CheckedChanged(object sender, EventArgs e)
00399 {
00400 _CustomFieldDefinition.IsRequired = requiredCheckBox.Checked;
00401 }
00402
00403 private void typeList_SelectedIndexChanged(object sender, EventArgs e)
00404 {
00405 bool lookupTableOptionEnabled = false;
00406 bool formulaOptionEnabled = true;
00407 bool requiredOptionEnabled = true;
00408 bool summaryRowsCalcFormulaOptionEnabled = true;
00409
00410 switch (typeList.SelectedIndex)
00411 {
00412 case 0:
00413 break;
00414 case 1:
00415 break;
00416 case 2:
00417 break;
00418 case 3:
00419 requiredOptionEnabled = false;
00420 break;
00421 case 4:
00422 break;
00423 case 5:
00424 lookupTableOptionEnabled = true;
00425 summaryRowsCalcFormulaOptionEnabled = false;
00426 break;
00427 }
00428
00429 requiredCheckBox.Enabled = requiredOptionEnabled;
00430 lookupTableOption.Enabled = lookupTableOptionEnabled;
00431 formulaOption.Enabled = formulaOptionEnabled;
00432 calculationForSummaryRowsGroupBox.Enabled = summaryRowsCalcFormulaOptionEnabled;
00433 editCustomAttributesButton.Enabled = lookupTableOption.Enabled && (lookupTableOption.Checked || formulaOption.Checked);
00434
00435 }
00436
00437 private void editGraphicalIndicators_Click(object sender, EventArgs e)
00438 {
00439 GraphicalIndicator indicator = new GraphicalIndicator(new Guid(Utilities.GetEntityGuidStringFromName(entityList.Text)),
00440 _CustomFieldDefinition,
00441 CustomFields.GetTypeFromName(typeList.Text));
00442
00443 EditNewGraphicalIndicatorForm indicatorForm = new EditNewGraphicalIndicatorForm(indicator);
00444
00445 if (indicatorForm.ShowDialog(this) == DialogResult.OK)
00446 {
00447 _CustomFieldDefinition.ProjectSummaryCriteriaString = indicatorForm.ProjectSummaryCriteriaString;
00448 _CustomFieldDefinition.SummaryTaskCriteriaString = indicatorForm.SummaryTaskCriteriaString;
00449 _CustomFieldDefinition.NonSummaryCriteriaString = indicatorForm.NonSummaryCriteriaString;
00450
00451 _CustomFieldDefinition.ShowValuesInTooltip = indicatorForm.ShowValuesInToolTips;
00452 }
00453 }
00454
00455 private void entityList_SelectedIndexChanged(object sender, EventArgs e)
00456 {
00457 bool summaryRowOptionsEnabled = false;
00458 bool assignmentRowOptionsEnabled = false;
00459
00460 switch (entityList.SelectedIndex)
00461 {
00462 case 0:
00463 break;
00464 case 1:
00465 summaryRowOptionsEnabled = true;
00466 assignmentRowOptionsEnabled = true;
00467 break;
00468 case 2:
00469 assignmentRowOptionsEnabled = true;
00470 break;
00471 }
00472
00473 calculationForSummaryRowsGroupBox.Enabled = summaryRowOptionsEnabled;
00474 calculationForAssignmentRowsGroupBox.Enabled = assignmentRowOptionsEnabled;
00475
00476 }
00477
00478 #endregion
00479
00480 }
00481 }