Special Field- Record Number count incorrect
Hi,
Looks like the record number special field is displaying the record count incorrectly. There are no records returned by the query nor there are any records in the detail section of the report. But the record number in the report footer shows 1. Is there any way to fix this?
Thanks in advance,
Sirisha
One way to "fix" it would be to do a count on a field in the details section and then compare that count to NULL or zero and if so then display zero otherwise display the recordnumber.
1. Create a running total on a field in the details section that doesnt reset.
2. Create a formula with:
if isnull({#RTotal0}) or {#RTotal0} = 0 then 0 else recordnumber
3. Display the formula instead of the recordnumber in the report footer.
Similar Messages
-
I have this information in a group header and there is some suppression based on dollar figures. When I change the date to pull the information my record numbers change but I do not see the reasoning. I also tried to use a formula for a record counter and got the following
Last Name record number Formula record counter
Allen 1 1
Balz 2 2
Brazzell 3 3
Brochey 4 4
Brod 5 5
Bull 6 6
Bull 7 7
Cahill 8 8
Date change I get this
Last Name record number Formula record counter
Agro 1 1
Allen 5 4
Allen 12 7
Altheide 14 10
Anderson 18 13
Anello 21 16
Arist 22 19
I'm going nuts with this one!!!Hi Peggy,
The record number special field does not account for suppressed records!
If you're using a formula to number each row, you also need to include the condition where a particular row is not numbered.
Something like this:
whileprintinrecords;
numbervar row_count;
if <condition> then
row_count := row_count + 1;
Plug the condition you have as the suppression formula in the <condition> portion of the code above. For e.g: If the rows are suppressed for rows where the 'sales figure' is less than 500, then the <condition> part of the code above would be:
if {sales_figures} > 500 then
row_count := row_count + 1;
-Abhilash -
Gettıng record number of all tables
how can get the record number(count(*) ) of all the tables of the specıfıc user.
u can query user_tables and see the num_rows column
of that table of a corresponding schema."U" can but you would you would not being doing it the best way if you do.
SQL> select table_name, num_rows from user_tables;
TABLE_NAME NUM_ROWS
EMP 15
TEST 2
SQL> select count(*) from test;
COUNT(*)
6
SQL>It only works if the stats have been gathered on the tables and you don't really want to be gathering stats every time you want to know how many rows there are on your tables.
The best and most accurate way to count the number of rows on tables is to use count(*). -
Data Record Number Field in PSA
Hi,
There is a field " Data Record Number" in every PSA. This field is howeven not part of the DataSource.I need to bring a counter like this into the Cube that counts all unique records (i need to setup a COUNTER using a unique key). Is there a way of doing that?
ThanksHi davy,
To get counter of records,
you have to write a routine.
so for this make an infoobject of name counter and add this field to your cube.
then go to update rule and write update routine for the above infoobject like
if condition is true
result = 1
else
result = 0.
the sum of all 1s will give the no. of records.
Hope this will help you.
thanks.
Saurabh Jain. -
Interaction record number is populating in"Related Knowledge Article" field
Hi,
I'm creating a Problem in IC....Once I click on save in problem management a interaction record will be created which was expected but the Interaction record number is Populating automatically in the "Related Knowledge Article & Related request for change" fields in the Problem management....No clue of where I need to change the things....Please advise...
KK.KK,
It looks like the issue is with your document flow. Most likely the standard handler class CL_CRM_DOCFLOW_RUN_BTIL was replaced with some custom class. This is where SAP cleans up those follow up transactions (eg: IRs) which do not match the correct type requested (eg: Problem, KA). Check your config in:
Customer Relationship Management -> CRM Cross-Application Components -> Generic Interaction Layer/Object Layer -> Component-Specific Settings -> Business Transactions -> Define Custom Handler Classes for Business Transaction Model Nodes
If the class for object BTDocFlow has been replaced, look into the new class, specifically method GET_MULTI_ID. (Note that you have to append RUNBTIL to the structure name in this table to get the actual class). This method is where SAP does the cleanup work. If this method does not have all the logic that is available in the SAP standard class, then that is why your IRs are not getting filtered out when SAP is trying to find related Problems or Knowledge Articles.
Hope that helped. If not, let us know so that we can suggest another direction.
Rahul -
Number Count Beside Each Record?
How do you get a number count beside each record such as:
1. record 1 content
2. record 2 content
3. record 3 contentIf they are coming from a query, the currentrow variable will
work. -
Hi!
I'm wondering if it is possible to get on report a record number. On the report i have two repeating frame. I would like to have number of first one so the report would look like this:
*1.* Test name1 <-------- First repeating frame
Department1 \
Department2 <-------- Second repeating fram
Department3 /
*2.* Test name2 <-------- First repeating frame
Department1 \
Department2 <---------- Second repeating frame
Department3 /Hi!
As you have two repeating frames, you are having two groups.
In each of this groups create 1 summary column each of Summary function : Count.
Source : A field from group1 and group2 (test name group and department name group in your case.)
Reset At : Report and and group 1 respectively
Hope this helps.
Regards
Arif -
OracleBulkCopy have memory leak if BatchSize is less than record's count.
OracleBulkCopy::WriteToServer(IDataReader reader) have memory leak if BatchSize property is less than amount of record which were retrieved from IDataReader.
We know workaround for that, but when this problem will be fixed?
Code source at the bottom:
*****************File::Program.cs*****************
using System;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using Oracle.DataAccess.Client;
namespace WindowsApplication
static class Program
private static DataTable _testTable = new DataTable("TestData");
private static int _batchSize = 10000;
private static int _totalRecordForTest = 100000;
private static int _bulkTimeOut = 600;
private static string _targetConnectionString;
private static string _targetTableName;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
_testTable.ReadXmlSchema("tmp.data.schema");
_testTable.ReadXml("tmp.data");
_targetConnectionString = ConfigurationManager.AppSettings["targetConnectionString"];
_targetTableName = ConfigurationManager.AppSettings["targetTableName"];
_batchSize = int.Parse(ConfigurationManager.AppSettings["batchSize"]);
_totalRecordForTest = int.Parse(ConfigurationManager.AppSettings["totalRecordForTest"]);
_bulkTimeOut = int.Parse(ConfigurationManager.AppSettings["bulkTimeOut"]);
PerformCorrectTest();
Console.WriteLine("Do you want to perform memory leak test?(If no then click cancel key)");
if (Console.ReadKey().Key != ConsoleKey.Escape)
PerformMemoryLeakTest();
Console.ReadKey();
_testTable =null;
public static void PerformCorrectTest()
Console.WriteLine("Managed memory usage: {0}, unmanaged: {1}", GC.GetTotalMemory(false),
Process.GetCurrentProcess().WorkingSet64);
using (VirtualSourceReader wrapper = new VirtualSourceReader(new DataTableReader(_testTable), batchSize, totalRecordForTest))
wrapper.RowsCopied += RowsCopied;
using (OracleConnection targetConnection = new OracleConnection(_targetConnectionString))
targetConnection.Open();
Console.WriteLine("Bulk insert started at {0}", DateTime.Now);
OracleBulkCopy bc = null;
try
bc = new OracleBulkCopy(targetConnection)
DestinationTableName = _targetTableName,
BulkCopyTimeout = _bulkTimeOut,
BatchSize = _batchSize
do
bc.WriteToServer(wrapper);
} while (wrapper.ResetState());
finally
if (null != bc)
bc.Close();
bc.Dispose();
targetConnection.Clone();
Console.WriteLine("Bulk insert completed at {0}", DateTime.Now);
wrapper.Close();
Console.WriteLine("Managed memory usage: {0}, unmanaged: {1}", GC.GetTotalMemory(false),
Process.GetCurrentProcess().WorkingSet64);
public static void PerformMemoryLeakTest()
Console.WriteLine("Managed memory usage: {0}, unmanaged: {1}", GC.GetTotalMemory(false),
Process.GetCurrentProcess().WorkingSet64);
using (VirtualSourceReader wrapper = new VirtualSourceReader(new DataTableReader(_testTable), totalRecordForTest, totalRecordForTest))
using (OracleConnection targetConnection = new OracleConnection(_targetConnectionString))
targetConnection.Open();
Console.WriteLine("Bulk insert started at {0}", DateTime.Now);
OracleBulkCopy bc = null;
try
bc = new OracleBulkCopy(targetConnection)
DestinationTableName = _targetTableName,
BulkCopyTimeout = _bulkTimeOut,
BatchSize = _batchSize,
NotifyAfter = _batchSize,
bc.OracleRowsCopied += OracleRowsCopied;
bc.WriteToServer(wrapper);
finally
if (null != bc)
bc.Close();
bc.Dispose();
targetConnection.Clone();
Console.WriteLine("Bulk insert completed at {0}", DateTime.Now);
wrapper.Close();
Console.WriteLine("Managed memory usage: {0}, unmanaged: {1}", GC.GetTotalMemory(false),
Process.GetCurrentProcess().WorkingSet64);
private static void RowsCopied(object sender, long eventArgs)
Console.WriteLine("Row Processed {0}. Current time is {1}", eventArgs, DateTime.Now);
private static void OracleRowsCopied(object sender, OracleRowsCopiedEventArgs eventArgs)
RowsCopied(sender, eventArgs.RowsCopied);
*****************File::SourceDataReaderWrap.cs*****************
using System;
using System.Collections.Generic;
using System.Data;
using Oracle.DataAccess.Client;
namespace WindowsFormsApplication1
public delegate void OnRowProcessed(object sender, long rowCount);
public class SourceDataReaderWrap:IDataReader
protected IDataReader _originalReader;
protected readonly int _batchSize;
protected int _currentSessionRows;
protected long _rowCount;
public event OnRowProcessed RowsCopied;
public SourceDataReaderWrap(IDataReader originalReader, int batchSize)
_originalReader = originalReader;
_batchSize = batchSize;
_rowCount = 0;
#region Implementation of IDisposable
/// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
/// <filterpriority>2</filterpriority>
public void Dispose()
_originalReader.Dispose();
_originalReader = null;
if (RowsCopied != null)
foreach (OnRowProcessed @delegate in new List<Delegate>(RowsCopied.GetInvocationList()))
RowsCopied -= @delegate;
#endregion
#region Implementation of IDataRecord
/// <summary>
/// Gets the name for the field to find.
/// </summary>
/// <returns>
/// The name of the field or the empty string (""), if there is no value to return.
/// </returns>
/// <param name="i">The index of the field to find.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public string GetName(int i)
return _originalReader.GetName(i);
/// <summary>
/// Gets the data type information for the specified field.
/// </summary>
/// <returns>
/// The data type information for the specified field.
/// </returns>
/// <param name="i">The index of the field to find.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public string GetDataTypeName(int i)
return _originalReader.GetDataTypeName(i);
/// <summary>
/// Gets the <see cref="T:System.Type"/> information corresponding to the type of <see cref="T:System.Object"/> that would be returned from <see cref="M:System.Data.IDataRecord.GetValue(System.Int32)"/>.
/// </summary>
/// <returns>
/// The <see cref="T:System.Type"/> information corresponding to the type of <see cref="T:System.Object"/> that would be returned from <see cref="M:System.Data.IDataRecord.GetValue(System.Int32)"/>.
/// </returns>
/// <param name="i">The index of the field to find.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public Type GetFieldType(int i)
return _originalReader.GetFieldType(i);
/// <summary>
/// Return the value of the specified field.
/// </summary>
/// <returns>
/// The <see cref="T:System.Object"/> which will contain the field value upon return.
/// </returns>
/// <param name="i">The index of the field to find.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public object GetValue(int i)
return _originalReader.GetValue(i);
/// <summary>
/// Gets all the attribute fields in the collection for the current record.
/// </summary>
/// <returns>
/// The number of instances of <see cref="T:System.Object"/> in the array.
/// </returns>
/// <param name="values">An array of <see cref="T:System.Object"/> to copy the attribute fields into.
/// </param><filterpriority>2</filterpriority>
public int GetValues(object[] values)
return _originalReader.GetValues(values);
/// <summary>
/// Return the index of the named field.
/// </summary>
/// <returns>
/// The index of the named field.
/// </returns>
/// <param name="name">The name of the field to find.
/// </param><filterpriority>2</filterpriority>
public int GetOrdinal(string name)
return _originalReader.GetOrdinal(name);
/// <summary>
/// Gets the value of the specified column as a Boolean.
/// </summary>
/// <returns>
/// The value of the column.
/// </returns>
/// <param name="i">The zero-based column ordinal.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public bool GetBoolean(int i)
return _originalReader.GetBoolean(i);
/// <summary>
/// Gets the 8-bit unsigned integer value of the specified column.
/// </summary>
/// <returns>
/// The 8-bit unsigned integer value of the specified column.
/// </returns>
/// <param name="i">The zero-based column ordinal.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public byte GetByte(int i)
return _originalReader.GetByte(i);
/// <summary>
/// Reads a stream of bytes from the specified column offset into the buffer as an array, starting at the given buffer offset.
/// </summary>
/// <returns>
/// The actual number of bytes read.
/// </returns>
/// <param name="i">The zero-based column ordinal.
/// </param><param name="fieldOffset">The index within the field from which to start the read operation.
/// </param><param name="buffer">The buffer into which to read the stream of bytes.
/// </param><param name="bufferoffset">The index for <paramref name="buffer"/> to start the read operation.
/// </param><param name="length">The number of bytes to read.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length)
return _originalReader.GetBytes(i, fieldOffset, buffer, bufferoffset, length);
/// <summary>
/// Gets the character value of the specified column.
/// </summary>
/// <returns>
/// The character value of the specified column.
/// </returns>
/// <param name="i">The zero-based column ordinal.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public char GetChar(int i)
return _originalReader.GetChar(i);
/// <summary>
/// Reads a stream of characters from the specified column offset into the buffer as an array, starting at the given buffer offset.
/// </summary>
/// <returns>
/// The actual number of characters read.
/// </returns>
/// <param name="i">The zero-based column ordinal.
/// </param><param name="fieldoffset">The index within the row from which to start the read operation.
/// </param><param name="buffer">The buffer into which to read the stream of bytes.
/// </param><param name="bufferoffset">The index for <paramref name="buffer"/> to start the read operation.
/// </param><param name="length">The number of bytes to read.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length)
return _originalReader.GetChars(i, fieldoffset, buffer, bufferoffset, length);
/// <summary>
/// Returns the GUID value of the specified field.
/// </summary>
/// <returns>
/// The GUID value of the specified field.
/// </returns>
/// <param name="i">The index of the field to find.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public Guid GetGuid(int i)
return _originalReader.GetGuid(i);
/// <summary>
/// Gets the 16-bit signed integer value of the specified field.
/// </summary>
/// <returns>
/// The 16-bit signed integer value of the specified field.
/// </returns>
/// <param name="i">The index of the field to find.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public short GetInt16(int i)
return _originalReader.GetInt16(i);
/// <summary>
/// Gets the 32-bit signed integer value of the specified field.
/// </summary>
/// <returns>
/// The 32-bit signed integer value of the specified field.
/// </returns>
/// <param name="i">The index of the field to find.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public int GetInt32(int i)
return _originalReader.GetInt32(i);
/// <summary>
/// Gets the 64-bit signed integer value of the specified field.
/// </summary>
/// <returns>
/// The 64-bit signed integer value of the specified field.
/// </returns>
/// <param name="i">The index of the field to find.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public long GetInt64(int i)
return _originalReader.GetInt64(i);
/// <summary>
/// Gets the single-precision floating point number of the specified field.
/// </summary>
/// <returns>
/// The single-precision floating point number of the specified field.
/// </returns>
/// <param name="i">The index of the field to find.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public float GetFloat(int i)
return _originalReader.GetFloat(i);
/// <summary>
/// Gets the double-precision floating point number of the specified field.
/// </summary>
/// <returns>
/// The double-precision floating point number of the specified field.
/// </returns>
/// <param name="i">The index of the field to find.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public double GetDouble(int i)
return _originalReader.GetDouble(i);
/// <summary>
/// Gets the string value of the specified field.
/// </summary>
/// <returns>
/// The string value of the specified field.
/// </returns>
/// <param name="i">The index of the field to find.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public string GetString(int i)
return _originalReader.GetString(i);
/// <summary>
/// Gets the fixed-position numeric value of the specified field.
/// </summary>
/// <returns>
/// The fixed-position numeric value of the specified field.
/// </returns>
/// <param name="i">The index of the field to find.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public decimal GetDecimal(int i)
return _originalReader.GetDecimal(i);
/// <summary>
/// Gets the date and time data value of the specified field.
/// </summary>
/// <returns>
/// The date and time data value of the specified field.
/// </returns>
/// <param name="i">The index of the field to find.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public DateTime GetDateTime(int i)
return _originalReader.GetDateTime(i);
/// <summary>
/// Returns an <see cref="T:System.Data.IDataReader"/> for the specified column ordinal.
/// </summary>
/// <returns>
/// An <see cref="T:System.Data.IDataReader"/>.
/// </returns>
/// <param name="i">The index of the field to find.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public IDataReader GetData(int i)
return _originalReader.GetData(i);
/// <summary>
/// Return whether the specified field is set to null.
/// </summary>
/// <returns>
/// true if the specified field is set to null; otherwise, false.
/// </returns>
/// <param name="i">The index of the field to find.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
public bool IsDBNull(int i)
return _originalReader.IsDBNull(i);
/// <summary>
/// Gets the number of columns in the current row.
/// </summary>
/// <returns>
/// When not positioned in a valid recordset, 0; otherwise, the number of columns in the current record. The default is -1.
/// </returns>
/// <filterpriority>2</filterpriority>
public int FieldCount
get { return _originalReader.FieldCount; }
/// <summary>
/// Gets the column located at the specified index.
/// </summary>
/// <returns>
/// The column located at the specified index as an <see cref="T:System.Object"/>.
/// </returns>
/// <param name="i">The zero-based index of the column to get.
/// </param><exception cref="T:System.IndexOutOfRangeException">The index passed was outside the range of 0 through <see cref="P:System.Data.IDataRecord.FieldCount"/>.
/// </exception><filterpriority>2</filterpriority>
object IDataRecord.this[int i]
get { return _originalReader[i]; }
/// <summary>
/// Gets the column with the specified name.
/// </summary>
/// <returns>
/// The column with the specified name as an <see cref="T:System.Object"/>.
/// </returns>
/// <param name="name">The name of the column to find.
/// </param><exception cref="T:System.IndexOutOfRangeException">No column with the specified name was found.
/// </exception><filterpriority>2</filterpriority>
object IDataRecord.this[string name]
get { return _originalReader[name]; }
#endregion
#region Implementation of IDataReader
/// <summary>
/// Closes the <see cref="T:System.Data.IDataReader"/> Object.
/// </summary>
/// <filterpriority>2</filterpriority>
public void Close()
_originalReader.Close();
/// <summary>
/// Returns a <see cref="T:System.Data.DataTable"/> that describes the column metadata of the <see cref="T:System.Data.IDataReader"/>.
/// </summary>
/// <returns>
/// A <see cref="T:System.Data.DataTable"/> that describes the column metadata.
/// </returns>
/// <exception cref="T:System.InvalidOperationException">The <see cref="T:System.Data.IDataReader"/> is closed.
/// </exception><filterpriority>2</filterpriority>
public DataTable GetSchemaTable()
return _originalReader.GetSchemaTable();
/// <summary>
/// Gets a value indicating the depth of nesting for the current row.
/// </summary>
/// <returns>
/// The level of nesting.
/// </returns>
/// <filterpriority>2</filterpriority>
public int Depth
get { return _originalReader.Depth; }
/// <summary>
/// Gets a value indicating whether the data reader is closed.
/// </summary>
/// <returns>
/// true if the data reader is closed; otherwise, false.
/// </returns>
/// <filterpriority>2</filterpriority>
public bool IsClosed
get { return _originalReader.IsClosed; }
#endregion
/// <summary>
/// Advances the data reader to the next result, when reading the results of batch SQL statements.
/// </summary>
/// <returns>
/// true if there are more rows; otherwise, false.
/// </returns>
/// <filterpriority>2</filterpriority>
public bool NextResult()
throw new NotImplementedException();
/// <summary>
/// Advances the <see cref="T:System.Data.IDataReader"/> to the next record.
/// </summary>
/// <returns>
/// true if there are more rows; otherwise, false.
/// </returns>
/// <filterpriority>2</filterpriority>
public virtual bool Read()
if (_batchSize == (_currentSessionRows))
return false;
if(_originalReader.Read())
_currentSessionRows++;
_rowCount++;
return true;
return false;
/// <summary>
/// Gets the number of rows changed, inserted, or deleted by execution of the SQL statement.
/// </summary>
/// <returns>
/// The number of rows changed, inserted, or deleted; 0 if no rows were affected or the statement failed; and -1 for SELECT statements.
/// </returns>
/// <filterpriority>2</filterpriority>
public int RecordsAffected
get { throw new NotImplementedException(); }
public virtual bool ResetState()
bool result = _currentSessionRows != 0;
if (result && RowsCopied != null)
RowsCopied(this, _rowCount);
_currentSessionRows = 0;
return result;
public class VirtualSourceReader:SourceDataReaderWrap
private readonly int _totalRecordCount;
public VirtualSourceReader(IDataReader reader, int batchSize, int totalRecordCount)
:base(reader, batchSize)
_totalRecordCount = totalRecordCount;
public override bool Read()
if (_rowCount >= totalRecordCount || totalRecordCount <= 0)
return false;
if (_rowCount == 0)
return base.Read();
if (_batchSize == _currentSessionRows)
return false;
_currentSessionRows++;
_rowCount++;
return true;
*****************File::tmp.data**********You have problem because the batch size property has value *10000* and amount of records(*50000*) bigger than this value.
You can retrieve workaround from my post (OracleBulkCopy have memory leak if BatchSize is less than record's count. -
How can i get the tax code from Condition record number
Hi all,
i have the Condition record number from which i have to get the tax code as i looked inthe KNOP that Condition record number there but no tax code is maintained there.
so is there any other way to find the tax code for particular Condition record number
Regards
sureshhi suresh,
can u tell me the field name for condition record number and in which table it is stored.
because i knew one condition number which is stored in table EKKO and the field name is
KNUMV- Number of the document condition.
from ekko take relevant details and look for ekpo where u find the tax code
filed name of the tax code id MWSKZ- Tax on sales/purchases code -
Adding Special Field in the line item display
Dears Through SPRO settings, I added the field 'Group Account Number' (ALTKT) for the GL line item display.
It is now transported to Quality.
When I try to see that field in the change line item layout, I could not find that field for inclusion.
However, in the SPRO of Quality, I find that field already appearing.
Why it is not appearing in the FBL3N special field screen ?Hi Niki,
I am not sure how you have added this filed but if you follow these steps you will have it.
1- Run FBL3N and make your settings and execute it (F8).
2- Go menu Settings > Special fields (You can run it by t code OBVU out of FBL3n also)
3- Add a new entry, select your field (BSEG ALTKT Group account number) and save it
4- Back one step (F3) and select "Change layout..." icon.
Now you have the field in "Hideen fields" column. Just select it as "show selected fields"
Regards,
Omid -
Modify Record Number in a Random Access File
Hi Does anyone know if I can modify the record number in the random access file hardware.dat for each hardware record each time and update it in hardware.dat to display it? Also why does it say "Record does not exist" if I modify the record number for a hardware and try to update it but could not find that record?
Here is the code below:
// Exercise 14.11: HardwareRecord.java
package org.egan; // packaged for reuse
public class HardwareRecord
private int recordNumber;
private String toolName;
private int quantity;
private double cost;
// no-argument constructor calls other constructor with default values
public HardwareRecord()
this(0,"",0,0.0); // call four-argument constructor
} // end no-argument HardwareRecord constructor
// initialize a record
public HardwareRecord(int number, String tool, int amount, double price)
setRecordNumber(number);
setToolName(tool);
setQuantity(amount);
setCost(price);
} // end four-argument HardwareRecord constructor
// set record number
public void setRecordNumber(int number)
recordNumber = number;
} // end method setRecordNumber
// get record number
public int getRecordNumber()
return recordNumber;
} // end method getRecordNumber
// set tool name
public void setToolName(String tool)
toolName = tool;
} // end method setToolName
// get tool name
public String getToolName()
return toolName;
} // end method getToolName
// set quantity
public void setQuantity(int amount)
quantity = amount;
} // end method setQuantity
// get quantity
public int getQuantity()
return quantity;
} // end method getQuantity
// set cost
public void setCost(double price)
cost = price;
} // end method setCost
// get cost
public double getCost()
return cost;
} // end method getCost
} // end class HardwareRecord-------------------------------------------------------------------------------------------------
// Exercise 14.11: RandomAccessHardwareRecord.java
// Subclass of HardwareRecord for random-access file programs.
package org.egan; // package for reuse
import java.io.RandomAccessFile;
import java.io.IOException;
public class RandomAccessHardwareRecord extends HardwareRecord
public static final int SIZE = 46;
// no-argument constructor calls other constructor with default values
public RandomAccessHardwareRecord()
this(0,"",0,0.0);
} // end no-argument RandomAccessHardwareRecord constructor
// initialize a RandomAccessHardwareRecord
public RandomAccessHardwareRecord(int number, String tool, int amount, double price)
super(number,tool,amount,price);
} // end four-argument RandomAccessHardwareRecord constructor
// read a record from a specified RandomAccessFile
public void read(RandomAccessFile file) throws IOException
setRecordNumber(file.readInt());
setToolName(readName(file));
setQuantity(file.readInt());
setCost(file.readDouble());
} // end method read
// ensure that name is proper length
private String readName(RandomAccessFile file) throws IOException
char name[] = new char[15], temp;
for(int count = 0; count < name.length; count++)
temp = file.readChar();
name[count] = temp;
} // end for
return new String(name).replace('\0',' ');
} // end method readName
// write a record to specified RandomAccessFile
public void write(RandomAccessFile file) throws IOException
file.writeInt(getRecordNumber());
writeName(file, getToolName());
file.writeInt(getQuantity());
file.writeDouble(getCost());
} // end method write
// write a name to file; maximum of 15 characters
private void writeName(RandomAccessFile file, String name) throws IOException
StringBuffer buffer = null;
if (name != null)
buffer = new StringBuffer(name);
else
buffer = new StringBuffer(15);
buffer.setLength(15);
file.writeChars(buffer.toString());
} // end method writeName
} // end RandomAccessHardwareRecord-------------------------------------------------------------------------------------------------
// Exercise 14.11: CreateRandomFile.java
// creates random-access file by writing 100 empty records to disk.
import java.io.IOException;
import java.io.RandomAccessFile;
import org.egan.RandomAccessHardwareRecord;
public class CreateRandomFile
private static final int NUMBER_RECORDS = 100;
// enable user to select file to open
public void createFile()
RandomAccessFile file = null;
try // open file for reading and writing
file = new RandomAccessFile("hardware.dat","rw");
RandomAccessHardwareRecord blankRecord = new RandomAccessHardwareRecord();
// write 100 blank records
for (int count = 0; count < NUMBER_RECORDS; count++)
blankRecord.write(file);
// display message that file was created
System.out.println("Created file hardware.dat.");
System.exit(0); // terminate program
} // end try
catch (IOException ioException)
System.err.println("Error processing file.");
System.exit(1);
} // end catch
finally
try
if (file != null)
file.close(); // close file
} // end try
catch (IOException ioException)
System.err.println("Error closing file.");
System.exit(1);
} // end catch
} // end finally
} // end method createFile
} // end class CreateRandomFile-------------------------------------------------------------------------------------------------
// Exercise 14.11: CreateRandomFileTest.java
// Testing class CreateRandomFile
public class CreateRandomFileTest
// main method begins program execution
public static void main( String args[] )
CreateRandomFile application = new CreateRandomFile();
application.createFile();
} // end main
} // end class CreateRandomFileTest-------------------------------------------------------------------------------------------------
// Exercise 14.11: MenuOption.java
// Defines an enum type for the hardware credit inquiry program's options.
public enum MenuOption
// declare contents of enum type
PRINT(1),
UPDATE(2),
NEW(3),
DELETE(4),
END(5);
private final int value; // current menu option
MenuOption(int valueOption)
value = valueOption;
} // end MenuOptions enum constructor
public int getValue()
return value;
} // end method getValue
} // end enum MenuOption-------------------------------------------------------------------------------------------------
// Exercise 14.11: FileEditor.java
// This class declares methods that manipulate hardware account records
// in a random access file.
import java.io.EOFException;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Scanner;
import org.egan.RandomAccessHardwareRecord;
public class FileEditor
RandomAccessFile file; // reference to the file
Scanner input = new Scanner(System.in);
// open the file
public FileEditor(String fileName) throws IOException
file = new RandomAccessFile(fileName, "rw");
} // end FileEditor constructor
// close the file
public void closeFile() throws IOException
if (file != null)
file.close();
} // end method closeFile
// get a record from the file
public RandomAccessHardwareRecord getRecord(int recordNumber)
throws IllegalArgumentException, NumberFormatException, IOException
RandomAccessHardwareRecord record = new RandomAccessHardwareRecord();
if (recordNumber < 1 || recordNumber > 100)
throw new IllegalArgumentException("Out of range");
// seek appropriate record in a file
file.seek((recordNumber - 1) * RandomAccessHardwareRecord.SIZE);
record.read(file);
return record;
} // end method getRecord
// update record tool name in file
public void updateRecordToolName(int recordNumber, String newToolName)
throws IllegalArgumentException, IOException
RandomAccessHardwareRecord record = getRecord(recordNumber);
if (record.getRecordNumber() == 0)
throw new IllegalArgumentException("Record does not exist");
// seek appropriate record in file
file.seek((recordNumber - 1) * RandomAccessHardwareRecord.SIZE);
record.setToolName(newToolName);
record = new RandomAccessHardwareRecord(
record.getRecordNumber(), record.getToolName(), record.getQuantity(), record.getCost());
record.write(file); // write updated record to file
} // end method updateRecordToolName
// update record in file
public void updateRecordQuantity(int recordNumber, int newQuantity)
throws IllegalArgumentException, IOException
RandomAccessHardwareRecord record = getRecord(recordNumber);
if (record.getRecordNumber() == 0)
throw new IllegalArgumentException("Record does not exist");
// seek appropriate record in file
file.seek((recordNumber - 1) * RandomAccessHardwareRecord.SIZE);
record.setQuantity(newQuantity);
record = new RandomAccessHardwareRecord(
record.getRecordNumber(), record.getToolName(), record.getQuantity(), record.getCost());
record.write(file); // write updated record to file
} // end method updateRecordQuantity
// update record in file
public void updateRecordCost(int recordNumber, double newCost)
throws IllegalArgumentException, IOException
RandomAccessHardwareRecord record = getRecord(recordNumber);
if (record.getRecordNumber() == 0)
throw new IllegalArgumentException("Record does not exist");
// seek appropriate record in file
file.seek((recordNumber - 1) * RandomAccessHardwareRecord.SIZE);
record.setCost(newCost);
record = new RandomAccessHardwareRecord(
record.getRecordNumber(), record.getToolName(), record.getQuantity(), record.getCost());
record.write(file); // write updated record to file
} // end method updateRecordCost
// add record to file
public void newRecord(int recordNumber, String toolName, int quantity, double cost)
throws IllegalArgumentException, IOException
RandomAccessHardwareRecord record = getRecord(recordNumber);
if (record.getRecordNumber() != 0)
throw new IllegalArgumentException("Record already exists");
// seek appropriate record in file
file.seek((recordNumber - 1) * RandomAccessHardwareRecord.SIZE);
record = new RandomAccessHardwareRecord(recordNumber, toolName, quantity, cost);
record.write(file); // write record to file
} // end method newRecord
// delete record from file
public void deleteRecord(int recordNumber) throws IllegalArgumentException, IOException
RandomAccessHardwareRecord record = getRecord(recordNumber);
if (record.getRecordNumber() == 0)
throw new IllegalArgumentException("Account does not exist");
// seek appropriate record in file
file.seek((recordNumber - 1) * RandomAccessHardwareRecord.SIZE);
// create a blank record to write to the file
record = new RandomAccessHardwareRecord();
record.write(file);
} // end method deleteRecord
// read and display records
public void readRecords()
RandomAccessHardwareRecord record = new RandomAccessHardwareRecord();
System.out.printf("%-10s%-15s%-15s%10s\n","Record","Tool Name","Quantity","Cost");
try // read a record and display
file.seek(0);
while (true)
do
record.read(file);
while (record.getRecordNumber() == 0);
// display record contents
System.out.printf("%-10d%-15s%-15d%10.2f\n",record.getRecordNumber(),
record.getToolName(), record.getQuantity(), record.getCost());
} // end while
} // end try
catch (EOFException eofException) // close file
return; // end of file was reached
} // end catch
catch (IOException ioException)
System.err.println("Error reading file.");
System.exit(1);
} // end catch
} // end method readRecords
} // end class FileEditor-------------------------------------------------------------------------------------------------
// Exercise 14.11: TransactionProcessor.java
// A transaction processing program using random-access files.
import java.io.IOException;
import java.util.NoSuchElementException;
import java.util.Scanner;
import org.egan.RandomAccessHardwareRecord;
public class TransactionProcessor
private FileEditor dataFile;
private RandomAccessHardwareRecord record;
private MenuOption choices[] = {MenuOption.PRINT, MenuOption.UPDATE, MenuOption.NEW,
MenuOption.DELETE, MenuOption.END};
private Scanner input = new Scanner(System.in);
// get the file name and open the file
private boolean openFile()
try // attempt to open file
// call the helper method to open the file
dataFile = new FileEditor("hardware.dat");
} // end try
catch (IOException ioException)
System.err.println("Error opening file.");
return false;
} // end catch
return true;
} // end method openFile
// close file and terminate application
private void closeFile()
try // close file
dataFile.closeFile();
} // end try
catch (IOException ioException)
System.err.println("Error closing file.");
System.exit(1);
} // end catch
} // end method closeFile
// create, update or delete the record
private void performAction(MenuOption action)
int recordNumber = 0; // record number of record
String toolName; // tool name of the hardware instrument
int quantity; // total amount of items
double cost; // hareware tool price
int choice; // choose an update option
int newRecordNumber; // the updated record number
String newToolName; // the updated tool name
int newQuantity; // the updated quantity
double newCost; // the updated cost
try // attempt to manipulate files based on option selected
switch(action) // switch based on option selected
case PRINT:
System.out.println();
dataFile.readRecords();
break;
case NEW:
System.out.printf("\n%s%s\n%s\n%s","Enter record number,",
"tool name, quantity, and cost.","(Record number must be 1 - 100)","? ");
recordNumber = input.nextInt(); // read record number
toolName = input.next(); // read tool name
quantity = input.nextInt(); // read quantity
cost = input.nextDouble(); // read cost
dataFile.newRecord(recordNumber, toolName, quantity, cost); // create new record
break;
case UPDATE:
System.out.print("\nEnter record number to update (1 - 100): ");
recordNumber = input.nextInt();
record = dataFile.getRecord(recordNumber);
if (record.getRecordNumber() == 0)
System.out.println("Record does not exist.");
else
// display record contents
System.out.printf("%-10d%-12s%-12d%10.2f\n\n", record.getRecordNumber(),
record.getToolName(), record.getQuantity(), record.getCost());
System.out.printf("%s%s","\nEnter 1 to update tool name, ",
"2 to update quantity, or 3 to update cost : ");
choice = input.nextInt();
if (choice == 1)
System.out.print("Enter new record tool name : ");
newToolName = input.next();
dataFile.updateRecordToolName(recordNumber,newToolName); // update record
// tool name
// retrieve updated record
record = dataFile.getRecord(recordNumber);
// display updated record
System.out.printf("%-10d%-12s%-12d%10.2f\n", record.getRecordNumber(),
record.getToolName(), record.getQuantity(), record.getCost());
else if (choice == 2)
System.out.print("Enter new record quantity : ");
newQuantity = input.nextInt();
dataFile.updateRecordQuantity(recordNumber,newQuantity); // update record
// quantity
// retrieve updated record
record = dataFile.getRecord(recordNumber);
// display updated record
System.out.printf("%-10d%-12s%-12d%10.2f\n", record.getRecordNumber(),
record.getToolName(), record.getQuantity(), record.getCost());
else if (choice == 3)
System.out.print("Enter new record cost : ");
newCost = input.nextDouble();
dataFile.updateRecordCost(recordNumber,newCost); // update record cost
// retrieve updated record
record = dataFile.getRecord(recordNumber);
// display updated record
System.out.printf("%-10d%-12s%-12d%10.2f\n", record.getRecordNumber(),
record.getToolName(), record.getQuantity(), record.getCost());
} // end else
break;
case DELETE:
System.out.print("\nEnter an account to delete ( 1 - 100): ");
recordNumber = input.nextInt();
dataFile.deleteRecord(recordNumber); // delete record
break;
default:
System.out.println("Invalid action.");
break;
} // end switch
} // end try
catch (NumberFormatException format)
System.err.println("Bad input.");
} // end catch
catch (IllegalArgumentException badRecord)
System.err.println(badRecord.getMessage());
} // end catch
catch (IOException ioException)
System.err.println("Error writing to the file.");
} // end catch
catch (NoSuchElementException elementException)
System.err.println("Invalid input. Please try again.");
input.nextLine();
} // end catch
} // end method performAction
// enable user to input menu choice
private MenuOption enterChoice()
int menuChoice = 1;
// display available options
System.out.printf("\n%s\n%s\n%s\n%s\n%s\n%s","Enter your choice",
"1 - List hardware records", "2 - Update a hardware record",
"3 - Add a new hardware record", "4 - Delete a hardware record", "5 - End program\n?");
try
menuChoice = input.nextInt();
catch (NoSuchElementException elementException)
System.err.println("Invalid input.");
System.exit(1);
} // end catch
return choices[menuChoice - 1]; // return choice from user
} // end enterChoice
public void processRequests()
openFile();
// get user's request
MenuOption choice = enterChoice();
while (choice != MenuOption.END)
performAction(choice);
choice = enterChoice();
} // end while
closeFile();
} // end method processRequests
} // end class TransactionProcessor-------------------------------------------------------------------------------------------------
// Exercise 14.11: TransactionProcessorTest.java
// Testing the transaction processor.
public class TransactionProcessorTest
public static void main(String args[])
TransactionProcessor application = new TransactionProcessor();
application.processRequests();
} // end main
} // end class TransactionProcessorTest-------------------------------------------------------------------------------------------------
Below is the sample data to be entered into the random input file hardware.dat :
Record Tool Quantity Cost
Number Name
3 Sander 18 35.99
19 Hammer 128 10.00
26 Jigsaw 16 14.25
39 Mower 10 79.50
56 Saw 8 89.99
76 Screwdriver 236 4.99
81 Sledgehammer 32 19.75
88 Wrench 65 6.48Message was edited by:
egan128
Message was edited by:
egan128
Message was edited by:
egan128Hi Does anyone know if I can modify the record number
in the random access file hardware.dat for each
hardware record each time and update it in
hardware.dat to display it?If the "record number" is data that is stored in the file, then you can modify it. More precisely: it is possible to modify it.
The rest of the question had too many incompatible verbs for me to understand it.
Also why does it say
"Record does not exist" if I modify the record number
for a hardware and try to update it but could not
find that record?"Record does not exist" is a fairly reasonable error message for the situation where a program looks for a record but cannot find it. Are you asking why that particular lump of code actually does that?
(One thousand lines of code removed) -
How to use RECNUM special field in a file bulk load interface (sqlldr)
Hi,
I'm trying to load an ordered set of full text lines from a flat file using Sql Loader 11.2 with ODI 11.1.1 bulk LKM (LKM File to Oracle - SQLLDR).
I have to keep track of each line number in a separate target table column NUM_SEQ and feed it with sqlldr RECNUM special field.
I haven't found any other way to do that but to tweak manually the generated sqlldr .ctl control file (bad but it works) :
NUM_SEQ RECNUM,
FULL_LINE CHAR(4000)
I've tried to map "RECNUM" as an expression in the map tab of the loading interface but the column itself gets discarded at .ctl generation.
I haven't found any mention of RECNUM in the whole ODI documentation, neither on this forum nor the Web.
Using an internal Oracle sequence in the subsequent steps of the ETL breaks the garantee of ordered lines.
Any hint ?You will have to enhance the KM so that this clause gets added to the CTL file each time.
Add an Option to the KM in which you can specify name of the column that you want to act as line_number.
And then in the KM, change the "Generate CTL File" step and add
*<%=odiRef.getOption("RECNUM") %> RECNUM*
after the call to the <%=odiRef.getColList(" ") %> API
So, this will add the RECNUM column to the list of the columns generated. -
PO item Condition Record number and delivery address of PO - Need a table n
Hello Experts,
I need some help as I have searched enough but did not find any solution.
I need a table name where I can find Condition Record number for PO line item.
As I have to create a new PO Layout in which I have to mention each & every condition type with value for line item.
I need to know one more thing that from which table I will get delivery address number so on the basis of that I can read entries from table ADRC.
Thanks in advance.
BhagatHI,
The First Question is regarding the PO Conditions.
For Extracting the same. we have to Go to The Table EKKI and in this table pass the PO Number and after entering the PO NUmber ,at each item level we will have a condition record number KNUMV created,
collect the condition record number and pass the value in KONV table ,in that table we will get all the conditions and its values maintained.
The second question is the delivery Address
the Delivey address comes from four ways
Plant
EKPO -Pass PO NUmber - collect the plant and pass in table T001W to get the address number
and pass the address number to ADRC table
Customer (third party)
IN table EKPO -collect the customer Number-KUNNR and pass that value to KNA1 table and then get the address number and then get the address from ADRC table.
Direct address number ( created by t code MEAN- Type ME01)
This adress number-ADRNR can be taken from EKPO table and pass this value to adrc table to get the address.
Vendor ( subcontracting)
In this IN EKPO we will have the vendor field -LIFNR and this field collect the vendor number and pass in LFA1 and get the address number and then pass the address number to ADRC table
If in EKPO,the address number and customer vendor field are blank then it picked from the plant and we have to default the Plant Address
Hope so it helps
Regards
Anjanna. -
Hi,
I need to add Purchase order, vendor, vendor name, customer, customer name and ar invoice field as a special field for FAGLL03.
I am able to add vendor, customer and purchasing number fields but I am not able to find name field for customer and vendor. Also I was not able to find ar invoice field.
Any help will be apprecaited.
Thanks,
MarkHello Mark,
Here at our side this has been implemented this way. You will need ABAP consultation:
1) Create an append structure in RFPOS structure with the new desired fields;
2) You will have to use a BTE to implement the exit. Ask the ABAPer to create a new Z function module based on existing SAMPLE_INTERFACE_00001650.
3) Through transaction FIBF, Menu Settings -> Products -> ...of a customer, you should create a code to identify the customization. Lets say FIN01. Don't forget to click on checkbox field to activate the business transaction event.
4) Through transaction FIBF, Menu Settings -> Modules P/S -> ...of a customer, you should create an entry to assign the Z function module with the product. Something like below:
Event Product Ctr. Appl. Function module
00001650 FIN01 FI-FI Z_INTERFACE_00001650
Hope it helps you.
Regards,
Daniel
Edited by: Daniel Carvalho on Oct 2, 2009 5:14 PM -
XD02 : Previous Master Record Number
Hi,
in the customer master data we have this field : "Previous Master Record Number" (KNB1-ALTKN)
here we can enter only one number, is there any possibility to enter more than one number in this field ?
because for each customer i have two or three previous number !
Please advise.
Regards.Hi,
It is a free field of length 10 digits. You can either manage to input all the numbers in that 10 digits or you can increase the field space in the table.
Regards,
Mike
Maybe you are looking for
-
JBO-26048 error after insert delete commit
Using JDeveloper 10.1.2 running local OC4J against Oracle 9i database * JBO-26048: Constraint "APPLREFLTR_PK" violated during post operation:"Insert" using SQL Statement "BEGIN INSERT INTO DCSAT_APPL_REF_LETTER(APPLICANT_ID,LETTER_ID,LETTER_INF,CREAT
-
How to Create BP in a new role - Internet User
Hi Guru's, I have a requirement where I need to create BP in role Internet User (BP005) from WEBUI without using the BP Role Assignment block. The condition is, There is a marketing attribute(a checkbox) in BP_HEAD Account Detials View which when ch
-
What is this, i cannot connect my ipad to the computer because anything ....blabla..... Mobile device... Can anyone help me ?
-
The Messaging engine failed to process a message submitted by adapter:WCF-BasicHttp Source URL:http://abc/Service.svc. Details:The published message could not be routed because no subscribers were found. This error occurs if the subscribing orchestra
-
Hello I have a PDF which I generated with LC Forms (LC ES 8.2). Now I am trying generate new flat PDF on Assembler service using the following DDX: <DDX xmlns="http://ns.adobe.com/DDX/1.0/"> <PDF result="out.pdf"> <PDF source="cabtf1-forpdfgenerate