private static Entity InitialiseAutonumber(string type, string field, string prefix, string separator, int? numberCharacters, Entity parentAutonumber, string linksToParent) { var autonumberEntity = new Entity(Entities.jmcg_autonumber); autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_entitytype, type); autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_autonumberfield, field); autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_prefix, prefix); autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_separator, separator); autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_numberofnumbercharacters, numberCharacters); if (parentAutonumber != null) { autonumberEntity.SetLookupField(Fields.jmcg_autonumber_.jmcg_parentautonumber, parentAutonumber); autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_parentautonumberlinks, linksToParent); } return autonumberEntity; }
public void AutonumberForStringStandardAndChildTest() { const string type = "account"; const string field = "accountnumber"; foreach (var entityType in EntitiesToDelete) { DeleteAll(entityType); } DeleteAutonumbersAndRegistrations(type); //create autonumber var autonumberEntity = CreateAutonumber(type, field, "AC", "-", 8); var xrmAutonumber = AutonumberService.GetActiveAutonumbersForType(type).First(); //verify the regsitration was cerated for the entity type var registration = AutonumberService.GetExistingRegistration(type); Assert.IsNotNull(registration); //verify autonumbers set for new entities var account = CreateTestRecord(type); //AutonumberService.SetAutonumbers(account); Assert.AreEqual("AC-00000001", account.GetField(field)); account = CreateTestRecord(type); Assert.AreEqual("AC-00000002", account.GetField(field)); //THIS PART CHECK FOR AUTONUMBER OPTION OF OVERWRITE VALUES ALREADY SET Assert.IsFalse(xrmAutonumber.OverwriteIfPopulated); var testOverwriteAccounts = new Entity(type); testOverwriteAccounts.SetField(field, "SETEXPLICIT"); testOverwriteAccounts = CreateAndRetrieve(testOverwriteAccounts); Assert.AreEqual("SETEXPLICIT", testOverwriteAccounts.GetStringField(field)); autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_overwriteifpopulated, true); autonumberEntity = UpdateAndRetreive(autonumberEntity, new[] { Fields.jmcg_autonumber_.jmcg_overwriteifpopulated }); testOverwriteAccounts = new Entity(type); testOverwriteAccounts.SetField(field, "SETEXPLICITAGAIN"); testOverwriteAccounts = CreateAndRetrieve(testOverwriteAccounts); Assert.AreEqual("AC-00000003", testOverwriteAccounts.GetField(field)); //delete all autonumbers and registrations for type const string childType = "contact"; const string childField = "firstname"; const string referenceField = "parentcustomerid"; DeleteAutonumbersAndRegistrations(childType); //child autonumber var childAutonumberEntity = CreateAutonumber(childType, childField, "CO", "-", 3, autonumberEntity, referenceField + ":" + type); //registered registration = AutonumberService.GetExistingRegistration(childType); Assert.IsNotNull(registration); //number set var testEntity = new Entity(childType); testEntity.SetLookupField(referenceField, account); //var thisautonumber = AutonumberService.GetActiveAutonumbersForType(testEntity.LogicalName).First(); //thisautonumber.SetAutonumber(testEntity, XrmService, AutonumberService); testEntity = CreateAndRetrieve(testEntity); Assert.AreEqual("CO-00000002-001", testEntity.GetStringField(childField)); testEntity = new Entity(childType); testEntity.SetLookupField(referenceField, account); testEntity = CreateAndRetrieve(testEntity); Assert.AreEqual("CO-00000002-002", testEntity.GetStringField(childField)); XrmService.Delete(childAutonumberEntity); Assert.IsNull(AutonumberService.GetExistingRegistration(childType)); DeleteMyToday(); }
public void AutonumberConfigurationValidateTest() { var parentAutonumber = CreateStandardStringAutonumber(); var parentType = parentAutonumber.GetStringField(Fields.jmcg_autonumber_.jmcg_entitytype); //type not int or string var autonumber = InitialiseAutonumber("account", "address1_latitude"); VerifyCreateOrUpdateError(autonumber); autonumber.SetField(Fields.jmcg_autonumber_.jmcg_autonumberfield, "numberofemployees"); //prefix numbers autonumber.SetField(Fields.jmcg_autonumber_.jmcg_prefix, "a1A"); VerifyCreateOrUpdateError(autonumber); autonumber.SetField(Fields.jmcg_autonumber_.jmcg_prefix, null); //separator number or digit autonumber.SetField(Fields.jmcg_autonumber_.jmcg_separator, "1"); VerifyCreateOrUpdateError(autonumber); autonumber.SetField(Fields.jmcg_autonumber_.jmcg_separator, "a"); VerifyCreateOrUpdateError(autonumber); autonumber.SetField(Fields.jmcg_autonumber_.jmcg_separator, null); //create as integer var integerAutonumber = CreateAndRetrieve(autonumber); //cannot change type and field integerAutonumber.SetField(Fields.jmcg_autonumber_.jmcg_autonumberfield, "firstname"); VerifyCreateOrUpdateError(integerAutonumber); integerAutonumber.SetField(Fields.jmcg_autonumber_.jmcg_autonumberfield, "numberofemployees"); //todo jmm cannot change fields //child autonumber tests const string childType = "contact"; const string childField = "firstname"; const string referenceField = "parentcustomerid"; DeleteAutonumbersAndRegistrations(childType); //initialise valid var autonumberEntity = new Entity(Entities.jmcg_autonumber); autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_entitytype, childType); autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_autonumberfield, childField); autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_prefix, "CO"); autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_separator, "-"); autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_numberofnumbercharacters, 3); autonumberEntity.SetLookupField(Fields.jmcg_autonumber_.jmcg_parentautonumber, parentAutonumber); autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_parentautonumberlinks, referenceField + ":" + parentType); //separator required autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_separator, null); VerifyCreateOrUpdateError(autonumberEntity); autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_separator, "-"); //parent invalid type autonumberEntity.SetLookupField(Fields.jmcg_autonumber_.jmcg_parentautonumber, integerAutonumber); VerifyCreateOrUpdateError(autonumberEntity); autonumberEntity.SetLookupField(Fields.jmcg_autonumber_.jmcg_parentautonumber, parentAutonumber); //invalid field type autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_autonumberfield, "numberofchildren"); VerifyCreateOrUpdateError(autonumberEntity); autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_autonumberfield, childField); //no links autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_parentautonumberlinks, null); VerifyCreateOrUpdateError(autonumberEntity); //invalid links autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_parentautonumberlinks, "abc"); VerifyCreateOrUpdateError(autonumberEntity); autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_parentautonumberlinks, "abc:" + parentType); VerifyCreateOrUpdateError(autonumberEntity); //valid link autonumberEntity.SetField(Fields.jmcg_autonumber_.jmcg_parentautonumberlinks, referenceField + ":" + parentType); autonumberEntity = CreateAndRetrieve(autonumberEntity); var parent = CreateTestRecord(parentType); var child = new Entity(childType); child.SetLookupField(referenceField, parent); child = CreateAndRetrieve(child); var autonValue = child.GetField(childField); }
public void ValidateLinksToParent(XrmAutonumber autonumber) { try { var dummyEntity = new Entity(autonumber.EntityType); var firstLookup = autonumber.FirstLinkLookup; if (!XrmService.FieldExists(firstLookup, autonumber.EntityType)) throw new NullReferenceException(string.Format("There Is No Field Named {0} On The {1} Record Type", firstLookup, autonumber.EntityType)); if (XrmService.IsLookup(firstLookup, autonumber.EntityType)) { dummyEntity.SetLookupField(firstLookup, Guid.Empty, autonumber.FirstLinkLookup); GetParentEntity(dummyEntity, autonumber, new string[0]); } } catch (Exception ex) { throw new Exception(string.Format("There Was An Error Validating The {0} Field - {1}", XrmService.GetFieldLabel(Fields.jmcg_autonumber_.jmcg_parentautonumberlinks, Entities.jmcg_autonumber), ex.Message), ex); } }
public void RefreshPluginRegistrations(string entityType) { var autonumbers = GetActiveAutonumbersForType(entityType); if (!autonumbers.Any()) { while (true) { var registration = GetExistingRegistration(entityType); if (registration == null) break; XrmService.Delete(registration); } } else { if (GetExistingRegistration(entityType) == null) { var newAutonumber = new Entity("sdkmessageprocessingstep"); newAutonumber.SetLookupField("plugintypeid", GetPluginType()); newAutonumber.SetOptionSetField("stage", PluginStage.PreOperationEvent); newAutonumber.SetLookupField("sdkmessagefilterid", GetPluginFilter(entityType)); newAutonumber.SetLookupField("sdkmessageid", GetPluginMessage()); newAutonumber.SetField("rank", 1); newAutonumber.SetField("name", string.Format("Autonumber For {0}", XrmService.GetEntityLabel(entityType))); XrmService.Create(newAutonumber); } } }
private static Entity InitialiseWorkflowTask(string name, Entity targetWorkflow, string fetchXml) { var entity = new Entity(Entities.jmcg_workflowtask); entity.SetField(Fields.jmcg_workflowtask_.jmcg_name, name); entity.SetLookupField(Fields.jmcg_workflowtask_.jmcg_targetworkflow, targetWorkflow); entity.SetOptionSetField(Fields.jmcg_workflowtask_.jmcg_workflowexecutiontype, OptionSets.WorkflowTask.WorkflowExecutionType.TargetThisWorkflowTask); entity.SetOptionSetField(Fields.jmcg_workflowtask_.jmcg_periodperrununit, OptionSets.WorkflowTask.PeriodPerRunUnit.Days); entity.SetField(Fields.jmcg_workflowtask_.jmcg_periodperrunamount, 1); entity.SetField(Fields.jmcg_workflowtask_.jmcg_nextexecutiontime, DateTime.UtcNow.AddMinutes(-10)); entity.SetField(Fields.jmcg_workflowtask_.jmcg_on, true); if (!fetchXml.IsNullOrWhiteSpace()) { entity.SetField(Fields.jmcg_workflowtask_.jmcg_fetchquery, fetchXml); entity.SetOptionSetField(Fields.jmcg_workflowtask_.jmcg_workflowexecutiontype, OptionSets.WorkflowTask.WorkflowExecutionType.TargetPerFetchResult); } else { entity.SetOptionSetField(Fields.jmcg_workflowtask_.jmcg_workflowexecutiontype, OptionSets.WorkflowTask.WorkflowExecutionType.TargetThisWorkflowTask); } return entity; }