fix: avoid direct journal service method binding
This commit is contained in:
@@ -1408,22 +1408,29 @@ namespace C4IT.F4SD
|
||||
{
|
||||
await Task.Delay(0);
|
||||
List<cTicketJournalItem> journalEntries = new List<cTicketJournalItem>();
|
||||
var entries = F4SDM42WebApiController.defaultInstance.GetJournalService().GetJournalList(activityEOID, false, 0, 50, "<a href=\"#\" class=\"mx-object-journal--link {0} {1}\">{2}</a>", 120);
|
||||
var entries = GetJournalList(activityEOID);
|
||||
LogEntry($"{entries.Length} Journal entries found for ObjectID={activityEOID}", LogLevels.Debug);
|
||||
for (int i = 0; i < entries.Length; i++)
|
||||
{
|
||||
Matrix42.Contracts.Platform.Data.JournalEntryInfo item = entries[i];
|
||||
LogEntry($"Journal entry {i + 1}/{entries.Length}: ID={item.Id}, CreatedDate={item.CreatedDate}, CreatedBy={item.Creator}, Header={item.Header}", LogLevels.Debug);
|
||||
var item = entries.GetValue(i);
|
||||
var journalId = GetJournalEntryValue(item, "Id", Guid.Empty);
|
||||
var createdDate = GetJournalEntryValue(item, "CreatedDate", DateTime.MinValue);
|
||||
var creator = GetJournalEntryValue(item, "Creator", string.Empty);
|
||||
var text = GetJournalEntryValue(item, "Text", string.Empty);
|
||||
var header = GetJournalEntryValue(item, "Header", string.Empty);
|
||||
var visibleInPortal = GetJournalEntryValue(item, "VisibleInPortal", false);
|
||||
|
||||
LogEntry($"Journal entry {i + 1}/{entries.Length}: ID={journalId}, CreatedDate={createdDate}, CreatedBy={creator}, Header={header}", LogLevels.Debug);
|
||||
journalEntries.Add(new cTicketJournalItem()
|
||||
{
|
||||
JournalId = item.Id,
|
||||
JournalId = journalId,
|
||||
ActivityObjectId = activityEOID,
|
||||
CreatedBy = item.Creator,
|
||||
CreationDate = (DateTime)item.CreatedDate,
|
||||
DescriptionHtml = item.Text,
|
||||
Description = Matrix42.Common.Html.HtmlConverter.ConvertHtmlToPlainText(item.Text),
|
||||
Header = item.Header,
|
||||
IsVisibleForUser = item.VisibleInPortal
|
||||
CreatedBy = creator,
|
||||
CreationDate = createdDate,
|
||||
DescriptionHtml = text,
|
||||
Description = string.IsNullOrEmpty(text) ? string.Empty : Matrix42.Common.Html.HtmlConverter.ConvertHtmlToPlainText(text),
|
||||
Header = header,
|
||||
IsVisibleForUser = visibleInPortal
|
||||
});
|
||||
}
|
||||
return journalEntries;
|
||||
@@ -1439,6 +1446,47 @@ namespace C4IT.F4SD
|
||||
}
|
||||
}
|
||||
|
||||
private static Array GetJournalList(Guid activityEOID)
|
||||
{
|
||||
var journalService = F4SDM42WebApiController.defaultInstance.GetJournalService();
|
||||
var method = FindJournalListMethod(journalService.GetType());
|
||||
if (method == null)
|
||||
throw new MissingMethodException(journalService.GetType().FullName, "GetJournalList(Guid, Boolean, Int32, Int32, String, Int32)");
|
||||
|
||||
return method.Invoke(journalService, new object[]
|
||||
{
|
||||
activityEOID,
|
||||
false,
|
||||
0,
|
||||
50,
|
||||
"<a href=\"#\" class=\"mx-object-journal--link {0} {1}\">{2}</a>",
|
||||
120
|
||||
}) as Array ?? Array.Empty<object>();
|
||||
}
|
||||
|
||||
private static MethodInfo FindJournalListMethod(Type serviceType)
|
||||
{
|
||||
var parameterTypes = new[] { typeof(Guid), typeof(bool), typeof(int), typeof(int), typeof(string), typeof(int) };
|
||||
return new[] { serviceType }
|
||||
.Concat(serviceType.GetInterfaces())
|
||||
.Select(type => type.GetMethod("GetJournalList", parameterTypes))
|
||||
.FirstOrDefault(method => method != null);
|
||||
}
|
||||
|
||||
private static T GetJournalEntryValue<T>(object entry, string propertyName, T defaultValue)
|
||||
{
|
||||
var property = entry?.GetType().GetProperty(propertyName);
|
||||
var value = property?.GetValue(entry);
|
||||
if (value == null || value == DBNull.Value)
|
||||
return defaultValue;
|
||||
|
||||
if (value is T typedValue)
|
||||
return typedValue;
|
||||
|
||||
var targetType = Nullable.GetUnderlyingType(typeof(T)) ?? typeof(T);
|
||||
return (T)Convert.ChangeType(value, targetType, CultureInfo.InvariantCulture);
|
||||
}
|
||||
|
||||
internal async Task<bool> updateActivitySolution(Guid objectId, string solutionHtml)
|
||||
{
|
||||
|
||||
|
||||
Reference in New Issue
Block a user