posted on September 18, 2017
I'm looking for a way to validate field formatting without actually creating an entry in the repository. From what I can tell, the EntryInfo.GetBadFieldValues() method only returns data when .Save() fails.
I also noticed that I'm not able to call .SetFieldValues() without doing .Create() first. Is there a better way to do this?
Here's my little POC project:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Laserfiche.RepositoryAccess; namespace FieldValidationPOC { class Program { static void Main(string[] args) { using (Session sess = Session.Create("localhost", "EricDev")) { Dictionary<string, object> fields = new Dictionary<string, object> { { "Due Date", DateTime.Parse("10/10/2017") }, { "Test Date", "10102017" }, { "Document Date", "10/10/2017" } }; FieldValueCollection fvc = new FieldValueCollection(); foreach (KeyValuePair<string, object> field in fields) { fvc.Add(field.Key, field.Value); } FolderInfo folder = Folder.GetFolderInfo(2218, sess); DocumentInfo doc = new DocumentInfo(sess); doc.Create(folder, "TEST DOC", EntryNameOption.AutoRename); doc.SetFieldValues(fvc); try { doc.Save(); } catch (MultiStatusException ex) { for (int i=0; i < ex.ExtraErrorCount; i++) { Console.WriteLine(ex.GetExtraError(i).TargetSite); Console.WriteLine(ex.GetExtraError(i).Message); Console.WriteLine(ex.GetExtraError(i).PropName); Console.WriteLine("------------------------------"); } var failedFields = doc.GetBadFieldValues(); Console.WriteLine(ex); foreach (var field in failedFields) Console.WriteLine($"Bad Fields: {field.ObjectName} {field.ToString()}"); Console.ReadKey(); doc.Delete(); doc.Save(); } var badFields = doc.GetBadFieldValues(); foreach (var field in badFields) Console.WriteLine($"Bad Field Value: {field}"); } } } }
Thanks,
Eric
0
0