DA# Macro(5): Nutzungshinweise/Hinweise, Downloads, zukünftig hinzuzufügende Funktionen, Hinweise

In diesem Artikel betrachten wir die Vorsichtsmaßnahmen/Hinweise zur Verwendung des DA#-Makros, Downloads, zukünftig hinzuzufügende Funktionen und Hinweise.

Dies ist eine Fortsetzung des vorherigen Artikels.

DA#-Makro(4): DA#-Makrofunktion(3)-Rückwärts

3. Vorsichtsmaßnahmen/Hinweise zur Verwendung des DA#-Makros

3.1. Vorsichtsmaßnahmen für die Verwendung des DA#-Makros

  • Es wird empfohlen, die Modelldatei des Zielmodells DA# v5 zu sichern, bevor Sie Set Macro for Entity/Attribute ausführen.
  • Dies liegt daran, dass „Rückgängig“ in Makros deaktiviert ist, um Fehler wegen unzureichendem Arbeitsspeicher zu vermeiden und die Leistung zu verbessern.
  • UDP-Elemente müssen zuvor im Modell erstellt werden. Die derzeit verteilte DA#-Makroversion (v2.12) erstellt keine UDP-Elemente. Damit soll verhindert werden, dass durch Eingabe des falschen UDP-Namens und Ausführen des Makros ein falsches UDP erzeugt wird. (Wird in einer zukünftigen Version implementiert)
  • UDP-Elemente können hinzugefügt/entfernt/sequenziert hinzugefügt/entfernt/sequenziert werden können geändert werden, aber die Standardelemente werden nicht hinzugefügt/entfernt/sequenziert.

3.2. Hinweise zum DA#-Makro

3.2.1. Umgekehrte gleichzeitige Ausführungsmethode

Die Rückwärtsfunktion kann mehrere in der Eingabedatei angegebene Modelle nacheinander verarbeiten.Wenn es zu lange dauert, können Dateien nach Modellen aufgeteilt und gleichzeitig verarbeitet werden.

Beim Teilen einer Datei brauchen Sie nur das Zielmodell im Blatt „Modell“ zu belassen. Auch wenn in den Blättern „Tabelle“, „Spalte“ und „FK“ Informationen über das gesamte Modell vorhanden sind, wird Reverse auf Basis des Blattes „Modell“ ausgeführt.

Führen Sie zur gleichzeitigen Verarbeitung auf einem PC mehrere Excel-Instanzen aus und bestimmen und führen Sie die zu verarbeitende Modelldatei in jeder Instanz aus.

(Referenz: Überblick über das Naver Korean Dictionary/English Dictionary Search Tool – 3.2. So führen Sie mehrere Excel-Prozesse aus)

Die gleichzeitige Verarbeitung auf einem PC wird jedoch aufgrund von CPU-Ressourcenkonflikten nicht schneller als erwartet verarbeitet. Wenn Sie es aufteilen und auf mehreren PCs ausführen, können Sie es schnell gleichzeitig verarbeiten.

3.2.2. Aktionen, wenn das DA#-Makro nicht normal funktioniert

Zu ergreifende Maßnahmen, wenn die folgenden Phänomene auftreten.

  • Phänomen
    • Als ich im Task-Manager eingecheckt habe, läuft DA# v5 (Modeler5.exe) (Instanz #1) und mit einem geöffneten Modell,
    • Wenn Sie im DA#-Makro auf die Schaltfläche „Offenes Modell hinzufügen“ klicken, wird ein neuer Modeler5.exe-Prozess erstellt (Instanz #2) und die Meldung „Es gibt kein offenes Modell“ wird angezeigt.
    • Ein Phänomen, bei dem Modellinformationen, die in der vorhandenen Instanz #1 geöffnet wurden, nicht importiert werden können
  • Ursache
    • Es tritt auf, wenn Informationen in der Registrierung nicht richtig wiedergegeben werden, wenn DA# installiert ist.
    • Wenn dieses Phänomen auftritt, gibt es kein Problem bei der Verwendung von DA#, aber es läuft nicht normal, wenn DA# mit API ausgeführt wird.
  • Was zu tun ist
    • Führen Sie die Eingabeaufforderung im Administratormodus aus (Wichtig!!!)und registrieren Sie das DA# v5-Objekt erneut, indem Sie den folgenden Befehl eingeben.
    • Wenn DA# in einem anderen Pfad als dem Standardpfad installiert ist, wechseln Sie zu diesem Pfad und führen Sie den Befehl „RegisterServer.bat“ aus.
cd "C:\Program Files (x86)\ENCORE\DATAWARE_DA5\DA Modeler"
RegisterServer.bat

Führen Sie nach Ausführung des obigen Befehls das DA#-Makro erneut aus, um zu prüfen, ob die Anomalie behoben ist.

3.2.3. Umgekehrte Informationssammlung SQL (für Oracle)

Dies ist ein Beispiel für SQL, das die Liste der Tabellen, Spalten und FKs erfasst, die für die Umkehrung in Oracle Database erforderlich sind.

Die Berechtigung „SELECT ANY DICTIONARY“ ist erforderlich, um diese SQL auszuführen.

-- TABLE 목록
SELECT ROW_NUMBER() OVER(ORDER BY A.OWNER, A.TABLE_NAME) AS RNO
      ,'모델1' AS 모델명, '주제영역1' AS 주제영역명, '그룹1' AS 엔터티그룹명
      ,CASE
         WHEN INSTR(T.COMMENTS, CHR(10)) > 0 THEN A.TABLE_NAME -- COMMENT에 행분리 문자가 있는 경우 엔터티명 부적합하여 테이블명으로 사용
         WHEN T.COMMENTS IS NOT NULL THEN T.COMMENTS
         ELSE A.TABLE_NAME
       END AS 엔터티명
      ,A.TABLE_NAME AS 테이블명
      ,TRIM(TO_CHAR(A.NUM_ROWS, '9,999,999,999,999')) AS 동의어 -- 동의어에 총건수를 문자형으로 추출(comma 포함)
      ,A.TABLE_NAME AS 보조명
      ,A.OWNER AS DBOWNER
      ,NULL AS 분류, NULL AS "LEVEL", NULL AS 단계, NULL AS 유형, NULL AS 표준화, NULL AS 상태, NULL AS 발생주기, NULL AS 월간발생량, NULL AS "보존기한(월)"
      ,A.NUM_ROWS 총건수
      ,T.COMMENTS AS 정의
      ,NULL AS 데이터처리형태, NULL AS 특이사항, NULL AS Note, NULL AS TAG
      ,O.CREATED, O.LAST_DDL_TIME, A.LAST_ANALYZED, A.TEMPORARY
      ,'[COMMENT]: ' || T.COMMENTS || CHR(13) || CHR(10) ||
       '[NUM_ROWS]: ' || TRIM(TO_CHAR(A.NUM_ROWS, '9,999,999,999,999')) || CHR(13) || CHR(10) ||
       '[CREATED]: ' || TO_CHAR(O.CREATED, 'YYYY-MM-DD HH24:MI:SS') || CHR(13) || CHR(10) ||
       '[LAST_DDL_TIME]: ' || TO_CHAR(O.LAST_DDL_TIME, 'YYYY-MM-DD HH24:MI:SS') || CHR(13) || CHR(10) ||
       '[LAST_ANALYZED]: ' || TO_CHAR(A.LAST_ANALYZED, 'YYYY-MM-DD HH24:MI:SS') AS 정의2
  FROM DBA_TABLES A INNER JOIN DBA_OBJECTS O
         ON   ( A.OWNER = O.OWNER
            AND A.TABLE_NAME = O.OBJECT_NAME
            AND O.OBJECT_TYPE = 'TABLE')
       LEFT OUTER JOIN DBA_TAB_COMMENTS T
         ON   ( A.OWNER = T.OWNER
            AND A.TABLE_NAME = T.TABLE_NAME )
 WHERE 1=1
   AND A.TABLE_NAME NOT LIKE 'BIN$%'
   AND A.OWNER IN ('OWNER1', 'OWNER2')  -- 해당 OWNER 지정
--   AND A.TABLE_NAME = 'TABLE_NAME' -- 특정 TABLE만 포함 또는 제외
 ORDER  BY A.OWNER, A.TABLE_NAME
;

-- COLUMN 목록
WITH WC AS (
SELECT A.OWNER, A.TABLE_NAME, A.COLUMN_NAME, A.COLUMN_ID, A.DATA_TYPE
      ,CASE WHEN A.DATA_TYPE= 'NUMBER' AND A.DATA_SCALE > 0 THEN A.DATA_PRECISION||','||A.DATA_SCALE
            WHEN A.DATA_TYPE= 'NUMBER' AND A.DATA_SCALE = 0 THEN TO_CHAR(A.DATA_PRECISION)
            WHEN A.DATA_TYPE= 'NUMBER' AND A.DATA_SCALE IS NULL THEN ''
            WHEN A.DATA_TYPE IN ('DATE','TIMESTAMP','BLOB', 'CLOB')  THEN NULL
            WHEN A.DATA_TYPE LIKE 'TIMESTAMP%' THEN NULL
            ELSE TO_CHAR(A.DATA_LENGTH)
       END AS DATA_LENGTH
      ,A.DATA_PRECISION, A.DATA_SCALE
      ,DECODE(A.NULLABLE, 'Y','N','Y') AS NOT_NULL
      ,DECODE(B.COLUMN_NAME, NULL, 'N', 'Y') PRI_KEY
      ,B.POSITION PK_POSITION
      ,T.COMMENTS
      ,A.DEFAULT_LENGTH
--      ,A.DATA_DEFAULT
      ,CASE
         WHEN A.DEFAULT_LENGTH IS NULL THEN NULL
         ELSE EXTRACTVALUE
           ( DBMS_XMLGEN.GETXMLTYPE
             ( 'SELECT DATA_DEFAULT FROM DBA_TAB_COLUMNS WHERE OWNER = ''' || A.OWNER || ''' AND TABLE_NAME = ''' || A.TABLE_NAME || ''' AND COLUMN_NAME = ''' || A.COLUMN_NAME || '''' )
           , '//text()' )
       END AS DATA_DEFAULT
      ,A.LAST_ANALYZED, A.NUM_DISTINCT
--      ,A.LOW_VALUE
      ,DECODE(DATA_TYPE
              ,'NUMBER'       ,TO_CHAR(UTL_RAW.CAST_TO_NUMBER(LOW_VALUE))
              ,'VARCHAR2'     ,TO_SINGLE_BYTE(UTL_RAW.CAST_TO_VARCHAR2(LOW_VALUE))
              ,'CHAR'         ,TO_SINGLE_BYTE(UTL_RAW.CAST_TO_VARCHAR2(LOW_VALUE))
              ,'NVARCHAR2'    ,TO_CHAR(UTL_RAW.CAST_TO_NVARCHAR2(LOW_VALUE))
              ,'BINARY_DOUBLE',TO_CHAR(UTL_RAW.CAST_TO_BINARY_DOUBLE(LOW_VALUE))
              ,'BINARY_FLOAT' ,TO_CHAR(UTL_RAW.CAST_TO_BINARY_FLOAT(LOW_VALUE))
              ,'DATE',DECODE(LOW_VALUE, NULL, NULL, TO_CHAR(1780+TO_NUMBER(SUBSTR(LOW_VALUE,1,2),'XX')
                     +TO_NUMBER(SUBSTR(LOW_VALUE,3,2),'XX'))||'-'
                   ||TRIM(TO_CHAR(TO_NUMBER(SUBSTR(LOW_VALUE,5,2), 'XX'), '00'))||'-'
                   ||TRIM(TO_CHAR(TO_NUMBER(SUBSTR(LOW_VALUE,7,2), 'XX'), '00'))||' '
                   ||TRIM(TO_CHAR(TO_NUMBER(SUBSTR(LOW_VALUE,9,2),'XX')-1, '00'))||':'
                   ||TRIM(TO_CHAR(TO_NUMBER(SUBSTR(LOW_VALUE,11,2),'XX')-1, '00'))||':'
                   ||TRIM(TO_CHAR(TO_NUMBER(SUBSTR(LOW_VALUE,13,2),'XX')-1, '00')))
              ,LOW_VALUE
              ) LOW_VALUE
--      ,A.HIGH_VALUE
      ,DECODE(DATA_TYPE
              ,'NUMBER'       ,TO_CHAR(UTL_RAW.CAST_TO_NUMBER(HIGH_VALUE))
              ,'VARCHAR2'     ,TO_SINGLE_BYTE(UTL_RAW.CAST_TO_VARCHAR2(HIGH_VALUE))
              ,'CHAR'         ,TO_SINGLE_BYTE(UTL_RAW.CAST_TO_VARCHAR2(HIGH_VALUE))
              ,'NVARCHAR2'    ,TO_CHAR(UTL_RAW.CAST_TO_NVARCHAR2(HIGH_VALUE))
              ,'BINARY_DOUBLE',TO_CHAR(UTL_RAW.CAST_TO_BINARY_DOUBLE(HIGH_VALUE))
              ,'BINARY_FLOAT' ,TO_CHAR(UTL_RAW.CAST_TO_BINARY_FLOAT(HIGH_VALUE))
              ,'DATE',DECODE(HIGH_VALUE, NULL, NULL, TO_CHAR(1780+TO_NUMBER(SUBSTR(HIGH_VALUE,1,2),'XX')
                     +TO_NUMBER(SUBSTR(HIGH_VALUE,3,2),'XX'))||'-'
                   ||TRIM(TO_CHAR(TO_NUMBER(SUBSTR(HIGH_VALUE,5,2), 'XX'), '00'))||'-'
                   ||TRIM(TO_CHAR(TO_NUMBER(SUBSTR(HIGH_VALUE,7,2), 'XX'), '00'))||' '
                   ||TRIM(TO_CHAR(TO_NUMBER(SUBSTR(HIGH_VALUE,9,2),'XX')-1, '00'))||':'
                   ||TRIM(TO_CHAR(TO_NUMBER(SUBSTR(HIGH_VALUE,11,2),'XX')-1, '00'))||':'
                   ||TRIM(TO_CHAR(TO_NUMBER(SUBSTR(HIGH_VALUE,13,2),'XX')-1, '00')))
              ,HIGH_VALUE
               ) HIGH_VALUE
      ,TB.NUM_ROWS, A.NUM_NULLS, A.CHAR_USED, A.AVG_COL_LEN
  FROM DBA_TABLES TB LEFT OUTER JOIN DBA_TAB_COLUMNS A
         ON (TB.OWNER = A.OWNER
         AND TB.TABLE_NAME = A.TABLE_NAME)
       LEFT OUTER JOIN
       (SELECT C.OWNER, C.TABLE_NAME, C.COLUMN_NAME, C.POSITION
          FROM DBA_CONS_COLUMNS C INNER JOIN DBA_CONSTRAINTS S
                 ON  ( C.OWNER = S.OWNER
                   AND C.TABLE_NAME = S.TABLE_NAME
                   AND C.CONSTRAINT_NAME = S.CONSTRAINT_NAME )
         WHERE S.CONSTRAINT_TYPE = 'P'
       ) B
         ON  ( A.OWNER = B.OWNER
           AND A.TABLE_NAME = B.TABLE_NAME
           AND A.COLUMN_NAME = B.COLUMN_NAME )
       LEFT OUTER JOIN ALL_COL_COMMENTS T
         ON  ( T.OWNER = A.OWNER
           AND T.TABLE_NAME = A.TABLE_NAME
           AND T.COLUMN_NAME = A.COLUMN_NAME )
 WHERE 1=1
   AND A.OWNER IN ('OWNER1', 'OWNER2')  -- 해당 OWNER 지정
   AND A.TABLE_NAME NOT LIKE 'BIN$%'
   AND NOT EXISTS ( SELECT 'X'  -- View column 제외 조건
                      FROM DBA_VIEWS V
                     WHERE V.OWNER = A.OWNER
                       AND V.VIEW_NAME = A.TABLE_NAME )
   --AND A.TABLE_NAME = 'TABLE_NAME'
-- ORDER BY OWNER, TABLE_NAME, COLUMN_ID
)
SELECT ROW_NUMBER() OVER(ORDER BY OWNER, TABLE_NAME, COLUMN_ID) AS RNO
--      ,ROW_NUMBER() OVER(PARTITION BY OWNER, TABLE_NAME ORDER BY COLUMN_ID) AS COLNO
      ,'모델1' AS 모델명
      ,'' AS 엔터티명
      ,CASE
         WHEN INSTR(COMMENTS, CHR(10)) > 0 THEN COLUMN_NAME -- COMMENT에 행분리 문자가 있는 경우 속성명 부적합하여 컬럼명으로 사용
         WHEN COMMENTS IS NOT NULL THEN COMMENTS
         ELSE COLUMN_NAME
       END AS 속성명
      ,TABLE_NAME AS 테이블명
      ,COLUMN_NAME AS 컬럼명
      ,COMMENTS AS 정의
      ,COLUMN_NAME AS 보조명
      ,COLUMN_NAME AS 동의어
      ,TABLE_NAME AS Reverse테이블명
      ,COLUMN_NAME AS Reverse컬럼명
      ,DATA_TYPE AS ReverseType
      ,DATA_LENGTH AS ReverseLENGTH
      ,PRI_KEY AS PK
      ,NOT_NULL AS NOTNULL
      ,NULL AS 유형
      ,DATA_TYPE AS 데이터타입
      ,DATA_PRECISION AS 길이
      ,DATA_SCALE AS 소수점
      ,DATA_DEFAULT AS 기본값
      ,NULL AS 기본값, NULL AS 도메인, NULL AS "FK", NULL AS 핵심속성여부, NULL AS 본질식별자여부
      ,NULL AS 보조식별자여부, NULL AS 표준동기화여부, NULL AS 비상속여부, NULL AS 표준화
      ,NULL AS 정보보호여부, NULL AS 정보보호등급, NULL AS 암호화여부, NULL AS 스크램블
      ,'[COMMENT]: ' || COMMENTS || CHR(13) || CHR(10) ||
       '[NUM_ROWS]: ' || TRIM(TO_CHAR(NUM_ROWS, '9,999,999,999,999')) || CHR(13) || CHR(10) ||
       '[NUM_DISTINCT]: ' || TRIM(TO_CHAR(NUM_DISTINCT, '9,999,999,999,999')) || CHR(13) || CHR(10) ||
       '[NUM_NULLS]: ' || TRIM(TO_CHAR(NUM_NULLS, '9,999,999,999,999')) || CHR(13) || CHR(10) ||
       '[NULL%] : ' || DECODE(NVL(NUM_ROWS, 0), 0, 0, ROUND(NUM_NULLS / NUM_ROWS, 5) * 100) || '%' || CHR(13) || CHR(10) ||
       '[MIN_VALUE]: ' || LOW_VALUE || CHR(13) || CHR(10) ||
       '[MAX_VALUE]: ' || HIGH_VALUE  AS 정의2
--      ,WC.*
  FROM WC
 WHERE NUM_NULLS > 0
 ORDER BY OWNER, TABLE_NAME, COLUMN_ID
;

-- FK 목록
WITH WFK AS (
SELECT DISTINCT
       C2.OWNER AS P_OWNER
      ,C2.TABLE_NAME P_TABLE_NAME
      ,LISTAGG (C2.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY C2.POSITION)
         OVER ( PARTITION BY C1.OWNER, C1.TABLE_NAME, C1.CONSTRAINT_NAME, C2.OWNER, C2.TABLE_NAME) AS P_COLUMN_LIST
      ,C1.OWNER AS C_OWNER
      ,C1.TABLE_NAME AS C_TABLE_NAME
      ,C1.CONSTRAINT_NAME AS C_CONSTRAINT_NAME
  FROM DBA_CONSTRAINTS C1 INNER JOIN DBA_CONS_COLUMNS C2
         ON (C1.R_CONSTRAINT_NAME = C2.CONSTRAINT_NAME
         AND C1.R_OWNER = C2.OWNER)
 WHERE C1.OWNER IN ('OWNER1', 'OWNER2')  -- 해당 DB의 테이블 OWNER 지정
   AND C1.CONSTRAINT_TYPE = 'R'
 ORDER BY C2.OWNER, C2.TABLE_NAME
)
SELECT '모델1' AS 모델명
      ,P_TABLE_NAME AS 부모엔터티명
      ,P_TABLE_NAME AS 부모테이블명
      ,C_TABLE_NAME AS 자식엔터티명
      ,C_TABLE_NAME AS 자식테이블명
      ,P_TABLE_NAME || '->' || C_TABLE_NAME AS 관계명
      ,NULL AS 정의, NULL AS 관계유형, NULL AS 기수성, NULL AS 선택성, NULL AS 식별성
      ,NULL AS 부모엔터티관계동사, NULL AS 자식엔터티관계동사
  FROM WFK
;

Wenn Sie das obige SQL verwenden, beachten Sie Folgendes.

  • Überprüfen Sie den Zielbesitzer (Schema) und ändern Sie ihn. (Zeile 32, 116, 179)
  • Wählen Sie aus, ob die Definition der Tabelle als Kommentar (Zeile 15) oder als Wert, der mehrere Spalten kombiniert (Zeile 18-22), gekennzeichnet werden soll.
  • Die Spaltendefinition verwendet die statistischen Informationen von Oracle, um die folgenden Informationen zu extrahieren.
    • COMMENT: Spaltenkommentar
    • NUM_ROWS: Anzahl der Tabellenzeilen
    • NUM_DISTINCT: Anzahl der Werte mit entfernten Duplikaten
    • NUM_NULLS: Zeilenanzahl, bei der der entsprechende Spaltenwert NULL ist
    • NULL%: (NUM_NULLS / NUM_ROWS) * Verhältnis von Nullzeilen von allen Zeilen, berechnet als 100
    • MIN_VALUE: Der Minimalwert der entsprechenden Spalte (extrahiert aus DBA_TAB_COLUMNS.LOW_VALUE gemäß DATA_TYPE)
    • MAX_VALUE: Der maximale Wert der Spalte (extrahiert aus DBA_TAB_COLUMNS.HIGH_VALUE gemäß DATA_TYPE)
  • Informationen zu MIN_VALUE und MAX_VALUE der Spalte finden Sie im Folgenden. (Zeilen 63-78, 80-95)
    • ORA-29275: Wenn ein partieller Multibyte-Zeichenfehler auftritt, wenden Sie die Funktion to_single_byte an, und wenn der Fehler weiterhin auftritt, schließen Sie die Maximal- und Minimalwerte aus und extrahieren Sie sie.
    • Ändern Sie beim Extrahieren außer den Maximal- und Minimalwerten die Spaltendefinition (Zeile 158 und 159) zusammen.
  • Wenn es lange dauert oder unmöglich ist, das Konto, die Zugriffsinformationen und die Berechtigungen zum Ausführen von SQL zu erhalten, liefern Sie das SQL an den DBA oder IT-Administrator, speichern Sie das Ausführungsergebnis als Excel-Datei und fordern Sie eine Antwort an.
  • Das Ergebnis der Ausführung der drei SQLs kann als drei Dateien (ein Blatt für jede Datei) oder als eine Datei (drei Blätter) empfangen werden.

4. DA#-Makro-Download, Funktionen werden in Zukunft hinzugefügt, Hinweis

4.1. Laden Sie das Makro DA# herunter

Sie können es im Github-Repository unten überprüfen.

https://github.com/DAToolset/DA-Macro

DA# Macro GitHub Repository
DA#-Makro-GitHub-Repository

Alternativ können Sie direkt von dieser URL herunterladen.

https://github.com/DAToolset/DA-Macro/raw/main/DA%23%20Macro_v2.12_20210814.xlsm

4.2. DA# Makrofunktion wird in Zukunft hinzugefügt

DA# Macro plant, die folgenden Funktionen zusätzlich zu den derzeit implementierten Funktionen hinzuzufügen.

  • Untertypeigenschaften abrufen/festlegen: Verwaltete Eigenschaften innerhalb eines Untertyps abrufen/festlegen (einschließlich hierarchischer Eigenschaften)
  • AR-Modell abrufen/festlegen: AR-Modelle abrufen/festlegen, indem sie in der Baumansicht abgefragt und mehrere Modelle ausgewählt werden
  • Beziehung Get/Set: Beziehung Get/Set zwischen Entitäten
  • Erweitern Sie die Platzierungsmethoden für Entitäten

4.3. Hinweis für Benutzer

Anfragen zu Fehlern, Funktionsverbesserungen, zusätzlichen Funktionen usw. senden Sie uns bitte Blog-Kommentare oder E-Mails. Da dieses Tool jedoch als Hobby entwickelt wird, kann nicht schnell auf die Anforderungen reagiert werden. Wenn ich Freizeit habe, werde ich die Funktion reflektieren und bei Bedarf verteilen. Der Verteilungszyklus ist auch nicht regelmäßig.

Der Quellcode wird zusammen bereitgestellt. Wenn Sie also über notwendige Funktionen verfügen, wäre es sehr dankbar, wenn Sie diese reflektieren und erneut mit mir teilen.


Bisher haben wir alles über die Verwendung des DA#-Makros gelernt. Als nächstes werfen wir einen Blick auf den Quellcode des DA#-Makros.


<< Liste verwandter Artikel >>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEDeutsch