Lookup for values from XI to R3
Hi Experts,
i need to get values from r/3 table whenever i pass two values from XI.
Can I write a function module(RFC), which imports these values from XI and exports the values needed by XI from R/3 custom table.(infarct I'm going to of RFC lookup)
Is there any other way to get values from R/3 custom table.
let me know your thoughts.
>
Viswanath wrote:
> Hi Experts,
>
> i need to get values from r/3 table whenever i pass two values from XI.
>
>
> Can I write a function module(RFC), which imports these values from XI and exports the values needed by XI from R/3 custom table.(infarct I'm going to of RFC lookup)
>
> Is there any other way to get values from R/3 custom table.
>
> let me know your thoughts.
You write a Function Module in R/3 with the import parameter being the 2 values from XI. The export parameter will be the looked up value.
You can call this Function Module using an RFC lookup.
Other way of doing the same is using a JCO call like in this blog,
JCO Lookup - Hide the connection parameters from source code
BR
Similar Messages
-
Lookup for value while mapping
Hi ,
I have a situation in hand and i am looking for a performance effective solution .May be anyone can help me.
I have a PO where i have to map it to a xml . at the item level i have to fetch a field from the SAP Backend and then populate the XML with that value.
I can write a lookup for that field using the JCO lookup.
but this code will execute for each line item . right !!!.
Can i do this in one call and get the field data for all the line items and then split it according to each occurance of line item
Regards
NikhilNikhil,
This can be done but with some changes in the RFC.
1. Make changes in the RFC such that it can handle multiple records and send the response in multipkle records . ( The RFC code should contain TABLE to handle this ).
2. Write an Advanced user Defined Function that will take all the input fields as the input, call the RFC and get the response values. Stored them in an array declared in the Java Section ( from Sp 14 onwards, there is a java section that allows you to declare Global Variables and use them anywehere in your mapping ).
3. This user defined function should be called at the mapping of the root nodes.
4. Now , write another UDF , that will read the values out of the global variable array using a global counter , map it to the target and increment the same.
Regards
Bhavesh -
Hi,
I'm Palanivel , In my site collection , I have 2 lists , In 1st list , i have id,name and Total Annual leave . In 2nd List i have ID,No of Days(taking leave),Balance Annual Leave.
My first task is,In List 2, get the value from list 1.total annual leave to list 2.balance annual leave. Next , i do some calculation ,that is (balance annual leave - no of days = balance annual leave) .
Now my updates working correctly . and the calculation also working but when next time applying leave , again the update process working , so balance annual leave becomes my total annual leave .
my question is how to do a update process only first time , next time only calculation task has to be performed .
how to do 2 task in a single workflow , the 1st task must run only one time .
please help ....
thanks in advanceAnyway-hopefully I am not talking to myself here.
The database i am using is Oracle 10 g version 1 and using vb2005 express.
As mentioned above the problem is the value of the parameter does not go into the query statement.
The same logic with changes made works for other major databases. So I do not think it is the logic.
Any suggestions? -
Retrieving lookup field values from a main table using MDM JAVA APIs
Hi all,
am trying to retrieve the main table data...., i could able to retrieve all the data except lookup field values..., iam facing some runtime exceptions and i dont know why exactly it is throwing this exception..., i pasted piece of code where exactly the error is and the exception also.
in the below sode i set some result set definitions and passing them to retrieveLimitedRecordsCommand. it is showing some exception at retrieveLimitedRecordsCommand.execute(); command.
//*** Code ***//
supportingMainResultDefinitions = new ResultDefinition[] { rdQual ,rdFlat, rdqFlat };
retrieveLimitedRecordsCommand.setResultDefinition(rd);
retrieveLimitedRecordsCommand.setSearch(new Search(tableId));
retrieveLimitedRecordsCommand.setSession(sessionId);
retrieveLimitedRecordsCommand.setSupportingResultDefinitions(supportingMainResultDefinitions);
try {
retrieveLimitedRecordsCommand.execute();
PrintRecords.toConsole(retrieveLimitedRecordsCommand.getRecords());
} catch (CommandException e) {
e.printStackTrace();
//*** Below is the Exception raised ***//
java.lang.UnsupportedOperationException: Unexpected field type -1
at com.sap.mdm.internal.schema.PropertiesHelper.createField(PropertiesHelper.java:274)
at com.sap.mdm.internal.schema.PropertiesHelper.convertFrom(PropertiesHelper.java:281)
at com.sap.mdm.internal.data.RecordMetadata.<init>(Unknown Source)
at com.sap.mdm.internal.data.RecordsLoader.<init>(Unknown Source)
at com.sap.mdm.internal.data.RecordsLoader.<init>(Unknown Source)
at com.sap.mdm.internal.data.RecordResultSetHelper.convertFrom(Unknown Source)
at com.sap.mdm.data.commands.RetrieveLimitedRecordsCommand.execute(Unknown Source)
at com.sap.mdm.apitutorial.lesson2.RecordsDisplay.getDisplayRecords(RecordsDisplay.java:303)
at org.apache.jsp.Sample_jsp._jspService(Sample_jsp.java:190)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:738)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:526)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:534)
If anyonw worked on this concept..., please provide me the solution
Regards
Praveen kWhich version are you using? Can you please try and narrow down to the offending field? You can do this by limiting the fields you provide to ResultDefinition.
-
For some business requirements, users want to extract values from a multi-value enabled lookup column
and add items to another list based on each separate value. In contrast, others want to find duplicate values in the list and merge associated values to a multi-value enabled column and then
add items to another list based on the merged value. All of these can be achieved using SharePoint Designer 2013 Workflow.
How to extract values from a multi-value enabled lookup column and add items to another list based
on each separate value using SharePoint Designer 2013.
Important actions: Loop Shape; Utility Actions
Three scenarios
Things to note
Steps to create Workflow
How to merge values to a multi-value enabled column and add item to another list based on the
merged value using SharePoint Designer 2013.
Important actions: Call HTTP Web Service; Build Dictionary
Things to note
Steps to create Workflow
How to
extract values from a multi-value enabled lookup column and
add items to another list based on each separate value using SharePoint Designer 2013.
For example, they have three lists as below. They want to
extract values from the Destinations column
in Lookup2 and add items to Lookup3 based on each country and set Title to current item: ID.
Lookup1:
Title (Single line of text)
Lookup2:
Title (Single line of text), Destinations (Lookup; Get information from: Lookup1 in Title column).\
Lookup3:
Title (Single line of text), Country (Single line of text).
Important action
1. Loop Shape: SharePoint Designer 2013 support two types of loops: loop n times and loop with condition.
Loops must also conform to the following rules:
Loops must be within a stage, and stages cannot be within a loop.
Steps may be within a loop.
Loops may have only one entry and one exit point.
2. Utility Actions: It contains many actions, such as ‘Extract Substring from Index of String’ and ‘Find substring in String’.
Three scenarios
We need to loop through the string returned from the look up column and look for commas. There are three
scenarios:
1. No comma but string is non-empty so there is only one country.
2. At least one comma so there is at least two or more countries to loop.
3. In the loop we have consumed all the commas so we have found the last country.
Things to note
There are two things to note:
1. "Find string in string (output to Variable:index)" will return -1 if doesn't find
the searched for string.
2. In the opening statement "Set Variable: Countries to Current Item:Destinations" set the return
field as "Lookup Values, Comma Delimited".
Steps to create Workflow
Create a custom list named Lookup1.
Create a custom list named Lookup2, add column: Destinations (Lookup; Get information from: Lookup1 in Title column).
Create a custom list named Lookup3, add column: Country (Single line of text).
Create a workflow associated to Lookup2.
Add conditions and actions:
Start the workflow automatically when an item is created.
Add item to Lookup2, then workflow will be started automatically and create multiple items to lookup3.
See the below in workflow History List:
How to merge values to a multi-value enabled column and add item to another list based on the
merged value using SharePoint Designer 2013
For example, they have three lists as below. They want to find duplicate values in the Title column in
Lookup3 and merge country column to a multi-value enabled column and then add item to lookup2 and set the Title to Current Item: Title.
Lookup1:
Title (Single line of text)
Lookup3:
Title (Single line of text), Country (Single line of text).
Lookup2:
Title (Single line of text), Test (Single line of text).
Important actions
"Call HTTP Web Service"
action: In SharePoint 2013 workflows, we can call a web service using a new action introduced in SharePoint 2013 named Call HTTP Web Service. This action
is flexible and allows you to make simple calls to a web service easily, or, if needed, you can create more complex calls using HTTP verbs as well as allowing you to add HTTP headers.
“Build Dictionary"
action:
The Dictionary variable type is a new variable type in the SharePoint 2013 Workflow.
The following are the three actions specifically designed for the Dictionary variable type: Build Dictionary, Count Items in a Dictionary and Get an Item from a Dictionary.
The "Call HTTP Web Service" workflow action would be useless without the new "Dictionary" workflow action.
Things to note
The
HTTP URI is set to https://sitename/_api/web/lists/GetByTitle('listname')/items?$orderby=Id%20desc and the HTTP method is set to “GET”. Then the list will be sort by Id in descending order.
Use Get
d/results(0)/Id form
Variable: ResponseContent (Output to
Variable: maxid) to get the Max ID.
Use Set
Variable: minid to Current List:ID to get the Min ID.
Use Copy from
Variable: destianation , starting at
1 (Output to
Variable: destianation) to remove the space.
Steps to create Workflow
Create a custom list named Lookup1.
Create a custom list named Lookup2, add column: Test (Single line of text).
Create a custom list named Lookup3, add column: Country (Single line of text).
Create a workflow associated to Lookup3.
Add a new "Build Dictionary" action
to define the http request header:
Add a Call HTTP Web Serviceaction, click on
this and paste your http request.
To associate the
RequestHeader variable, select the Call action property,
set the
RequestHeaders property to
RequestHeader:
In the Call action, click on
response and associate the response to a new
variable: ResponseContent (of type Dictionary).
After the Call action add Get item from Dictionary action to get the Max ID.
Add Set Workflow Variable action to get the Min ID.
Add Loop Shape (Loop with Condition) to get all the duplicate titles and integrate them to a string.
Create item in Lookup2.
The final Stage should look like this:
Start the workflow automatically when an item is created.
Add item to Lookup3, then workflow will be started automatically and create item to lookup2.
See the below in workflow History List:
References
SharePoint Designer 2013 - Extracting values from a multi-value enabled lookup column into a dictionary as separate items:
http://social.technet.microsoft.com/Forums/en-US/97d34468-1b53-4741-88b0-958472f8ca9a/sharepoint-designer-2013-extracting-values-from-a-multivalue-enabled-lookup-column-into-a
Workflow actions quick reference (SharePoint 2013 Workflow platform):
http://msdn.microsoft.com/en-us/library/jj164026.aspx
Understanding Dictionary actions in SharePoint Designer 2013:
http://msdn.microsoft.com/en-us/library/office/jj554504.aspx
Working with Web Services in SharePoint 2013 Workflows using SharePoint Designer 2013:
http://msdn.microsoft.com/en-us/library/office/dn567558.aspx
Calling the SharePoint 2013 Rest API from a SharePoint Designer Workflow:
http://sergeluca.wordpress.com/2013/04/09/calling-the-sharepoint-2013-rest-api-from-a-sharepoint-designer-workflow/GREAT info, but it may be helpful to note that when replacing a portion of the variable "Countries" with a whitespace character, you may cause the workflow to fail in a few specific cases (certain lookup fields will not accept this and will automatically
cancel). I only found this out when recreating your workflow on a similar, but much more complex list set.
To resolve this issue, I used another utility action (Extract Substring from Index of List) to clear out the whitespace. I configured it as "Copy from
Variable: Countries, starting at
1 (Output to Variable: Countries), which takes care of this issue in those few cases.
Otherwise, WOW! AWESOME JOB! Thanks! :) -
Reading values from lookup columns through custom workflow in SharePoint 2013
We are able to read the values of text, number columns through custom workflow (via coding) in SharePoint 2013. However, we are not able to read values from lookup columns. So, request anyone to provide help on this.
Thanks & regards,
AdityaHi,
According to your post, my understanding is that you want to read values from lookup columns through custom workflow in SharePoint 2013.
Since the workflow just doesn't get lookup fields, let's give it something static to work with instead. If we can capture the ID of the lookup field and store that as a static value in our list, the workflow can happily use that to look up our related.
For more information, you can refer to:
SharePoint 2013 Workflows and Lookup Columns
Thanks,
Linda Li
Forum Support
Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Subscriber Support, contact
[email protected]
Linda Li
TechNet Community Support -
how do I make a drop down list of text in numbers as it is made in the example spreadsheet for comparing cars for buying where you can choose a value from a dropdown list for each car?
Where is this example spreadsheet? Without seeing it I can only guess at what you are asking.
To make a drop-down list (a pop-up menu in Numbers-speak), format the cell as a pop-up then edit and add to the list of items.
If the example spreadsheet is pulling in a dollar value based on what car you chose in the pop-up, it is probably using LOOKUP or one of the other lookup functions, getting the information from another table (a lookup table). If, instead, these dollar values are what you are choosing in the pop-up, then you need to create a pop-up with these values in it.
The Help menu includes a link to a page where you can download the Numbers Users Manual. It also has a link to the Formulas and Functions guide. Both are useful to new users. -
Syndicating Key mapping value from lookup table
Hi Experts,
I want to Syndicating Remote Key value from lookup table as per the remote system.
In syndicator, if I map destination field to the remote key of the lookup table, I am getting blank value.Hi Mrinmoy,
kindly check in the Data Manger whether have you maintained Remote keys for the lookup table. If yes then choose the specified remote system from Remote key override fields under Map properties in the syndicator.
Incase you cant find the remote system in the "remote key override" field for which remote key is assigned in Data manager, then you need to check the Type (outbound) of the remote system in Console admin node. Because only those Remote systems type set as Outbound can been found in Remote key Override in the syndicator.
After choosing the remote key you need to map the destination field with Remote key value as shown in the below image.
Regards
Rahul -
Set lookup value from another item
Hi!
I add to my list in SP 2013 new column like type Lookup field and select item from another document library
and display field select "Title". How i can set this filed value for new item from document library item?Hi AllXander,
From your description, my understanding is that you want to set lookup field value with C# CSOM.
You could use method "FieldLookupValue()". Please refer to this code below to set lookup field value when add an new item to a list:
// replace your site URL
using (ClientContext context = new ClientContext("http://sp/sites/sp2013"))
// replace your user, password and domain
context.Credentials = new NetworkCredential("Administrator", "Access1", "contoso");
// the library that you get value for the lookup field
List list = context.Web.Lists.GetByTitle("Department");
context.Load(list);
context.ExecuteQuery();
CamlQuery query = new CamlQuery();
query.ViewXml = "<View/>";
ListItemCollection allContacts = list.GetItems(query);
context.Load(allContacts);
context.ExecuteQuery();
foreach (ListItem item in allContacts)
// replace the id that you want to set value to the lookup filed
if (item.Id == 1)
// replace the list title with your list that you want to add the item
List oList = context.Web.Lists.GetByTitle("Employee");
ListItemCreationInformation itemCreateInfo = new ListItemCreationInformation();
ListItem oListItem = oList.AddItem(itemCreateInfo);
oListItem["Title"] = "My New Item!";
// set the lookup field value
FieldLookupValue lookup = new FieldLookupValue();
lookup.LookupId = item.Id;
oListItem["Department"] = lookup;
oListItem.Update();
context.ExecuteQuery();
You could refer to this article about creating/updating/deleting a new item with C# CSOM:
http://www.c-sharpcorner.com/UploadFile/sagarp/create-update-delete-a-list-using-client-object-model-cso/
You could refer to this article about updating multi-value lookup column:
https://sunbin0704.wordpress.com/2013/10/11/update-multi-value-lookup-column-values-in-sharepoint-2010-using-managed-csom/
Best Regards,
Vincent Han
TechNet Community Support
Please remember to mark the replies as answers if they help, and unmark the answers if they provide no help. If you have feedback for TechNet Support, contact
[email protected]. -
Using a lookup for mapping program to retrieve the specific value
Hi All,
I have a scenario like I need to use a lookup for mapping program to retrieve the specific value based on the input parameters.
Here I have got some rough idea like
1. Creation of java program to connect the DB table and access the values, Import this java program as archive into XI.
2. Creation of user defined function to use the above java program
3. Include the user defined function in the interface mapping.
Here I feel it needs some more info to complete this scenario, so can anyone provide the step by step procedure for the above scenario.
Thanks in advance.
Vijay.Hi Vijay,
Basically you have embed Database lookup code in the UDF. For all kind of Lookups refer to below links..
Lookup - /people/alessandro.guarneri/blog/2006/03/27/sap-xi-lookup-api-the-killer
DB lookup - /people/siva.maranani/blog/2005/08/23/lookup146s-in-xi-made-simpler
SOAP Lookup - /people/bhavesh.kantilal/blog/2006/11/20/webservice-calls-from-a-user-defined-function
http://help.sap.com/saphelp_nw04/helpdata/en/cf/406642ea59c753e10000000a1550b0
Lookups in XI made simpler - /people/siva.maranani/blog/2005/08/23/lookup146s-in-xi-made-simpler
How to check JDBC SQL Query Syntax and verify the query results inside a User Defined Function of the Lookup API -
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
/people/siva.maranani/blog/2005/08/23/lookup146s-in-xi-made-simpler
http://help.sap.com/saphelp_nw04/helpdata/en/cf/406642ea59c753e10000000a1550b0/content.htm
/people/sap.user72/blog/2005/12/06/optimizing-lookups-in-xi
Lookups with XSLT - https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/8e7daa90-0201-0010-9499-cd347ffbbf72
/people/sravya.talanki2/blog
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/05a3d62e-0a01-0010-14bc-adc8efd4ee14
How we have to create the lookups?
Check this weblogs with some screenshots on how to achieve this:
/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
/people/sap.user72/blog/2005/12/06/optimizing-lookups-in-xi
/people/morten.wittrock/blog/2006/03/30/wrapping-your-mapping-lookup-api-code-in-easy-to-use-java-classes
Ranjeet Singh. -
Hi,
"Report Builder is a report authoring environment for business users who prefer to work in the Microsoft Office environment.
You work with one report at a time. You can modify a published report directly from a report server. You can quickly build a report by adding items from the Report Part Gallery provided by report designers from your organization." - As mentioned
on TechNet.
I wonder how a non-technical business analyst can use Report Builder 3 to create ad-hoc reports/analysis with list of parameters based on other data sets.
Do they need to learn TSQL or how to add and link parameter in Report Builder? then How they can add parameter into a report. Not sure what i am missing from whole idea behind Report builder then?
I have SQL Server 2012 STD and Report Builder 3.0 and want to train non-technical users to create reports as per their need without asking to IT department.
Everything seems simple and working except parameters with list of values e.g. Sales year List, Sales Month List, Gender etc. etc.
So how they can configure parameters based on Other data sets?
Workaround in my mind is to create a report with most of columns and add most frequent parameters based on other data sets and then non-technical user modify that report according to their needs but that way its still restricting users to
a set of defined reports?
I want functionality like "Excel Power view parameters" into report builder which is driven from source data and which is only available Excel 2013 onward which most of people don't have yet.
So how to use Report Builder. Any other thoughts or workaround or guide me the purpose of Report Builder, please let me know.
Many thanks and Kind Regards,
For quick review of new features, try virtual labs: http://msdn.microsoft.com/en-us/aa570323Hi Asam,
If we want to create a parameter depend on another dataset, we can additional create or add the dataset, embedded or shared, that has a query that contains query variables. Then use the option that “Get values from a
query” to get available values. For more details, please see:http://msdn.microsoft.com/en-us/library/dd283107.aspx
http://msdn.microsoft.com/en-us/library/dd220464.aspx
As to the Report Builder features, we can refer to the following articles:http://technet.microsoft.com/en-us/library/hh213578.aspx
http://technet.microsoft.com/en-us/library/hh965699.aspx
Hope this helps.
Thanks,
Katherine Xiong
Katherine Xiong
TechNet Community Support -
Store all values from updateable report on clientside for later use
apex 4.2 , 11xe
hello,
it is possible to store all values from an updateable report to something like an cache BEFORE sent it to DB ?
Background:
i have an modified updateable report ,look the jpg
http://www10.pic-upload.de/25.06.13/3zq5wr23awwg.jpg
updateable report have ever 29 rows. as example i make time entrys for an employee. very often the next employee have the same timeentrys. now iam thinking about to make the entrys for the first employee, then click a button to store the values from ALL cells into somting like a javascript cache or jquery.data() . when i pull another employee from lov i have a fresh empty report( with 29 rows) and now i want to call the data back from cache to the cells (with another button). the cache shouldnt be destroyed when refresh the page,cause there is a page refresh when pull another employee from lov.
is it possible to store all cell values(empty or not) from report all in one?
what is the best and simplest way ?
good would be an example for the code or method i should use.
or is somthing inside apex i could use for that. i looked in apex.api but didnt found something.
my report based on a view with iof trigger and apex collection.
greets/christianthx for answer jarola and sorry for my bad english.
apex collection will not work.
let me explain why not and i think something like javascript/jquery is better for that.
there is a table MAZEIT and i have this updateable report. when i select an employee from lov, a collection will be created. the collection look in MAZEIT ,perhaps there are real timeentrys, in this case the collection will be modified and give me 29 rows,some are filled. or there are no real entrys and the collection give me 29 empty rows.
here my report sql:
select
"HID_SEQ_ID",
"DATUM",
"WOTAG",
"WOTAGNR",
"KNDABT_ID",
"ZEIT",
"BEGINN",
"ENDE",
"PAUSE",
"ZUSCHLAG",
"BEM",
"MELDUNG"
from "#OWNER#"."V_COLL_MAZEIT"
here the v_coll_mazeit (view) sql
CREATE OR REPLACE VIEW V_COLL_MAZEIT AS
SELECT seq_id HID_SEQ_ID -- APEX_COLLECTIONS.SEQ_ID
,C001 HID_MAZEIT_ID -- MAZEIT.ID
,C002 DATUM -- Datum DD.MM.YYYY
,C003 WOTAG -- Wochentag Mo/Di/...
,C004 WOTAGNR -- Wochentag 1/2/...
,C005 KNDABT_ID -- Abteilung
,C006 ZEIT -- Zeit in HH24:MI
,C007 BEGINN -- Beginn in HH24:MI
,C008 ENDE -- Ende in HH24:MI
,C009 PAUSE -- Pause in HH24:MI
,C010 ZUSCHLAG
,C011 BEM
,C040 HID_MANDANT_ID
,C041 HID_KND_ID
,C042 HID_MA_ID
,C043 HID_KW
,C048 HID_HASH4CHECK -- Hash für Check auf Änderungen MAZEIT
,C049 HID_SORTIER -- für ORDER BY hier Arbeitsbeginn
,C050 MELDUNG -- für FehlerMeldungen
FROM APEX_COLLECTIONS
WHERE COLLECTION_NAME='V_COLL_MAZEIT'
ORDER BY HID_SORTIER;
here the trigger (iof) from v_coll_mazeit
CREATE OR REPLACE TRIGGER "V_COLL_MAZEIT_IOF_U_TRG"
INSTEAD OF UPDATE ON V_COLL_MAZEIT
FOR EACH ROW
BEGIN
--RAISE_APPLICATION_ERROR(-20004,'NIX DA');
CM_MEAT.V_COLL_MAZEIT_IOF_U_TRG(
:NEW.HID_SEQ_ID
,:NEW.HID_MAZEIT_ID
,:NEW.DATUM
,:NEW.WOTAG
,:NEW.WOTAGNR
,:NEW.KNDABT_ID
,:NEW.ZEIT
,:NEW.BEGINN
,:NEW.ENDE
,:NEW.PAUSE
,:NEW.ZUSCHLAG
,:NEW.BEM
,:NEW.HID_HASH4CHECK
,:NEW.HID_SORTIER
,:NEW.MELDUNG
END V_COLL_MAZEIT_IOF_U_TRG;
and here a package procedure when i select an employee:
PROCEDURE V_COLL_MAZEIT_PROC(
iAction IN PLS_INTEGER,
iDatum IN DATE DEFAULT SYSDATE,
iMandantId IN MAZEIT.MANDANT_ID%TYPE,
iKndId IN MAZEIT.KND_ID%TYPE,
iMaId IN MAZEIT.MA_ID%TYPE,
oCollName OUT VARCHAR2)
IS
TK_FUNC_NAME CONSTANT USER_OBJECTS.OBJECT_NAME%TYPE := 'V_COLL_MAZEIT_PROC';
TK_COLL_NAME CONSTANT APEX_COLLECTIONS.COLLECTION_NAME%TYPE := 'V_COLL_MAZEIT';
TK_MD5 CONSTANT VARCHAR2(2) := 'NO';
TYPE t_Tage_TAB IS TABLE OF DATE INDEX BY BINARY_INTEGER;
TYPE t_TageVC_TAB IS TABLE OF VARCHAR2(8) INDEX BY BINARY_INTEGER;
TYPE t_TageI_TAB IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER;
tTage t_Tage_TAB;
tTageVC t_TageVC_TAB;
tTageI t_TageI_TAB;
vDatum DATE;
vDatumCh VARCHAR2(8);
vKW4Db MAZEIT.KW%TYPE;
vI PLS_INTEGER := 0;
vAnz PLS_INTEGER := 0;
BEGIN
FOR rec IN (SELECT * FROM NLS_SESSION_PARAMETERS)
LOOP
InsProto(rec.PARAMETER||'=['||rec.VALUE||']',
QK_PACK_NAME,TK_FUNC_NAME);
END LOOP;
CMT.InsProto('iAction='||iAction||', iDatum='||iDatum||', iMandantId='||iMandantId||', iKndId='||iKndId||', iMaId'||iMaId,
QK_PACK_NAME,TK_FUNC_NAME);
oCollName := TK_COLL_NAME;
IF iAction=0 THEN -- löschen
IF APEX_COLLECTION.COLLECTION_EXISTS(p_collection_name=>TK_COLL_NAME) THEN
APEX_COLLECTION.TRUNCATE_COLLECTION(TK_COLL_NAME);
APEX_COLLECTION.DELETE_COLLECTION(TK_COLL_NAME);
END IF;
|| Säubern und anlegen
ELSIF iAction=1 THEN
IF APEX_COLLECTION.COLLECTION_EXISTS(p_collection_name=>TK_COLL_NAME) THEN
APEX_COLLECTION.TRUNCATE_COLLECTION(p_collection_name=>TK_COLL_NAME);
ELSE
APEX_COLLECTION.CREATE_COLLECTION(p_collection_name=>TK_COLL_NAME);
END IF;
vDatum := NVL(iDATUM,SYSDATE);
vDatum := TO_DATE(TO_CHAR(vDatum,'YYYYMMDD')||'000000','YYYYMMDDHH24MISS');
vKW4Db := GetKW4Db(vDatum);
tTage(1) := CMT.GetMonday(vDATUM,0);
SELECT tTage(1) + 1DAY,tTage(1) + 2DAY,tTage(1) + 3DAY,tTage(1) + 4DAY,tTage(1) + 5DAY,tTage(1) + 6DAY
INTO tTage(2),tTage(3),tTage(4),tTage(5),tTage(6),tTage(7)
FROM DUAL;
FOR i IN 1..7 LOOP tTageI(i) := 0; tTageVC(i) := TO_CHAR(tTage(i),'YYYYMMDD'); END LOOP;
-- erste Zeile enthält Default-Werte
APEX_COLLECTION.add_member( p_COLLECTION_name=> TK_COLL_NAME,p_generate_md5=>TK_MD5
,P_C001 => 0 -- MAZEIT.ID
,P_C002 => '<b>Vorgabe</b>' -- Datum DD.MM.YYYY
,P_C003 => ' ' -- Wochentag Mo/Di/...
,P_C004 => ' ' -- Wochentag 1/2/...
,P_C005 => 0 -- MAZEIT.KNDABT_ID
,P_C006 => NULL -- Zeit in HH24:MI
,P_C007 => NULL -- Beginn in HH24:MI
,P_C008 => NULL -- Ende in HH24:MI
,P_C009 => NULL -- Pause in HH24:MI
,P_C010 => NULL -- Zuschlag
,P_C011 => NULL -- Bem
,P_C040 => iMandantId
,P_C041 => iKndId
,P_C042 => iMaId
,P_C043 => vKW4Db
,P_C048 => '-1' -- Hash für Check auf Änderungen MAZEIT
,P_C049 => ' ' -- für ORDER BY hier Arbeitsbeginn
,P_C050 => NULL
FOR rec IN (SELECT z.*,
TO_CHAR(DBMS_UTILITY.get_hash_value(
z.id||'|'||
z.mandant_id||'|'||
z.majob_id||'|'||
z.ma_id||'|'||
z.knd_id||'|'||
z.kndabt_id||'|'||
z.kw||'|'||
z.arb_beg||'|'||
z.arb_end||'|'||
z.zeit||'|'||
z.pause||'|'||
z.zuschlag||'|'||
z.stk_anz||'|'||
z.stk_kg||'|'||
z.stk_gemuur||'|'||
z.stk_bezahlt||'|'||
z.bem||'|'||
z.ART4RECH
,1,POWER(2,30))) AS HID_HASH4CHECK
FROM MAZEIT z
WHERE z.MANDANT_ID=iMandantId AND
z.KND_ID=iKndId AND
z.MA_ID=iMaId AND
z.KW = GetKW4Db(tTage(1)) AND
z.ART4RECH IN (CMT.GetTCVNum('MAZEIT_ART4RECH_STD'),CMT.GetTCVNum('MAZEIT_ART4RECH_STK'),CMT.GetTCVNum('MAZEIT_ART4RECH_KG'))
ORDER BY z.ARB_BEG)
LOOP
IF rec.ZUSCHLAG=0 THEN
rec.ZUSCHLAG := NULL;
END IF;
vI := 0;
vDatumCh := TO_CHAR(rec.ARB_BEG,'YYYYMMDD');
FOR i IN 1..7 LOOP
IF tTageVC(i)=vDatumCh THEN
tTageI(i) := tTageI(i) + 1;
vI := i;
EXIT;
END IF;
END LOOP;
-- Stücklohn kommt an den Anfang der Bemerkung gekennzeichnet mit QK_COLL_MAZEIT_STK_KZ ursprüngliche Bemekuung nach dem :
rec.BEM := RTRIM(rec.BEM);
IF rec.ART4RECH = CMT.GetTCVNum('MAZEIT_ART4RECH_STK') THEN
DECLARE
vBem MAZEIT.BEM%TYPE := QK_COLL_MAZEIT_STK_KZ;
BEGIN
IF rec.STK_BEZAHLT > 0. THEN
vBem := QK_COLL_MAZEIT_STK_KZ||TO_CHAR(rec.stk_bezahlt,'FM9999D00');
ELSIF rec.STK_ANZ > 0 THEN
vBem := QK_COLL_MAZEIT_STA_KZ||TO_CHAR(rec.stk_anz,'FM9999');
END IF;
IF rec.BEM IS NULL THEN
rec.BEM := vBem;
ELSE
rec.BEM := SUBSTR(vBem||':'||rec.BEM,1,CMT.GetColLen('MAZEIT','BEM'));
END IF;
END;
ELSIF rec.ART4RECH = CMT.GetTCVNum('MAZEIT_ART4RECH_KG') THEN
DECLARE
vBem MAZEIT.BEM%TYPE := QK_COLL_MAZEIT_KG_KZ;
BEGIN
IF rec.STK_KG > 0. THEN
vBem := QK_COLL_MAZEIT_KG_KZ||TO_CHAR(rec.stk_kg,'FM999999D000');
END IF;
IF rec.BEM IS NULL THEN
rec.BEM := vBem;
ELSE
rec.BEM := SUBSTR(vBem||':'||rec.BEM,1,CMT.GetColLen('MAZEIT','BEM'));
END IF;
END;
END IF;
IF vI>0 THEN
IF tTageI(vI)=1 THEN
APEX_COLLECTION.add_member( p_COLLECTION_name=> TK_COLL_NAME,p_generate_md5=>TK_MD5
,P_C001 => rec.id -- MAZEIT.ID
,P_C002 => TO_CHAR(rec.ARB_BEG,'DD.MM.YYYY') -- Datum DD.MM.YYYY
,P_C003 => CMT.WoTag(rec.ARB_BEG) -- Wochentag Mo/Di/...
,P_C004 => CMT.WoTagNr(rec.ARB_BEG) -- Wochentag 1/2/...
,P_C005 => rec.KNDABT_ID -- MAZEIT.KNDABT_ID
,P_C006 => CMT.Minuten2InduZeit(rec.ZEIT) -- Zeit als InduZeit in HH24,MI
,P_C007 => TO_CHAR(rec.ARB_BEG,'HH24:MI') -- Beginn in HH24:MI
,P_C008 => TO_CHAR(rec.ARB_END,'HH24:MI') -- Ende in HH24:MI
,P_C009 => CMT.Minuten2HHMI(rec.PAUSE,TRUE) -- Pause in HH24:MI
,P_C010 => rec.ZUSCHLAG
,P_C011 => rec.BEM
,P_C040 => iMandantId
,P_C041 => iKndId
,P_C042 => iMaId
,P_C043 => vKW4Db
,P_C048 => rec.HID_HASH4CHECK -- Hash für Check auf Änderungen MAZEIT
,P_C049 => TO_CHAR(rec.ARB_BEG,'YYYYMMDDHH24MI') -- für ORDER BY hier Arbeitsbeginn
,P_C050 => NULL -- für FehlerMeldungen
ELSE
APEX_COLLECTION.add_member( p_COLLECTION_name=> TK_COLL_NAME,p_generate_md5=>TK_MD5
,P_C001 => rec.id -- MAZEIT.ID
,P_C002 => NULL -- Datum DD.MM.YYYY
,P_C003 => NULL -- Wochentag Mo/Di/...
,P_C004 => NULL -- Wochentag 1/2/...
,P_C005 => rec.KNDABT_ID -- MAZEIT.KNDABT_ID
,P_C006 => CMT.Minuten2InduZeit(rec.ZEIT) -- Zeit als InduZeit in HH24,MI
,P_C007 => TO_CHAR(rec.ARB_BEG,'HH24:MI') -- Beginn in HH24:MI
,P_C008 => TO_CHAR(rec.ARB_END,'HH24:MI') -- Ende in HH24:MI
,P_C009 => CMT.Minuten2HHMI(rec.PAUSE,TRUE) -- Pause in HH24:MI
,P_C010 => rec.ZUSCHLAG
,P_C011 => rec.BEM
,P_C040 => iMandantId
,P_C041 => iKndId
,P_C042 => iMaId
,P_C043 => vKW4Db
,P_C048 => rec.HID_HASH4CHECK -- Hash für Check auf Änderungen MAZEIT
,P_C049 => TO_CHAR(rec.ARB_BEG,'YYYYMMDDHH24MI') -- für ORDER BY hier Arbeitsbeginn
,P_C050 => NULL -- für FehlerMeldungen
END IF;
vAnz := vAnz + 1;
END IF;
END LOOP;
FOR i IN 1..7 LOOP
IF tTageI(i)<4 THEN
FOR j IN tTageI(i)+1..4 LOOP
IF j=1 THEN
APEX_COLLECTION.add_member( p_COLLECTION_name=> TK_COLL_NAME,p_generate_md5=>TK_MD5
,P_C001 => -1 -- MAZEIT.ID
,P_C002 => TO_CHAR(tTage(i),'DD.MM.YYYY') -- Datum DD.MM.YYYY
,P_C003 => CMT.WoTag(tTage(i)) -- Wochentag Mo/Di/...
,P_C004 => CMT.WoTagNr(tTage(i)) -- Wochentag 1/2/...
,P_C005 => 0 -- MAZEIT.KNDABT_ID
--,P_C006 => Minuten2InduZeit(0) -- Zeit als InduZeit in HH24,MI
,P_C006 => NULL -- Zeit als InduZeit in HH24,MI
--,P_C007 => '06:30' -- Beginn in HH24:MI
,P_C007 => NULL -- Beginn in HH24:MI
,P_C008 => NULL -- Ende in HH24:MI
--,P_C009 => Minuten2HHMI(0) -- Pause in HH24:MI
,P_C009 => NULL -- Pause in HH24:MI
,P_C010 => NULL -- Zuschlag
,P_C011 => NULL -- Bem
,P_C040 => iMandantId
,P_C041 => iKndId
,P_C042 => iMaId
,P_C043 => vKW4Db
,P_C048 => '-1' -- Hash für Check auf Änderungen MAZEIT
,P_C049 => TO_CHAR(tTage(i),'YYYYMMDD')||'99'||TO_CHAR(j,'FM09') -- für ORDER BY hier Arbeitsbeginn
,P_C050 => NULL
ELSE -- auffüllen
APEX_COLLECTION.add_member( p_COLLECTION_name=> TK_COLL_NAME,p_generate_md5=>TK_MD5
,P_C001 => -1 -- MAZEIT.ID
,P_C002 => NULL -- Datum DD.MM.YYYY
,P_C003 => NULL -- Wochentag Mo/Di/...
,P_C004 => NULL -- Wochentag 1/2/...
,P_C005 => 0 -- MAZEIT.KNDABT_ID
--,P_C006 => Minuten2HHMI(0) -- Zeit in HH24:MI
,P_C006 => NULL -- Zeit in HH24:MI
--,P_C007 => '06:30' -- Beginn in HH24:MI
,P_C007 => NULL -- Beginn in HH24:MI
,P_C008 => NULL -- Ende in HH24:MI
--,P_C009 => Minuten2InduZeit(0) -- Pause als InduZeit in HH24,MI
,P_C009 => NULL -- Pause als InduZeit in HH24,MI
,P_C010 => NULL -- Zuschlag
,P_C011 => NULL -- Bem
,P_C040 => iMandantId
,P_C041 => iKndId
,P_C042 => iMaId
,P_C043 => vKW4Db
,P_C048 => '-1' -- Hash für Check auf Änderungen MAZEIT
,P_C049 => TO_CHAR(tTage(i),'YYYYMMDD')||'99'||TO_CHAR(j,'FM09') -- für ORDER BY hier Arbeitsbeginn
,P_C050 => NULL
END IF;
END LOOP;
END IF;
END LOOP;
vI := 0;
FOR rec IN (SELECT * FROM V_COLL_MAZEIT) LOOP
vI := vI + 1;
CMT.InsProto('i='||LPAD(TO_CHAR(vI),3,' ')||':'||
rec.hid_seq_id||'|'||
rec.hid_mazeit_id||'|'||
rec.datum||'|'||
rec.wotag||'|'||
rec.wotagnr||'|'||
rec.zeit||'|'||
rec.beginn||'|'||
rec.ende||'|'||
rec.pause||'|'||
rec.zuschlag||'|'||
rec.bem||'|'||
rec.hid_hash4check||'|'||
rec.hid_sortier||'|'||
rec.meldung
,QK_PACK_NAME,TK_FUNC_NAME);
END LOOP;
ELSE
raise_Application_ERROR(-20100,'kann ich doch nicht Action='||TO_CHAR(iAction));
END IF;
END V_COLL_MAZEIT_PROC;
and here the procedure (look for real entrys in table)
PROCEDURE V_COLL_MAZEIT_IOF_U_TRG(
iHID_SEQ_ID apex_collections.seq_id%TYPE
,iHID_MAZEIT_ID apex_collections.C001%TYPE
,iDATUM apex_collections.C002%TYPE
,iWOTAG apex_collections.C003%TYPE
,iWOTAGNR apex_collections.C004%TYPE
,iKNDABT_ID apex_collections.C005%TYPE
,iZEIT apex_collections.C006%TYPE
,iBEGINN apex_collections.C007%TYPE
,iENDE apex_collections.C008%TYPE
,iPAUSE apex_collections.C009%TYPE
,iZUSCHLAG apex_collections.C010%TYPE
,iBEM apex_collections.C011%TYPE
,iHID_HASH4CHECK apex_collections.C048%TYPE
,iHID_SORTIER apex_collections.C049%TYPE
,iMELDUNG apex_collections.C050%TYPE
IS
PRAGMA AUTONOMOUS_TRANSACTION;
TK_FUNC_NAME CONSTANT USER_OBJECTS.OBJECT_NAME%TYPE := 'V_COLL_MAZEIT_IOF_U_TRG';
TK_COLL_NAME CONSTANT APEX_COLLECTIONS.COLLECTION_NAME%TYPE := 'V_COLL_MAZEIT';
vRcString VARCHAR2(2000) := NULL;
rCollMaZeit0 V_COLL_MAZEIT%ROWTYPE;
rCollMaZeit V_COLL_MAZEIT%ROWTYPE;
rMaZeit MAZEIT%ROWTYPE;
vHash4Check PLS_INTEGER;
vURow ROWID;
BEGIN
CMT.InsProto(
ihid_seq_id||'|'||
ihid_mazeit_id||'|'||
idatum||'|'||
iwotag||'|'||
iwotagnr||'|'||
iKNDABT_ID||'|'||
izeit||'|'||
ibeginn||'|'||
iende||'|'||
ipause||'|'||
izuschlag||'|'||
ibem||'|'||
ihid_hash4check||'|'||
ihid_sortier||'|'||
imeldung
,QK_PACK_NAME,TK_FUNC_NAME);
-- VIEW-ZeitZeile lesen
SELECT t.* INTO rCollMaZeit
FROM V_COLL_MAZEIT t
WHERE t.HID_SEQ_ID = iHID_SEQ_ID;
IF iHID_MAZEIT_ID!=rCollMaZeit.HID_MAZEIT_ID OR
iHID_HASH4CHECK!=rCollMaZeit.HID_HASH4CHECK THEN
vRcString := 'Daten seit Anzeige verändert';
GOTO MARK_TRANSEND;
END IF;
-- VIEW-ZeitDefaultZeile setzen
IF rCollMaZeit.HID_MAZEIT_ID=0 THEN
--,P_C005 => 0 -- MAZEIT.KNDABT_ID
--,P_C006 => NULL -- Zeit in HH24,MI
--,P_C007 => NULL -- Beginn in HH24:MI
--,P_C008 => NULL -- Ende in HH24:MI
--,P_C009 => NULL -- Pause in HH24,MI
--,P_C010 => NULL -- Zuschlag
--,P_C011 => NULL -- Bem
APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
,p_attr_number=>5, p_attr_value=>iKNDABT_ID);
APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
,p_attr_number=>6, p_attr_value=>iZEIT);
APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
,p_attr_number=>7, p_attr_value=>iBEGINN);
APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
,p_attr_number=>8, p_attr_value=>iENDE);
APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
,p_attr_number=>9, p_attr_value=>iPAUSE);
APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
,p_attr_number=>10, p_attr_value=>iZUSCHLAG);
APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
,p_attr_number=>11, p_attr_value=>iBEM);
IF iBEM LIKE '#%' THEN -- Verteilen
-- VIEW-ZeitDefaultZeile lesen
SELECT t.* INTO rCollMaZeit0
FROM V_COLL_MAZEIT t
WHERE t.HID_MAZEIT_ID = 0;
rCollMaZeit0.BEM := SUBSTR(iBEM,2);
DECLARE
vAnz PLS_INTEGER := 0;
nVert MAZEIT.ZEIT%TYPE;
nZeitMinuten MAZEIT.ZEIT%TYPE;
nDiffMinuten MAZEIT.ZEIT%TYPE;
BEGIN
SELECT NVL(COUNT(*),0) INTO vAnz
FROM V_COLL_MAZEIT t
WHERE t.HID_MAZEIT_ID = -1 AND
t.DATUM IS NOT NULL AND
t.WOTAGNR IN ('1','2','3','4','5'); -- nur Mo-Fr
IF vAnz<=0 THEN
vRcString := 'Verteilen nicht möglich keine freien Tage gefunden';
ELSIF TRIM(iZEIT) IS NULL OR TRIM(iZEIT) IN ('00,00','0,00','0',',00',',0','0,','0,0') THEN
vRcString := 'Verteilen von Null Minuten nicht möglich';
ELSE
nDiffMinuten := 0;
nZeitMinuten := CMT.InduZeit2MinutenNum(TRIM(iZEIT));
IF nZeitMinuten>(vAnz*1440) THEN
vRcString := 'Zu verteilende Zeit zu groß';
ELSIF vAnz>1 THEN
nVert := FLOOR(nZeitMinuten/vAnz);
nDiffMinuten := nZeitMinuten - (nVert*vAnz);
nZeitMinuten := nVert;
END IF;
IF vRcString IS NULL THEN
FOR rec IN (SELECT t.* INTO rCollMaZeit
FROM V_COLL_MAZEIT t
WHERE t.HID_MAZEIT_ID = -1 AND
t.DATUM IS NOT NULL AND
t.WOTAGNR IN ('1','2','3','4','5')) -- nur Mo-Fr)
LOOP
rCollMaZeit := rec;
vRcString := qV_COLL_MAZEIT_Insert(iKNDABT_ID, iZEIT, nZeitMinuten+nDiffMinuten, iBEGINN, iENDE, iPAUSE, iZUSCHLAG, SUBSTR(iBEM,2),
rCollMaZeit0, rCollMaZeit, rMaZeit);
IF vRcString IS NOT NULL THEN
EXIT;
END IF;
nDiffMinuten := 0;
END LOOP;
END IF;
END IF;
END;
END IF;
-- MAZEIT-Vorhandener Eintrag
ELSIF rCollMaZeit.HID_MAZEIT_ID>0 THEN
SELECT z.ROWID, TO_CHAR(DBMS_UTILITY.get_hash_value(
z.id||'|'||
z.mandant_id||'|'||
z.majob_id||'|'||
z.ma_id||'|'||
z.knd_id||'|'||
z.kndabt_id||'|'||
z.kw||'|'||
z.arb_beg||'|'||
z.arb_end||'|'||
z.zeit||'|'||
z.pause||'|'||
z.zuschlag||'|'||
z.stk_anz||'|'||
z.stk_kg||'|'||
z.stk_gemuur||'|'||
z.stk_bezahlt||'|'||
z.bem||'|'||
z.ART4RECH
,1,POWER(2,30))) AS HID_HASH4CHECK
INTO vURow, vHash4Check
FROM MAZEIT z
WHERE z.ID=rCollMaZeit.HID_MAZEIT_ID
FOR UPDATE NOWAIT;
IF vHash4Check!=rCollMaZeit.HID_HASH4CHECK THEN
vRcString := 'Daten seit Anzeige verändert';
GOTO MARK_TRANSEND;
END IF;
SELECT z.* INTO rMaZeit
FROM MAZEIT z
WHERE ROWID=vURow;
rMaZeit.KNDABT_ID := TO_NUMBER(TRIM(iKNDABT_ID));
IF TRIM(iBEGINN) IS NULL THEN
rMaZeit.ARB_BEG := NULL;
ELSE
rMaZeit.ARB_BEG := TO_DATE(TO_CHAR(rMaZeit.ARB_BEG,'YYYYMMDD')||TRIM(SUBSTR(iBEGINN,1,5)),'YYYYMMDDHH24:MI');
END IF;
IF TRIM(iENDE) IS NULL THEN
rMaZeit.ARB_END := NULL;
ELSE
rMaZeit.ARB_END := TO_DATE(TO_CHAR(rMaZeit.ARB_BEG,'YYYYMMDD')||TRIM(SUBSTR(iENDE,1,5)),'YYYYMMDDHH24:MI');
END IF;
IF TRIM(iZEIT) IS NULL THEN
rMaZeit.ZEIT := NULL;
ELSE
rMaZeit.ZEIT := CMT.InduZeit2MinutenNum(TRIM(iZEIT));
END IF;
IF TRIM(iPAUSE) IS NULL THEN
rMaZeit.PAUSE := NULL;
ELSE
rMaZeit.PAUSE := CMT.HHMI2Minuten(TRIM(iPAUSE));
END IF;
IF iWOTAGNR IN (6,7) AND
rMaZeit.PAUSE IS NOT NULL AND rMaZeit.PAUSE<>0 THEN
vRcString := 'Eintrag Pause am Wochenende nicht erlaubt';
GOTO MARK_TRANSEND;
END IF;
IF TRIM(iZUSCHLAG) IS NULL THEN
rMaZeit.ZUSCHLAG := NULL;
ELSE
rMaZeit.ZUSCHLAG := TO_NUMBER(TRIM(iZUSCHLAG));
END IF;
IF RTRIM(iBEM) IS NULL THEN
rMaZeit.BEM := NULL;
ELSE
rMaZeit.BEM := RTRIM(iBEM);
END IF;
IF (rMaZeit.KNDABT_ID IS NOT NULL AND rMaZeit.KNDABT_ID>0) OR
rMaZeit.ARB_BEG IS NOT NULL OR rMaZeit.ARB_END IS NOT NULL OR
(rMaZeit.ZEIT IS NOT NULL AND rMaZeit.ZEIT!=0) OR rMaZeit.PAUSE IS NOT NULL OR
rMaZeit.ZUSCHLAG IS NOT NULL OR rMaZeit.BEM IS NOT NULL THEN
DECLARE
vBem MAZEIT.BEM%TYPE := rMaZeit.BEM;
BEGIN
rMaZeit.ZUSCHLAG := NVL(rMaZeit.ZUSCHLAG,0.0);
qV_COLL_MAZEIT_BEM_CHK(rMaZeit); -- Bem prüfen wg. ART4RECH Verschlüsselung mittels QK_COLL_MAZEIT_STK_KZ
UPDATE MAZEIT z
SET z.KNDABT_ID = rMaZeit.KNDABT_ID
,z.ARB_BEG = rMaZeit.ARB_BEG
,z.ARB_END = rMaZeit.ARB_END
,z.ZEIT = rMaZeit.ZEIT
,z.PAUSE = rMaZeit.PAUSE
,z.ZUSCHLAG = rMaZeit.ZUSCHLAG
,z.BEM = rMaZeit.BEM
,z.STK_BEZAHLT = rMaZeit.STK_BEZAHLT
,z.STK_ANZ = rMaZeit.STK_ANZ
,z.STK_KG = rMaZeit.STK_KG
,z.ART4RECH = rMaZeit.ART4RECH
WHERE ROWID=vURow;
IF SQL%ROWCOUNT=1 THEN
NULL;
ELSIF SQL%ROWCOUNT<1 THEN
RAISE NO_DATA_FOUND;
ELSE
RAISE TOO_MANY_ROWS;
END IF;
rMaZeit.BEM := vBem;
END;
ELSE
DELETE FROM MAZEIT z
WHERE ROWID=vURow;
IF SQL%ROWCOUNT=1 THEN
NULL;
ELSIF SQL%ROWCOUNT<1 THEN
RAISE NO_DATA_FOUND;
ELSE
RAISE TOO_MANY_ROWS;
END IF;
APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
,p_attr_number=>1, p_attr_value=>-1);
APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
,p_attr_number=>48, p_attr_value=>'-1');
END IF;
APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
,p_attr_number=>5, p_attr_value=>rMaZeit.KNDABT_ID);
APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
,p_attr_number=>6, p_attr_value=>CMT.Minuten2InduZeit(rMaZeit.ZEIT));
APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
,p_attr_number=>7, p_attr_value=>TO_CHAR(rMaZeit.ARB_BEG,'HH24:MI'));
APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
,p_attr_number=>8, p_attr_value=>TO_CHAR(rMaZeit.ARB_END,'HH24:MI'));
APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
,p_attr_number=>9, p_attr_value=>CMT.Minuten2InduZeit(rMaZeit.PAUSE,TRUE) );
APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
,p_attr_number=>10, p_attr_value=>rMaZeit.ZUSCHLAG);
APEX_COLLECTION.update_member_attribute( p_COLLECTION_name=> TK_COLL_NAME, p_seq=>rCollMaZeit.HID_SEQ_ID
,p_attr_number=>11, p_attr_value=>RTRIM(rMaZeit.BEM));
-- MAZEIT neuer Eintrag
ELSIF rCollMaZeit.HID_MAZEIT_ID=-1 THEN
-- VIEW-ZeitDefaultZeile lesen
SELECT t.* INTO rCollMaZeit0
FROM V_COLL_MAZEIT t
WHERE t.HID_MAZEIT_ID = 0;
vRcString := qV_COLL_MAZEIT_Insert(iKNDABT_ID, iZEIT, NULL, iBEGINN, iENDE, iPAUSE, iZUSCHLAG, iBEM,
rCollMaZeit0, rCollMaZeit, rMaZeit);
ELSE
vRcString := 'Ungültige HID_MAZEIT_ID '||TO_CHAR(rCollMaZeit.HID_MAZEIT_ID);
END IF;
<<MARK_TRANSEND>>
IF vRcString IS NULL THEN
COMMIT;
ELSE
ROLLBACK;
RAISE_APPLICATION_ERROR(-20100,vRcString);
END IF;
END V_COLL_MAZEIT_IOF_U_TRG;
and in end there are 3 other procedures, all for table MAZEIT, the collection and and the report.
in princip its a good idea,to create another collection, but difficult to bind it to the report TOO,cause my "cell-fill- functionality" is to complicated.
my idea is another: to look with javascript/jquery whatever on clientside the cell-values. and only the editable cells. not the hidden cells.there would be ca. 180 editable cells. i want store the values from this cells all in one in a cache (clientside! ).
then select next employee (collection will be created with view ect.) and give me this 29 rows. in this moment i have cells with ID f02_0001 as example and can use the cache values with that. the ID's ever the same,cause i have ever 29 rows.
greets/christian -
How to get one value from multiple duplication for a key figure field
Hi expert,
I have a infoprovider, with following format:
employee hourly_rate action_type count of action
there are multiple rows for each employee, I want to create query as follows:
employee hourly_rate action_type count of action
in which hourly_rate is constant , only retriving one value from multiple rows for one employee, count of action should be summarized.
how to get this hourly_rate.
Many Thanks,Hi,
put the employee in rows panel -> reaming object put it in free char panel.
suppress the all result rows for the all object except employee .
select the object -> go to query properties -> select display tab -> select result rows -> select suppress.
select the employee -> go to query properties -> select display tab -> select result rows -> select always display. - now it will give employee wise hourly rate summarize data.
Thanks,
Phani. -
How to get maximal value from the data/class for show in Map legend
I make WAD report that using Map Web Item.
I devide to four (4) classes for legend (Generate_Breaks).
I want to change default value for the class by javascript and for this,
I need to get maximal value from the class.
How to get maximal value from the data/class.
please give me solution for my problem.
Many Thx
Eddy Utomouse this to get the following End_date
<?following-sibling::../END_DATE?>
Try this
<?for-each:/ROOT/ROW?>
==================
Current StartDate <?START_DATE?>
Current End Date <?END_DATE?>
Next Start Date <?following-sibling::ROW/END_DATE?>
Previous End Date <?preceding-sibling::ROW[1]/END_DATE?>
================
<?end for-each?>
o/p
==================
Current StartDate 01-01-1980
Current End Date 01-01-1988
Next Start Date 01-01-1990
Previous End Date
================
==================
Current StartDate 01-01-1988
Current End Date 01-01-1990
Next Start Date 01-01-2005
Previous End Date 01-01-1988
================
==================
Current StartDate 01-01-2000
Current End Date 01-01-2005
Next Start Date
Previous End Date 01 -
How to get values from a table(in jsp) for validation using javascript.
hi,
this is praveen,pls tell me the procedure to get values from a table(in jsp) for validation using javascript.
thank you in advance.Yes i did try the same ..
BEGIN
select PROD_tYPE into :P185_OFF_CITY from
magcrm_setup where atype = 'CITY' ;
:p185_OFF_CITY := 'XXX';
insert into mtest values ('inside foolter');
END;
When i checked the mtest table it shos me the row inserted...
inside foolter .. Now this means everything did get execute properly
But still the vallue of off_city is null or emtpy...
i check the filed and still its empty..
while mtest had those records..seems like some process is cleaining the values...but cant see such process...
a bit confused..here..I tried on Load after footer...
tried chaning the squence number of process ..but still it doesnt help
some how the session variables gets changed...and it is changed to empty
Edited by: pauljohny on Jan 3, 2012 2:01 AM
Edited by: pauljohny on Jan 3, 2012 2:03 AM
Maybe you are looking for
-
I switched from one PC to another PC. I lost all of my iPod info on my old computer. I still have old (classic) songs on my iPod, which is fine, but I can't sync my old iPod to my new computer. I don't want to erase all of my old music! How do I sync
-
My Flash Player no longer works on my android
m P omllm d my flash player no longer works on my android tablet, what up. it worked before.
-
How to control field status depending on input parameter to screen?
Hi, I'm sure I met the solution somewhere, but can't find it. Here is the situation: I have Screen sequence - my scr.100 calls 110 (detailed screen). I would like to achieve creation or modification of a detailed item depending on an input parameter
-
"connection not available error code - 4161" what...
Hi I have been trying to upload my workouts to Nokia traker but when I start the application I get the following "connection not available error code - 4161" What does this mean and how do I sort it Thanks
-
Archive icon?? on email screen
following an update to iOS 4.2 there is now a new icon on my mail screens (a box with an arrow pointing into it). what is this box, and where do i need to go to retrieve email "swallowed" by it? thanks