(DPR) Տվյալների մշակման հարցման նկարագրման ձեռնարկ
Բովանդակություն
Ներածություն
Սերվիսային երկար տևող հարցումներ կատարելու և կատարման ընթացքին հետևելու համար նկարագրվում է Տվյալների մշակման հարցում (DPR
- Data Processing Request):
Տվյալների մշակման հարցման (DPR
-ի) նկարագրության համար հարկավոր է նկարագրել սերվերում աշխատող տրամաբանությունը C# դասում (.cs
ֆայլում)։
Հարկավոր է սահմանել մուտքային և ելքային պարամետրերի դասեր (կարելի է օգտագործել գոյություն ունեցողները)։
Տե՛ս նաև
- Տվյալների մշակման հարցման մեթոդների ու հատկությունների նկարագրություն
- Կազմակերպության սեփական Տվյալների մշակման հարցումների (
DPR
-ի) ստեղծման ձեռնարկ - Ասինխրոն մշակում կիրառությունների սերվերի վրա
C# ֆայլի նկարագրություն
Ձեռնարկի ամբողջական կոդը, ինչպես նաև սկրիպտից կանչի ձևը տե՛ս այստեղ:
Օժանդակ դասերի սահմանում
- Ստեղծել հարցման կատարման համար անհրաժեշտ պարամետրերը նկարագրող դաս։
public class DeleteDocsByIsnRequest { public List<int> DocumentIsns { get; set; } }
- Ստեղծել հարցման կատարման արդյունքում ստացվող տվյալները նկարագրող դասը։
public class DeleteDocsByIsnResponse
{
public StorageInfo StorageInfo { get; set; }
}
Հիմնական դասի սահմանում
- Հայտատարել դաս, որը
- ունի DPR ատրիբուտը, որը պարունակում է DPR-ի տեսակը, հայերեն, անգլերեն անվանումները և թույլատրված է ընդհատումը UI-ից թե ոչ (լռությամբ թույլատրվում է ընդհատումը UI-ից)
- ժառանգում է
DataProcessingRequest<R, P>
դասը՝ որպեսR
փոխանցելով հարցման կատարման արդյունքում ստացվող տվյալները նկարագրող դասը, իսկ որպեսP
՝ պարամետրերը նկարագրող դասը։
Պարամետրերի բացակայության դեպքում անհրաժեշտ է փոխանցել
NoParam
դասը, իսկ արդյունքի բացակայության դեպքում՝NoResult
դասը։
[DPR(DPRType = DPRType.Other, ArmenianCaption = "Փաստաթղթերի հեռացում", EnglishCaption = "Deletion of documents")]
public class DeleteDocsByIsnDPR : DataProcessingRequest<DeleteDocsByIsnResponse, DeleteDocsByIsnRequest>
Կոնստրուկտորի ձևավորում
- Ձևավորել կոնստրուկտորը, որտեղ անհրաժեշտ է ինյեկցիա անել աշխատանքի համար անհրաժեշտ սերվիսները։
private readonly IDocumentService documentService;
private readonly IStorageService storageService;
public DeleteDocsByIsnDPR(IDocumentService documentService, IStorageService storageService)
{
this.documentService = documentService;
this.storageService = storageService;
}
Execute
Հիմնական տրամաբանությունը հարկավոր է իրականացնել Execute մեթոդում, այն ստանում է մուտքային պարամետրերը նկարագրող դասը և պետք է վերադարձնի կատարման արդյունքում ստացվող տվյալները նկարագրող դասը։
Ստորև օրինակում նկարագրված Տվյալների մշակման հարցումը (DPR
) հեռացնում է կատարման պարամետրում տրված ISN-ներով փաստաթղթերը համակարգից IDocumentService.Delete մեթոդի միջոցով, ստեղծում է TextReport, որում լրացնում է կատարման ընթացքում առաջացած սխալները և վերադարձնում է կլիենտին։
public override async Task<DeleteDocsByIsnResponse> Execute(DeleteDocsByIsnRequest request, CancellationToken stoppingToken)
{
// սխալների հավաքագրման համար տեքստային հաշվետվության ստեղծում
using var report = new TextReport.TextReport(this.storageService)
{
ArmenianCaption = "Կատարման ընթացքում առաջացած սխալներ".ToArmenianANSI(),
EnglishCaption = "Errors which occured during execution"
};
// 80 լայնությամբ ֆրագմենտի ավելացում հաշվետվությունում
const int fragmentLength = 80;
report.AddFragment(fragmentLength);
// հաշվետվությունում գլխագիր տողի ավելացում թավ տառաոճով
var formattedText = TextReport.TextReport.ApplyStyle("Փաստաթղթերի հեռացման սխալներ".ToArmenianANSI(), TextReportStyle.Bold);
report.AddHeader(formattedText);
// DPR-ի կատարման պրոգրեսի պատուհանում "Հարցման կատարում" անունով փուլի ավելացում
this.Progress.Add("Հարցման կատարում".ToArmenianANSI());
var isns = request.DocumentIsns;
this.Progress.CurrentPhase.Total = isns.Count; // պրոգրեսի ընթացիկ փուլում մշակվող տվյալների քանակը տալով
// պրոգրեսի պատուհանում հնարավոր է ցույց տալ մշակման ենթակա տվյալներից քանիսն են մշակվել
this.Progress.CurrentPhase.Row = 0; // ընթացիկ պահին մշակվել է 0 փաստաթուղթ
foreach (int isn in isns)
{
if (stoppingToken.IsCancellationRequested)
{
break; // եթե DPR-ի կատարման պրոգրեսի պատուհանից սեղմվել է «Ընդհատել» կոճակը, ապա ընդհատվում է կատարումը
}
this.Progress.CurrentPhase.Row++; // ամեն փաստաթղթի մշակման հետ պատուհանում փոխվում է մշակված փաստաթղթերի քանակը, օրինակ 7/11
try
{
//հերթական փաստաթղթի ամբողջական հեռացում
await this.documentService.Delete(isn, false, "Փաստաթղթի հեռացում".ToArmenianANSI());
}
catch (Exception ex)
{
report.AddRow($"Առաջացել է սխալ {0} փաստաթղթի ջնջման ժամանակ։".ToArmenianANSI(), isn);
// առաջացած սխալի հաղորդագրությունների ավելացում որպես տող տեքստային հաշվետվությունում
foreach (string line in ex.Message.Split('\n'))
{
report.AddRow(line, isn);
}
report.AddRow(string.Empty);
}
}
// բոլոր փաստաթղթերի մշակումից հետո հաշվետվությունը պահվում է որպես ֆայլ SaveToStorageAndClose մեթոդի միջոցով,
// որը վերադարձնում է StorageInfo, որը պարունակում է տվյալներ սերվերից ֆայլը բեռնելու համար
return new DeleteDocsByIsnResponse { StorageInfo = await report.SaveToStorageAndClose() };
}