private static void PreSave(long userId, ref Menu toSave, Enumerations.ActionMode action) { if (action == Enumerations.ActionMode.Add) { //toSave.Branch = BlBranch.LoadSingle(userId, toSave.Branch.Id); } }
private void PreSave(long userId, ref Role toSave, Enumerations.ActionMode action) { if (toSave.ParentRole != null) { toSave.ParentRole = LoadSingle(userId, toSave.ParentRole.Id); } }
private void PreSave(long userId, ref User toSave, Enumerations.ActionMode action, string userRoles = "") { if (action == Enumerations.ActionMode.Add) { var defaultPassword = BlCode.LoadSingle(userId, "_System", "DefaultPassword").Value1; toSave.Password = Cryptography.ComputeToHash(defaultPassword); toSave.MustChangePassword = true; toSave.EntryDate = BlCommon.GetServerDateTime(); toSave.LastPasswordUpdate = toSave.EntryDate; //toSave.Branch = BlBranch.LoadSingle(userId, toSave.Branch.Id); } else if (action == Enumerations.ActionMode.Edit) { } toSave.EnteringUserId = userId; toSave.Entity = BlEntity.LoadSingle(userId, toSave.Pin); if (CheckEmpty.String(userRoles) != "") { if (toSave.Roles == null) { toSave.Roles = new List <Role>(); } toSave.Roles.Clear(); foreach (var roleId in userRoles.Split(',')) { toSave.Roles.Add(BlRole.LoadSingle(userId, Convert.ToInt64(roleId))); } } }
private static void PreSave(long userId, ref Entity toSave, Enumerations.ActionMode action) { if (action == Enumerations.ActionMode.Add) { toSave.EntryDate = BlCommon.GetServerDateTime(); } toSave.UserId = userId; }
private static void PreSave(long userId, ref Document toSave, Enumerations.ActionMode action) { if (action == Enumerations.ActionMode.Add) { //Save physical file under specific location var file = toSave.File; toSave.Path = SavePhysicalFile(userId, ref file, toSave.Name, toSave.Reference); toSave.EntryDate = BlCommon.GetServerDateTime(); } toSave.UserId = userId; }
private static void PreSave(long userId, ref Xtra toSave, Enumerations.ActionMode action) { var user = BlUser.LoadSingle(userId); if (action == Enumerations.ActionMode.Add) { //Check if previously exists if (LoadSingle(userId, toSave.Object, toSave.Id, toSave.Property) != null) { throw new BusinessException("AlreadyExists1", BlDescription.GetDescription(Enumerations.DescriptionResources.Language, "lblProperty", user.LanguageId)); } } }
private static void PreSave(long userId, ref Comment toSave, Enumerations.ActionMode action) { if (action == Enumerations.ActionMode.Add) { toSave.EntryDate = BlCommon.GetServerDateTime(); } else { var oldComment = LoadSingle(userId, toSave.Id); oldComment.Text = toSave.Text; toSave = oldComment; } toSave.UserId = userId; }
private void PreSave(long userId, ref Permission toSave, Enumerations.ActionMode action, string roles = "") { if (action == Enumerations.ActionMode.Add) { toSave.Module = BlModule.LoadSingle(userId, toSave.Module.Id); toSave.EntryDate = BlCommon.GetServerDateTime(); } toSave.UserId = userId; if (CheckEmpty.String(roles) != "") { toSave.Roles.Clear(); foreach (var roleId in roles.Split(',')) { toSave.Roles.Add(BlRole.LoadSingle(userId, Convert.ToInt64(roleId))); } } }
/// <summary> /// Removes all previous fields and insert the given field /// </summary> /// <returns>The current list of <see cref="IshFields"/>.</returns> public IshFields AddOrUpdateField(IshField ishField, Enumerations.ActionMode actionMode) { switch (actionMode) { // Remove all value types to avoid ambiguity, no preference of element over value, so last one wins case Enumerations.ActionMode.Create: case Enumerations.ActionMode.Update: RemoveField(ishField.Name, ishField.Level, Enumerations.ValueType.All); break; case Enumerations.ActionMode.Find: case Enumerations.ActionMode.Search: case Enumerations.ActionMode.Read: default: RemoveField(ishField); break; } AddField(ishField); return(this); }
private static void PreSave(long userId, ref Employee toSave, Enumerations.ActionMode action) { if (action == Enumerations.ActionMode.Add) { toSave.EntryDate = BlCommon.GetServerDateTime(); toSave.Entity.EntryDate = toSave.EntryDate; toSave.Entity.UserId = toSave.UserId; toSave.Entity.Status = toSave.Status; } else if (action == Enumerations.ActionMode.Edit) { //toSave.Entity = BlEntity.LoadSingle(userId, toSave.Entity.Pin); if (toSave.Entity.Status == "S") { //TODO:Check no goods are related to this employee } } toSave.Entity.NameIndex = NameIndex.GetNameIndex(userId, toSave.Entity.FirstName, toSave.Entity.FamilyName, toSave.Entity.FatherName); toSave.Entity.NameIndex += NameIndex.GetNameIndex(userId, toSave.Entity.ArFirstName, toSave.Entity.ArFamilyName, toSave.Entity.ArFatherName); BlArDict.SetArabicDict(userId, toSave.Entity.FirstName, toSave.Entity.ArFirstName); BlArDict.SetArabicDict(userId, toSave.Entity.FatherName, toSave.Entity.ArFatherName); BlArDict.SetArabicDict(userId, toSave.Entity.FamilyName, toSave.Entity.ArFamilyName); }
/// <summary> /// Correctly named overload of ToIshMetadataFields(...). Allows tuning in the future. /// </summary> public IshFields ToIshRequiredCurrentMetadataFields(Enumerations.ISHType[] ishTypes, IshFields ishFields, Enumerations.ActionMode actionMode) { return(ToIshMetadataFields(ishTypes, ishFields, actionMode)); }
/// <summary> /// Metadata write operations will be duplicated and cleared client side. /// Unallowed fields for write operations (IshFieldDefinition.AllowOnCreate/AllowOnUpdate) will be stripped with a Debug log message. /// </summary> /// <remarks>Logs debug entry for unknown combinations of ishTypes, ishField (name, level), mandatory, multi-value,... entries - will not throw.</remarks> /// <param name="ishTypes">Given ISHTypes (like ISHMasterDoc, ISHLibrary, ISHConfiguration,...) to verify/alter the IshFields for</param> /// <param name="ishFields">Incoming IshFields entries will be transformed to matching and allowed IshMetadataField entries</param> /// <param name="actionMode">MetadataFields only has value for write operations like Create, Update,...</param> public IshFields ToIshMetadataFields(Enumerations.ISHType[] ishTypes, IshFields ishFields, Enumerations.ActionMode actionMode) { IshFields metadataFields = new IshFields(); foreach (Enumerations.ISHType ishType in ishTypes) { foreach (IshField ishField in ishFields.Fields()) { var key = Enumerations.Key(ishType, ishField.Level, ishField.Name); // Any unknown field will be skipped, unless strict is Off if (!_ishTypeFieldDefinitions.ContainsKey(key)) { switch (_strictMetadataPreference) { case Enumerations.StrictMetadataPreference.SilentlyContinue: _logger.WriteDebug($"ToIshMetadataFields skipping unknown ishType[{ishType}] level[{ishField.Level}] name[{ishField.Name}] valueType[{ishField.ValueType}]"); break; case Enumerations.StrictMetadataPreference.Continue: _logger.WriteVerbose($"ToIshMetadataFields skipping unknown ishType[{ishType}] level[{ishField.Level}] name[{ishField.Name}] valueType[{ishField.ValueType}]"); break; case Enumerations.StrictMetadataPreference.Off: metadataFields.AddOrUpdateField(ishField.ToMetadataField(), actionMode); break; } continue; // move to next ishField } // Known field, however could be not allowed for current action switch (actionMode) { case Enumerations.ActionMode.Create: if (!_ishTypeFieldDefinitions[key].AllowOnCreate) { switch (_strictMetadataPreference) { case Enumerations.StrictMetadataPreference.Continue: _logger.WriteVerbose($"ToIshMetadataFields AllowOnCreate removed ishType[{ishType}] level[{ishField.Level}] name[{ishField.Name}] valueType[{ishField.ValueType}]"); break; } } else { switch (_strictMetadataPreference) { case Enumerations.StrictMetadataPreference.SilentlyContinue: case Enumerations.StrictMetadataPreference.Continue: // Doing an Add, as a later RemoveDuplicateFields can be smarter to keep the 'best' metadata field metadataFields.AddField(ishField.ToMetadataField()); break; case Enumerations.StrictMetadataPreference.Off: // Doing an AddOrUpdate (Replace), so only one ValueType is left to avoid ambiguity on a Create/Update API call metadataFields.AddOrUpdateField(ishField.ToMetadataField(), actionMode); break; } } break; case Enumerations.ActionMode.Update: if (!_ishTypeFieldDefinitions[key].AllowOnUpdate) { switch (_strictMetadataPreference) { case Enumerations.StrictMetadataPreference.Continue: _logger.WriteVerbose($"ToIshMetadataFields AllowOnUpdate removed ishType[{ishType}] level[{ishField.Level}] name[{ishField.Name}]"); break; } } else { switch (_strictMetadataPreference) { case Enumerations.StrictMetadataPreference.SilentlyContinue: case Enumerations.StrictMetadataPreference.Continue: // Doing an Add, as a later RemoveDuplicateFields can be smarter to keep the 'best' metadata field metadataFields.AddField(ishField.ToMetadataField()); break; case Enumerations.StrictMetadataPreference.Off: // Doing an AddOrUpdate (Replace), so only one ValueType is left to avoid ambiguity on a Create/Update API call metadataFields.AddOrUpdateField(ishField.ToMetadataField(), actionMode); break; } //TODO [Should] IshTypeFieldSetup - Potential conflict if ishField having multiple ishvaluetype have conflicting entries for id/element/value // 1. For IshBaseline the name field is a controlled field, so FISHDOCUMENTRELEASE linked to DDOCUMENTRELEASE. // Specifying the label FISHDOCUMENTRELEASE overrules the element name, because you are renaming // 2. For IshDocumentObj the author field is a controlled field, so FAUTHOR linked to USER // Specifying the label "Admin" is less accurate than the element name "VUSERADMIN" // Two cases to illustrate that is not easy to fix. Workaround is to do Set-* cmdlets by -Id and -Metadata instead of -IshObject holding the new values // ==> For now solved by passing ActionMode to IshFields.AddOrUpdateField where for Create/Update all ValueTypes are removed, last one wins } break; default: _logger.WriteDebug($"ToIshMetadataFields called for actionMode[{actionMode}], skipping"); break; } } } switch (_strictMetadataPreference) { case Enumerations.StrictMetadataPreference.SilentlyContinue: _logger.WriteDebug($"Removing duplicate IshField entries"); metadataFields = RemoveDuplicateFields(metadataFields); break; case Enumerations.StrictMetadataPreference.Continue: _logger.WriteVerbose($"Removing duplicate IshField entries"); metadataFields = RemoveDuplicateFields(metadataFields); break; case Enumerations.StrictMetadataPreference.Off: // not removing duplicate entries potentially causing errors like: [-105007] The field "FISHUSERLANGUAGE" can only be specified once on level "None". [105007;FieldAlreadySpecified] break; } return(metadataFields); }
/// <summary> /// Requested metadata fields will be duplicated and enriched to cater our Public Objects initilization. /// The minimal fields (IsDescriptive) will be added to allow initialization of the various IshObject types for all ValueTypes. /// Unallowed fields for read operations (IshFieldDefinition.AllowOnRead) will be stripped with a Debug log message. /// </summary> /// <remarks>Logs debug entry for unknown combinations of ishTypes and ishField (name, level) entries - will not throw.</remarks> /// <param name="ishTypes">Given ISHTypes (like ISHMasterDoc, ISHLibrary, ISHConfiguration,...) to verify/alter the IshFields for</param> /// <param name="ishFields">Incoming IshFields entries will be transformed to matching and allowed IshRequestedMetadataField entries</param> /// <param name="actionMode">RequestedMetadataFields only has value for read operations like Read, Find, Search,...</param> public IshFields ToIshRequestedMetadataFields(Enumerations.ISHType[] ishTypes, IshFields ishFields, Enumerations.ActionMode actionMode) { IshFields requestedMetadataFields = new IshFields(); foreach (Enumerations.ISHType ishType in ishTypes) { // Check incoming IshField with IshTypeFieldDefinitions foreach (IshField ishField in ishFields.Fields()) { var key = Enumerations.Key(ishType, ishField.Level, ishField.Name); if (!_ishTypeFieldDefinitions.ContainsKey(key)) { switch (_strictMetadataPreference) { case Enumerations.StrictMetadataPreference.SilentlyContinue: _logger.WriteDebug($"ToIshRequestedMetadataFields skipping unknown ishType[{ishType}] level[{ishField.Level}] name[{ishField.Name}] valueType[{ishField.ValueType}]"); break; case Enumerations.StrictMetadataPreference.Continue: _logger.WriteVerbose($"ToIshRequestedMetadataFields skipping unknown ishType[{ishType}] level[{ishField.Level}] name[{ishField.Name}] valueType[{ishField.ValueType}]"); break; case Enumerations.StrictMetadataPreference.Off: requestedMetadataFields.AddField(ishField.ToRequestedMetadataField()); break; } continue; // move to next ishField } switch (actionMode) { case Enumerations.ActionMode.Read: case Enumerations.ActionMode.Find: if (!_ishTypeFieldDefinitions[key].AllowOnRead) { switch (_strictMetadataPreference) { case Enumerations.StrictMetadataPreference.Continue: _logger.WriteVerbose($"ToIshRequestedMetadataFields AllowOnRead removed ishType[{ishType}] level[{ishField.Level}] name[{ishField.Name}] valueType[{ishField.ValueType}]"); break; case Enumerations.StrictMetadataPreference.Off: requestedMetadataFields.AddField(ishField.ToRequestedMetadataField()); break; } } else { requestedMetadataFields.AddOrUpdateField(ishField.ToRequestedMetadataField(), actionMode); } break; case Enumerations.ActionMode.Search: if (!_ishTypeFieldDefinitions[key].AllowOnSearch) { switch (_strictMetadataPreference) { case Enumerations.StrictMetadataPreference.Continue: _logger.WriteVerbose($"ToIshRequestedMetadataFields AllowOnSearch removed ishType[{ishType}] level[{ishField.Level}] name[{ishField.Name}] valueType[{ishField.ValueType}]"); break; case Enumerations.StrictMetadataPreference.Off: requestedMetadataFields.AddField(ishField.ToRequestedMetadataField()); break; } } else { requestedMetadataFields.AddOrUpdateField(ishField.ToRequestedMetadataField(), actionMode); } break; default: _logger.WriteDebug($"ToIshRequestedMetadataFields called for actionMode[{actionMode}], skipping"); break; } } } //Add IsDescriptive fields for the incoming IshType to allow basic descriptive/minimal object initialization requestedMetadataFields = AddDescriptiveFields(ishTypes, requestedMetadataFields, actionMode); //TODO [Should] Merges in IsDescriptive for all ValueTypes (for LOV/Card)... we cannot do IMetadataBinding fields yet. Server-side they are retrieved anyway, so the only penalty is xml transfer size. return(requestedMetadataFields); }
/// <summary> /// Reverse lookup for all fields that are marked descriptive for the incoming ishTypes; then add them to ishFields. /// </summary> private IshFields AddDescriptiveFields(Enumerations.ISHType[] ishTypes, IshFields ishFields, Enumerations.ActionMode actionMode) { foreach (Enumerations.ISHType ishType in ishTypes) { foreach (var ishTypeFieldDefinition in _ishTypeFieldDefinitions.Values.Where(d => d.ISHType == ishType && d.IsDescriptive == true)) { //TODO [Could] IshTypeFieldSetup adding descriptive fields potentially has an issue with removing to many ValueType entries ishFields.AddOrUpdateField(new IshRequestedMetadataField(ishTypeFieldDefinition.Name, ishTypeFieldDefinition.Level, Enumerations.ValueType.Value), Enumerations.ActionMode.Read); if (ishTypeFieldDefinition.DataType == Enumerations.DataType.ISHLov || ishTypeFieldDefinition.DataType == Enumerations.DataType.ISHType) { ishFields.AddOrUpdateField(new IshRequestedMetadataField(ishTypeFieldDefinition.Name, ishTypeFieldDefinition.Level, Enumerations.ValueType.Element), Enumerations.ActionMode.Read); } } } return(ishFields); }
private void PreSave(long userId, ref Help toSave, Enumerations.ActionMode action) { }