private void ValidateUniqueCompositeKey(SPItemEventProperties properties, string[] compositeKeyFields) { // If the receiver isn't created with the data we need exit quickly (for performance reasons) if (string.IsNullOrEmpty(properties.ReceiverData)) { return; } SPItemEventDataCollection aftProps = properties.AfterProperties; ListItemValidator validator = new ListItemValidator(); bool result = validator.MatchingFieldsExistInList(properties.List, aftProps, compositeKeyFields); if (result) { StringBuilder errorMessage = new StringBuilder(); errorMessage.Append("Duplicate entry. The same composite key exists with the Field=Value: "); for (int looper = 0; looper < compositeKeyFields.Length; looper++) { string key = compositeKeyFields[looper]; errorMessage.Append(key).Append('=').Append(aftProps[key]); if (looper + 1 != compositeKeyFields.Length) { errorMessage.Append(", "); } } properties.ErrorMessage = errorMessage.ToString(); properties.Cancel = true; } }
public void MatchingFieldsExistInList_ReturnsTrue_MatchingFieldsInList() { //Arrange var validator = new ListItemValidator(); MSPList spList = new MSPList(); var spFields = new MSPFieldCollection(); var lookupField = new MSPField(); lookupField.TypeGet = () => SPFieldType.Lookup; spList.FieldsGet = () => spFields; spFields.GetFieldByInternalNameString = n => lookupField; var dataCollection = new MSPItemEventDataCollection(); dataCollection.ItemGetString = (s) => "1"; var returnedItems = new MSPListItemCollection(); returnedItems.CountGet = () => 1; spList.GetItemsSPQuery = q => returnedItems; var fields = new List <string>(); fields.Add("Field1"); fields.Add("Field2"); //Act bool result = validator.MatchingFieldsExistInList(spList, dataCollection, fields); //Assert Assert.IsTrue(result); }