RFC Lookup Table Parameters Reusability
Dear All
My Requirement is to Map fields in IDoc from the File data ,there are some fields in idoc for which i need to fetch data from SAP.
For this i am using RFC Look up. i am retrieving values from table parameters for RFC.
and this Table parameters are being used muliple times in Mapping.
Right now i have to execute the same RFC for set of input data atleast 5 r 6 times.
This is effective Performance of the Interface
Is there any concept of Reusuability in RFC Lookup while Mapping in PI.?
Can we use Java Initialization section in mapping for executing the RFC once and using the output data in table parameters while mapping various target fields.
Hoping for a Positive Reply
Regards
Bhasker
Hi,
1) If it is PI 7.1 there are mapping enhancements, such as
a) Variables for storing intermediate mapping value,
b) for RFC lookup etc.
you can find the 7.1 pdfs from SDN
2) you can have a two stage mapping, putting them sequentially in Interface mapping object.
First step : Source to Target (orignal target structure)
here you can do all the mapping and also One time RFC lookup, but leaving the other fields where you need the lookup values again
Second step : Target to Target
here already mapped target becomes your input & you know the fields which have the value & the fields that you need to map again and all other fields are one to one mapping.
Regards
Vishnu
Similar Messages
-
I am having difficulty passing tables as parameters using an RFC function defined in SE37 and an RPG ILE program running on a separate iSeries.
I have successfully passed import/export parameters, however tables are proving to be difficult.
The function builder will test with no errors, but does not pass or return tables.
A trace performed with the server side of the RFC shows the message "discarding unrequested T:" along with the table names.
Any help would be appreciated.I am using a multiple occurring data structure to define the tables.
DRFC_TABLES DS ALIGN OCCURS(3)
D TNAME * INZ(*NULL)
D TNLEN 10U 0 INZ(0)
D TTYPE 10U 0 INZ(0)
D TLENG 10U 0 INZ(0)
D TITHANDLE * INZ(*NULL)
D TITMODE * INZ(*NULL)
D TNEWITAB 10I 0 INZ(0)
I then fill occurrences 1 & 2 with the defining parameters, and occurrence 3 with *NULL in TNAME.
Then I do the following to get data, with a similar routine to send data.
C 1 occur RFC_TABLES
C EVAL TBPTR = %ADDR(TNAME)C EVAL Rcge = RfcGetData(hRfc : POINT : TBPTR) -
RFC Lookup - BAPI-TABLE Parameters problem
Hello All,
I had a scenario where i need to export parameters and am supposed to get import parameters from BAPI between source and target structures.
like -
source --> BAPI execution = result --> target
We had succeeded in getting those but the only problem is with TABLE parameters in that BAPI.
How can we achieve it.
Faster reply would be appreciated.
Thanks & regards
ReddyHi VJ,
Its not a simple source-target mapping .
For Ex :
Source-Bapi-Idoc
Source will send some parameters to BAPI and bapi will execute it and respond with values in table parameter of the bapi and result would be assigned to idoc-field.
For this i am using RFC Look up with sample code as :
String rfcxml ="<ns0:Z_BAPI xmlns:ns0=\"urn:sap-com:document:sap:rfc:functions\">" +
" <A>" + A + "</A>" + --- Export parameters
" <B>" + B + "</B>" + --- Export parameters
//" <TABLE><FIELD1>" + FIELD2 + "</FIELD1></TABLE>" +
//" <TABLE><FIELD2>" + FIELD2 + "</FIELD2></TABLE>" +
//" <TABLE><FIELD3>" + KDMAT+ "</FIELD3></TABLE>" +
// "<FIELD1>" + FIELD1 + "</FIELD1>" +
"</ns0:Z_BAPI> " ;
Passing A & B as export parameters and getting TABLE-FIELD1&2&3 as response.
I hope some problem in the syntax.
Regards,
HP -
RFC Lookup - Best Approach To Parse Returned Tables
Hi Everyone,
We are doing some RFC Lookups at a header node that are returning tables for all of the items (for performance reasons). I am trying to figure out what the best way to extract the values from the table, which is most of time has more than 1 key column. At the moment I am doing this through DOM, but I have also heard about using arrays, and have even seen an example of using a hashtables with all of the values concatenated together to later parse out using substrings. I'm looking for the best approach to:
1) Store this data as some kind of global object to lookup during the header
2) Search and Parse from the global object during linte items.
As an example, I have the following lines in my table:
Key1,Key2,Value1,Value2,Value3
A,A,1,2,3
A,B,1,2,4
A,C,3,4,2
B,A,2,4,6
And during line item processing I may want to find the value for Key1=A, Key2=C.
Thanks
PeterHi Peter,
Please take a look at these...
https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/xi/xi-code-samples/xi%20mapping%20lookups%20rfc%20api.pdf
/people/siva.maranani/blog/2005/08/23/lookup146s-in-xi-made-simpler
/people/sravya.talanki2/blog/2005/12/21/use-this-crazy-piece-for-any-rfc-mapping-lookups
/people/alessandro.guarneri/blog/2006/03/27/sap-xi-lookup-api-the-killer
cheers,
Prashanth
P.S Please mark helpful answers -
RFC lookup error when table in change mode
Hi,
I´m using an RFC lookup from XI to translate external to internal partner nr. Input to the FM in R/3 is the external partner nr och the FM should return the internal partner nr to XI. The problem is that when a user edits the table that my FM reads from a get an error.
- Isn´t it possible to read a r/3 table while it is in change mode? Is my only way around this to create a z version of this table?
ClaesHi Claes
have a look on these links ,
For your RFC lookup,
/people/alessandro.guarneri/blog/2006/03/27/sap-xi-lookup-api-the-killer
/people/sravya.talanki2/blog/2005/12/21/use-this-crazy-piece-for-any-rfc-mapping-lookups
RFC lookups pdf https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/xi/xi-code-samples/xi%20mapping%20lookups%20rfc%20api.pdf
/people/alessandro.guarneri/blog/2006/03/27/sap-xi-lookup-api-the-killer
Michal's Blog on RFC Mapping Lookup:/people/michal.krawczyk2/blog/2005/09/15/xi-rfc-mapping-lookups-from-bc-to-xi
RFC Lookup.
RFC lookup return no values
http://help.sap.com/saphelp_nw2004s/helpdata/en/17/d609b48ea5f748b47c0f32be265935/frameset.htm
Also check this useful link which also talk about Value Lookup:
Value lookup
http://help.sap.com/saphelp_nw04/helpdata/en/2e/96fd3f2d14e869e10000000a155106/content.htm
/people/prasad.illapani/blog/2006/10/25/how-to-check-jdbc-sql-query-syntax-and-verify-the-query-results-inside-a-user-defined-function-of-the-lookup-api
Lookups - /people/morten.wittrock/blog/2006/03/30/wrapping-your-mapping-lookup-api-code-in-easy-to-use-java-classes
Lookups - /people/alessandro.guarneri/blog/2006/03/27/sap-xi-lookup-api-the-killer
Thanks !! -
Hello all
I am having performance issues relating to an RFC call between CRM and ECC. I have been asked to get an RFC call between the two working as quickly as possible.
The code is as optimised as possible, I have replaced onerous FM calls with bespoke code and optimised select statements.
But for some reason I have a niggling thought in the back of my mind that no tables should be passed to the RFC FM in the IMPORTING parameters section and should be passed as TABLES parameters only.
Does anyone know if this is true or not. I have found OSS note 888777 which says that this is true in relation to ABAP-JAVA comms but it doesn't say whether this is the case in ABAP-ABAP.
Any advice/comments most welcome.Just the once.
The signature of the FM is:
*" IMPORTING
*" VALUE(I_FIELD1) TYPE ANYFIELD OPTIONAL
*" VALUE(IT_TAB1) TYPE ANYTABLE
*" VALUE(I_FIELD2) TYPE ANYFIELD OPTIONAL
*" VALUE(I_FIELD3) TYPE ANYFIELD OPTIONAL
*" VALUE(IT_TAB2) TYPE ANYTABLE OPTIONAL
*" EXPORTING
*" VALUE(EV_RETURN) TYPE BAPIRET2
*" TABLES
*" IT_TAB3 STRUCTURE ANYTABLE
I'm just wondering whether removing the IT_TAB1 and IT_TAB2 parameters from the IMPORTING section and placing them in the TABLES section would have any performance improvements. -
RFC lookup to return multiple parameters
Hi,
I have a File to Idoc scenario involving RFC lookups.
The RFC in this case has 2 input parameters and returns 5 output parameters in runtime. Can anybody help me with the UDF that can be used to send 2 parameters as input to the RFC and receive the 5 output parameters in the mapping and post it to the target Idoc structure.
Your help would be much appreciated !
Thanks & Regards,
Sherin Jose PHi,
Please find the below UDF that i used when i got the same requirement.
MySource structure is :
MT_Source
SSN
My Target Structure is :
ZIdoc
Empame
indClientSite
doj....etc
My mapping program is like this....
ssn---->findEmpInfo->findEmpName----EmpName
findClientSite---->clientsite
UDFCode:
public String findEmpInfo(String ssn, Container container) throws StreamTransformationException{
String inputString ="<?xml version=\"1.0\" encoding=\"UTF-8\"?> <ns0:RFC_GETEMPLOYEEDETAIL xmlns:ns0=\"urn:sap- com:document:sap:rfc:functions\"> <SSN>"ssn"</SSN> </ns0:RFC_GETEMPLOYEEDETAIL>"ssn"</SocialSecurityNo> </ns0:MT_EmpSSN>";
String targetValue = "";
AbstractTrace trace = container.getTrace();
RfcAccessor rAcc = null;
ByteArrayOutputStream out = null;
try{
Channel ch = LookupService.getChannel("BS_CLNT", "CC_Receiver_RFCLookup"); //DetermineChannel
rAcc = LookupService.getRfcAccessor(ch); //Get RfcAccessor
InputStream iStream = new ByteArrayInputStream(inputString.getBytes());
XmlPayload payload = LookupService.getXmlPayload(iStream); //get xml payload form of the input
Payload result = rAcc.call(payload); //make a lookup call
InputStream in = result.getContent();
byte[] bArray = new byte[512];
out = new ByteArrayOutputStream(512);
for(int i=in.read(bArray);i>0;i = in.read(bArray)){ out.write(bArray,0,i);
targetValue = out.toString();
catch(LookupException ex){
trace.addDebugMessage("LookupException"+ex.getMessage());
catch(IOException ex){
trace.addDebugMessage("IOException"+ex.getMessage());
finally{
if(out !=null){
try{
out.close();
catch(IOException ex){
trace.addDebugMessage("ErrorDuring Closing buffer"+ex.getMessage());
if(rAcc !=null){
try{ rAcc.close();
catch(LookupException ex){
trace.addDebugMessage("Error while closing RFCAccessor"+ex.getMessage());
GlobalContainer gContainer = container.getGlobalContainer();
gContainer.setParameter("RFCResponse",targetValue);
return targetValue;
public String findEmpName(String str, Container container) throws StreamTransformationException{
GlobalContainer gContainer = container.getGlobalContainer();
Object obj = gContainer.getParameter("RFCResponse");
String str ="";
str = obj.toString();
String st = "\"";
str = str.replaceAll("<", "<");
str = str.replaceAll(""", st);
str = str.replaceAll(">", ">");
String clntSite = "";
AbstractTrace trace = container.getTrace();
ByteArrayInputStream in;
in = new ByteArrayInputStream(str.getBytes());
try{
DocumentBuilderFactory dbFact = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuild = dbFact.newDocumentBuilder();
Document doc = dBuild.parse(in);
NodeList nList1 = doc.getElementsByTagName("CLNTSITE");
for(int i=0;i<nList1.getLength();i++){
Node nFname = nList1.item(0);
clntSite = nFname.getChildNodes().item(0).getNodeValue();
trace.addWarning("Client Site : "+nFname.getChildNodes().item(0).getNodeValue());
catch(Exception ex){
trace.addWarning("Exception Occurred :"+ex);
return clntSite;
Hop this will help you......
Thanks&Regards
Priyanka -
Using tables parameters for RFC
Hi All
I am trying to use tables parameter for a Remote Function Call.
It says it is obsolete and not working, we are using ECC6.0 version of SAP.
Any help??Instead, you should use a table type in a IMPORTING or EXPORTING parameter. Create the table type in SE11 and then reference this table type in your parameter in the IMPORTING/EXPORTING tab. The use of TABLES parameters section is obselete.
Regards,
Rich HEilman -
Hi all,
I am doing an RFC lookup to increment counter. I am facing a problem.
I followed the code written by Michael. https://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/a03e7b02-eea4-2910-089f-8214c6d1b439
My udf is as shown below: -
String content = "";
MappingTrace importanttrace;
importanttrace = container.getTrace();
java.util.Map param = container.getTransformationParameters();
String MSGID = (String) param.get (StreamTransformationConstants.MESSAGE_ID);
// filling the string with our RFC-XML (with values)
String m="<?xml version="1.0" encoding="UTF-8"?><ns0:_-GLB_-ZGT_RFBIBL00_COUNTER xmlns:ns0="urn:sap-com:document:sap:rfc:functions"><IM_V_FILENAME>CA10.NCH.FCIPAY04</IM_V_FILENAME><IM_V_MSGID>"MSGID"</IM_V_MSGID><IM_V_WRNO>DEVWR0001725</IM_V_WRNO></ns0:_-GLB_-ZGT_RFBIBL00_COUNTER>";
importanttrace.addWarning("Input value is "+m);
RfcAccessor accessor = null;
ByteArrayOutputStream out = null;
try
// 1. Determine a channel (Business system, Communication channel)
Channel channel = LookupService.getChannel(receiverBS,"CC_RFC_RCV_AMS_R3F_DEVWR001725");
// 2. Get a RFC accessor for a channel.
accessor = LookupService.getRfcAccessor(channel);
// 3. Create a xml input stream representing the function module request message.
InputStream inputStream = new ByteArrayInputStream(m.getBytes());
// 4. Create xml payload
XmlPayload payload = LookupService.getXmlPayload(inputStream);
// 5. Execute lookup.
Payload result = accessor.call(payload);
InputStream in = result.getContent();
out = new ByteArrayOutputStream(1024);
byte[] buffer = new byte[1024];
for (int read = in.read(buffer); read > 0; read = in.read(buffer)) {
out.write(buffer, 0, read);
content = out.toString();
catch(LookupException e)
importanttrace.addWarning("Error while lookup " + e.getMessage() );
catch(IOException e)
importanttrace.addWarning("Error " + e.getMessage() );
finally
if (out!=null) {
try {
out.close();
} catch (IOException e) {
importanttrace.addWarning("Error while closing stream " + e.getMessage() );
// 7. close the accessor in order to free resources.
if (accessor!=null) {
try {
accessor.close();
} catch (LookupException e) {
importanttrace.addWarning("Error while closing accessor " + e.getMessage() );
//returning the result u2013 RFC-XML.response
if ((content.substring(143,150)).equals("NOENTRY"))
ExceptionThrower.generate("INVALID INPUT DEVWR NUMBER OR ID" );
return "Nothing";
else
return (content.substring(143,155));
The problem i am facing is that, i am not able to pass the IM_V_MSGID parameter to the function module.
The other 2 parameters i can pass. that is IM_V_FILENAME and IM_V_WRNO.
i am able to extract the message ID using
java.util.Map param = container.getTransformationParameters();
String MSGID = (String) param.get (StreamTransformationConstants.MESSAGE_ID);
and displayed it in SXI_MONITOR trace also using importanttrace.addWarning("Input value is "+m);
i got the correct MSGID in the trace.But the problem is that this value is not getting passed to the FM. Cos the table is supposed to increment the counter whenever the MSGID value changes.
I tried hardcoding the MSGID value to 'abc' or '123' like values but the same thing happended. The counter will not increment. The FM is working perfectly when i run it and change the MSGID values manually.
Thanks
PratichiHi,
We have done this by creating an FM in XI ABAP stack:
FUNCTION Z_ZBXI_GET_PRE_MSG_ID.
""Local Interface:
*" IMPORTING
*" VALUE(I_CURRMSGID) TYPE CHAR40
*" EXPORTING
*" VALUE(E_PREMSGID) TYPE CHAR40
DATA: lv_currmsgid type SXMSPMAST-MSGGUID,
lv_parentmsgid LIKE SXMSPMAST-PARENTMSG,
lv_premsgid LIKE SXMSPMAST-MSGGUID.
lv_currmsgid = i_currmsgid.
select single PARENTMSG from SXMSPMAST into lv_parentmsgid where MSGGUID = lv_currmsgid.
e_premsgid = lv_parentmsgid.
ENDFUNCTION.
You need to call this FM through RFC lookup UDF in your mapping.
Let me know if it works for you.
Regards,
Shweta -
Mapping Exception Issue with RFC LookUp
Hi,
My scenario is Idoc To file, in my idoc user who created a purchase order filed is not there but in xml file i want the user who create that PO, for this i am using RFC LooUp. I want the user who created a purchase order.
Graphical Mapping looks like below.
Belnr-->User Defined Function--
>UserName
Please find the code bloew:
String DBTABLE = "EKKO";
String lookUpField = "ERNAM";
String WHERE_CLAUSE = " EBELN "" = "" ' "a" ' " ;
JCO.Repository mRepository;
JCO.Client mConnection = JCO.createClient(
"500",
"RFCUSER",
"abc1234",
"EN",
"cxylo06",
"05");
// connect to SAP
mConnection.connect();
// create repository
mRepository = new JCO.Repository( "GenericRFCMappingLookup", mConnection );
// create function template to select data from any table
JCO.Function function = null;
IFunctionTemplate ft = mRepository.getFunctionTemplate("RFC_READ_TABLE");
function = ft.getFunction();
// Obtain parameter list for function
JCO.ParameterList input = function.getImportParameterList();
// Pass function parameters
// set import parameters table name and RFC
input.setValue( DBTABLE, "QUERY_TABLE");
input.setValue( "," , "DELIMITER");
//Fill the where clause of the table
JCO.ParameterList tabInput = function.getTableParameterList();
JCO.Table inputTable = tabInput.getTable("OPTIONS");
inputTable.appendRow();
inputTable.setValue(WHERE_CLAUSE,"TEXT");
mConnection.execute( function );
//Find the position of the field that has to be lookedUp
JCO.Table lookupFieldPos = function.getTableParameterList().getTable("FIELDS");
int pos = -1;
for (int i = 0; i < lookupFieldPos.getNumRows(); i++)
lookupFieldPos.setRow(i);
if (lookupFieldPos.getString("FIELDNAME").equals(lookUpField))
pos = i;
//Get the exact lookupvalue from the position obtained above
JCO.Table valueSet = function.getTableParameterList().getTable("DATA");
valueSet.setRow(0);
String resultSet = valueSet.getString("WA");
result.addValue(resultSet);
mConnection.disconnect();
I am not aware of java coding so kindly make necessary modifications.
Kindly suggest what changes i need to do to execute perfectly.
Your help will be greatly apprecited.
Regards,
VenkatHi Venkat,
If you use the JCO connection to get the value from RFC, it would be a problem in futherly like when you move this interface DEV to Q, then you need to change the connection parameters to establish the JCO connection.Same in Production environment too.It is not advisable to do JCO lookup. Go for RFC lookup as the link given by Farooq.
Create Reciever RFC communication channel and take the XML signature of u r RFC by importing that RFC under imported objects.Create an UDF, for this see the sample code which is exisitng in document to pass the Export parameter to RFC.
In this way u r RFC channel establish the connection to R3 and your RFC will execute and return the value.U just need to change the Reciever RFC channel parameters respective of environment.
Cheers
Veera -
Use RFC Lookup in Graphical Mapping for Database Update
Hello,
I am wondering whether the RFC Lookup function in graphical mapping provides the same functionality as a general RFC function call.
In detail I would like to update a database table using a RFC which just takes some input parameters but does not use any output parameters. Would this work too as the name "lookup" implies that it might just be possible to read something?HI,
Refer these links:
RFC Lookup by michal
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/a03e7b02-eea4-2910-089f-8214c6d1b439
https://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/8e7daa90-0201-0010-9499-cd347ffbbf72
http://help.sap.com/saphelp_nw04/helpdata/en/cf/406642ea59c753e10000000a1550b0/content.htm
DB lookup - /people/siva.maranani/blog/2005/08/23/lookup146s-in-xi-made-simpler
Regards,
Nithiyanandam -
RFC lookup with context values importing and exporting
Hi,
Input parameters for my RFC Lookup:
one simple field: Occurrence 1
one table type: Occurrence N
I am getting table values from RFC Lookup
and I need to repeat all values in the target structure.
I am not able to capture the all values in the mapping: Help needed.
RameshHi Ramesh,
If you want to use the first output to be repeated in all your mapping, try using the UseOneAsMany tool in the Message Mapping.
HTH
Regards,
Juan -
Problem with lookup-table and single quotes
SOA Suite 10.1.3.3. I have an ESB project with an XSLT map that uses orcl:lookup-table to translate values. I use this instead of lookup-dvm because I want non-IT users to manage the mappings without having access to the ESB Console.
According to the doco:-
G.1.79 lookup-table
orcl:lookup-table(table, inputColumn, key, outputColumn, datasource)
This function returns a string based on the SQL query generated from the parameters.
The string is obtained by executing:
SELECT outputColumn FROM table WHERE inputColumn = key
The problem I'm having is that it seems if "key" contains a single quote (i.e an apostrophe), then lookup-table fails to find the corresponding value - even though the value in table.inputColumn also contains the single quote.
I've put the incoming into an XSL variable, but to no avail.
<xsl:variable name="incoming">
<xsl:value-of select="/obj1:DEV_MESSAGE_TYP/DATA1"/>
</xsl:variable>
<xsl:variable name="dvm-text">
<xsl:value-of select="orcl:lookup-table('MYTABLE','INVAL',$incoming,'OUTVAL','ds/dev')"/>
</xsl:variable>
Are there any XSLT Gurus out there that have come across this or can think of ways around it?
Thanks in advance...
Regards,
GregOk - the above was on the right track but wasn't 100% because it can't handle more than 1 single quote (apostrophe) in the input to lookup-table.
I've since found a better solution - an XSLT re-usable template that operates recursively and so can replace multiple occurances of single quotes. I've modified it to handle a null input value, otherwise lookup-table will just return the value of the first row in the lookup table - doh! The way I've done it below, if null is passed in, then null will be returned.
This goes at the top of your XSLT map file...
<!-- reusable replace-string function -->
<xsl:template name="replace-string">
<xsl:param name="text"/>
<xsl:param name="from"/>
<xsl:param name="to"/>
<xsl:choose>
<xsl:when test="contains($text, $from)">
<xsl:variable name="before" select="substring-before($text, $from)"/>
<xsl:variable name="after" select="substring-after($text, $from)"/>
<xsl:value-of select="$before"/>
<xsl:value-of select="$to"/>
<xsl:call-template name="replace-string">
<xsl:with-param name="text" select="$after"/>
<xsl:with-param name="from" select="$from"/>
<xsl:with-param name="to" select="$to"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="$text=''">NULL</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Then you call it from within the XSLT map as follows:-
<!-- if contains a single quote, replace with 2x single quotes. This makes lookup-table work! -->
<xsl:variable name="incoming">
<xsl:call-template name="replace-string">
<xsl:with-param name="text" select="inp1:myinputfield"/>
<xsl:with-param name="from">'</xsl:with-param>
<xsl:with-param name="to" select="'&apos;&apos;'"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="dvm-text">
<xsl:value-of select="orcl:lookup-table('MYLOOKUPTABLE','INVAL',$incoming,'OUTVAL','ds/dev')"/>
</xsl:variable>
<!-- lookup-table returns null if input value not found. Output original value instead -->
<xsl:choose>
<xsl:when test="$dvm-text=''">
<xsl:value-of select="inp1:myinputfield"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$dvm-text"/>
</xsl:otherwise>
</xsl:choose>
Much Thanks to everyone who shares information and methods on the Internet!
Cheers,
Greg -
Hey folks, looking for some insight here.
I've an implementation that contains some custom Enterprise columns mapped to lookup tables. In the instance I'm working with now, it looks like there was/is an issue with one of those columns. In this scenario, I have a column named
ProjectType, created initially with that name, mapped to a lookup table. This field's name was then changed to
Project Type. After that, it looks like another column was created, also called
ProjectType. So now, we have what I would have originally thought was two distinct columns, even though the names used are the same.
Below is the error we're currently getting during the Cube Build Process...
PWA:http://ps2010/PWA, ServiceApp:Project Web App, User:DOMAIN\user, PSI: SqlException occurred in DAL: <Error><Class>1</Class><LineNumber>1</LineNumber><Number>4506</Number><Procedure>MSP_EpmProject_OlapView_B8546719-4D4C-473A-84B1-89DEDA2307E0</Procedure>
<Message> System.Data.SqlClient.SqlError: Column names in each view or function must be unique. Column name 'ProjectType' in view or function 'MSP_EpmProject_OlapView_B8546719-4D4C-473A-84B1-89DEDA2307E0' is specified more than once. </Message>
<CallStack>
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at Microsoft.Office.Project.Server.DataAccessLayer.DAL.SubDal.ExecuteStoredProcedureNoResult(String storedProcedureName, SqlParameter[] parameters) </CallStack> </Error>
I've tried deleting the one column, but the build still gives the above error.
Any thoughts as to how the above could be resolved?
Thanks! - M
Michael Mukalian | Jan 2010 - Dec 2010 MVP SharePoint Services | MCTS: MOSS 2007 Configuration | http://www.mukalian.com/blogWe tried taking it out of the cubes, and it builds fine. The challenge we're having is in building the cubes with that custom field "ProjectType". It's as if the cubes still hold some reference to it even when it's deleted.
Since the OLAP View ('MSP_EpmProject_OlapView_{guid}') is recreated, would it be as simple as deleting that View, and trying to recreate?
Thanks - M
Michael Mukalian | Jan 2010 - Dec 2010 MVP SharePoint Services | MCTS: MOSS 2007 Configuration | http://www.mukalian.com/blog -
Creating a single context index on a one-to-many and lookup table
Hello,
I've been successfully setting up text indexes on multiple columns on the same table (using MULTI_COLUMN_DATASTORE preferences), but now I have a situation with a one-to-many data collection table (with a FK to a lookup table), and I need to search columns across both of these tables. Sample code below, more of my chattering after the code block:
CREATE TABLE SUBMISSION
( SUBMISSION_ID NUMBER(10) NOT NULL,
SUBMISSION_NAME VARCHAR2(100) NOT NULL
CREATE TABLE ADVISOR_TYPE
( ADVISOR_TYPE_ID NUMBER(10) NOT NULL,
ADVISOR_TYPE_NAME VARCHAR2(50) NOT NULL
CREATE TABLE SUBMISSION_ADVISORS
( SUBMISSION_ADVISORS_ID NUMBER(10) NOT NULL,
SUBMISSION_ID NUMBER(10) NOT NULL,
ADVISOR_TYPE_ID NUMBER(10) NOT NULL,
FIRST_NAME VARCHAR(50) NULL,
LAST_NAME VARCHAR(50) NULL,
SUFFIX VARCHAR(20) NULL
INSERT INTO SUBMISSION (SUBMISSION_ID, SUBMISSION_NAME) VALUES (1, 'Some Research Paper');
INSERT INTO SUBMISSION (SUBMISSION_ID, SUBMISSION_NAME) VALUES (2, 'Thesis on 17th Century Weather Patterns');
INSERT INTO SUBMISSION (SUBMISSION_ID, SUBMISSION_NAME) VALUES (3, 'Statistical Analysis on Sunny Days in March');
INSERT INTO ADVISOR_TYPE (ADVISOR_TYPE_ID, ADVISOR_TYPE_NAME) VALUES (1, 'Department Chair');
INSERT INTO ADVISOR_TYPE (ADVISOR_TYPE_ID, ADVISOR_TYPE_NAME) VALUES (2, 'Department Co-Chair');
INSERT INTO ADVISOR_TYPE (ADVISOR_TYPE_ID, ADVISOR_TYPE_NAME) VALUES (3, 'Professor');
INSERT INTO ADVISOR_TYPE (ADVISOR_TYPE_ID, ADVISOR_TYPE_NAME) VALUES (4, 'Associate Professor');
INSERT INTO ADVISOR_TYPE (ADVISOR_TYPE_ID, ADVISOR_TYPE_NAME) VALUES (5, 'Scientist');
INSERT INTO SUBMISSION_ADVISORS (SUBMISSION_ADVISORS_ID, SUBMISSION_ID, ADVISOR_TYPE_ID, FIRST_NAME, LAST_NAME, SUFFIX) VALUES (1,1,2,'John', 'Doe', 'PhD');
INSERT INTO SUBMISSION_ADVISORS (SUBMISSION_ADVISORS_ID, SUBMISSION_ID, ADVISOR_TYPE_ID, FIRST_NAME, LAST_NAME, SUFFIX) VALUES (2,1,2,'Jane', 'Doe', 'PhD');
INSERT INTO SUBMISSION_ADVISORS (SUBMISSION_ADVISORS_ID, SUBMISSION_ID, ADVISOR_TYPE_ID, FIRST_NAME, LAST_NAME, SUFFIX) VALUES (3,2,3,'Johan', 'Smith', NULL);
INSERT INTO SUBMISSION_ADVISORS (SUBMISSION_ADVISORS_ID, SUBMISSION_ID, ADVISOR_TYPE_ID, FIRST_NAME, LAST_NAME, SUFFIX) VALUES (4,2,4,'Magnus', 'Jackson', 'MS');
INSERT INTO SUBMISSION_ADVISORS (SUBMISSION_ADVISORS_ID, SUBMISSION_ID, ADVISOR_TYPE_ID, FIRST_NAME, LAST_NAME, SUFFIX) VALUES (5,3,5,'Williard', 'Forsberg', 'AMS');
COMMIT;I want to be able to create a text index to lump these fields together:
SUBMISSION_ADVISORS.FIRST_NAME
SUBMISSION_ADVISORS.LAST_NAME
SUBMISSION_ADVISORS.SUFFIX
ADVISOR_TYPE.ADVISOR_TYPE_NAME
I've looked at DETAIL_DATASTORE and USER_DATASTORE, but the examples in Oracle Docs for DETAIL_DATASTORE leave me a little bit perplexed. It seems like this should be pretty straightforward.
Ideally, I'm trying to avoid creating new columns, and keeping the trigger adjustments to a minimum. But I'm open to any and all suggestions. Thanks for for your time and thoughts.
-JamieI would create a procedure that creates a virtual document with tags, which is what the multi_column_datatstore does behind the scenes. Then I would use that procedure in a user_datastore, so the result is the same for multiple tables as what a multi_column_datastore does for one table. I would also use either auto_section_group or some other type of section group, so that you can search using WITHIN as with the multi_column_datastore. Please see the demonstration below.
SCOTT@orcl_11gR2> -- tables and data that you provided:
SCOTT@orcl_11gR2> CREATE TABLE SUBMISSION
2 ( SUBMISSION_ID NUMBER(10) NOT NULL,
3 SUBMISSION_NAME VARCHAR2(100) NOT NULL
4 )
5 /
Table created.
SCOTT@orcl_11gR2> CREATE TABLE ADVISOR_TYPE
2 ( ADVISOR_TYPE_ID NUMBER(10) NOT NULL,
3 ADVISOR_TYPE_NAME VARCHAR2(50) NOT NULL
4 )
5 /
Table created.
SCOTT@orcl_11gR2> CREATE TABLE SUBMISSION_ADVISORS
2 ( SUBMISSION_ADVISORS_ID NUMBER(10) NOT NULL,
3 SUBMISSION_ID NUMBER(10) NOT NULL,
4 ADVISOR_TYPE_ID NUMBER(10) NOT NULL,
5 FIRST_NAME VARCHAR(50) NULL,
6 LAST_NAME VARCHAR(50) NULL,
7 SUFFIX VARCHAR(20) NULL
8 )
9 /
Table created.
SCOTT@orcl_11gR2> INSERT ALL
2 INTO SUBMISSION (SUBMISSION_ID, SUBMISSION_NAME)
3 VALUES (1, 'Some Research Paper')
4 INTO SUBMISSION (SUBMISSION_ID, SUBMISSION_NAME)
5 VALUES (2, 'Thesis on 17th Century Weather Patterns')
6 INTO SUBMISSION (SUBMISSION_ID, SUBMISSION_NAME)
7 VALUES (3, 'Statistical Analysis on Sunny Days in March')
8 SELECT * FROM DUAL
9 /
3 rows created.
SCOTT@orcl_11gR2> INSERT ALL
2 INTO ADVISOR_TYPE (ADVISOR_TYPE_ID, ADVISOR_TYPE_NAME)
3 VALUES (1, 'Department Chair')
4 INTO ADVISOR_TYPE (ADVISOR_TYPE_ID, ADVISOR_TYPE_NAME)
5 VALUES (2, 'Department Co-Chair')
6 INTO ADVISOR_TYPE (ADVISOR_TYPE_ID, ADVISOR_TYPE_NAME)
7 VALUES (3, 'Professor')
8 INTO ADVISOR_TYPE (ADVISOR_TYPE_ID, ADVISOR_TYPE_NAME)
9 VALUES (4, 'Associate Professor')
10 INTO ADVISOR_TYPE (ADVISOR_TYPE_ID, ADVISOR_TYPE_NAME)
11 VALUES (5, 'Scientist')
12 SELECT * FROM DUAL
13 /
5 rows created.
SCOTT@orcl_11gR2> INSERT ALL
2 INTO SUBMISSION_ADVISORS (SUBMISSION_ADVISORS_ID, SUBMISSION_ID, ADVISOR_TYPE_ID, FIRST_NAME, LAST_NAME, SUFFIX)
3 VALUES (1,1,2,'John', 'Doe', 'PhD')
4 INTO SUBMISSION_ADVISORS (SUBMISSION_ADVISORS_ID, SUBMISSION_ID, ADVISOR_TYPE_ID, FIRST_NAME, LAST_NAME, SUFFIX)
5 VALUES (2,1,2,'Jane', 'Doe', 'PhD')
6 INTO SUBMISSION_ADVISORS (SUBMISSION_ADVISORS_ID, SUBMISSION_ID, ADVISOR_TYPE_ID, FIRST_NAME, LAST_NAME, SUFFIX)
7 VALUES (3,2,3,'Johan', 'Smith', NULL)
8 INTO SUBMISSION_ADVISORS (SUBMISSION_ADVISORS_ID, SUBMISSION_ID, ADVISOR_TYPE_ID, FIRST_NAME, LAST_NAME, SUFFIX)
9 VALUES (4,2,4,'Magnus', 'Jackson', 'MS')
10 INTO SUBMISSION_ADVISORS (SUBMISSION_ADVISORS_ID, SUBMISSION_ID, ADVISOR_TYPE_ID, FIRST_NAME, LAST_NAME, SUFFIX)
11 VALUES (5,3,5,'Williard', 'Forsberg', 'AMS')
12 SELECT * FROM DUAL
13 /
5 rows created.
SCOTT@orcl_11gR2> -- constraints presumed based on your description:
SCOTT@orcl_11gR2> ALTER TABLE submission ADD CONSTRAINT submission_id_pk
2 PRIMARY KEY (submission_id)
3 /
Table altered.
SCOTT@orcl_11gR2> ALTER TABLE advisor_type ADD CONSTRAINT advisor_type_id_pk
2 PRIMARY KEY (advisor_type_id)
3 /
Table altered.
SCOTT@orcl_11gR2> ALTER TABLE submission_advisors ADD CONSTRAINT submission_advisors_id_pk
2 PRIMARY KEY (submission_advisors_id)
3 /
Table altered.
SCOTT@orcl_11gR2> ALTER TABLE submission_advisors ADD CONSTRAINT submission_id_fk
2 FOREIGN KEY (submission_id) REFERENCES submission (submission_id)
3 /
Table altered.
SCOTT@orcl_11gR2> ALTER TABLE submission_advisors ADD CONSTRAINT advisor_type_id_fk
2 FOREIGN KEY (advisor_type_id) REFERENCES advisor_type (advisor_type_id)
3 /
Table altered.
SCOTT@orcl_11gR2> -- resulting data:
SCOTT@orcl_11gR2> COLUMN submission_name FORMAT A45
SCOTT@orcl_11gR2> COLUMN advisor FORMAT A40
SCOTT@orcl_11gR2> SELECT s.submission_name,
2 a.advisor_type_name || ' ' ||
3 sa.first_name || ' ' ||
4 sa.last_name || ' ' ||
5 sa.suffix AS advisor
6 FROM submission_advisors sa,
7 submission s,
8 advisor_type a
9 WHERE sa.advisor_type_id = a.advisor_type_id
10 AND sa.submission_id = s.submission_id
11 /
SUBMISSION_NAME ADVISOR
Some Research Paper Department Co-Chair John Doe PhD
Some Research Paper Department Co-Chair Jane Doe PhD
Thesis on 17th Century Weather Patterns Professor Johan Smith
Thesis on 17th Century Weather Patterns Associate Professor Magnus Jackson MS
Statistical Analysis on Sunny Days in March Scientist Williard Forsberg AMS
5 rows selected.
SCOTT@orcl_11gR2> -- procedure to create virtual documents:
SCOTT@orcl_11gR2> CREATE OR REPLACE PROCEDURE submission_advisors_proc
2 (p_rowid IN ROWID,
3 p_clob IN OUT NOCOPY CLOB)
4 AS
5 BEGIN
6 FOR r1 IN
7 (SELECT *
8 FROM submission_advisors
9 WHERE ROWID = p_rowid)
10 LOOP
11 IF r1.first_name IS NOT NULL THEN
12 DBMS_LOB.WRITEAPPEND (p_clob, 12, '<first_name>');
13 DBMS_LOB.WRITEAPPEND (p_clob, LENGTH (r1.first_name), r1.first_name);
14 DBMS_LOB.WRITEAPPEND (p_clob, 13, '</first_name>');
15 END IF;
16 IF r1.last_name IS NOT NULL THEN
17 DBMS_LOB.WRITEAPPEND (p_clob, 11, '<last_name>');
18 DBMS_LOB.WRITEAPPEND (p_clob, LENGTH (r1.last_name), r1.last_name);
19 DBMS_LOB.WRITEAPPEND (p_clob, 12, '</last_name>');
20 END IF;
21 IF r1.suffix IS NOT NULL THEN
22 DBMS_LOB.WRITEAPPEND (p_clob, 8, '<suffix>');
23 DBMS_LOB.WRITEAPPEND (p_clob, LENGTH (r1.suffix), r1.suffix);
24 DBMS_LOB.WRITEAPPEND (p_clob, 9, '</suffix>');
25 END IF;
26 FOR r2 IN
27 (SELECT *
28 FROM submission
29 WHERE submission_id = r1.submission_id)
30 LOOP
31 DBMS_LOB.WRITEAPPEND (p_clob, 17, '<submission_name>');
32 DBMS_LOB.WRITEAPPEND (p_clob, LENGTH (r2.submission_name), r2.submission_name);
33 DBMS_LOB.WRITEAPPEND (p_clob, 18, '</submission_name>');
34 END LOOP;
35 FOR r3 IN
36 (SELECT *
37 FROM advisor_type
38 WHERE advisor_type_id = r1.advisor_type_id)
39 LOOP
40 DBMS_LOB.WRITEAPPEND (p_clob, 19, '<advisor_type_name>');
41 DBMS_LOB.WRITEAPPEND (p_clob, LENGTH (r3.advisor_type_name), r3.advisor_type_name);
42 DBMS_LOB.WRITEAPPEND (p_clob, 20, '</advisor_type_name>');
43 END LOOP;
44 END LOOP;
45 END submission_advisors_proc;
46 /
Procedure created.
SCOTT@orcl_11gR2> SHOW ERRORS
No errors.
SCOTT@orcl_11gR2> -- examples of virtual documents that procedure creates:
SCOTT@orcl_11gR2> DECLARE
2 v_clob CLOB := EMPTY_CLOB();
3 BEGIN
4 FOR r IN
5 (SELECT ROWID rid FROM submission_advisors)
6 LOOP
7 DBMS_LOB.CREATETEMPORARY (v_clob, TRUE);
8 submission_advisors_proc (r.rid, v_clob);
9 DBMS_OUTPUT.PUT_LINE (v_clob);
10 DBMS_LOB.FREETEMPORARY (v_clob);
11 END LOOP;
12 END;
13 /
<first_name>John</first_name><last_name>Doe</last_name><suffix>PhD</suffix><submission_name>Some
Research Paper</submission_name><advisor_type_name>Department Co-Chair</advisor_type_name>
<first_name>Jane</first_name><last_name>Doe</last_name><suffix>PhD</suffix><submission_name>Some
Research Paper</submission_name><advisor_type_name>Department Co-Chair</advisor_type_name>
<first_name>Johan</first_name><last_name>Smith</last_name><submission_name>Thesis on 17th Century
Weather Patterns</submission_name><advisor_type_name>Professor</advisor_type_name>
<first_name>Magnus</first_name><last_name>Jackson</last_name><suffix>MS</suffix><submission_name>The
sis on 17th Century Weather Patterns</submission_name><advisor_type_name>Associate
Professor</advisor_type_name>
<first_name>Williard</first_name><last_name>Forsberg</last_name><suffix>AMS</suffix><submission_name
Statistical Analysis on Sunny Days inMarch</submission_name><advisor_type_name>Scientist</advisor_type_name>
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> -- user_datastore that uses procedure:
SCOTT@orcl_11gR2> BEGIN
2 CTX_DDL.CREATE_PREFERENCE ('sa_datastore', 'USER_DATASTORE');
3 CTX_DDL.SET_ATTRIBUTE ('sa_datastore', 'PROCEDURE', 'submission_advisors_proc');
4 END;
5 /
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> -- index (on optional extra column) that uses user_datastore and section group:
SCOTT@orcl_11gR2> ALTER TABLE submission_advisors ADD (any_column VARCHAR2(1))
2 /
Table altered.
SCOTT@orcl_11gR2> CREATE INDEX submission_advisors_idx
2 ON submission_advisors (any_column)
3 INDEXTYPE IS CTXSYS.CONTEXT
4 PARAMETERS
5 ('DATASTORE sa_datastore
6 SECTION GROUP CTXSYS.AUTO_SECTION_GROUP')
7 /
Index created.
SCOTT@orcl_11gR2> -- what is tokenized, indexed, and searchable:
SCOTT@orcl_11gR2> SELECT token_text FROM dr$submission_advisors_idx$i
2 /
TOKEN_TEXT
17TH
ADVISOR_TYPE_NAME
AMS
ANALYSIS
ASSOCIATE
CENTURY
CHAIR
CO
DAYS
DEPARTMENT
DOE
FIRST_NAME
FORSBERG
JACKSON
JANE
JOHAN
JOHN
LAST_NAME
MAGNUS
MARCH
PAPER
PATTERNS
PHD
PROFESSOR
RESEARCH
SCIENTIST
SMITH
STATISTICAL
SUBMISSION_NAME
SUFFIX
SUNNY
THESIS
WEATHER
WILLIARD
34 rows selected.
SCOTT@orcl_11gR2> -- sample searches across all data:
SCOTT@orcl_11gR2> VARIABLE search_string VARCHAR2(100)
SCOTT@orcl_11gR2> EXEC :search_string := 'professor'
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> SELECT s.submission_name,
2 a.advisor_type_name || ' ' ||
3 sa.first_name || ' ' ||
4 sa.last_name || ' ' ||
5 sa.suffix AS advisor
6 FROM submission_advisors sa,
7 submission s,
8 advisor_type a
9 WHERE CONTAINS (sa.any_column, :search_string) > 0
10 AND sa.advisor_type_id = a.advisor_type_id
11 AND sa.submission_id = s.submission_id
12 /
SUBMISSION_NAME ADVISOR
Thesis on 17th Century Weather Patterns Professor Johan Smith
Thesis on 17th Century Weather Patterns Associate Professor Magnus Jackson MS
2 rows selected.
SCOTT@orcl_11gR2> EXEC :search_string := 'doe'
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> /
SUBMISSION_NAME ADVISOR
Some Research Paper Department Co-Chair John Doe PhD
Some Research Paper Department Co-Chair Jane Doe PhD
2 rows selected.
SCOTT@orcl_11gR2> EXEC :search_string := 'paper'
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> /
SUBMISSION_NAME ADVISOR
Some Research Paper Department Co-Chair John Doe PhD
Some Research Paper Department Co-Chair Jane Doe PhD
2 rows selected.
SCOTT@orcl_11gR2> -- sample searches within specific columns:
SCOTT@orcl_11gR2> EXEC :search_string := 'chair'
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> SELECT s.submission_name,
2 a.advisor_type_name || ' ' ||
3 sa.first_name || ' ' ||
4 sa.last_name || ' ' ||
5 sa.suffix AS advisor
6 FROM submission_advisors sa,
7 submission s,
8 advisor_type a
9 WHERE CONTAINS (sa.any_column, :search_string || ' WITHIN advisor_type_name') > 0
10 AND sa.advisor_type_id = a.advisor_type_id
11 AND sa.submission_id = s.submission_id
12 /
SUBMISSION_NAME ADVISOR
Some Research Paper Department Co-Chair John Doe PhD
Some Research Paper Department Co-Chair Jane Doe PhD
2 rows selected.
SCOTT@orcl_11gR2> EXEC :search_string := 'phd'
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> SELECT s.submission_name,
2 a.advisor_type_name || ' ' ||
3 sa.first_name || ' ' ||
4 sa.last_name || ' ' ||
5 sa.suffix AS advisor
6 FROM submission_advisors sa,
7 submission s,
8 advisor_type a
9 WHERE CONTAINS (sa.any_column, :search_string || ' WITHIN suffix') > 0
10 AND sa.advisor_type_id = a.advisor_type_id
11 AND sa.submission_id = s.submission_id
12 /
SUBMISSION_NAME ADVISOR
Some Research Paper Department Co-Chair John Doe PhD
Some Research Paper Department Co-Chair Jane Doe PhD
2 rows selected.
SCOTT@orcl_11gR2> EXEC :search_string := 'weather'
PL/SQL procedure successfully completed.
SCOTT@orcl_11gR2> SELECT s.submission_name,
2 a.advisor_type_name || ' ' ||
3 sa.first_name || ' ' ||
4 sa.last_name || ' ' ||
5 sa.suffix AS advisor
6 FROM submission_advisors sa,
7 submission s,
8 advisor_type a
9 WHERE CONTAINS (sa.any_column, :search_string || ' WITHIN submission_name') > 0
10 AND sa.advisor_type_id = a.advisor_type_id
11 AND sa.submission_id = s.submission_id
12 /
SUBMISSION_NAME ADVISOR
Thesis on 17th Century Weather Patterns Professor Johan Smith
Thesis on 17th Century Weather Patterns Associate Professor Magnus Jackson MS
2 rows selected.
Maybe you are looking for
-
Officejet Pro L7590 - Printer intermittently skips printing complete lines of black ink.
My Officejet Pro keeps intermittently skipping lines of black ink when I copy or print a document. There appears to be no pattern as to where on a page the line skips printing. When I initially replaced my B/Y printhead, the problem appeared to have
-
how to solve
-
Is there no way to include a one time header on last page?
With all the capabilities Lifecycle offers for XML and dynamic PDF generation, it seems crazy that I can not find a single sample or post that mentions how one is meant to control unique headers and footers. Scenario: PDF template built in Lifecycle
-
PO part no and SKU part number different
I have the Material part no on which we want to do Procurement. and put the material in stock and do valuation. Then I have the Vendors part number which is different than above part no. Mans if my material code is ABC then Vendors code may be DFG. I
-
N95 with the newest firmware installed. Every 2. or 3. time I answer a call the caller can hear me OK, but I cannot hear the caller. A local repairshop suggested to change both speaker and microphone, which they did, but the problem is still there. N