BRF Expression - Implementation class OCA001 - No Context Component Exist
Dear All,
I am trying to create an expression in BRF.
Application class is ISHERCM_PP and Implementation class OCA001 (Access to simple context). As expected after selecting this implementation class Result Type field is not editable. I selected Context 0MODBOOK_CONTEXT, after pressing enter it gives an error message that "First Enter a Result Type". After this I tried to select Context Component, but in F4 there is no values found.
First time I am creating an expression for implementation class OCA001, please suggest, what I am missing.
Thanks in Advance
Sudhir Gupta
Sudhir,
Can you explain what you want to do in terms of the business process?
When the event is triggered there is no information yet available about the where-used lists
that are created asynchronously after the module bookings are saved. If the module context contained in this structure does not suffice to program a BRF action or expression, the where-used lists can be read from the database additionally*
*Table Type for Program Type (in this and the last field of the structure the where-used lists are
contained in their state before the activity that triggered the event was executed. The current state
must be read from the database if necessary.
br,
Rob
Similar Messages
-
Read Implementation class attribute from context node
Hello all,
I have a global atttribute in my Implementation class. How can I access this attribute from the getter setter method of an attribute in my Context node?
Regards,
Debolinahi ,
I discovered that we cannot access the child nodes from parent class,so instead I am using custom controllers -
Read attribute of implementation class from context node
hi experts,
I need to access the implementation class from the context node,in component seged_tg/eltargetgroupitem. Node is targetgroupitem.
Also if I can either access the component controller from the context node,I need to know how to instantiate the class.
please help.
regards
Anuhi ,
I discovered that we cannot access the child nodes from parent class,so instead I am using custom controllers -
Instance of one of implementations of abstract class depending on context??
Hi all,
I just wonder if it is possible in Java to call creation of a new instance of an implementation of an abstract class depending on context.
I mean something like:
abstract class Abstract
//1st implementation of Abstract class
class Concrete1 extends Abstract
//2nd implementation of Abstract class
class Concrete2 extends Abstract
}And now, somewhere else in the code, I would really need to call something like this:
Abstract test1 = new ...(); //here I need sometimes to be created instance of Concrete1, sometimes instance of Concrete2
Is there a way how to do this??Some more concrete code if it helps:
Abstract class:
* Individual.java
* Created on 21. leden 2007, 1:08
package genetics;
* Abstract class defining fields and methods of one individual for genetic algorithms
* This class is supposed to be implemented according to problem to be solved
* @author Richard V�tek
* @version 1.0
abstract public class Individual implements Comparable<Individual>
* Create random chromosomes for this individual
protected abstract void createRandomChromosomes();
* Count fitness of this individual
* This number says how good is this individual (the higher number the better).
* Better fitness means that this individual is closer to solution.
* @return int Fitness of this individual
protected abstract int getFitness();
* Cross-breed this individual with another individual
* This leaves untouched number of chromosomes to certain (randomly generated) position.
* From this position on, it will swap chromosomes between this and another individual.
* So this individual gets changed (cross-breeded) as well as the other, which is returned
* as result of this method.
* @param other The other individual to cross-breed with
* @return Individual Hybrid of this and another individual (in fact, the other individual
* after cross-breed (this (source) individual gets changed too after cross-breed)
protected abstract Individual crossbreed(Individual other);
* Mutate this individual
* Mutate chromosomes of this individual; every chromosome is mutated
* with probability set in settings of evolution.
* This probability is supposed to be quite low number, roughly 1 %.
protected abstract void mutate();
* Check this individual
* Check if this individual still suits the assignment.
* If not, repair this individual to suit it again.
protected abstract void check();
* Implementation of Comparable: comparing of individuals by fitness
* @param other Another individual to compare
public int compareTo(Individual other)
return this.getFitness() - other.getFitness();
One implementation class:
* KnapsackIndividual.java
* Created on 21. leden 2007, 1:41
package genetics;
import java.util.Random;
import java.util.TreeMap;
import knapsack.KnapsackProblem;
* This is practically the same as KnapsackProblem class but designed specially
* for solving knapsack problem with genetic algorithm so all unnecessary fields
* and methods are removed.
* @author Richard V�tek
* @version 1.0
public class KnapsackIndividual extends Individual
* Chromosomes of this individual
* In case of knapsack problem, they are things currentl in knasack
protected boolean[] arrChromosomes;
* Cached value of fitness of this individual
* Used to not to count fitness of this individual everytime when needed
* (and it is often needed); once counted, it will be read from this cached value
private int intFitnessCache = Integer.MIN_VALUE;
* Randomizer for random-driven methods (like mutation, etc.)
private Random randomizer = new Random();
* Reference to evolution to read mutation probability from
protected Evolution evolution;
* Assignment of problem instance
protected KnapsackProblem assignment;
* Create a new Individual instance
* @param assignment Object representing assignment of particular problem
* @param evolution Reference to evolution object to be able to read evolution's settings from
public KnapsackIndividual(KnapsackProblem assignment, Evolution evolution)
this.assignment = assignment;
this.evolution = evolution;
this.arrChromosomes = new boolean[assignment.getNumberOfThings()];
* Create random chromosomes for this individual
* @see Individual#createRandomChromosomes()
protected void createRandomChromosomes()
int intChromosomeCount = this.arrChromosomes.length;
for (int i = 0; i < intChromosomeCount; i++)
this.arrChromosomes[i] = this.randomizer.nextBoolean();
* Get fitness of this individual
* In case of knapsack, fitness is sum of prices of all things currently in knapsack
* @see Individual#getFitness()
protected int getFitness()
//if cached value exist, return it
if (this.intFitnessCache != Integer.MIN_VALUE)
return this.intFitnessCache;
//otherwise, count fitness of this individual
int intChromosomeCount = this.arrChromosomes.length;
int intSumOfValues = 0;
//in case of knapsack, fitness is value of all things currently in knapsack
//(sum of values of all things in knapsack)
for (int i = 0; i < intChromosomeCount; i++)
intSumOfValues = this.assignment.arrPrices;
//save counted fitness to cache
this.intFitnessCache = intSumOfValues;
return intSumOfValues;
* Cross-breed two individuals
* @param other The other individual for cross-breed
* @return The other individual after cross-breed (but this individual is affected too)
* @see Individual#crossbreed()
protected Individual crossbreed(Individual other)
int intChromosomeCount = this.arrChromosomes.length;
//position from which on swap chromosomes of this and the other individual
int intCrossbreedPosition = this.randomizer.nextInt(intChromosomeCount);
boolean booTemp;
//swap chromosomes from cross-breed position on
for (int i = intCrossbreedPosition; i < intChromosomeCount; i++)
booTemp = ((KnapsackIndividual) this).arrChromosomes[i];
((KnapsackIndividual) this).arrChromosomes[i] = ((KnapsackIndividual) other).arrChromosomes[i];
((KnapsackIndividual) other).arrChromosomes[i] = booTemp;
return other;
* Mutate individual chromosomes of this individual with certain probability
* In case of knapsack, particular thing is just inserted/taken out of the knapsack
* @see Individual#mutate()
protected void mutate()
//probability of mutation (in percents)
int intMutationProbability = this.evolution.getMutationProbability();
int intChromosomeCount = this.arrChromosomes.length;
//iterate through all chromosomes, mutating them with certain (set) probability
for (int i = 0; i < intChromosomeCount; i++)
//mutation probability passed => mutate this chromosome
if (this.randomizer.nextInt(100) < intMutationProbability)
this.arrChromosomes[i] = !this.arrChromosomes[i];
//when mutation finished, we must check if this individual still suits the assignment;
//if not, repait it
this.check();
* Check if this individual still suits the assignment; if not, repair it
* In case of knapsack it means that sum of weights of things currently in knapsack
* will not exceed capacity of backpack; if exceeds, take out as many things as necessary
* to not to exceed again; choose things to be taken out according to worst weight to price ratio
* @see Individual#check()
protected void check()
int intSumOfWeights = 0;
//list of things in the knapsack sorted by weight to price ratio
//key: index of thing in knapsack
//value: weight/price ratio
TreeMap<Integer, Float> things = new TreeMap<Integer, Float>();
for (int i = 0; i < this.arrChromosomes.length; i++)
//thing in the knapsack
if (this.arrChromosomes[i] == true)
//add its weight to sum of weights
intSumOfWeights += this.assignment.arrWeights[i];
//add it to the list of things sorted by weight to price ratio
things.put(i, (((float) this.assignment.arrWeights[i]) / ((float) this.assignment.arrPrices[i])));
//sum of weights exceeds knapsack capacity => take out as many things as necessary
while (intSumOfWeights > this.assignment.getKnapsackCapacity())
//take out thing with worst weight/price ratio from all things currently in knapsack
this.arrChromosomes[things.lastKey()] = false;
//update sum of weights of things currently in knapsack
intSumOfWeights -= things.get(things.lastKey());
//also remove this thing from list of things
things.remove(things.lastKey());
And another class, where i need this feature (tried to use generics for that, but they can't be used in this way):
* Evolution.java
* Created on 21. leden 2007, 2:47
package genetics;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
* Class for algorithms using simulated evolution to deal with a problem
* Tried to be designed general enough to allow to be used for every genetic algotihm.
* If true, only class Individual must be implemented according to problem to be solved,
* the rest of genetic algorithm stays the same.
* @author Richard V�tek
* @version
public class Evolution<Problem, IndividualClass extends Individual>
* Number of generations of evolution to finish
protected int intGenerationCount;
* Number of individuals in each generation
protected int intGenerationSize;
* Elite individual count
* All elite individuals are just copied from one generation to another with no change
protected int intGenerationEliteCount;
* Number of individuals participating a tournament
* To select an good individual for next generation, tournaments are hold.
* This affects number of individuals which one good individual is selected
* from in one tournament.
* @see <a href="http://cs.felk.cvut.cz/%7Exobitko/ga/example_f.html">Genetic Algorithm Example Applet</a>
protected int intGenerationTournamentSize;
* Probability of mutation (in percents)
protected int intMutationProbability;
* Current generation of individuals in evolution
protected Generation<IndividualClass> thisGeneration;
* Next generation of individuals in evolution
protected Generation<IndividualClass> nextGeneration;
* Fitness of best individual in this generation
private int intIndividualBestFitness;
* Sum of fitnesses of all individuals in this generation
private int intIndividualsSumFitness;
* Fitness of worst individual in this generation
private int intIndividualWorstFitness;
* Fitness of best elite individual in (every) generation
* Auxilliary variable to not to count statistics for elite individuals
* in each generation as well (not needed - elite individuals don't change themselves)
private int intIndividualEliteBestFitness;
* Sum of fitnesses of all elite individuals in (every) generation
* Auxilliary variable to not to count statistics for elite individuals
* in each generation as well (not needed - elite individuals don't change themselves)
private int intIndividualElitesSumFitness;
* Fitness of worst elite individual in (every) generation
* Auxilliary variable to not to count statistics for elite individuals
* in each generation as well (not needed - elite individuals don't change themselves)
private int intIndividualEliteWorstFitness;
* Create a new instance of Evolution (settings passed through parameters)
* @param intGenerationCount Number of generation of evolution to finish
* @param intGenerationSize Number of individuals in each generation
* @param intGenerationEliteRatio Elite individuals to generation size ratio (in percents)
* @param intGenerationTournamentRatio Members of tournament to generation size ratio (in percents)
* @param intMutationProbability Probability of mutation of each chromosome of each individual of generation (in percents)
* @see #intGenerationEliteCount
* @see #intGenerationTournamentSize
public Evolution(
int intGenerationCount, int intGenerationSize,
int intGenerationEliteRatio, int intGenerationTournamentRatio,
int intMutationProbability)
this.intGenerationCount = intGenerationCount;
this.intGenerationSize = intGenerationSize;
this.intGenerationEliteCount = (int) (intGenerationSize * (intGenerationEliteRatio / 100.0));
this.intGenerationTournamentSize = (int) (intGenerationSize * (intGenerationTournamentRatio / 100.0));
this.intMutationProbability = intMutationProbability;
* Create a new instance of Evolution (settings loaded from settings file)
* @param strSettingFile Name of file containing settings for evolution
* @throws IOException File does not exist, cannot be read, etc.
* @throws Exception Another exception occured during loading of file
public Evolution(String strSettingFile)
BufferedReader settings;
String settingsLine;
int intLineCounter = 0;
int intSetting;
try
settings = new BufferedReader(new FileReader(strSettingFile));
while ((settingsLine = settings.readLine()) != null)
intLineCounter++;
settingsLine = settingsLine.substring(0, settingsLine.indexOf("\t"));
intSetting = Integer.parseInt(settingsLine);
switch (intLineCounter)
case 1:
this.intGenerationCount = intSetting;
break;
case 2:
this.intGenerationSize = intSetting;
break;
case 3:
this.intGenerationEliteCount = (int) (this.intGenerationSize * (intSetting / 100.0));
break;
case 4:
this.intGenerationTournamentSize = (int) (this.intGenerationSize * (intSetting / 100.0));
break;
case 5:
this.intMutationProbability = intSetting;
break;
} //switch
} //while
//after reading has been completed, let's close the stream
settings.close();
} //try
//IO exception - file not found, cannot be read, etc.
catch (IOException ioe)
System.out.println("Vyskytl se I/O probl�m při nač�t�n� zad�n� ze souboru " + strSettingFile);
//Exception - another problem during reading of file
catch (Exception e)
System.out.printf("Vyskytl se nějak� divn� probl�m při nač�t�n� zad�n� ze souboru %s. V�pis vyj�mky:\n", strSettingFile);
e.printStackTrace();
* Vivify first generation for evolution
* Necessary number of individuals is created with random chromosomes.
* Their chromosomes must then be checked if they suit the assignment
* and if not so, repaired.
private Generation<IndividualClass> vivifyFirstGeneration()
//create a brand-new generation
Generation generation = new Generation<IndividualClass>(this);
int intTemp;
//for all individual of this generation
for (int i = 0; i < this.intGenerationSize; i++)
//create an individual with no chromosomes
generation.arrIndividuals[i] = new IndividualClass(this, Problem);
//create a set of random chromosomes
neration.arrIndividuals.createRandomChromosomes();
//if these chromosomes does not suit assignment, repair them
generation.arrIndividuals[i].check();
//sort Individuals by fitness so elite individuals get to first positions of array
Arrays.sort(generation.arrIndividuals);
//now count statistics for elite individuals (it is enough to count them once,
//elite don't get changed so their statistics don't get changed either)
this.intIndividualEliteBestFitness = Integer.MIN_VALUE;
this.intIndividualElitesSumFitness = 0;
this.intIndividualEliteWorstFitness = Integer.MAX_VALUE;
//count statistics for elite individuals
for (int i = 0; i < this.intGenerationEliteCount; i++)
intTemp = generation.arrIndividuals[i].getFitness();
//better fitness than best fitness so far
if (intTemp > this.intIndividualEliteBestFitness)
this.intIndividualEliteBestFitness = intTemp;
//worse fitness than worst fitness so far
else if (intTemp < this.intIndividualEliteWorstFitness)
this.intIndividualEliteWorstFitness = intTemp;
this.intIndividualElitesSumFitness += intTemp;
//reset generation's statistics
this.intIndividualBestFitness = this.intIndividualEliteBestFitness;
this.intIndividualsSumFitness = this.intIndividualElitesSumFitness;
this.intIndividualWorstFitness = this.intIndividualEliteWorstFitness;
//count generation's statistics also from rest of individuals
for (int i = this.intGenerationEliteCount; i < this.intGenerationSize; i++)
updateGenerationStatistics(generation.arrIndividuals[i].getFitness());
return generation;
* Get next generation in evolution
* Core method for all evolution; Through this method, new generation is obtained.
* Every next generation should contain better individuals than the previous one
* (till certain point) so with growing number of iterations in evolution, we
* get better results (till certain point).
* Everytime all elite individuals are copied to next generation, then hold needed number of
* tournaments to choose a pair of good-looking individuals, cross-breed individuals in these
* pairs, mutate them (and repair if necessary) and finally add to next generation.
* @return Generation Next generation in evolution
* @see Generation#tournament()
* @see Generation#crossbreed()
* @see Generation#mutate()
private Generation getNextGeneration()
Generation nextGeneration = new Generation(this);
//number of pairs of individuals to select for next generation
int intIndividualPairsToSelect = (this.intGenerationSize - this.intGenerationEliteCount) / 2;
int intTemp;
//reset generation's statistics
this.intIndividualBestFitness = this.intIndividualEliteBestFitness;
this.intIndividualsSumFitness = this.intIndividualElitesSumFitness;
this.intIndividualWorstFitness = this.intIndividualEliteWorstFitness;
//just copy all elite individuals from this generation to another
//(they are on first positions of array of individuals)
for (int i = 0; i < this.intGenerationEliteCount; i++)
nextGeneration.arrIndividuals[i] = this.thisGeneration.arrIndividuals[i];
//hold as many tournaments as necessary to select remaining number of pairs
//of good-looking individuals for next generation (apart from the elite ones)
for (int i = 0; i < intIndividualPairsToSelect; i++)
this.thisGeneration.tournament();
this.thisGeneration.crossbreed();
this.thisGeneration.mutate();
//add this individual in next generation
nextGeneration.arrIndividuals[2 * i] = this.thisGeneration.nextGenerationIndividual01;
//update statistics of generation
updateGenerationStatistics(this.thisGeneration.nextGenerationIndividual01.getFitness());
//add this individual in next generation
nextGeneration.arrIndividuals[2 * i + 1] = this.thisGeneration.nextGenerationIndividual02;
//update statistics of generation
updateGenerationStatistics(this.thisGeneration.nextGenerationIndividual02.getFitness());
//next generation is complete => return it
return nextGeneration;
* Update statistics of current generations
* @param intFitness Fitness that may possibly update generation's statistics
* (best fitness, worst fitness, sum of fitnesses)
private void updateGenerationStatistics(int intFitness)
//better fitness than best fitness so far
if (intFitness > this.intIndividualBestFitness)
this.intIndividualBestFitness = intFitness;
//worse fitness than worst fitness so far
else if (intFitness < this.intIndividualWorstFitness)
this.intIndividualWorstFitness = intFitness;
//update sum of fitnesses as well (for average fitness)
this.intIndividualsSumFitness += intFitness;
* Execute evolution process
* Vivify first generation and then as many next generations as set in settings of evolution
public void evolution()
this.thisGeneration = vivifyFirstGeneration();
//output generation's statistics
System.out.printf("Generace 0:\t%d\t%d\t%d", this.getIndividualBestFitness(), this.getIndividualAverageFitness(), this.getIndividualWorstFitness());
for (int i = 0; i < this.intGenerationCount; i++)
this.nextGeneration = getNextGeneration();
this.thisGeneration = this.nextGeneration;
//output generation's statistics
System.out.printf("Generace %d:\t%d\t%d\t%d", i, this.getIndividualBestFitness(), this.getIndividualAverageFitness(), this.getIndividualWorstFitness());
* Get best fitness of all individuals in this generation
public int getIndividualBestFitness()
return intIndividualBestFitness;
* Get average fitness of all individuals in this generation
public float getIndividualAverageFitness()
return (this.intIndividualsSumFitness / (float) this.intGenerationSize);
* Get worst fitness of all individuals in this generation
public int getIndividualWorstFitness()
return intIndividualWorstFitness;
* Get probability of mutation
* @return Probability of mutation of each chromosome of every individual in generation (in percents)
public int getMutationProbability()
return intMutationProbability; -
Missing BRF implementation class 0EV001- register Event in BRF
Hi I am trying to get an understanding of BRF and have started working though the SAP Help and have got to the How to develop an application. I have ran reports BRF_INITIALIZE. Used tcode BRFAPL01 to create an Application, ran BRF_COPY_IMPL_CLASSES, ran BRF to define the cross app features. I have created the ABAP program to raise the BRF event.
The problem is that when i try and register my event in BRF and follow the help it tells me to use the event implementation class 0EV001 which it says is the SAP standard. This implementation class is not in the list of classes. Infact there are no event type classes.
Can anyone tell me where i can get the implementation class 0EV001 and how i get it into my client so i can use it?
Thanks Trev BHI,
Actually after seeing your post, i checked in 3 systems where i have done the BRF. But i couldnt find in any of them.
So we need to create the implementation class which supports our event.
Reward points if found helpful.
Regards,
Seema -
Is it possible to access elements of a view in implementation class?
Hi,
In the BSP component workbench, is it possible to manipulate elements of a view (listbox, inputfields etc., hardcoded using htmlb tags) in the methods of view implementation class. For example, I have a inputfield which is initially invisible. I want to make it visible when a particular event is triggered. I wish to code this directly in the event handler method. Can anybody provide some pointers?Arun,
As the UI elements (tags) do only exist during rendering phase a direct access from the view controller is not possible - especially not in the forward-oriented way from within an event handler as indicated from you in the posting.
However, it is of course possible to hard-code view layouts; for this approach you can use the BSP view corresponding to the view and code there whatever you like. BSP views can also contain code snippets to achieve dynamic effects. In your example it doesn't look like that you need code at all - you need to preserve the status (visible/ invisible) in a value attribute of a context node and use this value to bind visibility of the input field on the layout.
In CRM 2007, there are two main tag libraries (aka BSP extensions) being used:
- THTMLB (single tags, like input field, button, table, ...)
- CHTMLB (configuration tags; these are available for forms, tables and trees)
You should always use these tag libraries in the first place to assure common look and feel and avoid rendering issues.
Best regards
Peter -
Implementation Class of Marketing BO
Hi Gurus,
I am facing a same problem for Marketing BO. Can you tell me from which table, we can get all implementation classes of Segmentation, campaign, Lead & their Query Objects.
Thanks in Adv.Hi Shiromani,
I have to enhance search component of segmentation element i.e SEGAS_SEG_HV and view ASSEG , and context node Query. The BOL object of this context is SEGSegAdvQuery . I need the implementing class of this BOL object and how can we find the implementing class of other BOL Object like SEGSeg.
Thanks, -
Find the implementation class of a Business object
HI Gurus,
Is there any path in SPRO from where we can find the implementation class of a BOL object?
For an example, I am working with BuilHeader. The backend table for BUL Header which will be updated while modifiyng BuilHeader is BUT000. So how can we find the back end database table name or implementation class where the table BUT000 is updated?Hi Suchandra Bose
the flow will go like this.
1) the data in the BOL structures moved to Genil Implementation Class which is defined in the below SPRO path
CRM->CRM Cross application components->Generic Interaction Layer/Object Layer->Basic Settings in this corresponding each and every component one Genil class and its Model information in the form of tables will be maintained.
2) Take for example BP component , for BP component CL_CRM_BUIL is the Generic Interaction layer class , with in the generic interaction layer class methods (Create_objects, MODIFY_OBJECTS, GET_OBJECTS) you will find a code snippet to get the * Handler class* , this handler class will inturn get the Interaction Layer classes to reach the API ,
get object handler
lv_cl_object =
me->handler_factory->get_obj_handler(
iv_object_name = iv_object_name ).
3) This handler method will query the table CRMC_OBJIMP_BUIL to get the relevant handler class depending on which functionality you are implementing.
Thanks & Regards
Raj -
Reading global attributes from implementation class
Hi,
How to access
global attributes of implementation class
from getter method of context node class.
Thanks in advance,
Srinivas.Hi Srinivasa,
Access the view controller using attribute
owner
, Then you can access the global attributes.
Regards,
Masood Imrani S. -
How to call a method in IMPL class from one context node
Hi, I´ve been only study the posibility to access a method in the IMPL class from one context node class...CN## without using events, is there a way to call it ??? I don´t have it as requierement just learning thanks !.
Hi,
Try this by following this you can get the custom controller instacne in the view context nodes, for your requirement you can keep the view implementation class instance instead of cuco..
To get the custom controller instance in Context node getter/setter method:
1. Declare Cuco instance reference variable in ctxt class..
2. Set this cuco ref. in the Create context node method of ctxt class:
try.
gr_cucoadminh ?= owner->get_custom_controller( 'ICCMP_BTSHEAD/cucoadminh' ). "#EC NOTEXT
catch cx_root.
endtry.
you can avoid this step as this is not needed in case of view isntance
3. Assign this instance to the respective context node Create method using:
BTStatusH->gr_cuco ?= gr_cucoadminh. " here assign the view implementation ref. " me" instead of gr_cucoadminh
Here gr_cuco is the ref. variable of custom controller in the respective context node for eg. BtstatusH
Sample implementation of this can be found in
ICCMP_BTSHEAD/BTSHeader ->context node BTACTIVITYH-> attr ->GR_CUCO(instance of cuco)
Cheers,
Sumit Mittal -
SRM SC Workflow is not working as per BRF expressions
We are having SRM 7.0 SP5
Based on SC item values, We are determining whether the process level is required or not using BRF expressions.
For a particular data, only 2 process levels are selected.
But I go into debugger mode and skip one process level.
After SC is ordered, when I see the approval process there is only one level.
But when I come out from that SC, and go back to the same one and see, there is 2 process levels(when I am expecting only one).
Can anyone help me out on this? Thanks.
Edited by: BASKI ABAP on Oct 25, 2011 12:26 PMHello,
As you are only in SP 5 (last Support Package is 12), i advise you to upgrade until SP 11 or to implement all OSS notes for SRM-EBP-WFL-PC application area.
Indeed, many, many problems occur with Process-Controlled Workflow...
Regards.
Laurent. -
The method to over ride the faces context has changed between SUN Application Server 8.2 and 9.1, as a result the instructions which were previously provided on the MyFaces wiki (http://wiki.apache.org/myfaces/Installation_and_Configuration) no longer work. What I am looking for is instructions that will allow me to use our own faces jars and not (javaee.jar) which is provided as part of the application server.
What I need to do is to get Sun Application Server 9.1 to allow me to over ride the faces context /javax/faces/context/ with that from my local jars, in version 8.X the following steps were enough:
Start 8.X instructions:
1. Change the config security file so that MyFaces <http://wiki.apache.org/myfaces/MyFaces> can delete it's temporary files.
Change permission
java.io.FilePermission <http://wiki.apache.org/myfaces/FilePermission> "<<ALL FILES>>", "read,write";to
java.io.FilePermission <http://wiki.apache.org/myfaces/FilePermission> "<<ALL FILES>>", "read,write,delete";2. Prevent the sun reference implementation from being used
In your WEB-INF, create a sun-web.xml file containing
<?xml version="1.0" encoding="UTF-8"?>
<sun-web-app>
<class-loader delegate="false"/>
</sun-web-app>3. That way, myfaces classes will be loaded instead of Sun RI ones.
And prevent MyFaces <http://wiki.apache.org/myfaces/MyFaces> from loading the Sun RI context listener
By creating in your webapp a "fake"
com.sun.faces.config.ConfigureListener
<http://wiki.apache.org/myfaces/ConfigureListener> that will be loaded BEFORE the sun RI one's.
The war file I am making available as a test case has just such a file in my case it is called fakefaces.jar
End instructions for 8.2
However these steps have changed for version 9.1 as following the exact same procedures does not result in the Application Server using the correct jars, the following is a test using a simple find.jsp, notice how Application Server 9.1 is still using the default jars and not the ones shipping with included as part of my testApp.
Within the war file is a jsp called find.jsp using this I can check which jar file file is being used for any class in my case I'm interested in the the /javax/faces/context/FacesContext.class, in 9.1 it always uses teh copy from javaee.jar and never teh local copy:
For example running: http://<ip address>:<port>/test/find.jsp?class=javax.faces.context.FacesContext
Version 9.1 returns: file:/u01/software/Apps/SunAppServer9.1/lib/javaee.jar!/javax/faces/context/FacesContext.class
Version 8.2 returns: file:/u01/software/Apps/SunAppServer8.2/domains/domain1/applications/j2ee-apps/TestApp/test_war/WEB-INF/lib/myfaces-api.jar!/javax/faces/context/FacesContext.class
Hence 9.1 is still using the copy provided by SUN and not our copy.
The code for find.jsp is:
<%
String className = request.getParameter("class");
Class theClass;
try
theClass = Class.forName(className);
java.net.URL url = theClass.getResource("/" + theClass.getName().replace('.', '/') + ".class");
out.println(url.getFile());
catch (ClassNotFoundException e)
// TODO Auto-generated catch block
out.println(e);
%>-------------------------------------------------
Any idea how to over-ride the FacesContext class in version 9.1 to allow for similar functionality as 8.X
Thanks,
ERIC GANDTAlright, I've narrowed it down to my Customization Class. I attempted to have my customization class PortalCC in a JAR file, excluded it from the WAR file and added the JAR in the lib directory of the EAR file, as described on:
http://docs.oracle.com/cd/E23943_01/web.1111/e16272/deploy_java_ee_app.htm#CHDGGFEB -
ServletContextProvider Implementation class for Apache Struts Bridge in OAS
Hello,
I am using Apache Struts Bridge to create JSR-168 portlets, based on Struts.
But I am stuck in one point... i.e. maybe oracle doesnot provide a implementaion for the ServletContextProvider interface, which is required by the struts bridge, inorder to get the servlet context.
Other Portal Servers like, Pluto, etc... provide a implementation class for this.
I have heard that, if a Implementation class can be written for this, then the problem will be solved.
Have any one faced any such situation? Have any one implemented the ServletContextProvider interface for OC4J....
Any Help would be highly appreciated.
Thanks
Sam...I was able to find that class by downloading the Oracle Portlet Container 10.1.2.0.2 and following the instructions for extracting it into my OC4J. When you do that it will give you a file called ${OC4J_HOME}/shared-lib/oracle.wsrp/1.0/wsrp-container.jar. That jar file contains the class you need.
Oracle Portlet Container 10.1.2.0.2: http://download.oracle.com/otndocs/tech/ias/portal/files/portlet-container.zip
PDK Page: http://www.oracle.com/technology/products/ias/portal/pdk.html -
Why can't I extend Container and then use Canvas/Panel in implementing classes?
I have several components that I'm dynamically adding to a component by building it from a class name...
var pmt:Prompt = UiHelper.instantiateUsingClassName([email protected]());
myLayout.addChild(pmt as DisplayObject);
I want all my components to extend "Prompt" in a generic way so that in each implementing class I can use Canvas, Panel, etc.
I thought I could just make Prompt extend Container but they won't show up if I use Container, even if in my implementing Prompt components I use a Panel or Canvas.
However, if i change the base Prompt class to extend Canvas, then things show up... but that seems annoying to 'have' to use a Canvas as my base class object? Is there another type of object I should be extending?If your condo is pre-wired for Ethernet, you may be better situated to configure your AirPorts for a roaming network that a wireless-extended one. The only issue, of course, would be the room that does NOT have an Ethernet jack.
The issue, as you pointed out, is the combination of the building construction material and the additional nearby Wi-Fis that are providing a "deadly" RF noise mix/obstructions to any of your AirPorts' signal.
With a roaming network, each AirPort would be connected to Ethernet back to a central router and each AirPort, in turn, would be reconfigured as basic Wireless Access Points to feed wireless at the location ... mostly only within the room the WAP is located in because of the wall material. -
Error while activating the Implementation class of a BADI ?
Hello,
I am trying to activate a BADIi but its implementation class(ZCL_IM_DSD_ADD_CUST_IN_DNL) is not getting activated and giving the following object error on activation.
CPUB ZCL_IM_DSD_ADD_CUST_IN_DNL
and it says that "INCLUDE report "ZCL_IM_DSD_ADD_CUST_IN_DNL====CL" not found , where "DSD_ADD_CUST_IN_DNL" is the Impl. name of the definition "/DSD/ME_BAPI" implementing the interface "/DSD/IF_EX_ME_BAPI".
what am i missing here. Big time help will be extremely appreciated ..
Thanks a ton.Hi,
I had a quick qn,
Normally, the implementation name should start with Z. Can you create using the name 'DSD_ADD_CUST_IN_DNL' ? or are you using any access key (SSCR)?
For the infm, I have just tried to create one Z implementation in my system and it works fine. Could you please delete the current implementation and try it once again ?
Regards,
Selva K.
Maybe you are looking for
-
Error 50 during iTouch iOS 5 backup restore in windows vista
Hello! I upgraded to iOS 5 recently. There wasn't enough space in c drive for back up. So I cut few program files and pasted in D drive. After the upgrade happened, I pasted the program files back to C drive.Then iTouch back up wasn't happening. It s
-
Getting Billing Element in Purchase Order Using WBS element.
Hi, What is the process and logic to get the billing element and the corresponding Sales order details using the WBS element or network of the account assignment category in the Purchase order line item.Please suggest the tables to be used to fetch t
-
Non-unicode FTP transfer of chinese characters
Hi, We're trying to transfer data in SAP stored under .txt format using an abap program to FTP across to another external system. Our current SAP system is 4.6C is does not have unicode capability and uses code page to translate non-English texts. We
-
one of my friend updated her iPhone with my apple id and now her contacts are inside my iPhone , she has deleted my contact which has been i her contact , how can i bring back my contact ?
-
Font pulldown not available in Page Properties
When I create a new html document then go to Modify > Page Properties there is no font pulldown menu anymore. I'm not sure what preferences I changed, and can't figure out how to get it back. I noticed when I now change background color and margins t