Տպելու ձևերի ընդլայնման ձեռնարկ
Բովանդակություն
Ներածություն
Տպելու ձևանմուշների ընդլայնումը իրականացվում է ծրագրավորման միջոցով՝ օգտագորելով C# լեզուն: Օգտագործվում է սերվերային մոդուլ ընդլայնումը համակարգ ներմուծելու համար։ Անհրաժեշտ է ստեղծել երկու ֆայլ՝
- պարամետրերի հաշվարկի ծրագրերը պարունակող C# ֆայլը,
 .asընդլայնումով սերվերային մոդուլի նկարագրող ֆայլը, որը օգտագործվում է C# ֆայլը ներմուծելիս։
Ստեղծված ֆայլերը պետք է ներմուծել համակարգ, որից հետո կապակցել տպվող ձևի ձևանմուշին։ Ընդլայնվող տպելու ձևանմուշում բոլոր լրացուցիչ պարամետրերը պետք է ծրագրավորված լինեն մեկ C# դասի միջոցով։
Չնայած որ, մեկ ֆայլը կարող է պարունակել բազմաթիվ դասեր, տպելու ձևանմուշին հնարավոր է կապակցել միայն մեկ դաս։
Տպելու ձևանմուշին ընդլայնման բոլոր հատկությունները տրված են տեխնիկական նկարագրության էջում։
C# ֆայլի նկարագրություն
Տպելու ձևանմուշի ընդլայնման դասը պետք է ունենա [TemplateSubstitutionExtender] ատրիբուտը և իրագործի ITemplateSubstitutionExtender ինտերֆեյսը։
[TemplateSubstitutionExtender]
public class AccStateAdr_Extander : ITemplateSubstitutionExtender 
Նոր դասում կարելի է կատարել ինյեկցիա սերվերային API-ներին հասանելություն ստանալու համար։
[TemplateSubstitutionExtender]
public class AccStateAdr_Extander : ITemplateSubstitutionExtender 
{
    private readonly UserProxyService proxyService;
     
    public AccStateAdr_Extander(UserProxyService proxyService)
    {
        this.proxyService = proxyService;
    }
    ...
}
Ավելացվող տպելու պարամետրերի հաշվարկը իրականացվում է Calculate ֆունկցիայում։
Այն որպես պարամետր ստանում է TemplateSubstitutionExtenderArgs տիպի օբյեկտ, որի միջոցով հնարավոր է հասանելիություն ստանալ տպվող փաստաթղթին և հաշվարկված տպվող կոդերի բազմությանը։
Ավելացվող նոր պարամետրերի արժեքները պետք է լինեն ANSI կոդավորմամբ։ Տե՛ս հատուկ դեպքերը։
public Task Calculate(TemplateSubstitutionExtenderArgs args)
{
    //Վերադարձնում է ատոմար տպելու պարամետրերի ցուցակը
    var atomics = args.Substitution.AtomicSubstitutions;
    //Վերադարձնում է այն փաստաթուղթը, որի վրայից ձևավորվում է տպվող ձևը
    var agrDoc = args.Document;
    if (agrDoc["CURRENCY"].ToString() == "001" || agrDoc["CURRENCY"].ToString() == "049")
    {
        atomics.Add("CurType", "Ազատ փոխարկելի արտարժույթ".ToArmenianANSI());
    }
    else
    {
        atomics.Add("CurType", "");
    }
    return Task.CompletedTask;
}
Պարամետրի հաշվարկը և ավելացումը հնարավոր է կատարել նաև UserProxyService-ի TryAddAtomic կամ TryAddAtomicAsync մեթոդներով։ Այս դեպքում մեկ պարամետրի հաշվարկի ընթացքում առաջացած սխալի դեպքում ծրագրի աշխատանքը չի ընդհատվի՝ շարունակելով մնացած բոլոր պարամետրերի հաշվարկը։
[TemplateSubstitutionExtender]
public class AccStatements : ITemplateSubstitutionExtender
{
    private readonly UserProxyService proxyService;
    public AccStatements(UserProxyService proxyService)
    {
        this.proxyService = proxyService;
    }
    public async Task Calculate(TemplateSubstitutionExtenderArgs args)
    {
        var accountDoc = (Account)args.Document;
        await proxyService.TryAddAtomicAsync("pass", async () =>
        {
            var clientDoc = await this.proxyService.LoadClientDescByCode(accountDoc.CLICOD);
            return clientDoc.PasCode;
        }, args);
    }
}
Ընդլայնման կապակցում տպելու ձևանմուշին
Ընդլայնման ֆայլերը ներմուծելուց հետո կատարվում է կապակցում տպելու ձևանմուշի հետ։ Այդ նպատակով անհրաժեշտ է լրացնել համապատասխան դաշտերը “Տպելու ձևանմուշի օգտ.նկարագրված պարամետրեր” փաստաթղթի “Տպվող ձևանմուշի ընդլայնումը սերվիսում” էջում։
| Դաշտի անվանում | Նկարագրություն | 
|---|---|
| Ընդլայնման նկարագրության անվանում | Համապատասխանում է .as ֆայլում սերվերային մոդուլի Name հատկության արժեքին: | 
    
| Դասի անուն նկարգրությունում | C# Ֆայլում պարունակվող դասի անվանումը, որտեղ իրագործված է լրացուցիչ պարամետրերի հաշվարկը: | 
Երկու դաշտերը հնարավոր է լրացնել ընտրելով համապատասխան արժեքը ցուցակից՝ սեղմելով դաշտի կողքի հապապատասխան կոճակը։

Օրինակներ
Տե՛ս հաշվի քաղվածքի ընդլայնման օրինակ։
Հատուկ դեպքեր
ՀԾ-Բանկում հաշվի և քարտի քաղվածքում նոր պարամետրեր ավելացնելուց արժեքը պետք է լինի Unicode կոդավորմամբ, երբ ձևանմուշը պետք է արտահանվի Unicode։