AS-4X → AS-8X համակարգերի համարժեքների նկարագրություն

Ստորև նկարագրված են AS-4X (VB6) համակարգի հասկացությունների և AS-8X (.NET Core / WPF) համակարգի համապատասխան դասերի, մեթոդների ու հատկությունների համարժեքությունը։

1. Փաստաթղթի իրադարձություններ (Document Events)

1.1 Ճարտարապետական բաժանում

AS-4X համակարգում փաստաթղթի ամբողջ տրամաբանությունը (UI, սերվերային տրամաբանություն, տվյալների ստուգումները, …) նկարագրվում է մեկ .as ֆայլի մեջ՝ SCRIPT { } բաժնում, VB6 ենթածրագրերի (Sub/Function) տեսքով։

AS-8X համակարգում նույն տրամաբանությունը բաժանված է երեք տարբեր դասերի միջև.

Դաս Ֆայլ Նպատակ
Document Core/ArmSoft.AS8X.Core/Document/Document.cs Սերվերային տրամաբանություն, հաշվարկներ, վալիդացիա, հաշվառումներ
DocumentUI<T> Core/ArmSoft.AS8X.Core.UI/Document/DocumentUI.cs Կոնտեքստային մենյու, UI-ական իրադարձություններ
DocumentPanel<T> Core/ArmSoft.AS8X.Core.UI/Document/DocumentPanel.cs Պատուհան, control-ներ

Կարևոր. DocumentUI<T> և DocumentPanel<T> դասերը միմյանցից չեն ժառանգվում։ Դրանք երկու անկախ դասեր են, որոնք աշխատում են նույն Document օբյեկտի հետ (Doc

DocumentPanel, DocumentUI դասերը պարտադիր պետք է պարունակեն համապատասխանաբար DocumentPanel, DocumentUI ատրիբուտները, որոնց փոխանցվում է փաստաթղթի ներքին անունը (տեսակը)։

[DocumentPanel(nameof(AccBal))]  
public class AccBalWindow : DocumentPanel<AccBal> { ... }

[DocumentUI(nameof(AccBal))]
public class AccBalUI : DocumentUI<AccBal> { ... }

1.2 Սերվերային իրադարձությունների համարժեքություն (Document.cs)

AS-4X Երբ է կանչվում AS-8X համարժեք Նպատակ
AfterCreate Նոր փաստաթուղթ ստեղծելուց հետո։ AfterCreate(args) Սկզբնական արժեքների լրացում։
AfterLoad Փաստաթուղթը տվյալների բազայից բեռնելուց հետո։ AfterLoad(args) Բեռնված տվյալների հետագա հաշվարկներ։
Validate Փաստաթղթի գրանցման տրանզակցիայում։ Validate(args) Դաշտի վալիդացիա, այլ դաշտերի լրացում՝ կախված ընթացիկ դաշտից։
Action Փաստաթղթի գրանցման տրանզակցիայում։ Action(args) Հաշվառումների ստեղծում, գրանցում:
BeforeCommit Փաստաթղթի գրանցման տրանզակցիայի փակումից առաջ։ BeforeCommit(args) Վերջնական ստուգումներ, լոգավորում։
AfterCommit Փաստաթղթի գրանցման տրանզակցիայի փակումից հետո։ AfterCommit(args) Արտաքին համակարգերի ծանուցում:
Delete Փաստաթղթի հեռացման տրանզակցիայում։ Delete(args) Հեռացման կանոնների սահմանում։
PostMessage SendMessage մեթոդի կանչի ընթացքում։ PostMessage(args) Մի փաստաթղթից մյուսին ծրագրային հաղորդագրության (SendMessage) ուղարկում։
Folders Փաստաթղթի գրանցման տրանզակցիայում։ Folders(args) Թղթապանակների ստեղծում, գրանցում:
StoreGrid Փաստաթղթի գրանցման տրանզակցիայում։ StoreGrids(args) Փաստաթղթի աղյուսակների գրանցում Custom sql աղյուսակներում։
DefaultComment Փաստաթղթի գրանցման տրանզակցիայում։ DefaultComment(args) Թղթապանակների տարրերի լռությամբ մեկնաբանության սահմանում։
ChangeRequest Փաստաթղթի գրանցման տրանզակցիայում։ OnConfirm... / OnReject... Փոփոխման հայտի մշակում։
OnRefuseDoc Փաստաթղթի հեռացման տրանզակցիայում։ OnRefuse(args) Մերժման տրամաբանություն։
BeforeCopy Փաստաթղթի պատճենումից առաջ։ BeforeCopy(args) Որ դաշտերը չկրկնօրինակել:
BeforeImport Փաստաթղթի ներմուծումից առաջ։ BeforeImportProcessing(args) Փաստաթղթի ներմուծում։
TemplateSubstitution Փաստաթղթի տպելու ձևանմուշի կանչի ժամանակ։ TemplateSubstitution(...) Ձևանմուշի հաշվարկվող արժեքների հաշվարկ։

1.3 UI իրադարձությունների համարժեքություն

DocumentUI — ոչ վիզուալ UI տրամաբանություն

Օգտագործվում է այն դեպքերում, երբ control-ների հետ անմիջական աշխատանք անհրաժեշտ չէ։

AS-4X AS-8X Երբ է կանչվում
Form_Load OnLoad() Բացման ժամանակ (նախապատրաստում):
Functions / RegistrFunction InitContextFunctions(...) Կոնտեքստային մենյուի ձևավորում։
BeforeShow(args) Փաստաթղթի բացումից առաջ։
BeforeCreate(args) Փաստաթղթի ստեղծումից առաջ։
BeforeCopy BeforeCopy / AfterCopy Փաստաթղթի պատճենումից առաջ։
AfterStore(...) Փաստաթղթի գրանցումից հետո։
OnUIDelete OnUIDelete(args) Փաստաթղթի հեռացման ժամանակ ։
AfterDelete AfterDelete(args) Փաստաթղթի հեռացումից հետո։
TemplateSubstitutionParameters TemplateSubstitutionParameters(...) Տպելու ձևանմուշի պարամետրերի հաշվարկ։

DocumentPanel — վիզուալ UI տրամաբանություն

Օգտագործվում է պատուհանի կառուցման և control-ների աշխատանքի ապահովման համար։

AS AS-8X Նպատակ
ConstructUI() UI կառուցում
LoadDocumentToControls() Տվյալների բեռնում control-ների մեջ
OnNew() Նոր փաստաթուղթ
OnEdit() Խմբագրում
OnView() Դիտում
BeforeStore(sr) Client-side վալիդացիա
AfterStore(...) Refresh / UI update
StoreSettings() Window settings պահպանում
BeforeShow(isReadOnly) Բացումից առաջ
AddControls() Լրացուցիչ custom control-ներ

2. Երկխոսային պատուհան — AsDialog (4X) vs DialogWindow (8X)

2.1 Ճարտարապետական բաժանում

AS-4X

AsDialog-ը սահմանվում էր VB6 script-ի մեջ։

AS-8X

Առկա են երկու հիմնական տարբերակներ։

Դաս Նպատակ Ֆայլ
DialogWindow Ընդհանուր WPF dialog պատուհան Core/ArmSoft.AS8X.Core.UI/DialogWindow.cs
DataViewDialogWindow Դիտելու ձևի նախնական ֆիլտրման պատուհան Core/ArmSoft.AS8X.Core.UI/DataView/DataViewDialogWindow.cs

2.2 Ընդհանուր համեմատություն

Հրաման AS-4X AsDialog AS-8X DialogWindow
Ստեղծում CreateDialog() new DialogWindow(...)
Ցուցադրում dlg.Show() dlg.ShowDialog()
Վերնագիր dlg.Caption dlg.Caption
Control-ի արժեքի ստացում dlg("Field") dlg["Field"]
Վալիդացիա Validate WindowValidation event
Պատուհանի ակտիվացում Activate WindowActivated event
Դաշտի արժեքի փոխում ValueChanged control.EditValueChanged event
Cancel dlg.Cancel CancelButton
AutoStore dlg.AutoStore = True storeValue: true
Tab-երի ավելացում AddPage() AddDXTabControl()
Դաշտերի արժեքների փոխանցում դիտելու ձևին CreateBrowseParametersInfo() Dictionary<string, object>

2.3 Control ավելացնելու համարժեքություն

4X AsDialog 8X DialogWindow Տեսակ
AddControl(... const_string) AddTextEdit(...) TextBox
AddMemoControl(...) AddMemoEditControl(...) Memo
AddControl(... const_bool) AddCheckEdit(...) CheckBox
AddRadioButtons(...) AddRadioButton(...) Radio
AddControl(... const_date) AddDateEditControl(...) Date
AddControl(... const_time) AddTimeEditControl(...) Time
AddControl(... const_numeric) AddNumericEditControl(...) Numeric
AddControl(... spinner) AddSpinEdit(...) Spin
AddViewControl(...) AddDropDownControl(...) Dropdown
AddTreeControl(...) AddTreeDropDownControl(...) Tree Dropdown
AddMultiSelectViewControl(...) AddMultiSelectDropDownControl(...) Multi Select
AddViewCommentControl(...) AddDropDownCommentControl(...) Dropdown Comment
AddControl(... monthyear) AddMonthYearControl(...) Month / Year
AddLabel(...) AddTextBlock(...) Label
AddLine() AddLine(...) Separator
AddButton(...) AddButton(...) Button
- AddDropDownButton(...) Dropdown Button
- AddSplitButton(...) Split Button
- AddButtonEdit(...) Text Button
- AddPasswordBoxEdit(...) Password
- AddPathEdit(...) File Picker
- AddNumPairControl(...) Number Pair
- AddThreeStateBoolComboBox(...) 3-state Bool

2.4 Layout Containers

4X 8X Նպատակ
AddPage(caption) AddDXTabControl() AddTabbedGroup() Tab էջեր
- AddLayoutGroup(...) Horizontal / Vertical grouping
AddControlAtRight(...) DisplayPosition = AtRightPreviousField Աջ կողմում տեղադրում

Օրինակ

dlg.WindowValidation = (w, args) =>
{
    args.IsValid = false;
    args.ErrorMessage = "Լրացրեք պարտադիր դաշտը";
};

2.5 Կոդի օրինակ — Dialog-ի ստեղծում

AS-4X (VB6)

Dim dlg As AsDialog
Set dlg = CreateDialog()

dlg.Caption  = "Բաժիններ"
dlg.ECaption = "Departments"

dlg.AddControl "StartDate", "Սկիզբ", "DATE"
dlg.AddControl "EndDate", "Վերջ",  "DATE"
dlg.AddViewControl "Dept", "Բաժին", "DEPARTMENTS"

dlg.AutoStore = True

If dlg.Show() Then
    Dim d1 As Date
    Dim d2 As Date
    d1 = dlg("StartDate")
    d2 = dlg("EndDate")
End If

AS-8X (C#)

var dlg = new DialogWindow(owner: Settings.HostingEnvironment)
{
    Caption = "Բաժիններ",
    LoadStoredValues = true
};

var date1 = dlg.AddDateEditControl("StartDate", "Սկիզբ", storeValue: true);
var date2 = dlg.AddDateEditControl("EndDate", "Վերջ", storeValue: true);

var dept = dlg.AddDropDownControl(
    "Dept",
    "Բաժին",
    new DropDown.Departments(),
    isRequired: false,
    storeValue: true);

if (dlg.ShowDialog() == true)
{
    DateTime? d1 = date1.Value;
    DateTime? d2 = date2.Value;
    string deptCode = dept.Code;
}
Քայլ AS-4X AS-8X Նկարագրություն
Dialog ստեղծում CreateDialog() new DialogWindow(...) Ստեղծվում է պատուհանը։
Վերնագիր Caption / ECaption Caption Պատուհանի վերնագիր։
Ամսաթիվ դաշտ AddControl(... DATE) AddDateEditControl(...) Ամսաթվի ընտրիչ։
Բաժնի ընտրություն AddViewControl(...) AddDropDownControl(...) Lookup / DropDown։
Պահված արժեքներ AutoStore = True LoadStoredValues = true Նախորդ արժեքների բեռնում։
Բացում Show() ShowDialog() Ցուցադրում։
Դաշտի արժեքի ստացում dlg("NAME") Control property (Value, Code) Մուտքագրված տվյալների ստացում։

Կարևոր

AS-4X-ում արժեքները վերցվում են անունով (dlg(“StartDate”))։

AS-8X-ում Add…Control() մեթոդը վերադարձնում է control reference, և արժեքը վերցվում է արդեն strongly-typed ձևով:

date1.Value
dept.Code

2.6 Դիտելու ձևի նախնական ֆիլտրման պատուհան (DataViewDialogWindow)

Եթե dialog-ը օգտագործվում է դիտելու ձևի ֆիլտրման համար, ապա DialogWindow-ի փոխարեն անհրաժեշտ է օգտագործել DataViewDialogWindow դասը։

AS-4X (VIEW SCRIPT)

Public Sub Dialog()
    Dim dlg As AsDialog
    Set dlg = CreateDialog()
    dlg.Caption = "Filtri"
    dlg.AddControl "DATE", "Ստեղծման ամսաթիվ", "DATE"
    dlg.AddViewControl "Dept", "Բաժին", "DEPARTMENTS"
    dlg.AutoStore = True
    dlg.Show()
End Sub

AS-8X (C#)

public override DataViewDialogWindow CreateDialog(bool isRefreshMode)
{
    var dlg = new DataViewDialogWindow(this)
    {
        Name    = "MyViewDialog",
        Caption = "Filtri"
    };
    dlg.AddDateEditControl("DATE", "Аmsаtiv", storeValue: true);
    dlg.AddDropDownControl("Dept", "Bajin",
        new DropDown.Departments(), storeValue: true);
    return dlg;
}

public override void ApplyDialog(DataViewDialogWindow dlg, bool isRefreshMode)
{
    this.Parameters.Date = (DateTime?)dlg["DATE"];
    this.Parameters.Dept = (string)dlg["Dept"];
}

Ինչպես է աշխատում

Մեթոդ Նպատակ
CreateDialog() Ստեղծում է dialog-ը և ավելացնում դաշտերը։
ApplyDialog() Dialog-ից վերցնում է արժեքները և փոխանցում Parameters-ին
Parameters Այս հատկության միջոցով ստացված արժեքները փոխանցվում են տվյալների աղբյուրին՝ տվյալների ֆիլտրման և դիտելու ձևի ձևավորման համար։

3. Դիտելու ձև (VIEW) — VIEW (4X) vs DataView<R,P> (8X)

3.1 Ճարտարապետական բաժանում

AS-4X-ում VIEW-ը .as ֆայլով նկարագրություն էր, որտեղ սահմանվում էին.

  • սյունակներ
  • իրավասություններ
  • հիմքային տվյալների աղբյուր
  • ֆիլտրման դիալոգ
  • կոնտեքստային մենյու
  • գործողություններ

AS-8X-ում նույնը դարձել է C# class, որը ժառանգվում է DataView<R,P>-ից։

Հրաման AS-4X AS-8X
Հայտարարում .as VIEW block C# class
Անուն NAME=X [DataView(nameof(X))]
Հիմքային տվյալների աղբյուր DATASOURCE=Y ConfigureDataSource("Y")
Սյունակներ COLUMN {} this.Columns[...]
Ֆիլտրման դիալոգ Dialog() CreateDialog()
Ֆիլտրերի կիրառում implicit ApplyDialog()
Կոնտեքստային մենյու Functions() InitContextFunctions()
Իրավասություններ ALLOWEDIT=1 override bool AllowEdit => true

Gеnеric պարամետրեր.

DataView<R, P>
  R = DataRow    
  P = Param

3.2 Definition հատկությունների համարժեքություն

4X VIEW Property 8X Համարժեք Նկարագրություն
NAME = X [DataView(nameof(X))] Դիտելու ձևի ներքին անուն
CAPTION ArmenianCaption Հայերեն անվանում
ECAPTION EnglishCaption Անգլերեն անվանում
DATASOURCE ConfigureDataSource() Հիմքային տվյալների աղբյուր
GROUP Navigator json Խմբավորում
CONDITION LoadData() Filter պայման
SCRIPT C# methods Ներքին տրամաբանություն (կոդ)
COLUMN Columns[...] Սյունակների կարգավորում

3.3 Իրավասությունների flags

4X VIEW Property 8X Override 8X Default Նկարագրություն
ALLOWADDNEW AllowAdd false Ավելացնել
ALLOWVIEW AllowView IsDocumentBased Բացել դիտման ռեժիմով
ALLOWEDIT AllowEdit false Խմբագրել
ALLOWDELETE AllowDelete false Ջնջել
ALLOWCOPY AllowCreateCopy IsDocumentBased Պատճենել
ALLOWEXPORT AllowExport true Excel / CSV արտահանում

3.4 Ցուցադրման կոնֆիգուրացիա

4X VIEW Property 8X Համարժեք
COLORCOLNAME IsColorColumn = true
UNMOVECOLCOUNT FreezeCount
WIDTH Width
CAPTION Caption
ECAPTION ECaption
VISIBLE = 0 Visible = false
FORMAT Format

3.5 SCRIPT ֆունկցիաների համարժեքություն

4X SCRIPT 8X Override Նկարագրություն
Dialog() CreateDialog() ApplyDialog() Filter dialog
Functions() InitContextFunctions() Context menu
AfterLoadData() AfterLoadData() Load-ից հետո
BeforeLoadData() BeforeLoadData(args) Load-ից առաջ
Add() Add() Add action override
Edit() Edit() Edit action override
Delete() Delete() Delete action override
GetDefaultFunction() GetDefaultFunction() Double-click action

3.6 Կոդի ամբողջական օրինակ — DataView

AS-4X (VIEW dеfinitiоn)

VIEW
{
  NAME     = ACCS;
  CAPTION  = "Hаshivner";
  ECAPTION = "Accounts";
  DATASOURCE = ACCOUNT_DS;

  ALLOWEDIT   = 1;
  ALLOWDELETE = 1;
  ALLOWADDNEW = 1;

  COLUMN { NAME=ISN;     VISIBLE=0; }
  COLUMN { NAME=CODE;    CAPTION="Кod";     ECAPTION="Code";    WIDTH=15; }
  COLUMN { NAME=CAPTION; CAPTION="Аnun";   ECAPTION="Name";    WIDTH=40; }
  COLUMN { NAME=BALANCE; CAPTION="Mnаtsоrd"; FORMAT="#,##0.00"; WIDTH=15; }

  SCRIPT
  {
    Public Sub Dialog()
      Dim dlg As AsDialog
      Set dlg = CreateDialog()
      dlg.Caption = "Filtri"
      dlg.AddControl "DATE",  "Аmsаtiv", const_date, 0
      dlg.AddViewControl "Dept", "Bajin", "DEPARTMENTS"
      dlg.AutoStore = True
      dlg.Show()
    End Sub

    Public Sub Functions(ByVal context As Long)
      RegistrFunction "PrintReport", "Tpеl"
    End Sub
  }
}

AS-8X (C#)

using ArmSoft.AS8X.BankClient.General.Account.DS.Accounts;

[DataView(nameof(Accs),
    ArmenianCaption = ConstantsArm.Accs,
    EnglishCaption  = ConstantsArm.e_Accs)]
public class Accs : DataView<DataRow, Param>
{
    public Accs()
    {
        this.ConfigureDataSource("ACCOUNT_DS");

        this.Columns[nameof(DataRow.ISN)].Visible = false;
    }

    public override bool AllowEdit   => true;
    public override bool AllowDelete => true;
    public override bool AllowAdd    => true;
    public override IReadOnlyCollection<string> AllowedDocumentsToAdd
        => new[] { "Account" };

    public override bool DialogSupported => true;

    public override DataViewDialogWindow CreateDialog(bool isRefreshMode)
    {
        var dlg = new DataViewDialogWindow(this)
        {
            Name    = "AccsDialog",
            Caption = "Filtri"
        };
        dlg.AddDateEditControl("DATE", "Аmsаtiv", storeValue: true);
        dlg.AddDropDownControl("Dept", "Bajin",
            new DropDown.Departments(), storeValue: true);
        return dlg;
    }

    public override void ApplyDialog(DataViewDialogWindow dlg, bool isRefreshMode)
    {
        this.Parameters.Date = (DateTime?)dlg["DATE"];
        this.Parameters.Dept = (string)dlg["Dept"];
    }

    public override PopupMenu InitContextFunctions()
    {
        var p = base.InitContextFunctions();
        p.AddContextFunction(nameof(PrintReport), Resources.PrintReport,
            PrintReport, FunctionAvailability.AllCases);
        return p;
    }

    private void PrintReport(object sender, ItemClickEventArgs e)
    {
        
    }
}
Գործողություն AS-4X AS-8X
Դիտելու ձևի հայտարարում VIEW {} class Accs : DataView<...>
Հիմքային տվյալների աղբյուրի սահմանում DATASOURCE=ACCOUNT_DS ConfigureDataSource("ACCOUNT_DS")
Սյուների սահմանում COLUMN {} Columns[...]
Իրավասություններ սահմանում ALLOWEDIT=1 AllowEdit => true
Դիալոգի ստեղծում Dialog() CreateDialog()
Դիալոգի արժեքների կիրառում նույն SCRIPT-ում ApplyDialog()
Կոնտեքստային մենյուի սահմանում Functions() InitContextFunctions()

3.7 DrоpDоwnViеw

DropDownView դասերը նախատեսված են DropDown տեսակի դաշտերից կախելու համար։

[DropDownView(nameof(DepartmentsDropDown),
    ArmenianCaption = ConstantsArm.Departments,
    EnglishCaption  = ConstantsArm.e_Departments)]
public class DepartmentsDropDown : DropDownView<DataRow, ParameterCollection>
{
    public DepartmentsDropDown()
    {
        this.ConfigureDataSource("DEPARTMENT_DS");
    }
}