[英]How can I include both “Message” and “MessageTemplate” in the Serilog JsonFormatter output?
[英]Nopcommerce MessageTemplate, can't add method as token
我正在 NopCommerce 中創建一個 MessageTemplate,我想添加一個實現另一個類的方法的令牌。
在“ProductService”類中,我有一個名為“DailyBestsellersReport”的方法,我想將其添加為“MessageTokenProvider”中我的 MessageTemplate 的令牌。 但是,當我在 MessageTokenProvider 中添加“ProductService”作為引用時,它告訴我方法“DailyBestsellerReport”在當前上下文中無效,這讓我認為某處存在語法錯誤。 這是我想添加為令牌的方法:
產品服務類:
public IList<BestsellersReportLine> DailyBestSellersReport(
int recordsToReturn = 5, int orderBy = 1, int groupBy = 1)
{
var yesterDay = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0));
var earliest = new DateTime(yesterDay.Year, yesterDay.Month, yesterDay.Day, 0, 0, 0);
var latest = earliest.Add(new TimeSpan(1, 0, 0, 0, -1));
var currentDay = DateTime.Now;
var dayBefore = DateTime.Now.AddDays(-1);
var query1 = from opv in _opvRepository.Table
where earliest <= currentDay && latest >= dayBefore
join o in _orderRepository.Table on opv.OrderId equals o.Id
join pv in _productVariantRepository.Table on opv.ProductVariantId equals pv.Id
join p in _productRepository.Table on pv.ProductId equals p.Id
select opv;
var query2 = groupBy == 1 ?
//group by product variants
from opv in query1
group opv by opv.ProductVariantId into g
select new
{
EntityId = g.Key,
TotalAmount = g.Sum(x => x.PriceExclTax),
TotalQuantity = g.Sum(x => x.Quantity),
}
:
//group by products
from opv in query1
group opv by opv.ProductVariant.ProductId into g
select new
{
EntityId = g.Key,
TotalAmount = g.Sum(x => x.PriceExclTax),
TotalQuantity = g.Sum(x => x.Quantity),
}
;
switch (orderBy)
{
case 1:
{
query2 = query2.OrderByDescending(x => x.TotalQuantity);
}
break;
case 2:
{
query2 = query2.OrderByDescending(x => x.TotalAmount);
}
break;
default:
throw new ArgumentException("Wrong orderBy parameter", "orderBy");
}
if (recordsToReturn != 0 && recordsToReturn != int.MaxValue)
query2 = query2.Take(recordsToReturn);
var result = query2.ToList().Select(x =>
{
var reportLine = new BestsellersReportLine()
{
EntityId = x.EntityId,
TotalAmount = x.TotalAmount,
TotalQuantity = x.TotalQuantity
};
return reportLine;
}).ToList();
return result;
}
我想在這里添加“DailyBestsellersReport”:
MessageTokenProvider 類
public void AddReportTokens(IList<Token> tokens, BestsellersReportLine DailyBestSellersReport, ProductService productService, int languageId)
{
tokens.Add(new Token("BestsellersReportLine.EntityId", DailyBestSellersReport.EntityId.ToString()));
tokens.Add(new Token("BestsellersReportLine.TotaAmount", DailyBestSellersReport.TotalAmount.ToString()));
tokens.Add(new Token("BestsellersReportLine.TotalQuantity", DailyBestSellersReport.TotalQuantity.ToString()));
tokens.Add(new Token("ProductService.DailyBestSellersReport", productService.DailyBestSellersReport.ToString)());
}
當我添加:
tokens.Add(new Token("ProductService.DailyBestSellersReport", productService.DailyBestSellersReport.ToString)());
它告訴我:
錯誤 10 'Nop.Services.Catalog.ProductService.DailyBestSellersReport(int, int, int)' 是一個“方法”,在給定的上下文中無效
我還從“BestsellersReportLine”類中添加了可以正常工作的標記,但是這些是屬性而不是方法,例如:
public partial class BestsellersReportLine
{
public int EntityId { get; set; }
public decimal TotalAmount { get; set; }
public int TotalQuantity { get; set; }
}
有什么想法嗎?
謝謝
錯誤本身告訴解決方案,當它接受參數時,如何在不傳遞任何參數的情況下調用方法。
您將需要編寫根據productService.DailyBestSellersReport
結果返回字符串的方法
public string ReturnTable()
{
var report=productService.DailyBestSellersReport(param1,param2,param2)
StringBuilder sb=new StringBuilder();
foreach(var r in report)
{
//I believe u r trying to build Html table so u can append any string here to sb
}
return sb.ToString();
}
然后使用
tokens.Add(new Token("ProductService.DailyBestSellersReport",ReturnTable());
sb.AppendLine("<table border=\"0\" style=\"width:100%;\">");//sb is stringbuilder's object
sb.AppendLine(string.Format("<tr style=\"background-color:{0};text-align:center;font-size:12px; \">", _templatesSettings.Color1));
sb.AppendLine(string.Format("<th>Sr. No.</th>"));
sb.AppendLine(string.Format("<th>Item1</th>"));
sb.AppendLine(string.Format("<th>Item2</th>"));
sb.AppendLine("</tr>");
//Header is closed
//Next is data which will be created using foreach on data from `IList<BestsellersReportLine>`
foreach (var item in result)
{
sb.AppendLine(string.Format("<tr style=\"background-color: {0};text-align: center;\">", _templatesSettings.Color2));
//you can place all ur data in below tds, you can created any number of tds.
sb.AppendLine(string.Format("<td style=\"padding: 0.6em 0.4em;text-align: right;\">{0}</td>", item.Prop1));
sb.AppendLine("<td style=\"padding: 0.6em 0.4em;text-align: left;\">" + item.Prop2);
sb.AppendLine("</td>");
sb.AppendLine("</tr>");
}
sb.AppendLine("</table>");//dont forget to close table
return sb.ToString();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.