Բովանդակություն

Ներածություն

Գոյություն ունեցող դիտելու ձևերում լրացուցիչ սյուներ, պարամետրեր ավելացնելու, տողերի պարունակությունը փոփոխելու համար նկարագրվում է տվյալների աղբյուրի ընդլայնում։

Ստորև ձեռնարկում նկարագրած է տվյալների աղբյուրում նոր սյուներ ավելացնելու քայլերը։
Նոր պարամետրեր ավելացնելու համար տե՛ս։
Ընդլայնումը դիտելու ձևում օգտագործումը համար տե՛ս:

Տվյալների աղբյուրի ընդլայնման համար անհրաժեշտ է ստեղծել DSEXTENDER նկարագրությունը .as ֆայլում և C# դասը .cs ֆայլերը, որոնք հետագայում հարկավոր կլինի ներմուծել համակարգ SYSCON-ի միջոցով։

.as ֆայլի ստեղծում

Յուրաքանչյուր ընդլայնման համար, պրոյեկտի ներքո անհրաժեշտ է ստեղծել .as ֆայլ։ Տվյալ ֆայլում պետք է նկարագրված լինի տվյալների աղբյուրին վերաբերվող տվյալները։

DSEXTENDER {
  NAME = AgrTotlC3Artonyal;
  CAPTION = "Պայմանագրերի ամփոփում";
  ECAPTION = "Summary of Agreements";
  DATASOURCE = "AGRSINFO";
  CSSOURCE = AgrTotlC3Artonyal.cs;
}; 

Որտեղ`

  • NAME - Ընդլայնման ներքին ունիկալ անունը, պետք է համընկնի ընդլայնող class-ի անվան հետ,
  • CAPTION - Ընդլայնման հայերեն անվանումը ANSI կոդավորմամբ,
  • ECaption - Ընդլայնման անգլերեն անվանումը,
  • DATASOURCE - Տվյալների աղբյուրի անուն,
  • CSSOURCE - .cs ֆայլի անվանում։

.cs ֆայլի ստեղծում

Տվյալների աղբյուրի տրամաբանությունը անհրաժեշտ է նկարագրել C#-ով համապատասխան .cs ֆայլում։ .cs ֆայլում հարկավոր է ստեղծել class, որը ժառանգվում է Extender<R, P> դասից. որպես R փոխանցելով տվյալների աղբյուրի սյուները նկարագրող դասը, իսկ որպես P՝ պարամետրերը նկարագրող դասը։ Եթե տվյալների աղբյուրը չի պարունակում պարամետրեր, ապա որպես P անհրաժեշտ է փոխանցել NoParam դասը։ Հարկավոր է նաև ավելացնել [DataSourceExtender] ատրիբուտը։ Օրինակ՝

[DataSourceExtender]
public class AgrsInfoC3Artonyal : Extender<AgrsInfoC3Artonyal.DataRow, NoParam>

Ընդլայնվող սյունակները հարկավոր է սահմանել երկու տեղ

  1. Նոր class, որը պարունակում է ընդլայնվող սյունակները որպես հատկություններ (Օրինակում DataRow)
public class DataRow
{
    public string NominalPercent { get; set; }
    public string EffectivePercent { get; set; }
    public string ActualPercent { get; set; }
}
  1. Ընդլայնող դասի կոնստրուկտորի մեջ՝ AddColumn ֆունկցիայի միջոցով։
public AgrsInfoC3Artonyal()
{
    AddColumn(nameof(DataRow.NominalPercent), "Անվանական տոկոսադրույք ըստ նշումի".ToArmenianANSI(), "Nominal interest rate as per note", FieldTypeProvider.GetNumericPositiveFieldType(9,4));
    AddColumn(nameof(DataRow.EffectivePercent), "Արդյունավետ տոկոսադրույք ըստ նշումի".ToArmenianANSI(), "Effective rate as per note", FieldTypeProvider.GetNumericPositiveFieldType(9,4));
    AddColumn(nameof(DataRow.ActualPercent), "Փաստացի տոկոսադրույք ըստ նշումի".ToArmenianANSI(), "Actual rate as per note", FieldTypeProvider.GetNumericPositiveFieldType(9, 4));
}

Ֆունկցիային հարկավոր է փոխանցել հետևյալ արժեքները՝

  • Սյան ներքին անուն՝ կոդ (նույնանուն հատկության պետք է լինի ստեղծված DataRow դասը մեջ),
  • Անվանումը հայրեն ANSI կոդավորմամբ (կարելի է գրել Unicode և օգտագործել ToArmenianANSI() ֆունկցիան),
  • Անվանումը անգլերեն,
  • Դաշտի տիպը։

ProccessRow ֆունկցիա

Ընդլայնված սյունակների հաշվարկը հարկավոր է կատարել ProccessRow ֆունկցիայի մեջ, որը կանչվում է յուրաքանչյուր տողի համար։

Ստորև օրինակում

  • ստանում է պայմանագրի ամփոփման տողը,
  • ստեղծում է տողի ընդլայնման դասի օրինակ (extendColumn),
  • պարզագույն ձևով հաշվում է NominalPercent ընդլայնված սյան արժեքը,
  • ընթացիկ տողի ընդլայնող հատկությանը (row.Extend) վերագրում է ստեղծված օբյեկտը,
  • վերջում ֆունկցիան վերադարձնում է true արժեքը, որպեսզի ընթացիկ տողը ընդգրկվի վերջնական ցուցակում։
public override Task<bool> ProccessRow(IExtendableRow row, IDataSourceArgs args)
{
    var dsRow = (AGRSINFO.DataRow)row;
    var extendColumn = new DataRow();

    extendColumn.NominalPercent = $"{dsRow.fNOTE.Trim()} %";

    row.Extend = extendColumn;
    return Task.FromResult<bool>(true);
}

Ուշադրություն, Ընթացիկ տողի ստացման համար հարկավոր է իմանալ համապատասխան տվյալների աղբյուրի տողի տիպը (այստեղ AGRSINFO.DataRow)։ Այն հնարավոր է իմանալ միայն 8X սերվիսի պրոյեկտը ուսումնասիրելով։

BeforeProcess ֆունկցիա

Եթե ինչ-որ տվյալներ հարկավոր է հաշվարկել և քեշավորել նախքան ProccessRow-ի աշխատանքը, ապա հարկավոր է մշակել BeforeProcess ֆունկցիան։ Տվյալ ֆունկցիան օգտագործվում է նաև կամայական տողի ձևափոխման համար։

public override Task BeforeProcess(IList<IExtendableRow> rows, IDataSourceArgs args)

Տվյալ օրինակում քեշավորվել են ծառի էլեմենտները և հետո օգտագործվել ProccessRow ֆունկցիայում։

private Dictionary<string, TreeElement> noteElements;
public override async Task BeforeProcess(IList<IExtendableRow> rows, IDataSourceArgs args)
{
    noteElements = await treeElementService.GetTreeElements("C1NOTE");
}
public override Task<bool> ProccessRow(IExtendableRow row, IDataSourceArgs args)
{
    var dsRow = (AGRSINFO.DataRow)row;
    var extendColumn = new DataRow();

    extendColumn.NoteName = noteElements[dsRow.fNOTE.Trim()].Comment;

    row.Extend = extendColumn;
    return Task.FromResult<bool>(true);
}

Ներմուծում և օգտագործում

.as և .cs ֆայլերը պատրաստ լինելուն պես անհրաժեշտ է SYSCON-ով համապատասխան .as ֆայլը ներմուծել համակարգ, ինչի արդյունքում .cs ֆայլը նույնպես կներմուծվի։

ֆայլերը ներմուծելուց հետո ընլայնումը օգտագործելու համար հարկավոր է այն կարգավորել դիտելու ձևում։