I have a interactive grid with column email_to email_from which is editable grid, now i need to fetch the values which we are entering into columns in grid..my items are :p1_email_to,:p1_email_from..
below is my query which is calling the email procedure, here i need to pass the item values which i am entering on screen but the item values are showing null, the grid values are not returning to items.
Here the query for on submit button:
DECLARE
p_division EMAIL_ERRORS.ORG_ID%TYPE;
p_to EMAIL_ERRORS.TO_NAME%TYPE;
p_from EMAIL_ERRORS.FROM_NAME%TYPE;
p_message EMAIL_ERRORS.MESSAGE_TXT%TYPE;
p_user EMAIL_ERRORS.USER_NAME%TYPE;
p_sys_param_from EMAIL_ERRORS.SYS_PARAM_FROM_TXT%TYPE;
p_attach EMAIL_ERRORS.ATTACH_TXT%TYPE;
P_POST_OP EMAIL_ERRORS.POST_OP_TXT%TYPE;
P_POST_OP_PARAM1 EMAIL_ERRORS.POST_OP_PARAM1_TXT%TYPE;
P_POST_OP_PARAM2 EMAIL_ERRORS.POST_OP_PARAM2_TXT%TYPE;
P_POST_OP_PARAM3 EMAIL_ERRORS.POST_OP_PARAM3_TXT%TYPE;
BEGIN
CAB$MAIL.send (p_to => :P1_TO_NAME
,p_from => :P1_FROM_NAME
,p_message => :P1_MESSAGE_TXT
,p_user => :P1_USER_NAME
,p_sys_param_from => :P1_SYS_PARAM_FROM_TXT
,p_division => :P1_ORG_ID
,p_attach => :P1_ATTACH_TXT
,P_POST_OP => :P1_POST_OP_TXT
,P_POST_OP_PARAM1 => :P1_POST_OP_PARAM1_TXT
,P_POST_OP_PARAM2 => :P1_POST_OP_PARAM2_TXT
,P_POST_OP_PARAM3 => :P1_POST_OP_PARAM3_TXT);
END;
Related
I have a Classic Report with a schedule for each day. There are no, one or multiple entries per day. It looks like this:
select
week_no,
apex_item.DISPLAY_AND_SAVE(p_idx => 8, p_value => plan_id) as ID,
apex_item.select_list(p_idx => 1, p_list_values => 'S1;1,S2;2,S3;3', p_attributes => 'size="3" multiple="multiple"', p_show_null => 'NO', p_show_extra => 'NO', p_item_id => plan_id || '_1', p_value => monday) as monday,
apex_item.select_list(p_idx => 2, p_list_values => 'S1;1,S2;2,S3;3', p_attributes => 'size="3" multiple="multiple"', p_show_null => 'NO', p_show_extra => 'NO', p_item_id => plan_id || '_2', p_value => tuesday) as tuesday,
apex_item.select_list(p_idx => 3, p_list_values => 'S1;1,S2;2,S3;3', p_attributes => 'size="3" multiple="multiple"', p_show_null => 'NO', p_show_extra => 'NO', p_item_id => plan_id || '_3', p_value => wednesday) as wednesday
from plan;
I can select multiple values and can save them to my table. It gets save like this "1,2". But I can't load the data rows with multiple selected values.
I can select multiple options with jQuery like this
$('#1000_1').val(["1","2"]);
but I don't know how to select the stored values from table with PL/SQL and then set the options selected with javascript.
I tried to load the data in an apex_item.text (id="1000_11" for monday etc.) and transfer the values in "After Refresh" DA to select list like that:
var sel_opt = $('#1000_11').val();
if (sel_opt == "1,2")
{
$('#1000_1').val(["1","2"]);
}
else if (sel_opt == "1,3")
{
$('#1000_1').val(["1","3"]);
}
else if (sel_opt == "2,3")
{
$('#1000_1').val(["2","3"]);
}
else if (sel_opt == "1,2,3")
{
$('#1000_1').val(["1","2","3"]);
}
It works, but maybe there's a smarter solution?
I create a sample Workspace on https://apex.oracle.com/pls/apex/f?p=4550:1:0:::::
Workspace: multi_select
Username: dev
Password: newYears3problems
I would create SELECT LIST page items for each selection menu and set their multi selection option to Yes.
then I'm guessing I'd need something like this somewhere at my page-process section
declare
array apex_application_global.vc_arr2;
begin
array := apex_util.string_to_table (:P30_SELECT_LIST_1);
apex_collection.create_or_truncate_collection ('P30_SELECT_LIST_1');
apex_collection.add_members ('P30_SELECT_LIST_1', array);
end;
to store more than one menu item at once.
then I'd add something like that to my query
and ITEM_1 in (
select c001
from apex_collections
where collection_name = 'P30_SELECT_LIST_1'
)
I probably didn't understand your question, but according to part that I get, it's straightforward sql query. no need for js.
Is it possible to format both a row and column?
For instance I am doing a loop that uses the index to style rows different colors based on if it is even or odd but I also want to style a column that has percentages to use the :num_fmt => 9
Also why when I am presenting the number as something like 1.2 does that end up changing it to 120%, all I want is for that data to look like 1.2%
#people.each_with_index | person, index |
if index.odd?
sheet.add_row [person['name'], person['rate']]
else
sheet.add_row [person['name'],person['rate']], :style => even_row
end
end
(my even row style is set at the top of my code)
I figured this out, you need to do set your style using something like
percent = s.add_style(:num_fmt => 9)
even_row_percent = s.add_style(:bg_color => 'blue', :fg_color => 'white', :b => false, :format_code => 0%)
even_row = s.add_style(:bg_color => 'blue', :fg_color =>'white', :b => false)
then in your loop just use an each with index and then use a if statement like
if index.odd
sheet.add_row[
item[:value],
item[:value_percent]], :style => [nil, percent]
else
sheet.add_row[
item[:value],
item[:value]], :style => [even_row, even_row_percent]
end
I have states stored in my database with numeric values... as in:
["Alabama", "1"],
["Alaska", "2"],
["Arizona", "3"],
["Arkansas", "4"],
ETC....
When I want to display "Alaska" because the number 2 is being output, how do I do this?
I tried something like this in my controller:
def show
#contact = Contact.find(params[:id])
#state = contact.location_state
end
And have the following in my "show.html.erb":
<%= #state %>
In the case you have to deal with an array of arrays you can get the specific number in the second position of every array accessing to it, with the index [1]:
places = [
["Alabama", "1"],
["Alaska", "2"],
["Arizona", "3"],
["Arkansas", "4"]
]
p places[0][1]
# => "1"
If you have a single one, you don't need to specify the precise array inside the main array of arrays, just with:
place = ["Alabama", "1"]
p place[1]
# => "1"
If you're sending the #state object and want to work with it in your views you can iterate and show the second value corresponding to the number you want to show:
places.each{|place| p place[1]}
# => "1"
# => "2"
# => "3"
# => "4"
I am trying to use the APEX data loader to allow users to import data and one of the column values I would rather not force the users to provide since the value is readily available in the session when the users selects import.Is there a way to add that column value programmatically?
With the Oracle APEX 4.2 data wizard, adding the rows to the SPREADSHEET_CONTENT is not enough if the First Rows are the column names. You also have to run the following assuming you are adding a 9th column, 'C009' and the name is 'MY_COLUMN_NAME'.
APEX_COLLECTION.ADD_MEMBER(
p_collection_name => 'PARSE_COL_HEAD',
p_c001 => 'C009',
p_c002 => 'MY_COLUMN_NAME')
;
Otherwise, it just ignores the data as it's using the meta data of PARSE_COL_HEAD.
I had a similar issue and solved it along the lines that Greg suggested in his comment. Here is a sample of the code I used in the process that runs right after "Parse Uploaded Data" on page 1 of the wizard:
FOR UPLOAD_ROW IN (SELECT SEQ_ID
FROM APEX_COLLECTIONS
WHERE COLLECTION_NAME = 'SPREADSHEET_CONTENT')
LOOP
APEX_COLLECTION.UPDATE_MEMBER_ATTRIBUTE (
p_collection_name => 'SPREADSHEET_CONTENT',
p_seq => UPLOAD_ROW.SEQ_ID,
p_attr_number => '2',
p_attr_value => :P1_TABLE_FIELD_2);
APEX_COLLECTION.UPDATE_MEMBER_ATTRIBUTE (
p_collection_name => 'SPREADSHEET_CONTENT',
p_seq => UPLOAD_ROW.SEQ_ID,
p_attr_number => '3',
p_attr_value => :P1_TABLE_FIELD_3);
APEX_COLLECTION.UPDATE_MEMBER_ATTRIBUTE (
p_collection_name => 'SPREADSHEET_CONTENT',
p_seq => UPLOAD_ROW.SEQ_ID,
p_attr_number => '4',
p_attr_value => :P1_TABLE_FIELD_4);
END LOOP;
For a more detailed explanation see http://www.jrweth.com/oracle-apex-data-loader-part-1-adding-custom-columns/
You could edit the loader and add a data transformation rule.
I hate to just post a link but this blog post from Rowan provides ample explanation how this works since the documentation from Oracle does not.
Application Express Data Loader Transformation Rules in 4.2
Basically, the transformation rules feature allows you to select one or more columns in your target table. You then choose the type of transformation from the available options: PL/SQL expression, PL/SQL Function, SQL Query (2 types her).
The loader will run this function for each row loaded and you can reference session state, lookup values in other tables or package state, as well as column values in the row. For example if you have a column named COLUMN1 you would refer to it in the source of the transformation rule as :COLUMN1 (e.g IF :COLUMN1 > 10 THEN .... ).
If you use the PL/SQL Expression, the value after evaluation will be returned as the new column value. If you use PL/SQL Function you will need to add a RETURN expression to get this value back tot he column.
That is to say that you will not be able to set the values using the bind notation you use to get values. So if you want COLUMN1 to be set to 10, build a rule to set that value, don't try to do :COLUMN1 := 10; as this state will only last during the execution of your rule for the record being transformed.
This new code is working perfectly despite the USE_APPLICATION_DATE_FORMAT column added by APEX. Note that near the bottom of the code the p_seq is set to '35'.
Declare
v_date date;
BEGIN
SELECT SYSDATE INTO v_date FROM Dual;
APEX_COLLECTION.ADD_MEMBER(
p_collection_name => 'PARSE_COL_HEAD',
p_c001 => 'C036',
p_c002 => 'UPLOAD_DTE');
APEX_COLLECTION.MOVE_MEMBER_DOWN(
p_collection_name =>'PARSE_COL_HEAD',
p_seq => '36');
FOR UPLOAD_ROW IN (SELECT SEQ_ID FROM APEX_COLLECTIONS
WHERE COLLECTION_NAME = 'SPREADSHEET_CONTENT')
LOOP
APEX_COLLECTION.UPDATE_MEMBER_ATTRIBUTE (
p_collection_name => 'SPREADSHEET_CONTENT',
p_seq => UPLOAD_ROW.SEQ_ID,
p_attr_number => '35',
p_attr_value => v_date);
END LOOP;
END;
For Oracle APEX data loader 4.2, in the developer view, look on the 1st page, in the 'Page Processing' block, right click on "Processing" and select "add new process" , then name it. Mine is called 'add_column', then add the below code.
You need to first add a new column to the APEX collection. You can do APEX_COLLECTION.ADD_MEMBER() function. In the code below, I add in an additional column at column 31 location and the name of the column is called 'FILE_DATE'. This is the same as the name as the column the database table.
After that you loop through each row by SEQ_ID and update column 31 with a value. In my case, I wanted to get the filename, which was :P25_FILE_NAME
When you run the pages, you can click on 'Session' on the developer toolbar at the bottom to have a look at the APEX collection array and see if your column is getting populated correctly.
BEGIN
APEX_COLLECTION.ADD_MEMBER
(
p_collection_name => 'PARSE_COL_HEAD',
p_c001 => 'C031',
p_c002 => 'FILE_DATE');
FOR UPLOAD_ROW IN (SELECT SEQ_ID FROM APEX_COLLECTIONS
WHERE COLLECTION_NAME = 'SPREADSHEET_CONTENT')
LOOP
APEX_COLLECTION.UPDATE_MEMBER_ATTRIBUTE (
p_collection_name => 'SPREADSHEET_CONTENT',
p_seq => UPLOAD_ROW.SEQ_ID,
p_attr_number => '31',
p_attr_value => :P25_FILE_NAME
);
END LOOP;
END;
I am able to get through it using the code below:
Declare
v_count number(10);
BEGIN
APEX_COLLECTION.ADD_MEMBER(
p_collection_name => 'PARSE_COL_HEAD',
p_c001 => 'SESSION_ID');
v_count:=APEX_COLLECTION.COLLECTION_MEMBER_COUNT ('PARSE_COL_HEAD');
v_count:=v_count+1;
FOR UPLOAD_ROW IN (SELECT SEQ_ID
FROM APEX_COLLECTIONS
WHERE COLLECTION_NAME = 'SPREADSHEET_CONTENT')
LOOP
APEX_COLLECTION.UPDATE_MEMBER_ATTRIBUTE (
p_collection_name => 'SPREADSHEET_CONTENT',
p_seq => UPLOAD_ROW.SEQ_ID,
p_attr_number => v_count,
p_attr_value => V('APP_SESSION')); –-I was trying to load session id
END LOOP;
END;
Declare
v_count number(10);
BEGIN
v_count:=APEX_COLLECTION.COLLECTION_MEMBER_COUNT ('PARSE_COL_HEAD');
v_count:=v_count;
APEX_COLLECTION.ADD_MEMBER( p_collection_name => 'PARSE_COL_HEAD',
p_c001 => concat('C00',v_count),
p_c002 => 'ID_OFFICE_LOCATION');
APEX_COLLECTION.MOVE_MEMBER_DOWN( p_collection_name =>'PARSE_COL_HEAD',
p_seq => v_count+1);
FOR UPLOAD_ROW IN (SELECT SEQ_ID
FROM APEX_COLLECTIONS
WHERE COLLECTION_NAME = 'SPREADSHEET_CONTENT')
LOOP
APEX_COLLECTION.UPDATE_MEMBER_ATTRIBUTE ( p_collection_name => 'SPREADSHEET_CONTENT',
p_seq => UPLOAD_ROW.SEQ_ID,
p_attr_number => v_count,
p_attr_value => :P0_ID_OFFICE_LOCATION);
END LOOP;
END;
I have searched for hours but could not find an answer to this, or a module to help.
We are building a store and our client needs the ability to navigate the store by manufacturer. Is there any way that the manufacturer page can list the categories and subcategories.
There seems two ways to do it.
Add brands while adding categories in admin section.
Get all categories inside the brands by join operation while viewing the manufacturer.
Are there any modules available to link up categories with manufacturers so that I can display categories inside the manufacturer page.
Or the only way is to query all the products inside the manufacturer and get the categories out of it... I guess it is not a good solution.
So any suggestions would be a great help.
Thanks.
I figured a way to find the categories that belongs to a manufacturer. The second options seems better.
Here is the function that I added to catalog/model/catalog/manufacturer.php
public function getManufacturerCategories($manufacturer_id) {
$query = $this->db->query("
SELECT
DISTINCT c.category_id,cd.name
FROM
". DB_PREFIX . "manufacturer m
LEFT JOIN ". DB_PREFIX. "product p ON (m.manufacturer_id = p.manufacturer_id)
LEFT JOIN ". DB_PREFIX. "product_to_category p2c ON (p2c.product_id = p.product_id)
LEFT JOIN ". DB_PREFIX. "category c ON (c.category_id = p2c.category_id)
LEFT JOIN ". DB_PREFIX. "category_description cd ON (cd.category_id = p2c.category_id)
WHERE
p.status = 1
AND m.manufacturer_id = '".(int)$manufacturer_id."'
AND c.status= 1
");
return $query->rows;
}
Here is the output array
stdClass Object (
[row] => Array
(
[category_id] => 20
[name] => Desktops
)
[rows] => Array
(
[0] => Array
(
[category_id] => 20
[name] => Desktops
)
[1] => Array
(
[category_id] => 24
[name] => Phones & PDAs
)
)
[num_rows] => 2 )