Fejlesztői kézikönyv 6.2

XML Referencia 6.2

Effector Studio 3.2 összefoglaló

Effector Studio 3.2 kézikönyv

Fejlesztői kézikönyv 5.5

XML referencia 5.5

Effector Studio 2.0 kézikönyv

Effector Studio 2.0 összefoglaló

Excel Like Form

Ezzel a komponenssel adatok rögzíthetőek egy excel-szerű felületen.

Alapvető funkciók:

  • Mentés
  • Betöltés
  • Adatok begyűjtése betöltéskor
  • Adatok kinyerése mentéskor

A fájlok az ExcelLikeForm mappában találhatóak meg. A fájlnevek prefixe kötelezően ELF.

<?xml version="1.0" encoding="ISO-8859-2"?>
    <ExcelLikeForm>
    <Name>ELFHQ</Name>
    <Caption />
    <DDO>DDHQExcel</DDO>
    <BusinessObject>BusinessObjectExcel</BusinessObject>

    <IDColumn>id</IDColumn>
    <NameColumn>ExcelName</NameColumn>

    <SpreadJSONColumn>JSON</SpreadJSONColumn>
    <TemplateIDColumn>TemplateExcelID</TemplateIDColumn>
    <TemplateNameColumn>TemplateExcelName</TemplateNameColumn>

    <DataCollectorSP>osp_wrk_ExcelTakeOut_CollectData</DataCollectorSP>
    <DataDistributorSP>osp_wrk_ExcelTakeOut_DistributeData</DataDistributorSP>
    <DataParametersTable>orn_ExcelTakeOutParameters</DataParametersTable>
    <DataValuesTable>orn_ExcelTakeOutData</DataValuesTable>

    <TemplateURL></TemplateURL>
</ExcelLikeForm>

BusinessObject: Ezt a BO-t használja a rendszer az excel betöltésére és mentésére. A BO-ból a rendszer figyelembe veszi a jogosultsággal kapcsolatos beállításokat is.

IDColumn: Egy DDO-beli oszlop neve, amely tartalmazza az “excel” egyedi azonosítóját.

NameColumn: Egy DDO-beli oszlop neve, amely tartalmazza az “excel” nevét. Opcionális beállítás.

SpreadJSONColumn: Annak az oszlopnak (BO) a neve, amely tartalmazza az excel-t leíró JSON-t.

TemplateIDColumn: Annak az oszlopnak (BO) a neve, amely meghatározza, hogy melyik sablon excel-ből lett létrehozva az adott sor.

TemplateNameColumn: Annak az oszlopnak a neve, amely tartalmazhatja a template nevét. Opcionális beállítás.

DataCollectorSP: Opcionális, annak a tárolt eljárásnak a neve, amely az adatokat betöltéskor összegyűjti. A következő paramétereket kell fogadnia (ezeket az értékeket a rendszer automatikusan tölti):

  • @ProcessID BIGINT: Kötelező paraméter, a feldolgozást összefogó azonosító kerül bele (a rendszer ez alá az azonosító alá tárolja az egyes értékeket)
  • @ExcelID INT: Kötelező paraméter, az Excel JSON-t tartalmazó táblának az egyik sorát jelöli meg
  • @TemplateExcelID INT: Kötelező paraméter, melyik sablonból lett létrehozva az excel sor
  • @userID INT: Opcionális paraméter; ha létezik, akkor a rendszer a bejelentkezett felhasználó id-jával tölti ki.

DataDistributorSP: Opcionális, annak a tárolt eljárásnak a neve, amely mentéskor az adatokat szét fogja osztani. A következő paramétereket kell fogadnia (ezeket az értékeket a rendszer automatikusan tölti):

  • @ProcessID BIGINT: Kötelező paraméter, a feldolgozást összefogó azonosító kerül bele (a rendszer ez alá az azonosító alá tárolja az egyes értékeket)
  • @ExcelID INT: Kötelező paraméter, az Excel JSON-t tartalmazó táblának az egyik sorát jelöli meg
  • @TemplateExcelID INT: Kötelező paraméter, melyik sablonból lett létrehozva az excel sor
  • @userID INT: Opcionális paraméter; ha létezik, akkor a rendszer a bejelentkezett felhasználó id-jával tölti ki
  • @Comment VARCHAR(MAX): Opcionális paraméter; ha létezik, és ha egyedi excellikeform megvalósítást használunk, akkor ebben a paraméterben át lehet adni egy a felületen bekért szöveget, amelynek mentéséről a DataDistributorSP tárolteljárásban kell gondoskodni

DataParametersTable: Opcionális, annak a táblának a neve, amely tartalmazza azokat a cella tartományokat, amelyeket az adatok begyűjtésekor, illetve kigyűjtésekor használni fog a rendszer.

DataValuesTable: Opcionális, annak a táblának a neve, amelyet a rendszer az adatok betöltésére, kimentésére használ. A DataCollectorSP és a DataDistributorSP ezt a táblát írja / olvassa a DataParametersTable táblában leírt paraméterek alapján.

SheetsToHide: Opcionális; ha el szeretnénk rejteni bizonyos sheet-eket (pl. jogosultsági megfontolásból). Az elrejteni kívánt sheet-ek nevét egymástól "#|#" jellel elválasztva kell megadnunk.

TemplateURL: Ritkán használt opció. Lényegében annak a view-nak az elérési útját kell megadni, amely az alapértelmezett megjelentő helyett akarunk használni. Ezzel lehetőség van egyedi javascript kódot írni, olyanokat, amelyeket egy általános megjelenítőn nem értelmezhető műveleteket hajtanak végre. Ilyen művelet lehet például sorok elrejtése a betöltött adatok alapján.

Természetesen a DataCollectorSP, DataDistributorSP, DataParametersTable és DataValuesTable nem kötelező beállítás, így lehetőség van csak a JSON-t menteni. Ugyanakkor ezek közül egyik sem hiányozhat, ha az egyik be van állítva.

A DataParameters tábla azoknak a cella tartományoknak a leírását tartalmazza, amelyet az adatok begyűjtésekor, illetve kigyűjtésekor használni fog a rendszer.

CREATE TABLE [dbo].[orn_ExcelTakeOutParameters](
    [id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [TemplateExcelID] [int] NULL,
    [Name] [varchar](200) NULL,
    [Direction] [varchar](5) NULL,
    [RangeName] [varchar](200) NULL,
    [WorkSheetName] [varchar](200) NULL,
    [Absolute_Start_RowIndex] [int] NULL,
    [Absolute_Start_ColumnIndex] [int] NULL,
    [Absolute_End_RowIndex] [int] NULL,
    [Absolute_End_ColumnIndex] [int] NULL,
    [Created] [datetime] NULL,
    [CreatedByID] [int] NULL,
    [Deleted] [tinyint] NULL
) ON [PRIMARY]
  • TemplateExcelID: Melyik excel template-hez kapcsolódik a paraméter
  • Name: Technikai név, erre hivatkozunk majd a DataValues táblában
  • Direction: IN (csak bejövő adat a DataCollectorSP használja), OUT (csak kimenő adat a DataDstributorSP használja), INOUT (mindkét írány, tehát a DataCollector és a DataDistributor is használja ezt a paramétert)
  • RangeName: Opcionális. Az excelben definiált és névvel ellátott cella tartomány neve. Ha ez excel nem tartalmaz ilyet, akkor a következő 5 paramétert használva kell definiálni a cella tartományt.
  • WorkSheetName: Opcionális, a munkafül neve. Csak akkor kell kitölteni, ha a RangeName üres.
  • Absolute_Start_RowIndex, Absolute_Start_ColumnIndex: Opcionális, a cella tartomány bal felső sarka nulla bázisú sorszámokkal hivatkozva. Csak akkor kell kitölteni, ha a RangeName üres.
  • Absolute_End_RowIndex, Absolute_End_ColumnIndex: Opcionális, a cella tartomány jobb alsó sarka nulla bázisú sorszámokkal hivatkozva. Csak akkor kell kitölteni, ha a RangeName üres.

A DataValuesTable tábla annak a táblának a neve, amit a rendszer az adatok betöltésére, kimentésére használ. A DataCollectorSP és a DataDistributorSP ezt a táblát írja / olvassa a DataParametersTable táblában leírt paraméterek alapján. Enne a táblának a szerkezete változhat, de vannak benne kötelező mezők.

CREATE TABLE [dbo].[orn_ExcelTakeOutData](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [ProcessID] [bigint] NULL,
    [ParameterName] [varchar](200) NULL,
    [Data0] [varchar](2000) NULL,
    [Díata1] [varchar](2000) NULL,
    [Data2] [varchar](2000) NULL,
    [Data3] [varchar](2000) NULL,
    [Data4] [varchar](2000) NULL,
    [Data5] [varchar](2000) NULL,
    [Data6] [varchar](2000) NULL,
    [Data7] [varchar](2000) NULL,
    [Data8] [varchar](2000) NULL,
    [Data9] [varchar](2000) NULL,
    [Created] [datetime] NULL,
    [CreatedByID] [int] NULL,
    [Deleted] [tinyint] NULL
) ON [PRIMARY]
  • ProcessID: Kötelező oszlop. A rendszer a DataCollectorSP és a DataDistributorSP meghívása előtt generál egy azonosítót, amivel össze lehet fogni a hívás során keletkező adatokat. Csak BIGINT típusú lehet.
  • ParameterName: Kötelező oszlop. A DataParametersTable táblában definiált paraméter neve (DataParametersTable.Name).
  • Data0..Data9: Kötelező, de ”bármennyi” lehet belőle. Ezekbe az oszlopokba rögzíti a rendszer az adatokat. Ha a DataParametersTable-ben definiált range 4 oszlop és 3 sort takar, akkor ebben a táblában a Data0..Data3 oszlopok lesznek kitöltve és 3 sor lesz rögzítve. Ezek sorrendjében az id oszlop értéke a névadó (tehát a kisebb id érték felől a nagyobb felé haladva lesz benne a terület sorai). A rendszer fel van készítve további oszlopok használatára is. A hozzáadott oszlopok nevét minden esetben Data szóval kell kezdeni, utána egy egész számot írva határozzuk meg az oszlopok sorrendjét.

Példa

CREATE TABLE [dbo].[orn_Excel](
    [id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY ,
    [TemplateExcelID] [int] NULL,
    [ParentExcelID] [int] NULL,
    [JSON] [varchar](max) NULL,
    [Created] [datetime] NULL,
    [CreatedByID] [int] NULL,
    [Deleted] [tinyint] NULL,
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[orn_ExcelTemplate](
    [id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [Name] [varchar](200) NULL,
    [Version] [int] NULL,
    [JSON] [varchar](max) NULL,
    [Created] [datetime] NULL,
    [CreatedByID] [int] NULL,
    [Deleted] [tinyint] NULL,
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[orn_ExcelTakeOutParameters](
    [id] [int] IDENTITY(1,1) NOT NULL  PRIMARY KEY,
    [TemplateExcelID] [int] NULL,
    [Name] [varchar](200) NULL,
    [Direction] [varchar](5) NULL,
    [RangeName] [varchar](200) NULL,
    [WorkSheetName] [varchar](200) NULL,
    [Absolute_Start_RowIndex] [int] NULL,
    [Absolute_Start_ColumnIndex] [int] NULL,
    [Absolute_End_RowIndex] [int] NULL,
    [Absolute_End_ColumnIndex] [int] NULL,
    [Created] [datetime] NULL,
    [CreatedByID] [int] NULL,
    [Deleted] [tinyint] NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[orn_ExcelTakeOutData](
    [id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [ProcessID] [bigint] NULL,
    [ParameterName] [varchar](200) NULL,
    [Data0] [varchar](2000) NULL,
    [Data1] [varchar](2000) NULL,
    [Data2] [varchar](2000) NULL,
    [Data3] [varchar](2000) NULL,
    [Data4] [varchar](2000) NULL,
    [Data5] [varchar](2000) NULL,
    [Data6] [varchar](2000) NULL,
    [Data7] [varchar](2000) NULL,
    [Data8] [varchar](2000) NULL,
    [Data9] [varchar](2000) NULL,
    [Data10] [varchar](2000) NULL,
    [Data11] [varchar](2000) NULL,
    [Data12] [varchar](2000) NULL,
    [Data13] [varchar](2000) NULL,
    [Data14] [varchar](2000) NULL,
    [Data15] [varchar](2000) NULL,
    [Data16] [varchar](2000) NULL,
    [Data17] [varchar](2000) NULL,
    [Data18] [varchar](2000) NULL,
    [Data19] [varchar](2000) NULL,
    [Data20] [varchar](2000) NULL,
    [Data21] [varchar](2000) NULL,
    [Data22] [varchar](2000) NULL,
    [Data23] [varchar](2000) NULL,
    [Data24] [varchar](2000) NULL,
    [Data25] [varchar](2000) NULL,
    [Data26] [varchar](2000) NULL,
    [Data27] [varchar](2000) NULL,
    [Data28] [varchar](2000) NULL,
    [Data29] [varchar](2000) NULL,
    [Data30] [varchar](2000) NULL,
    [Data31] [varchar](2000) NULL,
    [Data32] [varchar](2000) NULL,
    [Data33] [varchar](2000) NULL,
    [Data34] [varchar](2000) NULL,
    [Data35] [varchar](2000) NULL,
    [Data36] [varchar](2000) NULL,
    [Data37] [varchar](2000) NULL,
    [Data38] [varchar](2000) NULL,
    [Data39] [varchar](2000) NULL,
    [Created] [datetime] NULL,
    [CreatedByID] [int] NULL,
    [Deleted] [tinyint] NULL
) ON [PRIMARY]
GO

ELFHQ.xml

<?xml version="1.0" encoding="ISO-8859-2"?>
<ExcelLikeForm>
    <Name>ELFHQ</Name>
    <Caption />

    <DDO>DDHQExcel</DDO>

    <BusinessObject>BusinessObjectExcel</BusinessObject>

    <SpreadJSONColumn>JSON</SpreadJSONColumn>    
    <IDColumn>id</IDColumn>
    <TemplateIDColumn>TemplateExcelID</TemplateIDColumn>

    <DataCollectorSP>osp_wrk_ExcelTakeOut_CollectData</DataCollectorSP>
    <DataDistributorSP>osp_wrk_ExcelTakeOut_DistributeData</DataDistributorSP>
    <DataParametersTable>orn_ExcelTakeOutParameters</DataParametersTable>
    <DataValuesTable>orn_ExcelTakeOutData</DataValuesTable>
</ExcelLikeForm>

BusinessObjectExcel.xml

<?xml version="1.0" encoding="iso-8859-2"?>
<BusinessObject Name="Excel">
    <DefaultTable>orn_Excel</DefaultTable>
    <UniqueID>id</UniqueID>
<Fields>
            <Field name="id" />
        <Field name="JSON" notLogged=”true” />
        <Field name="Created" />
        <Field name="CreatedByID" />
        <Field name="TemplateExcelID" />
</Fields>

    <Rights>
        <Modify type="Constant" return="boolean" default="false">true</Modify>
        <View type="Constant" return="boolean" default="false">true</View>
    </Rights>
</BusinessObject>

Tárolt eljárások:

CREATE PROCEDURE [dbo].[osp_wrk_ExcelTakeOut_CollectData] (
    @ProcessID BIGINT,
    @ExcelID INT,
    @TemplateExcelID INT
)
    AS BEGIN

    IF @TemplateExcelID = 7 BEGIN
        DECLARE
            @BusinessYear DATETIME,
            @BY0 VARCHAR(20),
            @Year INT

        SET @BusinessYear = GETDATE()
        SET @Year = YEAR(@BusinessYear) - 2000
        IF MONTH(@BusinessYear) < 7 BEGIN
            SET @BY0 = '20' + CAST(@Year - 1 AS VARCHAR(20)) + '_' + CAST(@Year AS VARCHAR(20))
        END ELSE BEGIN
            SET @BY0 = '20' + CAST(@Year AS VARCHAR(20)) + '_' + CAST(@Year + 1 AS VARCHAR(20))
        END

        INSERT INTO orn_ExcelTakeOutData (ProcessID, ParameterName, Data0)
        SELECT @ProcessID, 'BusinessYear0', @BY0

        DECLARE @Forecast TABLE (
            ForecastID INT,
            BDThemeID INT,
            RefLaunch DATETIME
        )

        INSERT INTO @Forecast (ForecastID, BDThemeID, RefLaunch)
        SELECT f.ForecastID, f.BDThemeID, t.RefLaunch
        FROM orn_Forecast f WITH(NOLOCK)
        INNER JOIN orn_BDTheme t WITH(NOLOCK) ON t.BDThemeID = f.BDThemeID
        WHERE f.ExcelID = @ExcelID

        DECLARE
            @YDiff INT,
            @MDiff INT,
            @L0Index INT,
            @id INT

        SELECT TOP 1 @YDiff = DATEDIFF(month, GETDATE(), RefLaunch) / 12.0, @MDiff = DATEDIFF(month, GETDATE(), RefLaunch) % 12
        FROM @Forecast

        SET @L0Index = 3 + (@YDiff + CASE WHEN @MDiff < -6 THEN -1 WHEN  @MDiff > 6 THEN 1 ELSE 0 END)

        IF @L0Index<0 BEGIN
            RAISERROR (15600,-1,-1, 'Reference Date is Smaller!');
        END

        INSERT INTO orn_ExcelTakeOutData (ProcessID, ParameterName)
        SELECT  @ProcessID, 'LaunchYear'

        SET @id = SCOPE_IDENTITY();

        DECLARE
            @sql VARCHAR(max);

        DECLARE
            @i INT = 0

        WHILE @i<26 BEGIN
            SET @sql = 'UPDATE orn_ExcelTakeOutData SET Data'+CAST(@i AS varchar(20))+'=''L' + CAST(((0 - @L0Index) + @i) AS VARCHAR(20)) + ''' WHERE id = ' + CAST(@id AS varchar(20))
            EXECUTE (@sql)
            SET @i = @i + 1
        END
    END
END

CREATE PROCEDURE [dbo].[osp_wrk_ExcelTakeOut_DistributeData] (
    @ProcessID BIGINT,
    @ExcelID INT,
    @TemplateExcelID INT
)
AS BEGIN
    IF @TemplateExcelID = 7 BEGIN
        DECLARE
            @ForecastID INT

        SELECT @ForecastID = ForecastID
        FROM orn_Forecast
        WHERE ExcelID = @ExcelID

        DECLARE
            @ParamID INT,
            @ParamName VARCHAR(200)

        DECLARE cur_parameters CURSOR
        READ_ONLY FOR         
        SELECT id, Name
        FROM orn_ExcelTakeOutParameters WITH(NOLOCK)
        WHERE Deleted = 0 AND TemplateExcelID = @TemplateExcelID
            AND Direction IN ('INOUT', 'OUT')

        OPEN cur_parameters
        FETCH NEXT FROM cur_parameters INTO @ParamID, @ParamName
        WHILE @@FETCH_STATUS = 0 BEGIN
            IF @ParamName = 'TH UNIT' BEGIN
                DELETE FROM orn_Temp_THUNIT WHERE ForecastID = @ForecastID

                INSERT INTO orn_Temp_THUNIT (ForecastID, Yminus3, Yminus2, Yminus1)
                SELECT @ForecastID, CAST(Data0 AS FLOAT), CAST(Data1 AS FLOAT), CAST(Data2 AS FLOAT)
                FROM orn_ExcelTakeOutData
                WHERE ProcessID = @ProcessID
                ORDER BY id ASC
            END
            FETCH NEXT FROM cur_parameters INTO @ParamID, @ParamName    
        END
        CLOSE cur_parameters
    END
END

  • Legutóbb frissítve: 21 hét 2 napja
  • Effector