الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Run Report From A Form

Featured Replies

بتاريخ:

السلام عليكم و رحمة الله و بركاته
ازيكم يا حماعة كل سنة و انتم طيبين
انا بس الأول عايزة اشكر كل الناس اللي علي الforum و بتاخد من وقتها عشان ترد علي الاخوة الأعضاء بصراحة انا استفدت منه جدا
انا بقى عندى مشكلة خطيرة مش عارفة حلها
انا عاملة REPORTو عايزة connect عليه من form و مش نافع
1-انا عملت ال report.rdf
2-عملت formو اضفت عليها ال report و ظبطت ال properties في ال property palette
name
server name
destype
desformat
3-عملت procedure

reportserverjob varchar2(100);
v_job_id varchar2(40);
v_rep_status varchar2(40);
v_server_name varchar2(20);
vc_url varchar2(100);
BEGIN 
v_server_name:='Rep_ORACLE_SERVER';
set_report_object_property (report_id,report_server,'REP_ORACLE_SERVER');
set_report_object_property(report_id,REPORT_COMM_MODE,SYNCHRONOUS);
SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_DESTYPE,CACHE); 
SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_DESFORMAT,'HTMLCSS');
reportserverjob:=run_report_object(report_id);
v_job_id:=substr(reportserverjob,length(v_server_name)+2,length(reportserverjob));
v_rep_status:=report_object_status(reportserverjob);
/*WHILE v_rep_status in
('RUNNING','OPENING_REPORT','ENQUEUED', null)
LOOP
v_rep_status:=REPORT_OBJECT_STATUS(reportserverjob);
END LOOP;*/
IF v_rep_status='FINISHED' THEN
web.show_document('/reports/rwservlet/getjobid'||v_job_id||'?server='||v_server_name,'_blank');
else message('Report failed with error message'||v_rep_status);
end if;
END;



4-و ضفت button علي الformو حطيت فيه الكود دة

declare 
report_id report_object;
v_rep varchar2(20);
begin
report_id:=find_report_object('Report5');
v_rep:=run_report_object(report_id);
cal_report(report_id);



5-شغلت السيرفير و نشطته
اعمل run لل report
تطلع لى error message بتقول FRM-41214 unable to run report ايه الحل؟؟؟؟؟؟؟؟؟؟؟؟؟
انا كمان باحاول ادخل علي url خادم الreport مش عارفة
افيدونىىىىىىىىىى افادكم الله

بتاريخ:

السلام عليكم و رحمه الله و بركاته

بداية نبدأ بعمل السيرفر الخاص بالــــ Report

From Start Menu >> Choose RUn >>> Then Type CMD >>> Then Type this command

rwserver -install server=<اسم السيرفر < 
الامر السابق ده فى حاله استخدم الــ Report 10g R1  اما فى حاله R2 الاصدار الثانى من الـــ Report 10g حنستخدم الامر

rwserver server= اسم السيرفر 



بعد عمل الــ Report من خلال الـــ Report Builder و فتحه فى الفورم بنقوم بعمل procedure من خلال Program Unit Node مثلا حنسميه test


PROCEDURE TEST IS 
 repid	  REPORT_OBJECT;   
 v_rep	  VARCHAR2(100);   
 rep_status VARCHAR2(20);   
BEGIN   
 repid := find_report_object('اسم التقرير'); 
 SET_REPORT_OBJECT_PROPERTY(repid,REPORT_EXECUTION_MODE,RUNTIME);   
 SET_REPORT_OBJECT_PROPERTY(repid,REPORT_COMM_MODE,SYNCHRONOUS); 
 SET_REPORT_OBJECT_PROPERTY(repid,REPORT_DESTYPE,CACHE); 
 SET_REPORT_OBJECT_PROPERTY(repid,REPORT_DESFORMAT,'htmlCSS'); 
 SET_REPORT_OBJECT_PROPERTY(repid,REPORT_SERVER,'اسم السيرفر'); 
 SET_REPORT_OBJECT_PROPERTY(repid,REPORT_OTHER,'paramform=no date1='||:block20.TEXT_ITEM9||' date2='||:block20.TEXT_ITEM8);   

 v_rep := RUN_REPORT_OBJECT(repid);   
 rep_status := REPORT_OBJECT_STATUS(v_rep);   
 WHILE rep_status in ('RUNNING','OPENING_REPORT','ENQUEUED') 
LOOP 
  rep_status := report_object_status(v_rep); 
END LOOP; 
 IF rep_status = 'FINISHED' THEN 
  WEB.SHOW_DOCUMENT('http://localhost:8888/reports/rwservlet/'||'getjobid'|| 
substr(v_rep,instr(v_rep,'_',-1)+1)||'?'||'server=اسم السيرفر','_blank'); 
 ELSE   
message('Error when running report');   
 END IF; 
END;



بعد كده حنضع تريجر على Button يكون When button Pressed و ده حيكون وظيفته انه ينادى على الــ Procedure اللى من خلاله حيشغل الــ Report

  When Button Pressed Trigger On Button

Test;



كأننا بنادى عليه من داخل الــ Block

بتاريخ:

الأخ / Fabled Warrior

اين نضع اسم التقرير... والدليل الذى يحتوى التقرير .. وامر الاتصال بقاعدة البيانات

وكيف يمكن عدم تثبيت اسم الدليل داخل كل برنامج ... وايضا عدم تثبيت امر الاتصال داخل البرنامج
وهذ السؤال بغرض : امكانية نقل البرنامج من دليل الى اخر أو امكانية تغييراسم قاعدة البيانات
هل يمكن استخدام اوامر ال global او تثبيت اسم دليل التقارير داخل ال registery
شكرا لك

لدى 50 تقرير بالنظام يتم استدعائهم من ال menu .. كيف يكون ذلك

بتاريخ:

السلام عليكم و رحمه الله و بركاته

ازيك يا امجد عامل ايه ان شاء الله تكون بخير

شوف يامان بالنسبه للسؤال الاول الخاص بمكان اسم التقرير و كده


repid := find_report_object('اسم التقرير'); 

ذى ما انت لحظت فى الكود اللى انا كتبته فى الرد الاول لى كان فيه العباره السابقه و دى بعوض فيها عن اسم التقرير بــ Repid لانى استخدمت معاه الباكدج الخاصه بأيجاد مكان التقرير اللى انا ذكرت اسمه يعنى انا بكتب اسم التقرير مره واحده و بعوض عنه بالمتغير اللى انا عطيته ليه تمام



اما امر الاتصال بقاعده البيانات انا مش فاهم انت تقصد ايه ما انت كده كده بتكون متصل بالقاعده لانك بتاندى التقرير من داخل الفورم

طيب اما بالنسبه للجزء الخاص بتاع انك تنادى Report من Menu و الله دى فكره بجد هايله و انا طلعت بفكره ممكن تكون قديمه بس عمليه

تخيل مثلا اننا حنعمل بلوك و البلوك ده حيحتوى على Buttons بعدد التقارير بتعتنا تمام و مكتوب فيها الكود اللى حتنادى فيه على التقرير ذى ما انا قلت مسبقا

طيب المطلوب اننا بدل ما نظهر الازرار دى علشان نضغط عليها كل مره علشان نشغل التقرير اننا نكتبها فى Menu
مثلا تخيل ان عندى زر اسمه TestButton عليه تريجر When Button Pressed و مكتوب فيه اسم البروسيدجر اللى بينادى عليه علشان يشغل الريبورت تمام و انا مش هظهره على الكانفس

و حعمل مينيو مثلا تحتوى على TestReport المفروض لما ادوس عليها انها تفعل التريجر اللى موجود على الزر testbutton الكود حيكون اذاى


go_item(Block.item) طبعا هنا حذكر اسم البلوك و الايتم اللى حتكون بأسم Test BUtton
Execute_trigger(when-Button-Pressed);
وده علشان يفعل التريجر اللى على الزر 




يعنى دى فكرتى و ممكن يكون فى حد عنده فكره افضل و فوق كل ذى علم عليم

بتاريخ:

اخى العزيز / Fabled Warrior

شكرا لاهتمامك ...

حسب ما فهمت أن أمر الfind الهدف منه ارجاع ال REPORT_ID الخاص بالتقرير ..
( وفى نفس الوقت التأكد من ان خصائص الاسم المعرف فى الفورم مثل report5 فى المشاركة الاولى أو report4 فى المثال القادم ... تكون سليمه من حيث اسم التقرير ومكان وجوده على الديسك )
حتى يمكن التعامل مع ال Report_ID باى امر من الاوامر الجاهزه لتشغيل التقرير مثل run_report_object

repid := find_report_object('اسم التقرير');


أى ان المتغير الذى يوجد مع امر الfind ليس هو اسم التقرير الحقيقى والمنشأ باستخدام برنامج اعداد التقرير والذى قد يكون امتداده jsp or rdf
ولكن هو الاسم الموجود داحل الnafigator داخل ال form مثل report4 or report 5 كما هو معنا بالمشاركة الحالية كامثله
ومن خصائص report4 توجد معلومه عن اسم التقرير الاصلى واسم الدليل ...
( كل هذا الموضوع... لانى اريد أن أعرف كيفيه جعل اسم الدليل الذى يحتوى تقارير النظام اسم متغير ... وليس اسم ثابت )

شرح الامر ... من هنـــــا

FIND_REPORT_OBJECT Built-in
Description
Returns the report_id for a specified report. You can use this ID as a parameter for other built-ins, such as RUN_REPORT_OBJECT .

SyntaxFUNCTION FIND_REPORT_OBJECT
(report_name VARCHAR2); 

Built-in Type unrestricted procedure

Returns  REPORT_OBJECT 
Enter Query Mode yes

Parametersreport_name  
 
Specifies the unique name of the report to be found. 
FIND_REPORT_OBJECT ExampleDECLARE 
repid REPORT_OBJECT;
v_rep VARCHAR2(100);
BEGIN
repid := find_report_object('report4');
v_rep := RUN_REPORT_OBJECT(repid);
....
END; 



===========

جارى دراسة الاقتراح الثاني ..
وان كنت احتاج الى استدعاء تقارير النظام مباشرة من الmenu بدون التعامل مع الform

شكرا لك مرة اخرى

بتاريخ:
  • كاتب الموضوع

و الله شكرا جدا افدتنى جزاك الله كل خير
معلش سؤال تانى هو انا ممكن ابعت parameter و هو مش موجود عندى فى item
و لا الاحسن فى الحالة دى لو استخدمت global variable

  • بعد 8 سنة...
بتاريخ:

انا عندى مشكلة donot run report 

DECLARE
  v_rep_id       REPORT_OBJECT ;
v_repjob      VARCHAR2(100);
v_job_id      VARCHAR2(100);
v_rep_status VARCHAR2(100); 
v_reportsrvr VARCHAR2(50) := '10g';
v_runformat    vARCHAR2(50) := 'HTML';


BEGIN


v_rep_id := FIND_REPORT_OBJECT('REPORT13');
SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_COMM_MODE, SYNCHRONOUS);
SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_DESTYPE, CACHE);






SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_SERVER, v_reportsrvr);
SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_DESFORMAT, v_runformat); 


SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_OTHER, 'paramform=no'); 


SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_FILENAME,'E:\report\t.jsp');


v_repjob := RUN_REPORT_OBJECT(v_rep_id);
v_job_id := SUBSTR(v_repjob, LENGTH(v_reportsrvr) + 2, LENGTH(v_repjob) );
v_rep_status := REPORT_OBJECT_STATUS(v_repjob);


IF v_rep_status = 'FINISHED' THEN
WEB.SHOW_DOCUMENT('/reports/rwservlet/getjobid' || v_job_id ||'?server=' || v_reportsrvr || '', '_blank');
ELSE
message('Report failed with error message ');


END IF;


CLEAR_FORM;
END;

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.