Ստորև ներկայացված է փաստաթղթի ընդլայնման օրինակ, որի միջոցով ապահովվել է Երկիր տեսակի փաստաթղթի վրա՝ “Կոդ”, “Անգլերեն անվանում” և “Կրճատ անվանում” դաշտերի ավտոմատ լրացումը բեռնելով պահանջվող տվյալները https://restcountries.com REST API-ի միջոցով։

Նշված հնարավորությունը ակտիվանում է միայն նոր ստեղծված` FILLCOUNTRYFIELDS (Ավտոմատ լրացնել “Երկրի Կոդ”, “Անգլերեն անվանում” և “Կրճատ անվանում” դաշտերը երկիր փաս-ում) պարամետրի “Այո” արժեքի դեպքում։

Փաստաթղթի իրադարձությունների ընդլայնման օրինակը տե՛ս այստեղ։

Օրինակում բերված են 3 ֆայլեր։

CountryEx.cs ֆայլի պարունակություն

using ArmSoft.AS8X.Bank.General.Country.DOCS;
using ArmSoft.AS8X.Common.Exceptions;
using ArmSoft.AS8X.Common.Extensions;
using ArmSoft.AS8X.Core.Document;
using System.Collections.Generic;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;

namespace ArmSoft.AS8X.Bank.Samples.DocExtensions;

[DocumentExtender]
public class CountryEx : DocumentExtender
{
    private static readonly HttpClient httpClient = new();

    private readonly IParametersService paramService;

    /* Կատարում ենք IParametersService սերվիսի ինյեկցիա, որի միջոցով կստանանք FILLCOUNTRYFIELDS
    համակարգային պարամետրերի արժեքը։ */
    public CountryEx(IParametersService paramService)
    {
        this.paramService = paramService;
    }

    public async override Task PreValidate(Document sender, ValidateEventArgs args)
    {
        //Ստանում ենք FILLCOUNTRYFIELDS համակարգային պարամետրի արժեքը
        bool isCountryAutofillAllowed = await this.paramService.GetBooleanValue("FILLCOUNTRYFIELDS");

        // Մեթոդի աշխատանքը կավարտվի պարամետրի արժեքի Ոչ արժեքի դեպքում
        if (!isCountryAutofillAllowed)
        {
            return;
        }
        var country = (Country)sender;
        if (string.IsNullOrEmpty(country.ISO))
        {
            /* Ստուգում ենք ISO կոդ դաշտի լրացված լինելը, այդ արժեքը օգտագործվում է
            երկրի տվյալները բեռնելու համար։ Դատարկ լինելու դեպքում ձևավորում ենք սխալի մասին
            հաղորդագրություն։
            Exception-ի առաջացման դեպքում փաստաթղթի պահպանման գործընթացը կընդհատվի ՀԾ-Բանկ-ում դուրս բելեով
            համապատսխան սխալի մասին հաղորդագրությունը  */
            throw new RESTException("ISO Կոդ դաշտը լրացված չէ:".ToArmenianANSI());
        }

        // Ստուգում ենք փաստաթղթում լրացվող դաշտերից առնվազն մեկի չլրացված լինելը հակառակ դեպքում դուրս ենք գալիս մեթոդից։ 
        if (!string.IsNullOrEmpty(country.SHRTNAME) && !string.IsNullOrEmpty(country.ENAME) && !string.IsNullOrEmpty(country.CODE))
        {
            return;
        }

        // Բեռնում ենք երկրի մասին տվյալները արտաքին վեբ սերվիսից։
        var response = await httpClient.GetAsync("https://restcountries.com/v3.1/alpha/" + country.ISO);
        var json = await response.Content.ReadAsStringAsync();

        // Կատարում ենք դեսերիալիզացիա օգտագործելով ստորև նկարագրված CountryData դասը։
        var data = JsonSerializer.Deserialize<List<CountryData>>(json);

        List<string> updatedFields = new();

        /* Ստուգում ենք՝ Կրճատ անվանում, Կոդ, Անգլերեն անվանում դաշտերի լրացված լինելը փաստաթղթում,
           դատարկ լինելու պարագայում լրացնում ենք համապատասխան դաշտը միաժամանակ ավելացնելով նրա
           անվանումը List տիպի updatedFields  փոփոխականում։ Այն անհրաժեշտ է դաշտերի լրացումից
           հետո հաղորդագրություն ձևավորելու համար։ */
        if (string.IsNullOrEmpty(country.SHRTNAME))
        {
            country.SHRTNAME = data[0].cca3;
            updatedFields.Add("Կրճատ անվանում".ToArmenianANSI());
        }

        if (string.IsNullOrEmpty(country.ENAME))
        {
            country.ENAME = data[0].name.official;
            updatedFields.Add("Անգլերեն անվանում".ToArmenianANSI());
        }

        if (string.IsNullOrEmpty(country.CODE))
        {
            country.CODE = data[0].ccn3;
            updatedFields.Add("Կոդ".ToArmenianANSI());
        }

        if (sender.IsUIOrigin && updatedFields.Count > 0)
        {
            // Ձևավորում ենք հաղորդագրություն լրացված դաշտերի վերաբերյալ։ 
            await sender.Progress.MessageBox(string.Join(", ", updatedFields) + " դաշտը/դաշտերը լրացվել են փաստաթղթի վրա։".ToArmenianANSI(), Common.MessageBoxButtons.OK, Common.MessageBoxIconType.Information);
        }
    }
}

/* Ստորև տողը անջատում է Visual Studio -ում CountryData դասում հատկությունների
անվանումները փոքրատառով սկսվելու վերաբերյալ սխալնելի արտացոլումը, քանի որ հատկությունների
անվանումները համապատասխանացվել են JSON ֆորմատի դաշտերի անավնումներին։ */
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "json դաշտեր")]

/* CountryData, CountryName դասերը օգտագործվում են ստացված JSON պատասխանը դեսերիալիզացնելու
համար։ CountryData դասը ունի ստացված JSON պատասխանի դաշտերին համապատասխան
հատկություններ՝ ccn3, cca3 և name։ Վերջինս ներկայացնում է ներդրված, բազմաթիվ
հատկություններով օբյեկտ, որոնցից մեզ անհրաժեշտ է միայն  official - ը։
Այդ նպատակով նկարագրել ենք CountryName դասը official հատկությամբ։ Դեսերիալիզացիա անելիս
մենք ստանալու ենք CountryData տիպի օբյեկտ, որը պարունակում է միայն անհրաժեշտ տվյալները։
*/
public class CountryData
{

    public string ccn3 { get; set; }
    public CountryName name { get; set; }
    public string cca3 { get; set; }

    public class CountryName
    {
        public string official { get; set; }
    }
}

Ստորև ներկայացված է արտաքին վեբ սերվիսից ստացվող պատասխանի հատվածը։

[
  {
    "name": {
      "common": "Austria",
      "official": "Republic of Austria",
      "nativeName": {
        "bar": {
          "official": "Republik Österreich",
          "common": "Österreich"
        }
      }
    },
    "tld": [
      ".at"
    ],
    "cca2": "AT",
    "ccn3": "040",
    "cca3": "AUT",
    "cioc": "AUT",
...
  }
]

CountryEx.as ֆայլի պարունակությունը

Պետք է գրված լինի ANSI կոդավորմամբ։

DOCUMENTEXTENDER {
  NAME = "COUNTRY";
  CAPTION = "Երկիր փաստաթղթի ընդլայնում"; 
  ECAPTION = "Country doc extension";
  CSSOURCE = "CountryEx.cs";
};

SYSCON-ի միջոցով ֆայլերի ներմուծման ժամանակ CountryEx.as և CountryEx.cs ֆայլերը տեղադրվել են config.as ֆայլում BASEFOLDER պարամետրով սահմանված պանակում։

NewParam.txt ֆայլի պարունակություն

Նոր FILLCOUNTRYFIELDS համակարգային պարամետրի ավելացման համար ստեղծվել է տեքստային ֆայլ հետևյալ պարունակությամբ։ Պետք է գրված լինի ANSI կոդավորմամբ։

#AS3XX# EXPORT-IMPORT DATA FILE

PARAMETER {
PARAMID:FILLCOUNTRYFIELDS
TYPE:0
VALUETYPE:Boolean
VALUE:1
DESCRIPTION:Ավտոմատ լրացնել Երկրի Կոդ, Անգլերեն անվանում և Կրճատ անվանում դաշտերը երկիր փաս-ում
EDESCRIPTION:Automatically fill Country Code, Short Name and English name fields on Country 
PERMANENT:1
GROUP:General
UPDATEACCESS:1
KIND:          
MEMO:«Այո» արժեքի դեպքում  Երկրի Կոդ, Անգլերեն անվանում և Կրճատ անվանում դաշտերը դաշտերը կլրացվեն համապատսխան  https://restcountries.com REST API- ից ստացված տվյալների:
}