Returns and Replacement Process- Error
Hi all,
We are creating a Complaints Transaction ZCOM in CRM 7.0 with product say XYZ
The complaint Item category is ZCOM
Then we are creating a return request item with item category ZREN and saving the document.
The Document gets successfully distributed to ECC with the return item ZREN.
Now if we open the Complaint document in CRM it shows an error as u201CThe item category 'ZREN' is not permitted for product 'XYZ'u201D.
If we create a Replacement Item with item category ZREP then we get the error as u201CThe item category 'ZREP' is not permitted for product 'XYZ'u201D.
However in ECC the document is complete without any errors.
We are not able to get the reason behind this error.
Al the customizing for item category determination seems to be ok.
Any suggestions??..experts pls reply soon
Regards,
PP
Edited by: PePe on Mar 24, 2010 11:06 AM
Hi Pepe,
I suspect something might be a problem with Item Usage. So we need to check 2 things.
1) Create a return order/ return request item directly in ECC and check the item usage that is getting picked.
2) In CRM also create a return order / return request item and check the item usage. you can put a break point on select statment "SELECT SINGLE * FROM crmc_it_assign" in CRM_ORDER_IT_ASSIGN_SELECT_CB FM.
I suspect the problem with item usage as transaction type and item cat group can not change (assuming materail and product are in sync)
Let me know the outcome. Hope this helps.Regds,
Raghu
Similar Messages
-
Return and Exchange process in CSC
In CSC Return and Exchange process, While Returning an Item, Refund type is Store Credit. How to change Refund type as credit card?
Thanks in Advance.You can check out the products and services tab on this website - follow the instructions and it will let you if you are still under warranty and also let you know how much apple will charge to replace the battery. Also, check out MacResQ.com and compare prices. I believe I read that Apple Stores will give you a 10% discount for a trade in and there are some online places that will let you trade up also.
Cheryl -
Hi Gurus,
Kindly provide the information about the customer returns and replacement in respect of under warranty cases
Eg
Final product sold is gear box (based on BOM). If we received the gearbox from customer for repair we have to replace some parts of the gearbox and send back to the customer (Note: gearbox is under warranty). In these case how to account the return gearbox and how to account the replaced parts and how to send back to the customer.
Regards
AllenHi Pepe,
I suspect something might be a problem with Item Usage. So we need to check 2 things.
1) Create a return order/ return request item directly in ECC and check the item usage that is getting picked.
2) In CRM also create a return order / return request item and check the item usage. you can put a break point on select statment "SELECT SINGLE * FROM crmc_it_assign" in CRM_ORDER_IT_ASSIGN_SELECT_CB FM.
I suspect the problem with item usage as transaction type and item cat group can not change (assuming materail and product are in sync)
Let me know the outcome. Hope this helps.Regds,
Raghu -
Yesterday I've bought the old mac book air, will Apple accept a return and replace it with the new one?
Hi micjhal,
Call them up! If you look on your receipt it'll indicate you have 14-days to return it (if bought at a retail store) and 30-days if bought through the online store. -
CDDB error and HTTP processing error
when I try to add a new CD to my library I get CDDB error and HTTP processing errors..... and download will only show the number of tracks and the time each track will play...this only happens on my PC.... and everything works ok on my laptop... I have tried the latest update...and I have compared settings between the two computers but haven't found the problem...
Since a recent update of itunes I cannot get CD track
names from Gracenote anymore. This problem only
occurs on my windows profile and not on other
profiles on the same computer. When I load an audio
CD, itunes recognises it but doesn't name tracks.
When I click on "Get CD track names" in the advanced
menu it starts as normal and then I get a window with
the message 'CDDB Error. HTTP processing Error.' I
have tried a second itunes download, which according
to the install wizard repaired all faults.... still
happening though. I don't have enough time in my life
to type in all the track names! Any help gratefully
received.
Sony Vaio
Windows XP
Solution document found!
Refer to www.info.apple.com/kbnum/n302538
Insert an additional step:
6a. Click on Disable All.
It takes a while to test one or a few items at a time, but it works! If you find these in your Startup list try selecting all and then unselecting these first. One of these was the problem for me but I haven't narrowed it down to one of them yet.
nwiz
SNDMon
dlbcserv
Copy Protection Notifier
Good Luck.
disaacson1
Toshiba Satellite P25 PC Windows XP -
Customer Returns and Replacement Orders
Hi,
What processes are involved with Customer Returns? How do we create a replacement order, and what should we do if a replacement is not issued?
Thanks,
Rathul.Hi,
PGI (Post Goods Issue) may be cancelled by Transaction code VL09. The accounting document is just the reverse of the original PGI document.
In my company, we use project stock (movement type 601 Q for PGI). VL09 creates the movement type 602 Q. But rather than VL09, the generally accepted method in my company for the reverse items is to use the movement type 653, "back to the to the storage location." The accounting document takes the cost "from" the project and moves it back "to" the storage location.
The movement types are entered in the schedule lines in customizing, which are then assigned to the item categories. However, in this process, "no invoice" takes place. If you have a delivery related invoice, it should be cancelled beforehand.
If you do not give replacement, the Customer Account needs to be credited.
Please do not forget to create a Billing document (Formally Return Credit Memo) with reference to return delivery. It is very important in order to close the cycle. If you do not create a return credit memo, your delivery will keep appearing in the "Billing Due" list and with status "Being processed". When you create a return order type RE, the billing type is picked up as RE (Return Credit Memo) automatically.
When you are creating a replacement, you can create a replacement order, delivery, and billing. To create the replacement order, you can define an order type by copying from order type OR. In the copy control, you can define the relevant item categories from RE to OR. You can make reference Mandatory for this order type. The delivery type for this replacement order type will be LF and billing type F2.
Reward points if found helpfull..
Cheers,
Chandra Sekhar. -
Returns and replacements!
I bought a Nokia N86 a week last monday and the camera capture button was unresponsive. I called Customer care and was told to send the phone back using a label that they provided.
1. How long does it take for returned goods to be received and a replacement device despatched? Note that I was told I would get an email from Nokia once the device was accepted, but since it was posted monday, I have not heard a thing (it is thursday now)
2. Why can't Nokia just simply send me a replacement phone next day delivery, and have the faulty handset collected???? Network Operators do this (My N73 was replaced within 48 hours by Orange) I now have had no phone for over a week.
I can understand that it's "only" been a few days since I sent my phone back, but surely after paying top dollar AND an extra fee for fast delivery I deserve a better service (considering the phone was faulty from the start)You would have a chance of getting a reply to your query only if you would click the "Contact Us" tab at the top of this page and let Nokia know. This is a user to user forum. The users try to help each other out with their problems and questions. Your query relates to Nokia's policy, therefore no one here can answer it.
mgoksoy -
IMac Return and Replacement on account of series refresh
Hi We bought a new iMac on 7th October this year, and now Apple has refreshed iMacs in a big way. We wanted to know if we can get an exchange of the old one for new, may be for price.
See this thread:
https://discussions.apple.com/thread/4463081?tstart=0 -
Automatic creation of Reservation for Service Order (Return and Repair)
Hi, Looking for your valuable help on Creation of Automatic Reservation
I am working on Return and Repair process at Plant.
1) So far
Service Notification > Repair Order > Return Delivery > Service order . has been done.
now requirement is when i am saving the service order for the Object (Fisnished Goods), in which components required for servicing of material are maintained, when i will save the order a Reservation for the same needs to be reaised to Warehouse automatically.
2) In Repair order all operation and components are not reflecting when i am selecting the line item and going to EDIT > Display Range > All Items in VA02 for which i need to do DP90.(Resource Related Billing)
Please hepl,
Thanks
SUDIP SINHAThanks for giving valuable answer,
what if in the service order i am replacing some spare parts along with services when FERT is not under warranty. How the cost will be transfered to invoice. In my case only one service is transfered.
i waqnted to transfer cost of components as well..
Thanks
SUDIP SInha -
Find and replace several array elements
I have a 2d array and want to subsitute any negitive value with a marker e.g "**" or any indicator which would be identified easily. I am using Labview 5.1
Hi,
The data type of you array is probably numerical. If you haven't already
done this, the first step would be to convert the data to a character
data type. This is easy done with 'Number to Decimal String'. Tie the
output to a 'For Loop' and the search and modify each element in the
array using a combination of 'Search 1D Array', 'Replace Array Subset',
and shift registers.
The first iteration of the 'For Loop' will give you the first index of
the first '-1' found. Use that index value to replace the the '-1' with
your '**'. Increment the index and pass it to the shift register to use
as a starting point for the next interation's search and replace process.
There may be a more "packaged" way of doing this but I just love For
Loops.
Hope this helps ...
- Kevin
In article <[email protected]>,
"Gorelick" wrote:
> I have a 2d array and want to subsitute any negitive value with a marker
> e.g "**" or any indicator which would be identified easily. I am using
> Labview 5.1 -
How to catch date errors and continue processing in a PL/SQL procedure
I'm updating a date field with dates constructed from day, month and year fields. The incoming data has many instances of day and month that are not valid dates, ex 11 31 2007. There is no 31st day in November.
I would like to write a pl/sql script to scan the table containing these values and log the rows that produce conversion errors.
I thought I could do this with exceptions but there are no exceptions that correspond to the ORA-01847 error for mismatched day and month.
Here is what I tried (the print procedure is a local wrapper for DBMS_OUTPUT.put_line):
PROCEDURE date_check IS
start1 DATE ;
BEGIN
select to_date(nvl(yearcollected,'9999') ||'/'|| nvl(monthcollected,'01') ||'/'|| nvl(daycollected,'01'),'YYYY/MM/DD'))) into start1 from incoming_data where id=1 ;
BEGIN
update temp_test set test_date = start1 where id=1 ;
EXCEPTION
WHEN OTHERS THEN
print('Date error message from exception block');
END;
print('Processing continues after handling date exception') ;
END date_check ;
Is there a way to catch this kind of error and continue processing after logging a message?
-=beekyHi, Beeky,
There are lots of different error messages associated with bad dates. Rather than try to catch them all, I use a BEGIN ... EXCEPTION block that contains nothing but a TO_DATE call. This is one of the rare occassions when I think "EXCEPTION WHEN OTHERS" is okay,
The following function comes from a package. If you want to make a stand-alone function, remember to say " *CREATE OR REPLACE* FUNCTION ...".
-- ** t o _ d t **
-- to_dt attempts to convert in_txt (assumed to
-- be in the format of in_fmt_txt) to a DATE.
-- If the conversion works, to_dt returns the DATE.
-- If the conversion fails for any reason, to_dt returns in_err_dt.
FUNCTION to_dt
( in_txt IN VARCHAR2 -- to be converted
, in_fmt_txt IN VARCHAR2 DEFAULT 'DD-MON-YYYY' -- optional format
, in_err_dt IN DATE DEFAULT NULL
RETURN DATE
DETERMINISTIC
AS
BEGIN
-- Try to convert in_txt to a DATE. If it works, fine.
RETURN TO_DATE (in_txt, in_fmt_txt);
EXCEPTION -- If TO_DATE caused an error, then this is not a valid DATE: return in_err_dt
WHEN OTHERS
THEN
RETURN in_err_dt;
END to_dt
; -
OWB mappings to skip rows that are in error and continue processing
OWB mappings to skip rows that are in error and continue processing.
1) Enter a record into an error log
2) Skip rows that are in error
3) and continue processing
Type of information could be needed in the error log:
SY_LOG_ERROR_KEY
ERROR_TIMESTAMP
MAP_NAME
SOURCE_RECORD
ERROR_CODE
ERROR_MESSAGE
ERROR_NOTES
Example:
If the source table has five records, in that 3 records has some error.
When I run the OWB mapping to load the source data to target table, OWB should skip the 3 record and load all the remaining record. This is our requirement.
Another think I want to store the error record details in a error log table.
Can u plz tell me whether it is possible in OWB. If not means please give some suggestion to do this.Hi,
thanks for ur help, As is OWB version is 10.2.0 so for set based it is not working. with your idea i create a POST PROCESSING MAPPING. it is now working fine.
Step 1:
Create a table MAP_ERROR_LOG.
Script:
CREATE TABLE MAP_ERROR_LOG
ERROR_SEQ NUMBER,
MAPPING_NAME VARCHAR2(32 BYTE),
TARGET_TABLE VARCHAR2(35 BYTE),
TARGET_COLUMN VARCHAR2(35 BYTE),
TARGET_VALUE VARCHAR2(100 BYTE),
PRIMARY_TABLE VARCHAR2(100 BYTE),
ERROR_ROWKEY NUMBER,
ERROR_CODE VARCHAR2(12 BYTE),
ERROR_MESSAGE VARCHAR2(2000 BYTE),
ERROR_TIMESTAMP DATE
TABLESPACE ODS_D1_AA
PCTUSED 0
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 80K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;
Step 2:
Create a sequence MAP_ERROR_LOG_SEQ
CREATE SEQUENCE MAP_ERROR_LOG_SEQ START WITH 1 INCREMENT BY 1
Step 3:
Create a procedure PROC_MAP_ERROR_LOG through OWB.
In this i have used 3 cursor, first cursor is used to check the count of error messages for the corresponding table(WB_RT_ERROR_SOURCES).
The second cursor is used to get the oracle error and the primary key values.
The third cursor is used for get the ORACLE DBA errors such as "UNABLE TO EXTEND THE TABLESPACE" for this type errors.
CREATE OR REPLACE PROCEDURE PROC_MAP_ERROR_LOG(MAP_ID VARCHAR2) IS
--initialize variables here
CURSOR C1 IS
SELECT COUNT(RTA_IID) FROM OWBREPO.WB_RT_ERROR_SOURCES
WHERE RTA_IID =( SELECT MAX(RTA_IID) FROM OWBREPO.WB_RT_AUDIT WHERE RTA_PRIMARY_TARGET ='"'||MAP_ID||'"');
V_COUNT NUMBER;
CURSOR C2 IS
SELECT A.RTE_ROWKEY ERR_ROWKEY,SUBSTR(A.RTE_SQLERRM,1,INSTR(A.RTE_SQLERRM,':')-1) ERROR_CODE,
SUBSTR(A.RTE_SQLERRM,INSTR(A.RTE_SQLERRM,':')+1) ERROR_MESSAGE,
C.RTA_LOB_NAME MAPPING_NAME,SUBSTR(B.RTS_SOURCE_COLUMN,(INSTR(B.RTS_SOURCE_COLUMN,'.')+1)) TARGET_COLUMN,
B.RTS_VALUE TARGET_VALUE,C.RTA_PRIMARY_SOURCE PRIMARY_SOURCE,C.RTA_PRIMARY_TARGET TARGET_TABLE,
C.RTA_DATE ERROR_TIMESTAMP
FROM OWBREPO.WB_RT_ERRORS A,OWBREPO.WB_RT_ERROR_SOURCES B, OWBREPO.WB_RT_AUDIT C
WHERE C.RTA_IID = A.RTA_IID
AND C.RTA_IID = B.RTA_IID
AND A.RTA_IID = B.RTA_IID
AND A.RTE_ROWKEY =B.RTE_ROWKEY
--AND RTS_SEQ =1
AND B.RTS_SEQ IN (SELECT POSITION FROM ALL_CONS_COLUMNS A,ALL_CONSTRAINTS B
WHERE A.TABLE_NAME = B.TABLE_NAME
AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND A.TABLE_NAME =MAP_ID
AND CONSTRAINT_TYPE ='P')
AND A.RTA_IID =(
SELECT MAX(RTA_IID) FROM OWBREPO.WB_RT_AUDIT WHERE RTA_PRIMARY_TARGET ='"'||MAP_ID||'"');
CURSOR C3 IS
SELECT A.RTE_ROWKEY ERR_ROWKEY,SUBSTR(A.RTE_SQLERRM,1,INSTR(A.RTE_SQLERRM,':')-1) ERROR_CODE,
SUBSTR(A.RTE_SQLERRM,INSTR(A.RTE_SQLERRM,':')+1) ERROR_MESSAGE,
C.RTA_LOB_NAME MAPPING_NAME,SUBSTR(B.RTS_SOURCE_COLUMN,(INSTR(B.RTS_SOURCE_COLUMN,'.')+1)) TARGET_COLUMN,
B.RTS_VALUE TARGET_VALUE,C.RTA_PRIMARY_SOURCE PRIMARY_SOURCE,C.RTA_PRIMARY_TARGET TARGET_TABLE,
C.RTA_DATE ERROR_TIMESTAMP
FROM OWBREPO.WB_RT_ERRORS A,OWBREPO.WB_RT_ERROR_SOURCES B, OWBREPO.WB_RT_AUDIT C
WHERE C.RTA_IID = A.RTA_IID
AND A.RTA_IID = B.RTA_IID (+)
AND A.RTE_ROWKEY =B.RTE_ROWKEY (+)
AND A.RTA_IID =(
SELECT MAX(RTA_IID) FROM OWBREPO.WB_RT_AUDIT WHERE RTA_PRIMARY_TARGET ='"'||MAP_ID||'"');
-- main body
BEGIN
DELETE ED_ODS.MAP_ERROR_LOG WHERE TARGET_TABLE ='"'||MAP_ID||'"';
COMMIT;
OPEN C1;
FETCH C1 INTO V_COUNT;
IF V_COUNT >0 THEN
FOR REC IN C2
LOOP
INSERT INTO ED_ODS.MAP_ERROR_LOG
(Error_seq ,
Mapping_name,
Target_table,
Target_column ,
Target_value ,
Primary_table ,
Error_rowkey ,
Error_code ,
Error_message ,
Error_timestamp)
VALUES(
ED_ODS.MAP_ERROR_LOG_SEQ.NEXTVAL,
REC.MAPPING_NAME,
REC.TARGET_TABLE,
REC.TARGET_COLUMN,
REC.TARGET_VALUE,
REC.PRIMARY_SOURCE,
REC.ERR_ROWKEY,
REC.ERROR_CODE,
REC.ERROR_MESSAGE,
REC.ERROR_TIMESTAMP);
END LOOP;
ELSE
FOR REC IN C3
LOOP
INSERT INTO ED_ODS.MAP_ERROR_LOG
(Error_seq ,
Mapping_name,
Target_table,
Target_column ,
Target_value ,
Primary_table ,
Error_rowkey ,
Error_code ,
Error_message ,
Error_timestamp)
VALUES(
ED_ODS.MAP_ERROR_LOG_SEQ.NEXTVAL,
REC.MAPPING_NAME,
REC.TARGET_TABLE,
REC.TARGET_COLUMN,
REC.TARGET_VALUE,
REC.PRIMARY_SOURCE,
REC.ERR_ROWKEY,
REC.ERROR_CODE,
REC.ERROR_MESSAGE,
REC.ERROR_TIMESTAMP);
END LOOP;
END IF;
CLOSE C1;
COMMIT;
-- NULL; -- allow compilation
EXCEPTION
WHEN OTHERS THEN
NULL; -- enter any exception code here
END; -
Slow processing and getting opening errors/warnings
I've modified the PDF Binder sample to get a plugin that would open PDF's and Tif files, and save them as PDF/A-1b (code below).
It's working. The problem: it's processing too slow (compared with the Actions batch processing)... and I've been getting warnings/and errors about "The imput file is corrupt or of an unknown/unsupported type" type. This is stopping my batch process until I click OK, and the it continues.
I am trying to process a few thousand of tif files now. I tried first to use the Batch processing capability built in the Acrobat X... an it works, but only with the first 255 documents in the folder... then gives an "insufficient disk space" message for the rest of the files in the directory.
So, 2 questions: Does anyone knows why it is so slow processing the tiff files and... how I can make my code "silent" so it does not wait for the OK after the message??
Thanks in advance.
The code:
ADOBE SYSTEMS INCORPORATED
Copyright (C) 1998-2006 Adobe Systems Incorporated
All rights reserved.
NOTICE: Adobe permits you to use, modify, and distribute this file
in accordance with the terms of the Adobe license agreement
accompanying it. If you have received this file from a source other
than Adobe, then your use, modification, or distribution of it
requires the prior written permission of Adobe.
\file PDFBinder.cpp
- Implements a method to convert multiple files into PDFs and bind the PDFs
into one PDF file. The code shows how to use AVConversionToPDFHandler to
convert files to PDF and how to use PDDocInsertPages() to combind PDF files.
// Headers.
#include <stdio.h>
#include <ctype.h>
#ifndef MAC_PLATFORM
#include <direct.h>
#include "PIHeaders.h"
#endif
// Defines ----------
// Define this flag to show AVConversionToPDFEnumHandler info. in log file.
#define SHOW_TOPDF_HANDLER_TYPES
// define this flag to use file type filter
#define USE_FILE_FILTER
Constants/Declarations
// Message display control. Ture: display
ASBool bEcho = true;
// File location. User can change the following filenames.
#if WIN_PLATFORM
const char* STRING_PDFBinderFolder = "C:\\Fairfax\\Adobe\\in";
const char* STRING_PDFOutputFolder = "C:\\Fairfax\\Adobe\\PDFA";
const char* FOLDERSYMBOL="\\";
#endif
#if MAC_PLATFORM
const char* STRING_PDFBinderFolder = "/PDFBinder";
const char* FOLDERSYMBOL="/";
#endif
char* OutputPdfFileName = "PDFBinderOutput.pdf";
char* LogFileName = "PDFProcessLog.txt";
static ASInt32 gNumToPDFExt;
static ASInt32 gNumFromPDFExt;
static AVConversionFromPDFHandler RightHandler;
const int MAX_FILENAME_LENGTH = 256;
char sLogFileName[MAX_FILENAME_LENGTH];
// Filter -----------
// Filter is a list of file types which can be converted to PDF in this program.
// Use a filter may fit user's specific needs and ensure a smooth automation process.
// Of course, the user can turn off the filter in two ways:
// (1) gPDFBinderFileFilter = "";
// (2) comment out //USE_FILE_FILTER
// The filter should be consistent with the Acrobat viewer's menu capability:
// Create PDF from multiple files ...
// Here we put the types which have been tested, but user can expand it.
const char* gPDFBinderFileFilter = "pdf,tif,tiff,PDF,TIF,TIFF";
const int MAX_STRING_LENGTH = 2048;
AVConversionToPDFHandler gHandler;
// functions in this file.
int ConvertAndInsertFileToPDF(ASPathName aspItem, char* aFileName, PDDoc PDFfile);
void BindingFileToPDF(ASPathName aPathName, char* aFilename, ASFileSysItemPropsRec nFileAttrb, PDDoc targetPDdDoc, ASPathName outputPathName, int *ipTotal, int *ipConverted);
ASBool PassPDFBinderFileFilter(char* filename);
int ConvertAndSavePDFInTargetFolder(ASPathName aPathName, char* aFileName, PDDoc PDFfile, ASPathName outputPathName);
char* NewFileName(char *& aFileName);
// callbacks
ACCB1 ASBool ACCB2 MyAVConversionToPDFEnumProc(AVConversionToPDFHandler handler, AVConversionEnumProcData data);
ACCB1 ASBool ACCB2 AVConversionToPDFEnumFindHandler(AVConversionToPDFHandler handler, AVConversionEnumProcData data);
static ACCB1 ASBool ACCB2 myAVConversionFromPDFEnumProc(AVConversionFromPDFHandler handler, AVConversionEnumProcData data);
Implementation
/** This sample implements a method to convert multiple files into PDF
and bind the PDFs into one PDF file .
This sample shows developers how to grammatically implement To-PDF file
converson functionality. Basically, the code uses AVConversionToPDFHandler
to convert files to PDF and PDDocInsertPages()to combine PDF files.
This plug-in is designed to run from a menu item, and by setting bEcho = false
it may be run without any graphics user interface on the screen. Therefore, it
can be executed from other programs such as C IAC, VB IAC, and JavaScript
to meet enterprise workflow needs.
How to run it :
- This sample adds a menu item "PDF Binder" under the Acrobat SDK submenu. Two ways to
execute it: 1) click the menu item to run the program using a fixed file location
hard coded; 2) press the shift key and click the menu item to choose a folder where
files to be converted are located.
- Without folder selection, this original code is to convert and bind files in a
directory C\test\PDFBinder for Win, or a folder MacHD:test:PDFBinder for Mac.
You can copy the test files in the project's testfiles folder to the appropriate location
for testing. You may locate files to be converted in another directory/folder, and
specify the location in the string variable PDFBinderFolder in the code.
- When you have the files to be converted ready in the specified location,
run Acrobat 6 menu Advanced->AcrobatSDK->PDF Binder to start the operation. There are
echo messages informing you of the operation start and end, but you can change and
rebuild the code to turn off the display on screen.
- An output file PDFBinderOutput.pdf in the same location is created
when the program succeeds. A text log file PDFBinderLog.txt in the same
location records the process and results.
- You can set bEch = false in the code to turn off any display on the screen.
This is necessary when you call the menu function from within other programs
of C IAC, VB IAC, JavaScript.
- An optional file filter is used to pre-process the files. The filter only allows
the files with predefined types to be processed. You can change the file type list
as you wish. Using a filter may ensure a smooth automation process, since you can put
only well-tested file types in the filter. To turn off the filter, you can set
gPDFBinderFileFilter = "" or not to define USE_FILE_FILTER
- Note this is a sample only, developers need to make further improvement for
their actual use. For example, you can set up a list of files to use the method for
the conversion and binding. And you can add code to handle special file types.
@see AVConversionConvertToPDFWithHandler
@see AVConversionEnumToPDFConverters
@see ASFileSysDestroyFolderIterator
@see PDDocOpen
@see PDDocClose
@see PDDocInsertPages
@see PDDocCreatePage
@see PDDocDeletePages
@see PDPageRelease
@see ASFileSysCreatePathName
@see ASFileSysFirstFolderItem
@see ASFileSysNextFolderItem
@see ASFileSysGetNameFromPath
@see ASFileSysReleasePath
ACCB1 void ACCB2 PDFBinderCommand(void*)
// if the menu item clicked with Shift key pressed down, go to interactive mode.
// let the user to choose a folder and process all the file in the folder.
ASText dispText = ASTextNew();
char PDFBinderFolder[MAX_STRING_LENGTH];
ASBool shiftKeyIsDown = ((AVSysGetModifiers() & AV_SHIFT) != 0);
if(shiftKeyIsDown) {
AVOpenSaveDialogParamsRec dialogParams;
// Configure the dialog box parameters.
memset (&dialogParams, 0, sizeof (AVOpenSaveDialogParamsRec));
dialogParams.size = sizeof(AVOpenSaveDialogParamsRec);
dialogParams.windowTitle = ASTextFromScriptText("Choose folder with files to bind",kASRomanScript);
dialogParams.flags |= kAVOpenSaveAllowForeignFileSystems;
dialogParams.initialFileSys = ASGetDefaultUnicodeFileSys();
ASPathName thePath;
ASFileSys fileSys;
AVAppBeginModal(NULL);
if(ASBoolToBool(AVAppChooseFolderDialog(&dialogParams, &fileSys, &thePath)) != true){
AVAppEndModal();
//AVAlertNote("Failed to select the folder");
return;
AVAppEndModal();
#ifdef WIN_PLATFORM
ASFileSysDisplayASTextFromPath(ASGetDefaultUnicodeFileSys(), thePath, dispText);
ASHostEncoding bestEnc = ASTextGetBestEncoding(dispText, (ASHostEncoding)PDGetHostEncoding());
strncpy(PDFBinderFolder, ASTextGetEncoded(dispText, bestEnc), MAX_STRING_LENGTH - 1);
#else
ASPlatformPath aspPath;
ASFileSysAcquirePlatformPath(fileSys, thePath, ASAtomFromString("POSIXPath"), &aspPath);
strncpy(PDFBinderFolder, (char *)ASPlatformPathGetPOSIXPathPtr(aspPath), MAX_STRING_LENGTH - 1);
ASFileSysReleasePlatformPath(fileSys, aspPath);
// remove extra path separator
char e = PDFBinderFolder[strlen(PDFBinderFolder)-1];
if(e == ':' || e == '/')
PDFBinderFolder[strlen(PDFBinderFolder)-1]='\0';
dispText = ASTextFromScriptText(PDFBinderFolder, kASEUnicodeScript);
#endif
ASFileSysReleasePath(fileSys, thePath);
// Otherwise, the hard coded file path will be used.
else {
strcpy(PDFBinderFolder, STRING_PDFBinderFolder);
dispText = ASTextFromScriptText(PDFBinderFolder, kASRomanScript);
// instruction message
char strMsg[MAX_STRING_LENGTH] = "";
sprintf(strMsg, "This function will convert and process Tiff and PDF files in the selected directory. ");
strcat(strMsg, " You need to copy your files in C:\\Fairfax\\Adobe\\in directory." );
strcat(strMsg, " Files will be processed into C:\\Fairfax\\Adobe\\PDFA directory." );
strcat(strMsg, " If you are ready, click OK to continue, or click Cancel to quit. " );
strcat(strMsg, " \nNote you can press down Shift key and click the menu item to have a folder selection. " );
strcat(strMsg, " \nNote you can turn off the echo message by setting bEcho = false and rebuild the code. " );
if(ASBoolToBool(bEcho)==true){
ASInt32 choice = AVAlert(ALERT_CAUTION, strMsg, "OK", "Cancel", NULL, true);
if(choice==2) {
return;
// create a new target pdf file with one empty page
PDDoc TargetPDF = PDDocCreate();
ASFixedRect mediaBox = { fixedZero, ASInt32ToFixed(792), ASInt32ToFixed(612), fixedZero };
PDPage emptyPage = PDDocCreatePage (TargetPDF, PDBeforeFirstPage, mediaBox);
PDPageRelease (emptyPage);
// get available headlers and set our file filter
char ValidExt[MAX_STRING_LENGTH];
memset(ValidExt, 0, MAX_STRING_LENGTH);
#ifdef SHOW_TOPDF_HANDLER_TYPES
// enumerate AVConversioToPDF handlers to get all available file
// types which can be converted to PDF.
AVConversionEnumToPDFConverters(MyAVConversionToPDFEnumProc, (AVConversionEnumProcData) ValidExt);
//AVAlertNote("Converters Defined");
//AVAlertNote(ValidExt);
//AVAlertNote(gPDFBinderFileFilter);
#endif
#ifdef USE_FILE_FILTER
// set File filter
strcpy(ValidExt, gPDFBinderFileFilter);
//AVAlertNote(ValidExt);
#endif
// process all files in the directory
int iNumFiles = 0;
int iNumFilesConverted = 0;
char* Done = "Converted";
char* NotDone = " - ";
char fileName[MAX_FILENAME_LENGTH+1];
ASFileSysItemPropsRec props;
ASFolderIterator iter;
ASPathName aspItem = NULL;
memset(&props, 0, sizeof(props));
props.size = sizeof(props);
//AVAlertNote("Props Defined");
ASPathName theFolder = NULL;
ASFileSys fileSys = NULL;
DURING
#ifdef WIN_PLATFORM
fileSys = ASGetDefaultFileSysForPath(ASAtomFromString("ASTextPath"), dispText);
theFolder = ASFileSysCreatePathName (fileSys, ASAtomFromString("ASTextPath"), dispText, 0);
//AVAlertNote("FileSys and Folder Defined");
#else
fileSys = ASGetDefaultFileSysForPath(ASAtomFromString("POSIXPath"), PDFBinderFolder);
theFolder = ASFileSysCreatePathName (fileSys,
ASAtomFromString("POSIXPath"), PDFBinderFolder, 0);
#endif
if (theFolder==NULL) {
//AVAlertNote("Fail to create ASPathName for the selected folder.");
E_RTRN_VOID
// Find first file in current directory
if((iter = ASFileSysFirstFolderItem(fileSys, theFolder, &props, &aspItem))==FALSE) {
//AVAlertNote("This is either an invalid folder or the folder contains no files.");
E_RTRN_VOID
ASFileSysReleasePath(fileSys, theFolder);
//AVAlertNote("Folder Released");
// get filename only
if(ASFileSysGetNameFromPath(fileSys, aspItem, fileName, sizeof(fileName))) {
E_RTRN_VOID
HANDLER
// exception handling
char errorMsg[256];
ASGetErrorString (ASGetExceptionErrorCode(), errorMsg, 256);
if(aspItem!=NULL) ASFileSysReleasePath(fileSys, aspItem);
if(theFolder!=NULL) ASFileSysReleasePath(fileSys, theFolder);
// display an error message.
if(ASBoolToBool(bEcho)==true) {
AVAlertNote (errorMsg);
return;
END_HANDLER
//AVAlertNote(fileName);
// go to binding if it's a valid type of file
if(props.type == kASFileSysFile && PassPDFBinderFileFilter(fileName)) {
char outFileName[] = "";
//strcat(outFileName, STRING_PDFOutputFolder);
//strcat(outFileName, FOLDERSYMBOL);
//strcat(outFileName, fileName);
strcat(outFileName, STRING_PDFOutputFolder);
strcat(outFileName, FOLDERSYMBOL);
strcat(outFileName, fileName);
//AVAlertNote(outFileName);
ASPathName outputFileName = ASFileSysCreatePathName (ASGetDefaultFileSys(), ASAtomFromString("Cstring"), outFileName, 0);
BindingFileToPDF(aspItem, fileName, props, TargetPDF, outputFileName ,&iNumFiles, &iNumFilesConverted);
//AVAlertNote("File Processed");
ASFileSysReleasePath(fileSys, aspItem);
// process all other files
while(ASFileSysNextFolderItem(fileSys, iter, &props, &aspItem)) {
// get filename only
if(ASFileSysGetNameFromPath(fileSys, aspItem, fileName, sizeof(fileName))) {
return;
// go to binding if it's a valid type of file
if(props.type == kASFileSysFile && PassPDFBinderFileFilter(fileName)) {
char outFileName[] = "";
//strcat(outFileName, STRING_PDFOutputFolder);
//strcat(outFileName, FOLDERSYMBOL);
//strcat(outFileName, fileName);
strcat(outFileName, STRING_PDFOutputFolder);
strcat(outFileName, FOLDERSYMBOL);
strcat(outFileName, fileName);
//AVAlertNote(outFileName);
ASPathName outputFileName = ASFileSysCreatePathName (ASGetDefaultFileSys(), ASAtomFromString("Cstring"), outFileName, 0);
BindingFileToPDF(aspItem, fileName, props, TargetPDF, outputFileName, &iNumFiles, &iNumFilesConverted);
//AVAlertNote("File Processed");
ASFileSysReleasePath(fileSys, aspItem);
ASPathName pdfPathName = NULL;
DURING
// close the findfile
ASFileSysDestroyFolderIterator(fileSys, iter);
// save and close the output pdf file
// create path
ASText pathText = ASTextNew();
ASTextCatMany(
pathText,
dispText,
ASTextFromScriptText(FOLDERSYMBOL, kASRomanScript),
ASTextFromScriptText(OutputPdfFileName, kASRomanScript),
NULL);
#ifdef WIN_PLATFORM
ASFileSys fileSys = ASGetDefaultFileSysForPath(ASAtomFromString("ASTextPath"), pathText);
pdfPathName = ASFileSysCreatePathName (fileSys,
ASAtomFromString("ASTextPath"), pathText, 0);
#else
char path[MAX_STRING_LENGTH];
strncpy(path, ASTextGetEncoded(pathText,
ASTextGetBestEncoding(pathText, (ASHostEncoding)PDGetHostEncoding())), MAX_STRING_LENGTH - 1);
ASFileSys fileSys = ASGetDefaultFileSysForPath(ASAtomFromString("POSIXPath"), path);
pdfPathName = ASFileSysCreatePathName (fileSys,
ASAtomFromString("POSIXPath"), path, 0);
#endif
if(pdfPathName==NULL) {
E_RTRN_VOID
// delete the empty page
if(PDDocGetNumPages(TargetPDF)>1) {
PDDocDeletePages (TargetPDF, 0,0,NULL, NULL);
// save
//PDDocSave (TargetPDF, PDSaveFull | PDSaveCollectGarbage | PDSaveLinearized,
// pdfPathName, ASGetDefaultUnicodeFileSys(), NULL, NULL);
PDDocClose (TargetPDF);
//ASFileSysReleasePath(fileSys, pdfPathName);
HANDLER
// exception handling
char errorMsg[256];
ASGetErrorString (ASGetExceptionErrorCode(), errorMsg, 256);
if(pdfPathName!=NULL) ASFileSysReleasePath(fileSys, pdfPathName);
// display an error message.
if(ASBoolToBool(bEcho)==true) {
AVAlertNote (errorMsg);
return;
END_HANDLER
// use this line to show the massage on screen if you need
//if(ASBoolToBool(bEcho)==true) {
AVAlertNote ("Folder Completed. PDF/A Output files generated.");
return;
/* ConvertAndInsertFileToPDF
/** Internal function \n
** Convert a file to PDF, then insert it to target PDF file.
** @param aFileName IN char string, filename.
** @param PDFfile IN/OUT PDDoc of the target PDF file.
** @return 0 if OK, 1 if failed.
int ConvertAndInsertFileToPDF(ASPathName aPathName, char* aFileName, PDDoc PDFfile)
PDDoc tempPDF;
char* Ext;
DURING
// get file extention
Ext = strrchr(aFileName,'.');
if(Ext) {
Ext++;
else {
E_RETURN (1);
// if the file is PDF, open PDDoc
if(strcmp(Ext,"PDF")==0 || strcmp(Ext,"pdf")==0) {
tempPDF = PDDocOpen (aPathName, ASGetDefaultFileSys(), NULL, true);
if(tempPDF==NULL) {
PDDocClose(tempPDF);
E_RETURN (1);
// else convert it to PDF
else
// let it automatically find right handler for the file and do the job.
AVConversionStatus stat = AVConversionConvertToPDF
(kAVConversionAsyncOkay, //kAVConversionNoFlags
aPathName, ASGetDefaultFileSys(), &tempPDF, NULL);
// check if successful
if(stat != kAVConversionSuccess) {
//AVAlertNote("Cannot convert the file.");
E_RETURN (1);
HANDLER
// exception handling
char errorMsg[256];
ASGetErrorString (ASGetExceptionErrorCode(), errorMsg, 256);
// display an error message.
if(ASBoolToBool(bEcho) == true) {
AVAlertNote (errorMsg);
return 1;
END_HANDLER
// insert new PDF into target PDF
DURING
// insert all pages of new pdfc to TargetPDFfile.
PDDocInsertPages(PDFfile, PDLastPage, tempPDF, 0,
PDAllPages, PDInsertAll, NULL, NULL, NULL, NULL);
PDDocClose(tempPDF);
HANDLER
char errorMsg[256];
ASGetErrorString (ASGetExceptionErrorCode(), errorMsg, 256);
if(ASBoolToBool(bEcho)==true) {
AVAlertNote(errorMsg);
END_HANDLER
if(strcmp(Ext,"doc")==0) {
char fname[40];
sprintf(fname,"%s.pdf",aFileName);
remove(fname);
return 0;
/* MyAVConversionToPDFEnumProc
/** Internal callback function \n
** called for every AVConversionToPDFHandler.
** get the valid type (file extention) for the conversion.
** @return true.
ACCB1 ASBool ACCB2 MyAVConversionToPDFEnumProc(AVConversionToPDFHandler handler,
AVConversionEnumProcData data)
ASUns16 numFileExt = handler->convFilter.numFileDescs;
for (int i = 0; i < numFileExt; i++) {
char* ext = handler->convFilter.fileDescs[i].extension;
if(strlen(ext)>0) {
strcat((char*) data, ext);
strcat((char*) data, ",");
return true;
/* this is alternative code to get right conversion handler for a specific file
to be converted. It works with function AVConversionConvertToPDFWithHandler.
It's not used now, but kept for user's reference.
ACCB1 ASBool ACCB2 AVConversionToPDFEnumFindHandler(AVConversionToPDFHandler handler,
AVConversionEnumProcData data)
ASUns16 numFileExt = handler->convFilter.numFileDescs;
for ( int i = 0; i < numFileExt; i++)
char* ext = handler->convFilter.fileDescs[i].extension;
if(strlen(ext)) {
if(!strcmp((char*) data, ext)) {
gHandler = handler;
return false;
return true;
/* BindingFileToPDF
/** Internal callback function for binding process \n
** IN: char* aFilename, ASFileSysItemPropsRec nFileAttrb \n
** PDDoc targetPDdDoc, int *ipTotal, \n
** int *ipConverted, FILE *logfile \n
** OUT: int *ipTotal, int *ipConverted. \n
void BindingFileToPDF(ASPathName aPathName, char* aFilename, ASFileSysItemPropsRec nFileAttrb, PDDoc targetPDdDoc, ASPathName outputPathName, int *ipTotal, int *ipConverted)
// ignore system, hidden files, and our target PDF and log file.
if( nFileAttrb.isHidden
|| (strcmp(aFilename,".")==0) || (strcmp(aFilename,".." )==0)
|| (strcmp(aFilename,OutputPdfFileName)==0) || (strcmp(aFilename,LogFileName)==0)) {
return;
(*ipTotal)++;
char msg[MAX_STRING_LENGTH] = "";
char* Done = "Converted";
char* NotDone = " - ";
// try to convert and insert it to target PDF file.
// rc would be 0 for success, otherwise 1.
int rc = ConvertAndSavePDFInTargetFolder(aPathName, aFilename, targetPDdDoc, outputPathName);
// if converted
if(rc==0) {
(*ipConverted)++;
/* PassPDFBinderFileFilter
/** Internal callback function for binding process
** @return true if the IN aFilename is a valid file for PDF conversion,
** otherwise false.
ASBool PassPDFBinderFileFilter(char* aFilename)
#ifdef USE_FILE_FILTER
// if the filter is empty, any file will pass.
if(strlen(gPDFBinderFileFilter)==0)
return true;
char* Ext = strrchr(aFilename,'.');
if(Ext!=NULL) {
Ext++;
if(strstr(gPDFBinderFileFilter, Ext)) {
return true;
return false;
#else
// not use filter, any file will pass.
return true;
#endif
/* ConvertAndInsertFileToPDF
/** Internal function \n
** Convert a file to PDF, then insert it to target PDF file.
** @param aFileName IN char string, filename.
** @param PDFfile IN/OUT PDDoc of the target PDF file.
** @return 0 if OK, 1 if failed.
int ConvertAndSavePDFInTargetFolder(ASPathName aPathName, char* aFileName, PDDoc PDFfile, ASPathName outputPathName)
PDDoc tempPDF;
char* Ext;
DURING
// get file extention
Ext = strrchr(aFileName,'.');
if(Ext) {
Ext++;
else {
E_RETURN (1);
// if the file is PDF, open PDDoc
if(strcmp(Ext,"PDF")==0 || strcmp(Ext,"pdf")==0) {
tempPDF = PDDocOpen (aPathName, ASGetDefaultFileSys(), NULL, true);
if(tempPDF==NULL) {
PDDocClose(tempPDF);
E_RETURN (1);
// else convert it to PDF
else
// let it automatically find right handler for the file and do the job.
AVConversionStatus stat = AVConversionConvertToPDF
(kAVConversionAsyncOkay, //kAVConversionNoFlags
aPathName, ASGetDefaultFileSys(), &tempPDF, NULL);
// check if successful
if(stat != kAVConversionSuccess) {
//AVAlertNote("Cannot convert the file.");
E_RETURN (1);
else {
//change Extension
ASText asTmp = ASTextNew();
ASFileSysDisplayASTextFromPath(ASGetDefaultUnicodeFileSys(), outputPathName, asTmp);
//AVAlertNote(ASTextGetScriptText(asTmp, kASRomanScript));
if(strcmp(Ext,"TIF")==0 || strcmp(Ext,"tif")==0){
ASTextReplace(asTmp, ASTextFromScriptText(".tif", kASRomanScript), ASTextFromScriptText(".pdf", kASRomanScript));
} else {
ASTextReplace(asTmp, ASTextFromScriptText(".tiff", kASRomanScript), ASTextFromScriptText(".pdf", kASRomanScript));
//AVAlertNote(ASTextGetScriptText(asTmp, kASRomanScript));
outputPathName = ASFileSysCreatePathName (ASGetDefaultUnicodeFileSys(), ASAtomFromString("ASTextPath"), asTmp, 0);
HANDLER
// exception handling
char errorMsg[256];
ASGetErrorString (ASGetExceptionErrorCode(), errorMsg, 256);
// display an error message.
if(ASBoolToBool(bEcho) == true) {
AVAlertNote (errorMsg);
return 1;
END_HANDLER
// Run OCR and Save new PDF into target PDF
DURING
// OCR
ASAtom cmdName;
AVCommand cmd;
cmdName=ASAtomFromString("PaperCapture");
cmd=AVCommandNew(cmdName);
ASCab config = ASCabNew();
ASCabPutInt (config, "UIPolicy", kAVCommandUISilent); //hide the interface
if (kAVCommandReady == AVCommandSetConfig (cmd, config)) {
//AVAlertNote("Config Ready");
ASCab inputs = ASCabNew();
ASCabPutPointer (inputs, kAVCommandKeyPDDoc, PDDoc, tempPDF, NULL);
if (kAVCommandReady == AVCommandSetInputs (cmd, inputs)) {
//AVAlertNote("Input Ready");
ASCabDestroy (inputs);
AVCommandStatus status = AVCommandExecute(cmd);
//switch (status) {
// case kAVCommandReady :
// AVAlertNote("Not working, but ready to work.");
// break;
// case kAVCommandWorking :
// AVAlertNote("Still working");
// break;
// case kAVCommandDone :
// AVAlertNote("Done working");
// break;
// case kAVCommandInError :
// AVAlertNote("In Error");
// break;
// case kAVCommandNotExecuted :
// AVAlertNote("Command not executed due to lack of objects on which the command to be executed");
// break;
AVCommandDestroy(cmd);
//Save
//PDDocSave (tempPDF, PDSaveFull | PDSaveCollectGarbage | PDSaveLinearized, outputPathName, ASGetDefaultUnicodeFileSys(), NULL, NULL);
//ClosePDF
//PDDocClose(tempPDF);
//Convert to PDF/A Compliance
//Select the right handler
AVConversionEnumFromPDFConverters(myAVConversionFromPDFEnumProc, NULL);
// do conversion
AVConversionStatus stat = AVConversionConvertFromPDFWithHandler(RightHandler, NULL, kAVConversionAsyncOkay, tempPDF, outputPathName, ASGetDefaultFileSys(), NULL);
// check the returned status and show message
//if (stat == kAVConversionSuccess)
// AVAlertNote( "The PDF/A file was saved in output folder." );
//else if (stat == kAVConversionFailed)
// AVAlertNote( "The PDF/A conversion failed." );
//else if (stat == kAVConversionSuccessAsync)
// AVAlertNote( "The conversion will continue asynchronously." );
//else if (stat == kAVConversionCancelled)
// AVAlertNote( "The conversion was cancelled." );
//Save
//PDDocSave (tempPDF, PDSaveFull | PDSaveCollectGarbage | PDSaveLinearized, outputPathName, ASGetDefaultUnicodeFileSys(), NULL, NULL);
//ClosePDF
PDDocClose(tempPDF);
ASFileSysReleasePath(ASGetDefaultFileSys(), outputPathName);
HANDLER
char errorMsg[256];
ASGetErrorString (ASGetExceptionErrorCode(), errorMsg, 256);
if(ASBoolToBool(bEcho)==true) {
AVAlertNote(errorMsg);
END_HANDLER
if(strcmp(Ext,"doc")==0) {
char fname[40];
sprintf(fname,"%s.pdf",aFileName);
remove(fname);
return 0;
//Select the appropiate handler for the PDF/A conversion
static ACCB1 ASBool ACCB2 myAVConversionFromPDFEnumProc(AVConversionFromPDFHandler handler, AVConversionEnumProcData data)
AVFileFilterRec filter = handler->convFilter;
ASUns16 numFileExt = filter.numFileDescs;
char *kUniqueID = handler->uniqueID;
// go through the conversion handlers to find a handler for PDF extension files and the unique key matches the PDF/A one.
for (ASInt32 i = 0; i < numFileExt; i++)
if (strlen(handler->convFilter.fileDescs[i].extension)>0)
// found it, fill in the handler and return false to stop going on.
if (!strcmp(handler->convFilter.fileDescs[i].extension, "pdf") && !strcmp(kUniqueID,"com.callas.preflight.pdfa")) {
RightHandler = handler;
return false ;
return true;There are some options for various APIs to run "kinda silent" - but again, Acrobat is designed for INTERACTIVE use…so "completely silent" isn't really an option.
As for speed – you'd need to be MUCH MORE specific about where your slow downs are. Have you profiled?
From: Adobe Forums <[email protected]<mailto:[email protected]>>
Reply-To: "[email protected]<mailto:[email protected]>" <[email protected]<mailto:[email protected]>>
Date: Mon, 12 Dec 2011 07:39:08 -0800
To: Leonard Rosenthol <[email protected]<mailto:[email protected]>>
Subject: Slow processing and getting opening errors/warnings
Re: Slow processing and getting opening errors/warnings
created by FFX-ER<http://forums.adobe.com/people/FFX-ER> in Acrobat SDK - View the full discussion<http://forums.adobe.com/message/4079175#4079175 -
"System_Error" Error exception return from pipeline processing!
Hi all,
I get this error everytime I click the red flag in sxmb_moni:
com.sap.aii.utilxi.misc.api.BaseRuntimeException
thrown during application mapping
com/sap/xi/tf/_CUST_TO_DFS_MM_: RuntimeException
in Message-Mapping transformatio~
When I go to TRACE of SOAP Header, I see this error:
<Trace level="1" type="System_Error">Error exception return from pipeline processing!</Trace>
The messages were not posted as 'Application document not posted' in we05: they cannot be seen in we05. Because of this, the number of IDOCS posted in we05 is not equal to the XMLs generated in sxmb_moni.
Please help.
Thanks.
Regards,
IXCUST_TO_DFS_MM
Check this mapping...sometimes just testing in IR is not sufficient....error can also occur at runtime...so take the payload from SXMB_MONI and then test to see why it is failing....
Also there will be some more error text alongwith CUST_TO_DFS_MM...check it to drill down to the root cause...
Edited by: abhishek salvi on May 8, 2009 1:00 PM -
Search and Replace String throwing the wrong error message with regexp?
This came up in a LAVA thread, and I'm not sure if there's a bug here or not. When using Search and Replace string, and using a regular expression of [(G[b|i])], LabVIEW throws error -4622, "There is an unmatched parenthesis in a regular expression." There are obviously no unmatched parenthesis in that expression, so it seems to me that the wrong error is being thrown. I'm just not sure if that's a syntactically valid regexp. The problem seems to be with nesting [ ]'s inside ( )'s inside [ ]'s. I've tried a couple of regexp resources on the Web, and one suggests it's valid, while the other seems to think it isn't.
Message Edited by eaolson on 03-13-2007 10:33 AM
Attachments:
ATML_StandardUnit2.vi 10 KB
regexp.png 5 KBadambrewster wrote:
I think your regexp is invalid.
In regexps, brackets are not the same as parentheses. Parens are for grouping, while brackets are for matching one of a class of characters. Brackets can not be nested.
If the regexp is replaced with [G[bi]], there is no error, so it's not a matter of nested brackets. I couldn't find anything on the PCRE man page that forbids nested brackets specifically, but it makes sense.
Your expression "[(G[bi])]", therefore parses as a character class which matches '(', 'G', '[', 'b', or 'i' followed by an unmatched paren, and an unmatched bracket.
I don't believe that's the case. Replace the regexp with [(Gbi)], and the error goes away. So it's not a matter of the '(' being literal, and then encountering a ')' without a matching '('.
daveTW wrote:
what string exactly you want to replace? I think the round braces are not right in this case, since they mark partial matches which are given back by "match regular expression". But you don't want to extract parts of the string, you want to replace them (or delete, with empty <replace string>). So if you leave the outer [( ... )] then your RegEx means all strings with either "Gb" or "Gi".
It's not my regular expression. A poster at LAVA was having problems with one of his (a truly frightening one), and this seemed to be the element that was causing the problem. I'm pretty sure that the originator of the regexp meant to use G(b|i), which seems like a complicated way of matching "Gb" or "Gi", if you ask me.
Maybe you are looking for
-
How to find out what network an iphone is locked to.
How to find out what network an iphone is locked to. Assist.
-
a message showing licence of connect expired is always appearing on screen. Dont know why. If anyone is aware of it plz sort out...
-
I want to be able to create an EbXMLMessageImpl object from a stream, and I am running into errors. The following code makes teh EbXMLMessageImpl into a stream, and then I want to put the stream back into an EbXMLMessageImpl. (I am testing what I wil
-
InputDate and Data parameter from query
Hello, I'm expiriencing some problems with my Web project, I have Model and View. I created ViewObject from query with parameter: SELECT r.room_id FROM rooms r WHERE (r.from_date>=:from_date);Parameter :from_date has type 'Date'. In ApplicationModul
-
Leopard not wanting to install on MacBook Pro Intel Core Duo?
I want to bump up to Leopard on my two main computers (MacBook Pro Intel, and a tower, also Intel)... but as I'm using them 24/7 on projects I dare not have problems with ... I don't want any down time getting Leopard to run seamlessly on those syste