Conversion Table Questions: problems converting tables to structured
I'm in the process of converting unstructed FM8 docs to structured docs using FM10 and DITA structure. Right now I'm trying to build a conversion table to structure the docs, but I'm having a lot of trouble with the tables. The main problem seems to be with the tgroup element since I can't figure out how to get the thead and tbody to wrap in the tgroup element.
Here is an example of one of the tables I'm trying to structure:
This is the Table section of the conversion table I've had the most success with:
And this is the result:
As you can see, the thead and tbody elements are not wrapped in tgroup and the structure is invalid. I've been playing around with the conversion table for several days now and can't seem to figure out how to fix this. If anyone has any suggestions, they would be greatly appreciated!
Thanks,
D'Arcy
D'Arcy,
Here are a few observations that might help:
1) The structure you use within FM (which is what the conversion table helps create) need not be exactly the same as the structure you use in XML.
2) Do not confuse the element named table with a FrameMaker table.
3) As Michael has pointed out, the CALS table model used by DITA is a five-level structure:
table
tgroup
tbody
row
entry
while the FrameMaker table model has 4 levels:
table
tbody
row
cell
4) FrameMaker can map between the 5-level structure and the 4-level structure in one of two ways, controlled by the element definitions (usually specified in an EDD), the read/write rules, and the DTD:
a) The element named table can be a container while the element named tgroup is the actual table. This model has a closer correspondence between the FrameMaker and the DITA table structure. Michael has pointed out one of its biggest weaknesses. If a FrameMaker table (regardless of its element name) has a title, then FrameMaker repeats the title on each page of a multipage table. However, if the element named table is a container and the actual table is an element named tgroup, the title is a container preceding the table and this automatic repetition does not happen.
b) If you are sure that your tables will always consist of a single tgroup, you don't have to use the tgroup element within FrameMaker. Make the element named table a FrameMaker table and include the read/write rule:
element "tgroup" unwrap;
FrameMaker will recreate the tgroup element whenever you save a document as XML. This model allows you to make the table title a FrameMaker table. However, you cannot use the element named title as both a FrameMaker table title and a container. Typically, therefore, people use the element named title as a container that is the title of things like chapters and sections and use an element named something like tabletitle for the title of tables.
Read/write rules like:
element "title" is fm element:
element "title" is fm table title element "tabletitle"'
let you save your documents as XML with both title and tabletitle represented as <title> in XML. You'll need to use a custom client or XSLT to map the XML element named title to either title or tabletitle depending on whether the XML element occurs within a table or not.
5) Your conversion table had one row with T: in column 1 and another with T:Format A in column 1; one mapped to table and the other to tgroup. The row with T:Format A would apply to all tables with the specified format, the other row would apply to all tables with other formats. These conversion table rows do not define a relationship between table and tgroup. Map T: to table if you want the model in 4b) above and to tgroup if you want the model in 4a). In the latter case, use an additional row with:
title?, tgroup
in column 1 and table in column 2.
--Lynne
Similar Messages
-
Conversion from word problems with images
Hi ,
I managed to make a conversion table to structure the documents of out company.I am having a proble with images.I am importing the word file to our template with a custom EDD document.When the import finishes I am having all images at almost correct places.The issue is when i apply the custom conversion table all the images at anchored at insertion point.The correct position would be at below current line.I am stuck and I can not find a solution to this.
My EDD is as follows:
EDD Version is 12.0
Structured Application: ReportPlain
F:\FramemakerBooks\Part B -Section 3.fm
April 14, 2014
Element (Container): Author
General rule: <TEXT>
Text format rules
In all contexts.
Use paragraph format: ReportAuthor
Element (Container): Emphasis
General rule: <TEXTONLY>
Text format rules
In all contexts.
Text range.
Use character format: Emphasis
Element (Equation): Equation
Element (Container): EquationPara
General rule: Equation
Text format rules
Element paragraph format: Equation
Element (Container): Extract
General rule: (<TEXT> | Emphasis | Term | Superscript | Subscript | XRef)*
Attribute list
Name: ID Unique ID Optional
Text format rules
In all contexts.
Use paragraph format: Extract
Element (Container): Figure
General rule: (<TEXT> | Frame)*
Attribute list
Name: ID Unique ID Optional
Name: XRefLabel String Optional
Default: Figure
Name: Imported Choice Optional
Choices: Yes, No
Default: No
Text format rules
In all contexts.
Use paragraph format: Figure
Element (Footnote): Footnote
General rule: <TEXT>
Text format rules
In all contexts.
Use paragraph format: Footnote
If context is: * < Table
Use paragraph format: TableFootnote
Element (Graphic): GRAPHIC
Initial graphic element format
In all contexts.
Insert anchored frame.
Anchored Frame Object Style:FiguredCentered
Element (Graphic): Frame
Initial graphic element format
If context is: Figure[Imported = "Yes"]
Insert imported graphic file.
Else
Insert anchored frame.
Element (Container): Head
General rule: <TEXT>
Text format rules
Count ancestors named: Section
If level is: 1
Context label: H1
Use paragraph format: Heading1
Else, if level is: 2
Context label: H2
Use paragraph format: Heading2
Else, if level is: 3
Context label: H3
Use paragraph format: Heading3
Else, if level is: 4
Context label: H4
Use paragraph format: Heading4
Else, if level is: 5
Context label: H5
Use paragraph format: HeadingRunIn
Else
Numbering properties
Autonumber format:
If context is: {first} < Report
Use paragraph format: ReportTitle
Else, if context is: HeadingRunIn
Use paragraph format: HeadingRunIn
Element (Container): HeadingRunIn
General rule: Head, Para+
Element (Container): Item
General rule: (<TEXT> | Emphasis | Term | Superscript | Subscript | XRef | Para)*
Format rules for first paragraph in element
If context is: List[Type = "Plain"]
No additional formatting.
Else, if context is: List[Type = "Bulleted"]
Use paragraph format: Bulleted clean
Else, if context is: {first}
Use paragraph format: Numbered1
Else
Use paragraph format: Numbered
Element (Container): List
General rule: Item+
Attribute list
Name: ID Unique ID Optional
Name: Type Choice Optional
Choices: Plain, Bulleted, Numbered
Default: Bulleted
Automatic insertions
Automatically insert child: Item
Element (Container): Para
General rule: (<TEXT> | Emphasis | Term | Superscript | Subscript | XRef | Footnote | Table )*
Attribute list
Name: ID Unique ID Optional
Text format rules
If context is: {after Head }
Use paragraph format: Body
Else, if context is: {after List}
Use paragraph format: BodyAfterHead
Else
Use paragraph format: Body
Element (Container): Part
Valid as the highest-level element.
General rule: (Para | Footnote | Table | Section )*
Attribute list
Name: ID Unique ID Optional
Control flags: Read-only
Automatic insertions
Automatically insert child: Head
Text format rules
Element paragraph format: Body
Element (Container): Purpose
General rule: <TEXT>
Text format rules
Element paragraph format: ReportPurpose
Element (Container): Section
General rule: (Section,Head |Section | Para | List | Table | Figure | HeadingRunIn )*
Attribute list
Name: ID Unique ID Optional
Name: XRefLabel String Optional
Default: Section
Automatic insertions
Automatically insert child: Head
Element (Container): Subscript
General rule: <TEXTONLY>
Text format rules
In all contexts.
Text range.
Font properties
Superscript/Subscript: Subscript
Element (Container): Superscript
General rule: <TEXTONLY>
Text format rules
In all contexts.
Text range.
Font properties
Superscript/Subscript: Superscript
Element (Table): Table
General rule: TableTitle?, TableHead?, TableBody
Attribute list
Name: ID Unique ID Optional
Control flags: Read-only
Name: XRefLabel String Optional
Default: Table
Control flags: Read-only
Initial table format
In all contexts.
Table format: Format A
Element (Table Body): TableBody
General rule: TableRow+
Element (Table Cell): TableCell
General rule: (<TEXT> | Emphasis | Term | Superscript | Subscript | XRef | Frame| Para)*
Text format rules
Element paragraph format: Bodycell
Element (Table Heading): TableHead
General rule: TableHeadRow+
Element (Table Cell): TableHeadCell
General rule: <TEXT>
Element (Table Row): TableHeadRow
General rule: TableHeadCell+
Element (Table Row): TableRow
General rule: TableCell+
Element (Table Title): TableTitle
General rule: <TEXT>
Text format rules
Element paragraph format: TableTitle
Element (Container): Term
General rule: <TEXTONLY>
Text format rules
In all contexts.
Text range.
Use character format: Emphasis
Element (CrossReference): XRef
Attribute list
Name: IDRef ID Reference Required
Control flags: Read-only
Limit values for format change list properties
First indent
Maximum: 39.0"
Minimum: 0.0"
Left indent
Maximum: 39.0"
Minimum: 0.0"
Right indent
Maximum: 39.0"
Minimum: 0.0"
Space above
Maximum: 32767.0 pt
Minimum: -32767.0 pt
Space below
Maximum: 32767.0 pt
Minimum: -32767.0 pt
Line spacing
Maximum: 32767.0 pt
Minimum: -32767.0 pt
Tab stop position
Maximum: 39.0"
Minimum: 0.0"
Font size
Maximum: 400.0 pt
Minimum: 2.0 pt
Spread
Maximum: 1000.0%
Minimum: -1000.0%
Stretch
Maximum: 1000.0%
Minimum: 10.0%
Cell margins
Top
Maximum: 32767.0 pt
Minimum: 0.0 pt
Bottom
Maximum: 32767.0 pt
Minimum: 0.0 pt
Left
Maximum: 32767.0 pt
Minimum: 0.0 pt
Right
Maximum: 32767.0 pt
Minimum: 0.0 pt
And my conversion table is:
Wrap this object or objects In this element With this qualifier
TC: TableCell
P:Body Para
P:Normal Para
P:Heading 5 Head head5
E:Head[head5],(Para | Frame | List | Table )* Section section5
P:Heading 4 Head head4
E:Head[head4],(Para | Frame | List | Table | [section5])* Section section4
P:Heading 3 Head head3
Head[head3],(Para | List | Frame | Table | [section4])* Section section3
P:Heading 2 Head head2
Head[head2],(Para | List | Frame | Table | [section3])* Section section2
P:Heading 1 Head head1
Head[head1],(Para | List | Frame | Table | [section2])* Section section
T:Table Table (promote)
TT: TableTitle
TH: TableHead
TB: TableBody
TF: FOOTING
TR: TableRow
RE:RootElement Part
P:List Paragraph Item
Item+ List
G: GRAPHIC(promote)
RE:RootElement Part
I am almost done with the template"Application"I just need to place the pictures in the correct position.Can anyone point me to the right direction?
Thanks a lot in advanceDimitris,
I know you originally posted this question on the general FrameMaker forum. I suggest below that you post a follow-up question there.
The structure-based part of the issue is that neither a conversion table nor an EDD can change properties of an existing anchored frame. It seems that when you open your Word document in FrameMaker, the graphics come in positioned at the insertion point. That doesn't change when you apply the conversion table. Your EDD does specify object style FiguredCentered as the initial format for GRAPHIC elements. The keyword here is "initial". The EDD can indicate a style for new anchored frames that are created by inserting an element. It does not allow you to change existing anchored frames.
So the real problem is how to make a global change to all existing anchored frames (either assigning an object style or changing the position to Below Current Line) so that you don't have to change them one at a time. I am not aware of a way to do so with existing FrameMaker commands. You could use a script or plug-in, or save the document as MIF and make a global change with a text editor in the MIF file. You might ask on the general FrameMaker forum if someone there knows an easier approach.
--Lynne -
Namespaces in conversion table
We're encountering an issue with the use of namespaces with elements in a conversion table. The Adobe documentation seems to suggest that namespaces are supported in Frame, and, in documents that are already structured, we encounter no problems.
However, when we attempt to convert an unstructured doc using namespaced elements in the second column of the conversion table, the process won't work. We get errors for every element that includes a namespace prefix.
We've tried to get around the issue by assigning qualifiers in the third column and then using those in the first column, but with no luck.
Any thoughts or suggestions would be much appreciated.Quoted from the Structure Developer Reference:
The following characters are not allowed in an element tag, but
can appear in a format or qualifier tag if you precede them with a backslash (\) in the table:
( ) & | , * + ? % [ ] : \
end quote.
The structure conversion tables have been around far longer than namespaces in XML, so we just have to hope that they get updated soon.
You will also find that some of FrameMaker's building blocks and EDD context rules have trouble with the colon character where it has long been used by FrameMaker for other purposes.
I tend to rename elements that have an XML namespace using XSLT, eg:
xml:lang in XML is transformed into xml.lang in FrameMaker which makes it possible to write EDD rules that refer to the value of the xml.lang attribute.
Ian -
Hi,
I am a beginer. I know how to create a structure and how to create an internal table using ABAP/4. My problem is, i don't understand where to use internal table and structure, also i find myself very confused about the explicit work areas.
Plese someone show me a program by explaining all of this clearly.Hi
Internal tables are the core of ABAP. They are like soul of a body. For any program we use
internal tables extensively. We can use Internal tables like normal data base tables only, but the
basic difference is the memory allocated for internal tables is temporary. Once the program is
closed the memory allocated for internal tables will also be out of memory.
But while using the internal tables, there are many performance issues to be considered. i.e which
type of internal table to be used for the program..like standard internal table, hashed internal
table or sorted internal table etc..
Internal tables
Internal tables provide a means of taking data from a fixed structure and storing it in working memory in ABAP. The data is stored line by
line in memory, and each line has the same structure. In ABAP, internal tables fulfill the function of arrays. Since they are dynamic data
objects, they save the programmer the task of dynamic memory management in his or her programs. You should use internal tables
whenever you want to process a dataset with a fixed structure within a program. A particularly important use for internal tables is for
storing and formatting data from a database table within a program. They are also a good way of including very complicated data
structures in an ABAP program.
Like all elements in the ABAP type concept, internal tables can exist both as data types and as data objects A data type is the abstract
description of an internal table, either in a program or centrally in the ABAP Dictionary, that you use to create a concrete data object. The
data type is also an attribute of an existing data object.
Internal Tables as Data Types
Internal tables and structures are the two structured data types in ABAP. The data type of an internal table is fully specified by its line type,
key, and table type.
Line type
The line type of an internal table can be any data type. The data type of an internal table is normally a structure. Each component of the
structure is a column in the internal table. However, the line type may also be elementary or another internal table.
Key
The key identifies table rows. There are two kinds of key for internal tables - the standard key and a user-defined key. You can specify
whether the key should be UNIQUE or NON-UNIQUE. Internal tables with a unique key cannot contain duplicate entries. The uniqueness
depends on the table access method.
If a table has a structured line type, its default key consists of all of its non-numerical columns that are not references or themselves
internal tables. If a table has an elementary line type, the default key is the entire line. The default key of an internal table whose line type
is an internal table, the default key is empty.
The user-defined key can contain any columns of the internal table that are not references or themselves internal tables. Internal tables
with a user-defined key are called key tables. When you define the key, the sequence of the key fields is significant. You should remember
this, for example, if you intend to sort the table according to the key.
Table type
The table type determines how ABAP will access individual table entries. Internal tables can be divided into three types:
Standard tables have an internal linear index. From a particular size upwards, the indexes of internal tables are administered as trees. In
this case, the index administration overhead increases in logarithmic and not linear relation to the number of lines. The system can access
records either by using the table index or the key. The response time for key access is proportional to the number of entries in the table.
The key of a standard table is always non-unique. You cannot specify a unique key. This means that standard tables can always be filled
very quickly, since the system does not have to check whether there are already existing entries.
Sorted tables are always saved sorted by the key. They also have an internal index. The system can access records either by using the
table index or the key. The response time for key access is logarithmically proportional to the number of table entries, since the system
uses a binary search. The key of a sorted table can be either unique or non-unique. When you define the table, you must specify whether
the key is to be unique or not. Standard tables and sorted tables are known generically as index tables.
Hashed tables have no linear index. You can only access a hashed table using its key. The response time is independent of the number of
table entries, and is constant, since the system access the table entries using a hash algorithm. The key of a hashed table must be unique.
When you define the table, you must specify the key as UNIQUE.
Generic Internal Tables
Unlike other local data types in programs, you do not have to specify the data type of an internal table fully. Instead, you can specify a
generic construction, that is, the key or key and line type of an internal table data type may remain unspecified. You can use generic
internal tables to specify the types of field symbols and the interface parameters of procedures . You cannot use them to declare data
objects.
Internal Tables as Dynamic Data Objects
Data objects that are defined either with the data type of an internal table, or directly as an internal table, are always fully defined in
respect of their line type, key and access method. However, the number of lines is not fixed. Thus internal tables are dynamic data objects,
since they can contain any number of lines of a particular type. The only restriction on the number of lines an internal table may contain are
the limits of your system installation. The maximum memory that can be occupied by an internal table (including its internal administration)
is 2 gigabytes. A more realistic figure is up to 500 megabytes. An additional restriction for hashed tables is that they may not contain more
than 2 million entries. The line types of internal tables can be any ABAP data types - elementary, structured, or internal tables. The
individual lines of an internal table are called table lines or table entries. Each component of a structured line is called a column in the
internal table.
Choosing a Table Type
The table type (and particularly the access method) that you will use depends on how the typical internal table operations will be most
frequently executed.
Standard tables
This is the most appropriate type if you are going to address the individual table entries using the index. Index access is the quickest
possible access. You should fill a standard table by appending lines (ABAP APPEND statement), and read, modify and delete entries by
specifying the index (INDEX option with the relevant ABAP command). The access time for a standard table increases in a linear relationship
with the number of table entries. If you need key access, standard tables are particularly useful if you can fill and process the table in
separate steps. For example, you could fill the table by appending entries, and then sort it. If you use the binary search option with key
access, the response time is logarithmically proportional to the number of table entries.
Sorted tables
This is the most appropriate type if you need a table which is sorted as you fill it. You fill sorted tables using the INSERT statement. Entries
are inserted according to the sort sequence defined through the table key. Any illegal entries are recognized as soon as you try to add
them to the table. The response time for key access is logarithmically proportional to the number of table entries, since the system always
uses a binary search. Sorted tables are particularly useful for partially sequential processing in a LOOP if you specify the beginning of the
table key in the WHERE condition.
Hashed tables
This is the most appropriate type for any table where the main operation is key access. You cannot access a hashed table using its index.
The response time for key access remains constant, regardless of the number of table entries. Like database tables, hashed tables always
have a unique key. Hashed tables are useful if you want to construct and use an internal table which resembles a database table or for
processing large amounts of data.
Creating Internal Tables
Like other elements in the ABAP type concept, you can declare internal tables as abstract data
types in programs or in the ABAP Dictionary, and then use them to define data objects.
Alternatively, you can define them directly as data objects. When you create an internal table as a
data object, you should ensure that only the administration entry which belongs to an internal
table is declared statically. The minimum size of an internal table is 256 bytes. This is important if an
internal table occurs as a component of an aggregated data object, since even empty internal
tables within tables can lead to high memory usage. (In the next functional release, the size of the
table header for an initial table will be reduced to 8 bytes). Unlike all other ABAP data objects, you
do not have to specify the memory required for an internal table. Table rows are added to and
deleted from the table dynamically at runtime by the various statements for adding and deleting
records.
You can create internal tables in different types.
You can create standard internal table and then make it sort in side the program.
The same way you can change to hashed internal tables also.
There will be some performance issues with regard to standard internal tables/ hashed internal
tables/ sorted internal tables.
Internal table types
This section describes how to define internal tables locally in a program. You can also define internal tables globally as data types in the
ABAP Dictionary.
Like all local data types in programs , you define internal tables using the TYPES statement. If you do not refer to an existing table type
using the TYPE or LIKE addition, you can use the TYPES statement to construct a new local internal table in your program.
TYPES <t> TYPE|LIKE <tabkind> OF <linetype> [WITH <key>]
[INITIAL SIZE <n>].
After TYPE or LIKE, there is no reference to an existing data type. Instead, the type constructor occurs:
<tabkind> OF <linetype> [WITH <key>]
The type constructor defines the table type <tabkind>, the line type <linetype>, and the key <key> of the internal table <t>.
You can, if you wish, allocate an initial amount of memory to the internal table using the INITIAL SIZE addition.
Table type
You can specify the table type <tabkind> as follows:
Generic table types
INDEX TABLE
For creating a generic table type with index access.
ANY TABLE
For creating a fully-generic table type.
Data types defined using generic types can currently only be used for field symbols and for interface parameters in procedures . The generic
type INDEX TABLE includes standard tables and sorted tables. These are the two table types for which index access is allowed. You cannot
pass hashed tables to field symbols or interface parameters defined in this way. The generic type ANY TABLE can represent any table. You
can pass tables of all three types to field symbols and interface parameters defined in this way. However, these field symbols and
parameters will then only allow operations that are possible for all tables, that is, index operations are not allowed.
Fully-Specified Table Types
STANDARD TABLE or TABLE
For creating standard tables.
SORTED TABLE
For creating sorted tables.
HASHED TABLE
For creating hashed tables.
Fully-specified table types determine how the system will access the entries in the table in key operations. It uses a linear search for
standard tables, a binary search for sorted tables, and a search using a hash algorithm for hashed tables.
Line type
For the line type <linetype>, you can specify:
Any data type if you are using the TYPE addition. This can be a predefined ABAP type, a local type in the program, or a data type from the
ABAP Dictionary. If you specify any of the generic elementary types C, N, P, or X, any attributes that you fail to specify (field length, number
of decimal places) are automatically filled with the default values. You cannot specify any other generic types.
Any data object recognized within the program at that point if you are using the LIKE addition. The line type adopts the fully-specified data
type of the data object to which you refer. Except for within classes, you can still use the LIKE addition to refer to database tables and
structures in the ABAP Dictionary (for compatibility reasons).
All of the lines in the internal table have the fully-specified technical attributes of the specified data type.
Key
You can specify the key <key> of an internal table as follows:
[UNIQUE|NON-UNIQUE] KEY <col1> ... <col n>
In tables with a structured line type, all of the components <coli> belong to the key as long as they are not internal tables or references,
and do not contain internal tables or references. Key fields can be nested structures. The substructures are expanded component by
component when you access the table using the key. The system follows the sequence of the key fields.
[UNIQUE|NON-UNIQUE] KEY TABLE LINE
If a table has an elementary line type (C, D, F, I, N, P, T, X), you can define the entire line as the key. If you try this for a table whose line
type is itself a table, a syntax error occurs. If a table has a structured line type, it is possible to specify the entire line as the key. However,
you should remember that this is often not suitable.
[UNIQUE|NON-UNIQUE] DEFAULT KEY
This declares the fields of the default key as the key fields. If the table has a structured line type, the default key contains all non-numeric
columns of the internal table that are not and do not contain references or internal tables. If the table has an elementary line type, the
default key is the entire line. The default key of an internal table whose line type is an internal table, the default key is empty.
Specifying a key is optional. If you do not specify a key, the system defines a table type with an arbitrary key. You can only use this to
define the types of field symbols and the interface parameters of procedures . For exceptions, refer to Special Features of Standard Tables.
The optional additions UNIQUE or NON-UNIQUE determine whether the key is to be unique or non-unique, that is, whether the table can
accept duplicate entries. If you do not specify UNIQUE or NON-UNIQUE for the key, the table type is generic in this respect. As such, it can
only be used for specifying types. When you specify the table type simultaneously, you must note the following restrictions:
You cannot use the UNIQUE addition for standard tables. The system always generates the NON-UNIQUE addition automatically.
You must always specify the UNIQUE option when you create a hashed table.
Initial Memory Requirement
You can specify the initial amount of main memory assigned to an internal table object when you define the data type using the following
addition:
INITIAL SIZE <n>
This size does not belong to the data type of the internal table, and does not affect the type check. You can use the above addition to
reserve memory space for <n> table lines when you declare the table object.
When this initial area is full, the system makes twice as much extra space available up to a limit of 8KB. Further memory areas of 12KB each
are then allocated.
You can usually leave it to the system to work out the initial memory requirement. The first time you fill the table, little memory is used. The
space occupied, depending on the line width, is 16 <= <n> <= 100.
It only makes sense to specify a concrete value of <n> if you can specify a precise number of table entries when you create the table and
need to allocate exactly that amount of memory (exception: Appending table lines to ranked lists). This can be particularly important for
deep-structured internal tables where the inner table only has a few entries (less than 5, for example).
To avoid excessive requests for memory, large values of <n> are treated as follows: The largest possible value of <n> is 8KB divided by the
length of the line. If you specify a larger value of <n>, the system calculates a new value so that n times the line width is around 12KB.
Examples
TYPES: BEGIN OF LINE,
COLUMN1 TYPE I,
COLUMN2 TYPE I,
COLUMN3 TYPE I,
END OF LINE.
TYPES ITAB TYPE SORTED TABLE OF LINE WITH UNIQUE KEY COLUMN1.
The program defines a table type ITAB. It is a sorted table, with line type of the structure LINE and a unique key of the component
COLUMN1.
TYPES VECTOR TYPE HASHED TABLE OF I WITH UNIQUE KEY TABLE LINE.
TYPES: BEGIN OF LINE,
COLUMN1 TYPE I,
COLUMN2 TYPE I,
COLUMN3 TYPE I,
END OF LINE.
TYPES ITAB TYPE SORTED TABLE OF LINE WITH UNIQUE KEY COLUMN1.
TYPES: BEGIN OF DEEPLINE,
FIELD TYPE C,
TABLE1 TYPE VECTOR,
TABLE2 TYPE ITAB,
END OF DEEPLINE.
TYPES DEEPTABLE TYPE STANDARD TABLE OF DEEPLINE
WITH DEFAULT KEY.
The program defines a table type VECTOR with type hashed table, the elementary line type I and a unique key of the entire table line. The
second table type is the same as in the previous example. The structure DEEPLINE contains the internal table as a component. The table
type DEEPTABLE has the line type DEEPLINE. Therefore, the elements of this internal table are themselves internal tables. The key is the
default key - in this case the column FIELD. The key is non-unique, since the table is a standard table.
Internal table objects
Internal tables are dynamic variable data objects. Like all variables, you declare them using the DATA statement. You can also declare static
internal tables in procedures using the STATICS statement, and static internal tables in classes using the CLASS-DATA statement. This
description is restricted to the DATA statement. However, it applies equally to the STATICS and CLASS-DATA statements.
Reference to Declared Internal Table Types
Like all other data objects, you can declare internal table objects using the LIKE or TYPE addition of the DATA statement.
DATA <itab> TYPE <type>|LIKE <obj> [WITH HEADER LINE].
Here, the LIKE addition refers to an existing table object in the same program. The TYPE addition can refer to an internal type in the
program declared using the TYPES statement, or a table type in the ABAP Dictionary.
You must ensure that you only refer to tables that are fully typed. Referring to generic table types (ANY TABLE, INDEX TABLE) or not
specifying the key fully is not allowed (for exceptions, refer to Special Features of Standard Tables).
The optional addition WITH HEADER line declares an extra data object with the same name and line type as the internal table. This data
object is known as the header line of the internal table. You use it as a work area when working with the internal table (see Using the
Header Line as a Work Area). When you use internal tables with header lines, you must remember that the header line and the body of the
table have the same name. If you have an internal table with header line and you want to address the body of the table, you must indicate
this by placing brackets after the table name (<itab>[]). Otherwise, ABAP interprets the name as the name of the header line and not of the
body of the table. You can avoid this potential confusion by using internal tables without header lines. In particular, internal tables nested
in structures or other internal tables must not have a header line, since this can lead to ambiguous expressions.
TYPES VECTOR TYPE SORTED TABLE OF I WITH UNIQUE KEY TABLE LINE.
DATA: ITAB TYPE VECTOR,
JTAB LIKE ITAB WITH HEADER LINE.
MOVE ITAB TO JTAB. <- Syntax error!
MOVE ITAB TO JTAB[].
The table object ITAB is created with reference to the table type VECTOR. The table object JTAB has the same data type as ITAB. JTAB also
has a header line. In the first MOVE statement, JTAB addresses the header line. Since this has the data type I, and the table type of ITAB
cannot be converted into an elementary type, the MOVE statement causes a syntax error. The second MOVE statement is correct, since
both operands are table objects.
Declaring New Internal Tables
You can use the DATA statement to construct new internal tables as well as using the LIKE or TYPE addition to refer to existing types or
objects. The table type that you construct does not exist in its own right; instead, it is only an attribute of the table object. You can refer to
it using the LIKE addition, but not using TYPE. The syntax for constructing a table object in the DATA statement is similar to that for defining
a table type in the TYPES statement.
DATA <itab> TYPE|LIKE <tabkind> OF <linetype> WITH <key>
[INITIAL SIZE <n>]
[WITH HEADER LINE].
As when you define a table type , the type constructor
<tabkind> OF <linetype> WITH <key>
defines the table type <tabkind>, the line type <linekind>, and the key <key> of the internal table <itab>. Since the technical attributes of
data objects are always fully specified, the table must be fully specified in the DATA statement. You cannot create generic table types (ANY
TABLE, INDEX TABLE), only fully-typed tables (STANDARD TABLE, SORTED TABLE, HASHED TABLE). You must also specify the key and whether
it is to be unique (for exceptions, refer to Special Features of Standard Tables).
As in the TYPES statement, you can, if you wish, allocate an initial amount of memory to the internal table using the INITIAL SIZE addition.
You can create an internal table with a header line using the WITH HEADER LINE addition. The header line is created under the same
conditions as apply when you refer to an existing table type.
DATA ITAB TYPE HASHED TABLE OF SPFLI
WITH UNIQUE KEY CARRID CONNID.
The table object ITAB has the type hashed table, a line type corresponding to the flat structure SPFLI from the ABAP Dictionary, and a
unique key with the key fields CARRID and CONNID. The internal table ITAB can be regarded as an internal template for the database table
SPFLI. It is therefore particularly suitable for working with data from this database table as long as you only access it using the key. -
Capturing a nested "Section" hierarchy with a Conversion Table?
(Frame 9) - I'm using a Conversion Table to convert a client's unstructured documents to structured. Much of the structure is importing with a certain amount of success, but I can't figure out how to capture the nested hierarchy. The client's template uses the same "Section" element with a "Title" child element for each level of the document.
I can capture the document headings from the H1, H2, H3 paragraph tags form the old document and wrap them in "Title" elements with H1, H2, H3 qualifiers but I can't figure out how to then wrap the Title elements in the corresponding Section elements that reflect the hierarchy levels. Frame must have an internal qualifier for the Section elements but I can't figure out how to look it up?
Thanks, ChrisChris,
It should work fine if you have the qualifiers properly specified in the rules for wrapping the sections. Here is a link to a working sample that shows how it is done, which coincidentally also uses Section elements (but Heading elements in place of Title elements):
http://www.weststreetconsulting.com/WSC_ResourceDownloads.htm
Get the FrameSLT sample.
Russ -
Conversion Table: Image with Title
I'm using conversation tables to move from Unstructured FM8 to Structured (DITA) FM10.
I am trying to move the existing tables and graphics with titles into the DITA structure. My understanding is that in DITA, it should look like this:
So I've developed my conversion table to look like this:
But when I run Structure Current Document, it doesn't wrap the (title[fig], image) in the figure element:
The one part that seems odd to me is that when I generate the conversion table, I don't see any row that represents the image element itself. Is that the problem? Is there something else that I should be doing?
Thanks!You need a row that has "G:" in column 1 and "image" in column 2 to indicate that anchored frames should map to the image element.
--Lynne -
Font sizes between Photoshop and Edge - Any Accurate conversion table?
I have been trying to make sense of the font sizes between Photoshop and Edge. It seems that the conversion tables I have found do not actually give the right numbers and I am wondering if there is a table from Adobe that would make it easy to have the right size rather than an approximation.
I prefer to use text in Edge rather than Photoshop for many different reasons one being dynamic text.
For example a font in Photoshop in a 780 x 475 image is 8pt - In Edge, according to conversion tables it should be 11 px but it is totally wrong. It needs to be closer to 30 px to be about the same.
So, Adobe Team, any documentation on that?By the way, I have to correct the numbers but they still do not make too much sense. The artist gave me a 300 dpi file so of course the px size what wrong. After converting the file to 72 dpi, the font size happens to be 33.33 pt or 40 px which is now way too big in Edge. It looks like the size my just be the same 33.33 pt would be 33.33 px. Is this correct?
-
To which table the structure plknzea belongs
i need to find out the table to which this sturcture(plknzea) belongs.
how the table fplt is related to table aufkThis structure is only used in two programs to hold certain data from screen fields. Depending on certain values of these fields, it sets a value to view V_T350_P, which is a view over T350.
Code from L0I04I10.
IF PLKNZEA-SOFT EQ YAUSW.
V_T350_P-PLKNZ = YAUFT_SOFT.
ELSE.
IF PLKNZEA-GEPL EQ YAUSW.
V_T350_P-PLKNZ = YAUFT_GEPL.
ELSE.
IF PLKNZEA-UNGP EQ YAUSW.
V_T350_P-PLKNZ = YAUFT_UNGP.
ENDIF.
ENDIF.
ENDIF.
It does something simular in the other program.
Code from LCOIHI06.
CLEAR CAUFVD-PLKNZ.
IF PLKNZEA-UNGP = YX.
CAUFVD-PLKNZ = SPACE.
ELSEIF PLKNZEA-GEPL = YX.
CAUFVD-PLKNZ = 1.
ELSEIF PLKNZEA-SOFT = YX.
CAUFVD-PLKNZ = 2.
ENDIF.
Does this answer your question?
Regards,
Rich Heilman -
Reference table of structure LBBIL_INVOICE ?
Hi Expert,
I want to create smartform based on standard SAP program.
Printing Program : RLB_INVOICE
Smartforms : SF_LB_INVOICE
I have problem during change smartform. The interface of smartform is IS_BIL_INVOICE TYPE LBBIL_INVOICE. This structure contain of other table type or other structure. I think this structure have complete data. But functional design always create design using database table that I must fetch the data.
Is there any body can tell me what is reference table of each element of structure LBBIL_INVOICE ?
Thanks beforehand.Hi ,
These structures are deep structures and you will have the table entered as a field of this structure .
All the values are populated in these structures . Else copy the standard driver program and the key field is always populated in nast table get the keyfield from nast table ( nast structure gets populated autmatically check in the std driver program )
eg ( move nast-objky(10) to g_ebeln )
based on this key field fetch all the other values you require in the driver program and pass it to your smart form .But i must say this is not a smart thing to do if you already have all the data available in the standard structure .
give your driver program and smartform name in NACE txn. also define the output type. all the other data retrival can also be done in the code editor of smart form in case you need some other values at a later stage.here is the sample code
FORM GET_DATA .
check not nast-objky is initial.
move nast-objky(10) to g_ebeln.
ENDFORM. " GET_DATA
*& Form GET_FORMNAME
text
--> p1 text
<-- p2 text
FORM GET_FORMNAME .
select single sform
from tnapr
into tnapr-sform
where kschl = nast-kschl " Output Type
and nacha = nast-nacha " Message transmission
and kappl = nast-kappl." Application
if sy-subrc = 0.
g_formname = tnapr-sform.
endif.
ENDFORM. " GET_FORMNAME
*& Form ZCALLFORM
text
--> p1 text
<-- p2 text
FORM ZCALLFORM .
call function 'SSF_FUNCTION_MODULE_NAME'
exporting
formname = g_formname
VARIANT = ' '
DIRECT_CALL = ' '
importing
fm_name = g_fmname
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
call function g_fmname
exporting
ARCHIVE_INDEX =
ARCHIVE_INDEX_TAB =
ARCHIVE_PARAMETERS =
CONTROL_PARAMETERS =
MAIL_APPL_OBJ =
MAIL_RECIPIENT =
MAIL_SENDER =
OUTPUT_OPTIONS =
USER_SETTINGS = 'X'
im_ebeln = g_ebeln
IMPORTING
DOCUMENT_OUTPUT_INFO =
JOB_OUTPUT_INFO =
JOB_OUTPUT_OPTIONS =
exceptions
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
others = 5
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
ENDFORM. " ZCALLFORM
*& Form ZUPDATENAKT
text
--> p1 text
<-- p2 text
FORM ZUPDATENAKT .
nast-vstat = 1.
nast-usnam = sy-uname.
nast-datvr = sy-datum.
nast-uhrvr = sy-uzeit.
call function 'RV_MESSAGE_UPDATE_SINGLE'
exporting
msg_nast = nast.
ENDFORM. " ZUPDATENAKT -
Where can I found table or structure changes across different releases ?
Hi !
Just one question:
I would like to found where can I see tables or structures changes across differents releases of SAP R/3?, i tried to found a doc about this... but i couldn't found it.
For example, which table have been modify form version 4.x to 4.z, i mean fields added or modified, etc...
Thanks in advance,
Albio.-Hi Albio,
You can do this. You can check the activation log of any table which you have to find for change history.
Just go to se11 and type the table name click on display and then go to utilities -> then activation log, it will show you all the changes made to table
Regards
Sumit Bhutani
<b>Ps reward pts if helpful</b> -
Crash while launching in "building color conversion tables"
Photoshop CS6 crashes while "building color conversion tables" I reinstalled the program but it still hangs up at this point. please help!
I've only seen 3 things that can cause a crash at that point: corrupt profiles (mostly display profiles), corrupt information coming from the OS about the system profiles, and bad floating point units in CPUs.
First thing to check is the display profiles. If setting them to sRGB doesn't solve the crash, it might be a bug in the OS profile cache. And let's hope it isn't the CPU, because those problems are a @$%^@#%# to track down in modern processors. -
Conversion tables and table entries
I'm working on a conversion table to move our legacy products from unstructured FM to DITA. I understand the basic concepts but I'm having a problem with the table cells.
In my conversion table I have P:CellBody in the first row, mapped to entry with a qualifier of cellbody.
I also have TC mapped to entry.
The same holds true for P:CellHeading and TH.
Consequently, my text is wrapped in two entry elements. The Show Element Context tab shows:
entry
entry
row
tbody
tgroup
table
body
NoName
NoName
I'm pretty sure it should be the same as above with only one entry element (and of course with the NoNames fixed which I think I know how to do; I just haven't gotten there yet).
How do I avoid having my cells wrapped in two entry elements?
Thanks in advance,
MarshaMarsha,
I don't quite understand either what you are trying to do or what exactly is in your conversion table. Be aware, however, that FrameMaker will always create elements for the basic components that occur in your tables. The conversion table gives you limited control of how those elements will be tagged, but not whether the elements will exist.
If your conversion table contains rows such as:
P:CellBody
entry
cellbody
TC:
entry
You will indeed get nested entry elements. The outer one is the table cell itself and the inner one is the paragraph. FrameMaker does not permit a valid document to use the same element tag for both a cell and a container, so aside from the results not being what you wanted, they are not correct within FrameMaker.
If your table cells contain single paragraphs and you don't want elements for both the cells and the paragraphs, your conversion table doesn't even need to mention the CellBody and CellHeading paragraph tags. In fact, if your table formats use CellBody as the paragraph format for cells in the body of a table and CellHeading as the paragraph format for cells in the table heading, your EDD doesn't even have to apply the paragraph formats.
Another variation is to include a paragraph tag in a conversion table row for a table cell by combining TC: and P: to match table cells containing particular paragraphs. For example:
TC:P:CellBody
entry
creates cell elements named entry from table cells containing paragraphs tagged CellBody. The paragraph within such a cell is not wrapped in an additional element.
One final comment is that TH: in a conversion table refers to the entire table heading; its children are heading rows. The table body analog of TH: is TB:, not TC:.
--Lynne -
FDK - apply Conversion Table to document
Hello,
I want to be able to apply a conversion table to an open document, through FDK.
Is there a way of calling the "Structure Current document..." command from the client and pass it a filepath, so that it opens the Conversion table document and applies that to the current document?
I want to be able to pass the filepath to the command automatically without displaying the dialog box.
I appreciate any help!,
Thanks in advance,
pnkHi pnk,
Yes. It is in the chapter of the FDK ref called "Calling Clients Shipped with FrameMaker." The conversion table process is actually handled by another API client called the Structure Generator, and you'll need to make calls to it. However, in the latest FDK ref I have, I believe that the syntax in the documentation is wrong. I'll copy/paste the operative parts below, substituting the syntax that I know works. Note that you need to have all documents open with their IDs captured... you can't simply send a file path.
To execute most operations with FrameMaker clients, you must make a sequence of several
F_ApiCallClient() calls.
To structure a document, use the following sequence of F_ApiCallClient() calls:
F_ApiCallClient("Structure Generator", "INPUTDOCID objectID");
...where objectID is the ID of the input document.
F_ApiCallClient("Structure Generator", "RULEDOCID objectID");
...where objectID is the ID of the rule (conversion) table document.
F_ApiCallClient("Structure Generator", "OUTPUTDOCNAME pathname");
...where pathname is the full pathname of the output document. This command is optional. If you do
not specify a pathname, the structure generator leaves the document unsaved and open.
F_ApiCallClient("Structure Generator", "StructureDoc");
...This call instructs the structure generator to generate structure, using the parameters provided by the
calls listed above.
pnk, this is Russ again. So, for example, to make the call where you send the ID of the document you want to structure, you would do something like:
UCharT msg[1024];
F_ObjHandleT docId;
. . . code to get docId, etc . . .
F_Sprintf(msg, "INPUTDOCID %d", docId);
F_ApiCallClient("Structure Generator", (StringT)msg);
. . . rest of calls, etc . . .
Hope this helps.
Russ -
FM 11
DITA 1.2
I'm just starting to work on my conversion table for our non-structured files. I've only gone as far as my first couple of iterative tests to create FM binary files; i.e., I haven't imported my EDD or templates yet. I'm just trying to apply logic to the process.
MarshaHi Marsha...
The only way for it to know is based on the heading tag names. You'll need to assign different tags for each heading that starts a new "topic type". You'll also need to assign different tags within topics (like "task") to differentiate between the different sections within a topic.
I have a tool that helps with this "retagging" process (as well as many other conversion-related issues). it lets you define a retagging scheme based on previous tags or tags that follow a certain tag. It also lets you assign new tags based on text in the heading. You may want to download the trial of this tool just to get an idea of what it can do. The sample files and documentation may be helpful for your learning process, even if you don't buy it.
http://leximation.com/tools/info/fm2dita.php
Also .. you might want to look at the webinar I gave for Adobe on this subject ..
http://leximation.com/downloads/adobe-fm2xml-2013
Cheers,
...scott -
Difference between Table and Structure
Dear SD Gurus,
Can anybody tell me what is the difference between a Table and Structure
Pls Reply.Tables are Database, which stay in system for long duration , as good as permanent, untill & unless the data is archived, which is not very frequent. Data at transaction level are captured from multiple tables, so as to meet the requirement. We can view the data in the table through T.code SE11 & SE16. there are certain tables in which data can be maintained as well as displayed. To maintain data, we use T.Code: SM30 or SM31.
Structures are temporary table & hold the data for that particular instance or transaction.
Regards,
Rajesh Banka
Reward suitable points.
How to give points: Mark your thread as a question while creating it. In the answers you get, you can assign the points by clicking on the stars to the left. You also get a point yourself for rewarding (one per thread).
Maybe you are looking for
-
How to output particular text in main window only in first page
Hi experts how to ouput particular text in main window only in first page after that actual transaction data will be continued.....any ideas....Answers will be rewarded.....
-
How to create a generic error handling proxy?
Hello, i have few services proxies. I want to create a generic error handling osb proxy which does only errorhandling. This proxy would be called by all my services.Now suppose my services proxies would throw any error,the control will pass to error
-
Hi Experts, I created an LSMW for PO uploading. I used BAPI as my import method. When I run the LSMW, the values from the material master, vendor master, and inforecord OVERWRITE the values that I was passing from my upload text file. Is there a way
-
Report to Moderator In SharePoint Mysite NewsFeed
Hi All We are are using SharePoint 2013 OnPrim we have configured mysite for our organization and now would like to include "Report to Moderator" option in SharePoint Mysite NewsFeed. Is there any way to achieve this ? Thanks in Advance Mark as Answe
-
How to clear space on hard drive
my 80g hard drive has 6g left. i thought my itunes library was culprit but it only shows 25g of space in library. how do i determine what is using so much space? is there any way besides using "get info" on every folder? i only use word, excel, safar