'An unimplemented or obsolete function was called'
I've just downloaded and installed Adobe Reader Version 9.3.0 for Mac (file size is 210.1MB). However, when I try to download the 9.3.1 update I receive the message above.
Is my installation defective?
I downloaded Adobe Reader because I need to print out a file which has a '.do' extension. (The file was downloaded from my health insurer's website and is needed for income tax purposes - the file name is a bit strange to me - 'displayPdf.do' and the site states it requires Adobe Reader to open). I can open the document but I can't copy or Print it.
When I try to print the document I get a message 'The document could not be printed' and then a second message stating 'There were no pages selected to print'. This is despite the fact that I go to Edit and Select All (and the pages show as being selected) before I try to print!
Can anyone tell me what I am doing incorrectly, PLEASE!
I also receive this error.
Adobe Reader X 11.0 on Mac OS X 10.7.5
Additionally. I'm unable to print any documents. The print dialog simply does not appear when I select File --> Print.
Any advice / fixes appreciated.
Similar Messages
-
Saving via Reader-Enabled plugins - An unimplemented or obsolete function was called
Hello,
I have recently Reader-Enabled my plugin, and am getting an issue using PDDocSave; getting "An unimplemented or obsolete function was called".
Testing in X and XI has the same response.
Reading Re: Acrobat Reader X and PDDocSave it seems that it is a bug in X, but I would have assumed something like this would be fixed by XI.
The below code has it saving the file where it is, but I am also calling the function with the PDSaveCopy flag to a different location and get the same result.
AVDoc avDoc = AVAppGetActiveDoc();
PDDoc pdDoc = AVDocGetPDDoc(avDoc);
ASFile asFile = PDDocGetFile(pdDoc);
ASFileSys asFileSys = ASFileGetFileSys(asFile);
ASPathName asPath = ASFileAcquirePathName(asFile);
PDDocSave(pdDoc, PDSaveFull | PDSaveLinearized | PDSaveCollectGarbage, asPath, asFileSys, NULL, NULL);
I thought perhaps the save flags may have been the issue, but eliminating one-by-one had no change.
I don’t have the /READER_PLUGIN conditional on, if I do I cannot compile at all - Re: How can I save current document in my Reader plugin?
Thanks for your help. Thought I'd ask here before putting in a support request.One thing I notice in the docs for PDDocSave:
IMPLEMENTATION LIMIT: the current implementation can
only save a file to the same fileSys for the doc's current backing
file, thus fileSys MUST BE NULL, otherwise the error XXX is raised.
This is also reiterated in the other headers:
@param fileSys The file system. If it is NULL, uses the fileSys
of the document's current backing file. Files can only be
saved to the same file system. fileSys must be either NULL
or the default file system obtained with ASGetDefaultFileSys(),
otherwise an error is raised. -
Unimplemented or obsolete function
I just purchased and installed Acrobat 9 (9.3.1) on an XP machine. When I open a pdf where someone has added lines, note boxes, etc., I get this problematic "An unimplemented or obsolete function was called" error. I click OK, but it just pops up again. The only thing I can do is close the program with Task Manager. The guy from telephone support said it was a scripting problem (like it was my fault) and I should contact their developer support. I never had this problem with Acrobat 5 or with Reader 8, which I had to uninstall to load 9.
Nothing like spending $250 on a new program that works worse than the old one.
Anybody having similar problems with a solution or suggestion?
Thanks.The error only occurs on files where I or someone else has edited a pdf with Acrobat.
I can do a sticky note, but can't do a text box, draw line/circles or highlight, etc. As soon as I perform one of these functions or try to scroll in the document, the obsolete function message hits and I have to shut the program down through task manager.
I just tryed to create a form and when I click on any function in the form toolbar, I get a "failed to load application resource (internal error)" message. I can fill out form fields if they already exist in the pdf. -
I have a container which gets into full screen mode using mozRequestFullScreen() API but I want to get back to non-fullscreen mode after one of my custom event is fired.
As soon as my custom event is fired, I call mozCancelFullScreen() API to exit full screen but this seems to be not working. Firefox is not exiting fullscreen even though this function was called on document.
I have to press "Esc" to get into non-fullscreen mode.
I am uding Firefox 21.0 version.Hi visionmax, could you post a link to your page, or create a demo on http://jsfiddle.net/ ?
-
DB_DBT_MALLOC was set when secondary db's callback function was called!
I have a secondary db associated with a primary db,when i insert some test records into primary db
,i saw my sdb_callback was called twice!the first call with the correct data,but the seocond call
was with wrong data,data.size was wrong ,with a big value and flags was set to DB_DBT_MALLOC ,
what should i do when the callback was called twice?just return DB_DONOTINDEX?
i modified the example code from source code/example_c/bench_001.c,make the bulk_fill the DB to
have a secondary as following
int sdb_callback(DB sdbp, / secondary db handle */
const DBT pkey, / primary db record's key */
const DBT pdata, / primary db record's data */
DBT skey) / secondary db record's key */
if(pdata->flags & DB_DBT_MALLOC)
fprintf(stderr,"DB_DBT_MALLOC fired size:%d ksize:%d \r\n",pdata->size,pkey->size);
return DB_DONOTINDEX;
}else
return DB_DONOTINDEX;
FOR work WITH secondary db,i comment following out
//if ((ret = dbp->set_flags(dbp, DB_DUP)) != 0) {
// dbp->err(dbp, ret, "set_flags");
// goto err;
char sdb_filename[256];
sprintf(sdb_filename, "s_%s",DATABASE );
if ((ret = db_create(&sdbp, dbenv, 0)) != 0) {
dbp->err(dbp, ret, "crate");
exit(EXIT_FAILURE);
/* set page size */
if((ret = sdbp->set_pagesize(sdbp, pagesize)) != 0){
dbp->err(dbp, ret, "crate");
exit(EXIT_FAILURE);
/* allow sorted duplicates. */
/* try to open db*/
ret = sdbp->open(sdbp, NULL, sdb_filename, NULL, DB_BTREE, DB_CREATE, 0664);
if(ret != 0)
dbp->err(dbp, ret, "%s: sdb open", DATABASE);
dbp->associate(dbp, NULL, sdbp, sdb_callback, 0);
then i run bulk_fill test,DB_DBT_MALLOC was OFTEN fired,but not every put!
Edited by: feiman on May 23, 2010 4:35 AMfollowing are codes from example_c bench_001.c
i run ./a.out -B
then it appears that when one record input to main db,secondary db's callback was called twice,except the FIRST record!!!
#include <sys/types.h>
#include <sys/time.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#ifdef _WIN32
extern int getopt(int, char * const *, const char *);
#else
#include <unistd.h>
#endif
#include <db.h>
#define DATABASE "bench_001.db"
int bulk_fill(DB_ENV *, DB *, int, u_int, int, int, int *, int *);
int compare_int(DB *, const DBT *, const DBT *);
DB_ENV db_init(char , char *, u_int, int);
int main(int, char *[]);
void usage(void);
const char
progname = "bench_001"; / Program name. */
int
sdb_callback(DB sdbp, / secondary db handle */
const DBT pkey, / primary db record's key */
const DBT pdata, / primary db record's data */
DBT skey) / secondary db record's key */
skey->data = pkey->data;
skey->size = pkey->size;
fprintf(stderr,"callback called size:%d ksize:%d \r\n",pdata->size,pkey->size);
return 0;
* db_init --
* Initialize the environment.
DB_ENV *
db_init(home, prefix, cachesize, txn)
char home, prefix;
u_int cachesize;
int txn;
DB_ENV *dbenv;
u_int32_t flags;
int ret;
if ((ret = db_env_create(&dbenv, 0)) != 0) {
dbenv->err(dbenv, ret, "db_env_create");
return (NULL);
dbenv->set_errfile(dbenv, stderr);
dbenv->set_errpfx(dbenv, prefix);
(void)dbenv->set_cachesize(dbenv, 0,
cachesize == 0 ? 50 * 1024 * 1024 : (u_int32_t)cachesize, 0);
flags = DB_CREATE | DB_INIT_MPOOL;
if (txn)
flags |= DB_INIT_TXN | DB_INIT_LOCK;
if ((ret = dbenv->open(dbenv, home, flags, 0)) != 0) {
dbenv->err(dbenv, ret, "DB_ENV->open: %s", home);
(void)dbenv->close(dbenv, 0);
return (NULL);
return (dbenv);
* bulk_fill - bulk_fill a db
* Since we open/created the db with transactions (potentially),
* we need to populate it with transactions. We'll bundle the puts
* UPDATES_PER_BULK_PUT to a transaction.
#define UPDATES_PER_BULK_PUT 3
int
bulk_fill(dbenv, dbp, txn, datalen, num, dups, countp, iterp)
DB_ENV *dbenv;
DB *dbp;
u_int datalen;
int txn, num, dups;
int countp, iterp;
DBT key, data;
u_int32_t flag = 0;
DB_TXN *txnp;
struct data {
int id;
char str[1];
} *data_val;
int count, i, iter, ret;
void ptrk, ptrd;
int iCnt = 0;
time_t now,then;
time(&now);
time(&then);
* Insert records into the database, where the key is the user
* input and the data is the user input in reverse order.
txnp = NULL;
ret = 0;
count = 0;
iter = 0;
ptrk = ptrd = NULL;
data_val = malloc(datalen);
memcpy(data_val->str, "0123456789012345678901234567890123456789",
datalen - sizeof(data_val->id));
memset(&key, 0, sizeof(DBT));
memset(&data, 0, sizeof(DBT));
* Need to account for proper buffer size,
* The buffer must be at least as large as the page size of
* the underlying database, aligned for unsigned integer
* access, and be a multiple of 1024 bytes in size.
key.ulen = (u_int32_t)UPDATES_PER_BULK_PUT *
sizeof(u_int32_t) * datalen * 1024;
key.flags = DB_DBT_USERMEM | DB_DBT_BULK;
key.data = malloc(key.ulen);
data.ulen = (u_int32_t)UPDATES_PER_BULK_PUT *
(u_int32_t)datalen * 1024;
data.flags = DB_DBT_USERMEM | DB_DBT_BULK;
data.data = malloc(data.ulen);
if (dups)
flag |= DB_MULTIPLE;
else
flag |= DB_MULTIPLE_KEY;
DB_MULTIPLE_WRITE_INIT(ptrk, &key);
if (dups)
DB_MULTIPLE_WRITE_INIT(ptrd, &data);
for (i = 0; i < num; i++) {
if (txn != 0 && (i+1) % UPDATES_PER_BULK_PUT == 0) {
if (txnp != NULL) {
ret = txnp->commit(txnp, 0);
txnp = NULL;
if (ret != 0)
goto err;
if ((ret =
dbenv->txn_begin(dbenv, NULL, &txnp, 0)) != 0)
goto err;
data_val->id = 0;
do {
if (dups) {
DB_MULTIPLE_WRITE_NEXT(ptrk, &key,
&i, sizeof(i));
assert(ptrk != NULL);
DB_MULTIPLE_WRITE_NEXT(ptrd, &data,
data_val, datalen);
assert(ptrd != NULL);
else {
DB_MULTIPLE_KEY_WRITE_NEXT(ptrk,
&key, &i, sizeof(i), data_val, datalen);
assert(ptrk != NULL);
if ((i+1) % UPDATES_PER_BULK_PUT == 0) {
switch (ret = dbp->put(dbp, txnp, &key, &data, flag)) {
case 0:
iter++;
free (key.data);
free (data.data);
memset(&key, 0, sizeof(DBT));
memset(&data, 0, sizeof(DBT));
key.ulen =
(u_int32_t)UPDATES_PER_BULK_PUT *
sizeof(u_int32_t) * datalen * 1024;
key.flags = DB_DBT_USERMEM|DB_DBT_BULK;
key.data = malloc(key.ulen);
data.ulen =
(u_int32_t)UPDATES_PER_BULK_PUT *
(u_int32_t)datalen * 1024;
data.flags =
DB_DBT_USERMEM|DB_DBT_BULK;
data.data = malloc(data.ulen);
DB_MULTIPLE_WRITE_INIT(ptrk, &key);
if (dups)
DB_MULTIPLE_WRITE_INIT(ptrd, &data);
break;
default:
dbp->err(dbp, ret, "Bulk DB->put");
free (key.data);
free (data.data);
goto err;
count++;
} while (++data_val->id < dups);
if ((num % UPDATES_PER_BULK_PUT) != 0) {
switch (ret = dbp->put(dbp, txnp, &key, &data, flag)) {
case 0:
iter++;
free (key.data);
free (data.data);
break;
default:
free (key.data);
free (data.data);
dbp->err(dbp, ret, "Bulk DB->put");
goto err;
if (txnp != NULL)
ret = txnp->commit(txnp, 0);
printf("%d\n", count);
*countp = count;
*iterp = iter;
return (ret);
err: if (txnp != NULL)
(void)txnp->abort(txnp);
return (ret);
int
main(argc, argv)
int argc;
char *argv[];
extern char *optarg;
extern int optind;
DB dbp,sdbp;
DB_ENV *dbenv;
DB_TXN *txnp;
struct timeval start_time, end_time;
double secs;
u_int cache, datalen, pagesize;
int biter, ch, count, dups, env, init, iter, num;
int ret, rflag, txn, bulk, delete;
txnp = NULL;
datalen = 20;
iter = num = 100;
env = 1;
dups = init = rflag = txn = bulk = delete = 0;
pagesize = 65536;
cache = 1000 * pagesize;
while ((ch = getopt(argc, argv, "c:d:EIi:l:n:p:RTBD")) != EOF)
switch (ch) {
case 'c':
cache = (u_int)atoi(optarg);
break;
case 'd':
dups = atoi(optarg);
break;
case 'E':
env = 0;
break;
case 'I':
init = 1;
break;
case 'i':
iter = atoi(optarg);
break;
case 'l':
datalen = (u_int)atoi(optarg);
break;
case 'n':
num = atoi(optarg);
break;
case 'p':
pagesize = (u_int)atoi(optarg);
break;
case 'R':
rflag = 1;
break;
case 'T':
txn = 1;
break;
case 'B':
bulk = 1;
break;
case 'D':
delete = 1;
break;
case '?':
default:
usage();
argc -= optind;
argv += optind;
/* Remove the previous database. */
if (!rflag) {
if (env)
(void)system("rm -rf BENCH_001; mkdir BENCH_001");
else
(void)unlink(DATABASE);
dbenv = NULL;
if (env == 1 &&
(dbenv = db_init("BENCH_001", "bench_001", cache, txn)) == NULL)
return (-1);
if (init)
exit(0);
/* Create and initialize database object, open the database. */
if ((ret = db_create(&dbp, dbenv, 0)) != 0) {
fprintf(stderr,
"%s: db_create: %s\n", progname, db_strerror(ret));
exit(EXIT_FAILURE);
dbp->set_errfile(dbp, stderr);
dbp->set_errpfx(dbp, progname);
if ((ret = dbp->set_bt_compare(dbp, compare_int)) != 0) {
dbp->err(dbp, ret, "set_bt_compare");
goto err;
if ((ret = dbp->set_pagesize(dbp, pagesize)) != 0) {
dbp->err(dbp, ret, "set_pagesize");
goto err;
if (dups && (ret = dbp->set_flags(dbp, DB_DUP)) != 0) {
dbp->err(dbp, ret, "set_flags");
goto err;
if (env == 0 && (ret = dbp->set_cachesize(dbp, 0, cache, 0)) != 0) {
dbp->err(dbp, ret, "set_cachesize");
goto err;
//if ((ret = dbp->set_flags(dbp, DB_DUP)) != 0) {
// dbp->err(dbp, ret, "set_flags");
// goto err;
if (txn != 0)
if ((ret = dbenv->txn_begin(dbenv, NULL, &txnp, 0)) != 0)
goto err;
if ((ret = dbp->open(
dbp, txnp, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
dbp->err(dbp, ret, "%s: open", DATABASE);
if (txnp != NULL)
(void)txnp->abort(txnp);
goto err;
char sdb_filename[256];
sprintf(sdb_filename, "s_%s",DATABASE );
if ((ret = db_create(&sdbp, dbenv, 0)) != 0) {
dbp->err(dbp, ret, "crate");
exit(EXIT_FAILURE);
/* set page size */
if((ret = sdbp->set_pagesize(sdbp, pagesize)) != 0){
dbp->err(dbp, ret, "crate");
exit(EXIT_FAILURE);
/* allow sorted duplicates. */
/* try to open db*/
ret = sdbp->open(sdbp, NULL, sdb_filename, NULL, DB_BTREE, DB_CREATE, 0664);
if(ret != 0)
dbp->err(dbp, ret, "%s: sdb open", DATABASE);
dbp->associate(dbp, NULL, sdbp, sdb_callback, 0);
if (txnp != NULL)
ret = txnp->commit(txnp, 0);
txnp = NULL;
if (ret != 0)
goto err;
if (bulk) {
/* Time the get loop. */
(void)gettimeofday(&start_time, NULL);
if ((ret = bulk_fill(dbenv, dbp, txn, datalen,
num, dups, &count, &biter)) != 0)
goto err;
(void)gettimeofday(&end_time, NULL);
secs =
(((double)end_time.tv_sec * 1000000 +
end_time.tv_usec) -
((double)start_time.tv_sec * 1000000 +
start_time.tv_usec))
/ 1000000;
printf("%d records put using %d batches",
count, biter);
printf(" in %.2f seconds: ", secs);
printf("%.0f records/second\n", (double)count / secs);
/* Close everything down. */
if ((ret = dbp->close(dbp, rflag ? DB_NOSYNC : 0)) != 0) {
fprintf(stderr,
"%s: DB->close: %s\n", progname, db_strerror(ret));
return (1);
return (ret);
err: (void)dbp->close(dbp, 0);
return (1);
int
compare_int(dbp, a, b)
DB *dbp;
const DBT a, b;
int ai, bi;
dbp = dbp; /* Lint. */
* Returns:
* < 0 if a < b
* = 0 if a = b
* > 0 if a > b
memcpy(&ai, a->data, sizeof(int));
memcpy(&bi, b->data, sizeof(int));
return (ai - bi);
void
usage()
(void)fprintf(stderr, "usage: %s %s\n\t%s\n",
progname, "[-EIRTBE] [-c cachesize] [-d dups]",
"[-i iterations] [-l datalen] [-n keys] [-p pagesize]");
exit(EXIT_FAILURE);
} -
Find Last time a procedure was called
Hi DBAs,
How to find when a procedure or function was called last time in 10g. For that matter even when a table was last accessed. If this can be done without enabling audit ? are there any such views or tricks to find such changes ?
Thanks!Without auditing, this is not possible as a general rule.
If a procedure has side effects, you could potentially look through the database to find those side effects. If it inserts a new row in a table with a CREATE_DATE of SYSDATE, that would be very helpful. If you're talking about a function that doesn't have side effects, however, that isn't an option. If the function or procedure runs for a relatively long period of time, its executions may be picked up in an AWR/ statspack report. But it's unlikely that every execution would be captured, it's unlikely that the history is kept particularly long, and it's not always trivial to search these reports for the last time a procedure was executed. And if you have a relatively quick procedure, it's unlikely that executions would ever be recorded.
Segment-level statistics might give you hints about table accesses. But those statistics are cumulative since the last reboot. And there are likely background processes that touch every table at some interval (i.e. statistics gathering), which probably isn't the sort of "access" you're interested in.
Justin -
The Web Dynpro application was called up with the wrong URL parameters
Hi all,
I am using the systems below:
ERP STACK :16
EHP : 4
EHP SP Stack :4
EA-HR * : 604(SP12)
SAP-HR * :604(SP12)
XSS JAVA components : SAP ESS 603 SP05
SAP MSS 600 SP16
PCUI_GP 603 SP05
Business Package : BP ERP05 ESS 1.41 SP04
BP ERP05 MSS 1.41 SP04
BP ERP05 COMMON PARTS 1.41 SP04
I am getting below error after clicking on the appraisal document:
App. Called Up Incorrectly
The Web Dynpro application was called up with the wrong URL parameters.
Note
Enter the URL parameters and their use.
You can find more information on the functions that you can perform in the catalog for appraisal templates in the Implementation Guide (IMG) for Objective Setting and Appraisals under Edit Forms.
I already applied the below notes also:
1468466 Performance Management Launchpad Configuration
1463821 Performance Management Portal Configuration
1416756 OBN Configuration in Performance Management
1408243 Configuration for object-based navigation
Plz advise me??
Thanks,
Anumitcan you paste the exact error. also you can take a HTTP trace and see which resourse or UWL is being launched!
-
How to find Obsolete function modules ?
Hi ,
I am working on upgrade project R/3 4.6 to ECC 6.0 . I need to find obsolete function modules in program . I already have list of obsolete FM .Is there any program or logic through which we can find all obsolete FM at single execution.
Thanks & Regards
SandeepHello Sandeep,
I'm not sure if there's a standard report/program to list obsolete function modules, but you can manually check them in table RODIR (via SE16 transaction) - there's a flag properly called 'OBSOLETE'
FYI, table TFDIR contains the FMs that were released.
There are some notes which provid additional information on this topi:
#109533: Use of SAP function modules
#857904: Upgrade from Release 6.40 to 7.0 for customer programs
#595310: ws_filename_get function module is obsolete
Please be aware that those FMs are still there - all applications will have the old function modules installed for
backwards compatibility and legacy reasons. However if you are writing your own code, these function modules will still be available, but not supported by SAP Support.
I hope this information help you.
Best regards,
Tomas Black -
Regarding Obsolete Function Modules
Hi all,
can anybody tell me the alternative ECC6.0 function modules of the following Obsolete function modules
DOWNLOAD
UPLOAD
WS_DOWNLOAD
WS_UPLOAD
WS_FILENAME_GET
WS_QUERY
POPUP_TO_CONFIRM_STEP
POPUP_TO_CONFIRM_WITH_MESSAGE
thnks
Sandeephere are replacement function modules for the obsolete ones.
award points in case u feel this useful
1. Obsolete Function Module: WS_UPLOAD.
Replacement FM: GUI_UPLOAD.
Note:
1. If the FM WS_UPLOAD' has file type as ASC, then we can use same file
type ASC for GUI_UPLOAD also.
2. But if the FM 'WS_UPLOAD' has file type as DAT, we can not use DAT for
'GUI_UPLOAD' as it will give short dump.
In this case we need use file type as ASC
and
HAS_FIELD_SEPARATOR = X.
3. If the file name or file type of ws_upload have variables or constants
Instead of hard coding, then dont use hard code values for gui_upload.
3. The data type of file name always should be of character type for gui_upload
The file type should be of Type Character and length 10.
4. Always uncomment the exceptions for gui_upload.
5. And also uncomment the code inside IF SY-SUBRC <> 0. and ENDIF after
gui_upload if the customer has not handled any exception in 46c version.
If there is any code inside IF SY-SUBRC <> 0 and ENDIF for ws_upload in 46c
version, Please use the same code in ECC also after gui_upload.
Example:
Example for File type ASC:
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = P_FILE
FILETYPE = 'ASC'
IMPORTING
FILELENGTH =
TABLES
DATA_TAB = P_I_DATA
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
OTHERS = 10.
Replacement FM:
DATA L_P_FILE TYPE STRING.
L_P_FILE = P_FILE.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = L_P_FILE
FILETYPE = ASC
TABLES
DATA_TAB = P_I_DATA
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17
IF SY-SUBRC NE 0.
MESSAGE E033 WITH P_FILE ' could not be opened'(E03).
ENDIF.
Example for file type DAT:
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = P_FILE
FILETYPE = 'DAT'
IMPORTING
FILELENGTH =
TABLES
DATA_TAB = P_I_DATA
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TABLE_WIDTH = 4
INVALID_TYPE = 5
NO_BATCH = 6
UNKNOWN_ERROR = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
OTHERS = 10.
Replacement FM:
DATA L_P_FILE TYPE STRING.
L_P_FILE = P_FILE.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = L_P_FILE
FILETYPE = ASC
HAS_FIELD_SEPARATOR = X
TABLES
DATA_TAB = P_I_DATA
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
Else.
2. Obsolete FM : WS_DOWNLOAD
Replacement FM: GUI_DOWNLOAD.
Note:
1. If the FM WS_DOWNLOAD' has file type as ASC, then we can use same file
Type ASC for GUI_DOWNLOAD also.
2. If the FM 'WS_DOWNLOAD' has file type as DAT, we can use DAT for
'GUI_DOWNLOAD'
3. If the file name or file type of ws_upload have variables or constants
Instead of hard coding,then dont use hard code values for gui_download.
Declare variables and assign the ws_download variables to new variables
and use These in the new FM.
4. The data type of file name always should be of character type for gui_upload
The file type should be of Type Character and length 10.
5. The data type of file name always should be of character type for gui_ download.
6. Always uncomment the exceptions for gui_download.
7. And also uncomment the code inside IF SY-SUBRC <> 0. and ENDIF after
Gui_upload if the customer has not handled any exception in 46c version.
If there is any code inside IF SY-SUBRC <> 0 and ENDIF for ws_ download in
46c version, Please use the same code in ECC also after gui_download.
Example:
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = P_FILENM
FILETYPE = 'DAT' " split into records
TABLES
DATA_TAB = L_ITAB
FIELDNAMES = T_HEAD
EXCEPTIONS
FILE_OPEN_ERROR = 01
FILE_WRITE_ERROR = 02
INVALID_FILESIZE = 03
INVALID_TABLE_WIDTH = 04
INVALID_TYPE = 05
NO_BATCH = 06
UNKNOWN_ERROR = 07.
Replacement FM for above FM:
DATA L_P_FILE TYPE STRING.
L_P_FILE = P_FILENM.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = L_P_FILE
FILETYPE = DAT
TABLES
DATA_TAB = L_ITAB
FIELDNAMES = T_HEAD
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
*EXPORTING
*defaultoption = 'N'
* extline1 = 'Soll das Include überschrieben werden?'(034)
* extline2 = i_inc-include
* itel = 'Include existiert bereits!'(039)
START_COLUMN = 25
START_ROW = 6
CANCEL_DISPLAY = 'X'
IMPORTING
answer = answer
EXCEPTIONS
OTHERS = 1.
Replacement Method :
DATA : l_question type string.
Concatenate 'Soll das Include überschrieben werden?'(034)
i_inc-include
into l_question.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = 'Prepack deletion'(019)
DIAGNOSE_OBJECT = ' '
TEXT_QUESTION = l_question
TEXT_BUTTON_1 = 'Yes'(020)
*ICON_BUTTON_1 = ' '
TEXT_BUTTON_2 = 'No'(021)
*ICON_BUTTON_2 = ' '
*DEFAULT_BUTTON = '2'
DISPLAY_CANCEL_BUTTON = 'X'
*USERDEFINED_F1_HELP = ' '
*START_COLUMN = 25
*START_ROW = 6
*POPUP_TYPE =
*IV_QUICKINFO_BUTTON_1 = ' '
*IV_QUICKINFO_BUTTON_2 = ' '
IMPORTING
ANSWER = answer
TABLES
*PARAMETER =
EXCEPTIONS
TEXT_NOT_FOUND = 1
OTHERS = 2 .
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Note :
In FM POPUP_TO_CONFIRM_STEP' , the value for import parameter ANSWER is
J (YES),
N (NO).
But for POPUP_TO_CONFIRM , the value for import parameter ANSWER is
1 (YES),
2 (NO).
So, please change these values accordingly while replacing with the new FM.
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
EXPORTING
DIAGNOSETEXT1 = TEXT-900
DIAGNOSETEXT2 = SY-MSGV1
DIAGNOSETEXT3 = TEXT-901
TEXTLINE1 = TEXT-902
TEXTLINE2 = TEXT-903
TITEL = TEXT-904
IMPORTING
ANSWER = UP_ANSWER.
replacement:
The Diagnose object parameter Z_ZIMPCHK1_POPUP_TO_CONFIRM'
is created in SE61 transaction as DIALOG TEXT object
DATA: W_PARAM TYPE SPAR,
I_PARAMETERS TYPE STANDARD TABLE OF SPAR,
W_TEXT_Q TYPE STRING.
MOVE TEXT-900 TO W_PARAM-VALUE.
MOVE 'TEXT1' TO W_PARAM-PARAM.
APPEND W_PARAM TO I_PARAMETERS.
WRITE SY-MSGV1 TO W_PARAM-VALUE.
MOVE 'TEXT2' TO W_PARAM-PARAM.
APPEND W_PARAM TO I_PARAMETERS.
WRITE TEXT-901 TO W_PARAM-VALUE.
MOVE 'TEXT3' TO W_PARAM-PARAM.
APPEND W_PARAM TO I_PARAMETERS.
CONCATENATE TEXT-902
TEXT-903
INTO
W_TEXT_Q.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = TEXT-904
DIAGNOSE_OBJECT = 'Z_ZIMPCHK1_POPUP_TO_CONFIRM'
TEXT_QUESTION = W_TEXT_Q
IMPORTING
ANSWER = UP_ANSWER
TABLES
PARAMETER = I_PARAMETERS
EXCEPTIONS
TEXT_NOT_FOUND = 1
OTHERS = 2
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 'UPLOAD'
exporting
filename = umsfile
filetype = 'ASC'
tables
data_tab = umsatz.
replacement :
DATA : I_FILE_TABLE1 TYPE TABLE OF FILE_TABLE,
W_FILETABLE1 TYPE FILE_TABLE,
W_RC1 TYPE I,
W_P_DEF_FILE1 TYPE STRING,
W_P_FILE1 TYPE STRING,
w_usr_act1 TYPE I.
W_P_DEF_FILE1 = umsfile.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE =
DEFAULT_EXTENSION =
DEFAULT_FILENAME = W_P_DEF_FILE1
CHANGING
FILE_TABLE = I_FILE_TABLE1
RC = W_RC1
USER_ACTION = w_usr_act1
FILE_ENCODING =
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
others = 5 .
IF sy-subrc = 0
AND w_usr_act <>
CL_GUI_FRONTEND_SERVICES=>ACTION_CANCEL.
LOOP AT I_FILE_TABLE1 INTO W_FILETABLE1.
W_P_FILE1 = W_FILETABLE1.
EXIT.
ENDLOOP.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = W_P_FILE1
FILETYPE = 'ASC'
TABLES
DATA_TAB = umsatz
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
CALL FUNCTION 'DOWNLOAD'
EXPORTING
BIN_FILESIZE = ' '
CODEPAGE = ' '
FILENAME = PT_FILE
FILETYPE = 'DAT'
ITEM = ' '
MODE = ' '
WK1_N_FORMAT = ' '
WK1_N_SIZE = ' '
WK1_T_FORMAT = ' '
WK1_T_SIZE = ' '
FILEMASK_MASK = ' '
FILEMASK_TEXT = ' '
FILETYPE_NO_CHANGE = ' '
FILEMASK_ALL = ' '
FILETYPE_NO_SHOW = ' '
SILENT = 'S'
COL_SELECT = ' '
COL_SELECTMASK = ' '
NO_AUTH_CHECK = ' '
IMPORTING
ACT_FILENAME =
ACT_FILETYPE =
FILESIZE =
CANCEL =
TABLES
DATA_TAB = BELEGE
FIELDNAMES =
EXCEPTIONS
INVALID_FILESIZE = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3
NO_BATCH = 4
UNKNOWN_ERROR = 5
GUI_REFUSE_FILETRANSFER = 6
OTHERS = 7.
replacement:
DATA: l_filename TYPE string,
l_filen TYPE string,
l_path TYPE string,
l_fullpath TYPE string,
l_usr_act TYPE I.
l_filename = PT_FILE.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
DEFAULT_FILE_NAME = l_filename
CHANGING
FILENAME = l_filen
PATH = l_path
FULLPATH = l_fullpath
USER_ACTION = l_usr_act
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
others = 4.
IF sy-subrc = 0
AND l_usr_act <>
CL_GUI_FRONTEND_SERVICES=>ACTION_CANCEL.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
BIN_FILESIZE =
FILENAME = l_fullpath
FILETYPE = 'DAT'
TABLES
DATA_TAB = BELEGE
FIELDNAMES =
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF. -
Obsolete function module in ECC6 - what to use instead of that
I have to upgrade from SAP 4.7 to ECC6 .
Some obsolete function module are as follows:
ADDRESS_MAINTAIN
ADDRESS_UPDATE_OLD
DD_PR_REDEFINE
GRAPH_DIALOG
HELPSCREEN_NA_CREATE
Can anybody assist me which function module to use in place of this function module or which class methods to be used instead of these function modules ?
Thanks...Hi Deepak,
For ADDRESS_MAINTAIN you can go this way for now.
DATA : func_name TYPE rs38l_fnam.
func_name = 'ADDRESS_MAINTAIN'. "To escape the EPC Check
DO.
CALL FUNCTION func_name
EXPORTING
adrswa_in = sadr
processing_status = mode
kennzeichen = kz
save_intern = 'X'
title = am_title
IMPORTING
adrswa_out = sadr
returncode = return
update_flag = am_save
EXCEPTIONS
not_found = 4.
we haven't found any replacement for this. so doing it this way.
ADDRESS_UPDATE_OLD - No Replacement for this.
DD_PR_REDEFINE - No Replacement for this.
GRAPH_DIALOG - No Replacement for this.
All the Above 3 FMs are still being used in ECC standard programs.
Thanks,
Sai
Edited by: Sai Krishna Kowluri on Dec 5, 2008 7:34 AM
Edited by: Sai Krishna Kowluri on Dec 5, 2008 7:37 AM -
Shortdump occured due to function module called incorrectly
Hi experts!
Iam loading the deltas from 2lis_40_reval into 3 cubes.
In one cube the dataload is successful,but in other two cubes deltas are unsuccessful.B'coz a shortdump was occured due to function module was called incorrectly.
can any expert give me a solution.
diyathanks for reply,
i have seen in st22 for this shortdump,it is mentioned..
'the function module interface allows you to specify only fields of particular type under "E_week".the "result" specified here is a different type.
i observed the routines of all cubes.in one cube ,for zcalender year/week a routine week is assigned but there
"E_QTR = result".and zcalender/quater a routine is assined but there is"E_WEEK = result" .and also i checked the properties of zcalender year/week & zcalender/quater .
the lenth for both of these is different.
so,is b'coz of these data is not loading.if so can i change these routines in production.can u pls give the solution
diya -
PDImageSelectAlternate "is obsolete and never called in Acrobat 8". Then how can I switch to alternate images to display in Acrobat 8 and 9?
The goal is to speed up screen redraw (using low resolution proxies). High-end prepress software usually provide option to generate alternate images while "normalizing" incoming PDFs. And (at least) Enfocus Pitstop can switch on/off their display in Acrobat 8 and later. The question is how they do it, if PDImageSelectAlternate "is never called". Well, I chose this subject as practice for my first plugin, because it seemed to me straightforward and simple. It looks like I was wrong.
-
Forms 9i/ DB 10g - Form Hangs when function is called
Using 9i Web Forms on 10g Database Linux O/S
I have the following function call in a form within a loop:
:nbt02_lentrn.nbt_txn_descr := fn_get_trans_descr(ls_app_area_code,ls_txn_type);
The function being called contains this code:
FUNCTION fn_get_trans_descr(ps_app_area_code IN VARCHAR2,
ps_txn_code IN VARCHAR2) RETURN VARCHAR2 IS
CURSOR cur_txn_descr IS
SELECT descr
FROM financial_trans_types
WHERE code = ps_txn_code
AND aparea_code = ps_app_area_code;
ls_txn_descr financial_trans_types.descr%TYPE;
BEGIN
OPEN cur_txn_descr;
FETCH cur_txn_descr INTO ls_txn_descr;
CLOSE cur_txn_descr;
Return(ls_txn_descr);
END;
When the call is executed, the form hangs after the OPEN command. I have checked the parameters for their values and successfully executed the cursor in SQL.
When I hardcode the function parameter values, the code executes successfully. Also, and perhaps most unusually, if I do either of the following before the function call, the code runs successfully:
ls_txn_type := ls_txn_type;
:nbt02_lentrn.nbt_txn_descr := fn_get_trans_descr(ls_app_area_code,ls_txn_type);
ls_txn_type := NVL(ls_txn_type,NULL);
:nbt02_lentrn.nbt_txn_descr := fn_get_trans_descr(ls_app_area_code,ls_txn_type);
I have also extracted the call and placed it into a different form where it works fine!
The variable ln_txn_type is populated via another call within the same loop. It's value alternates between null and a value for the record set.
The same code works fine Client/Server and although I have a solution, I'm not sure what the problem is! Does anyone have any clues?Hello - your problem actually looks similar in symptoms to one I hit just a couple of days ago (see my post 'Forms hangs when using result of an OUT parameter to do an Insert ' on July 19th.)
The problem I was having was if I had a variable which already had a value, then passed into an IN OUT parameter of a db stored proc, the proc set the value to null, and then I tried to use the variable in a table insert. The form would just hang completely. Like you, one workaround for the problem was to have a line like:
my_var := NVL(my_var,NULL);
to somehow 'fix' the variable before trying to use it further. Even though the variable seems null, and returns true for IF ... IS NULL, something had gone wrong with it that rendered it toxic to my form. This workaround should have no net effect, but it does somehow solve the problem. Like your problem, mine doesn't occur on client server, only on the newer version.
I hit this problem using Forms 10g904, against a 9i database. Having talked it over with Oracle support, I've tried doing the same thing using 10g Release 2, and the problem disappears, so Oracle have obviously fixed it somewhere between the two releases - I'm currently investigating intermediate Patch Sets.
Don't know if this is helpful, but all I can suggest is that you ensure you've applied the latest patchsets to your Forms (you can try it on the Builder first before patching your apps server installation.) If that doesn't do it, I'm guessing it's a case of use the workarounds, or go up to a higher version altogether of Forms.
Sorry not to have any more optimistic advice!
James -
Hi can you please provide alternate replacement function modules for the following obsolete function modules in ECC.
LOG_SYSTEM_GET_RFC_DESTINATION
NAMETAB_GET
VALUES_GET
VALUES_DISPLAY
WS_QUERY
HELPSCREEN_NA_CREATEfor WS_QUERY replacement are...
GUI_GET_DESKTOP_INFO
GUI_GET_FILE_INFO
GUI_EXEC
GUI_RUN
CL_GUI_FRONTEND_SERVICES=>FILE_EXIST or WS_QUERY-Directory Exist is CL_GUI_FRONTEND_SERVICES=>DIRECTORY_EXIST
also, check...
http://help.sap.com/saphelp_46c/helpdata/en/d2/42f955cafe11d1ad0c080009b0fb56/content.htm
Message was edited by:
Ramesh Babu Chirumamilla -
Replacements for obsolete function modules
Hi,
What is the best way to find out the replacement for the obsolete function modules? We are starting an upgrade project and are required to replace the obsolete function modules used in that. So before starting that I want to keep a list of obsolete function modules and their replacements ready.
SSHi,
RODIR table gives not only FM, all obsoletes types.
if you dont find, best way is when we check EPC for the program,
in call function interface warnings shows, obsolete function modules.
or do UCCHECK it will both obsolete and suggested replacements.
Thanks
Vinod
Maybe you are looking for
-
Hello- I suck at Linux and networking, especially when someone takes away all the extras.... That said I really like Arch because I'm finally learning what I really need (or am missing) and what it's used for. I'm currently running Arch64 in a box
-
Error when trying to buy an app.
I tried to buy an app this morning for my entertainment but when clicking on the buy now button it says that "sign in is required" I signed in and it brought me to the page about my account and credit card and stuff. My security code was blank so I p
-
Please help. Running Adobe Acrobat and reader XI ( latest versions). PC is Lenovo ThinkPad 440 S. Don't think I've got any plug-ins that are affecting this, but Dragon NaturallySpeaking is installed on PC, and I know this sometimes causes problems wi
-
How do I cancel the flow of emails from support communities?
How do I cancel the flow of emails from support communities?
-
Different mail ID for different workflows
Hi All, As per my knowledge if we use mail task in work flow a e-mail will be triggered from mail ID maintained for user wf_batch , is there any way to send mail through different mail iD for different workflows by using mail tasks only, not by using