簡體   English   中英

Nopcommerce MessageTemplate,無法將方法添加為令牌

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM